DBA Data[Home] [Help]

PACKAGE BODY: APPS.INL_SHIPMENT_PVT

Source


1 PACKAGE BODY "INL_SHIPMENT_PVT" AS
2 /* $Header: INLVSHPB.pls 120.105.12020000.16 2013/04/05 18:49:30 acferrei ship $ */
3 
4 L_FND_USER_ID               CONSTANT NUMBER        := fnd_global.user_id;           --Bug#9660082
5 L_FND_CONC_PROGRAM_ID       CONSTANT NUMBER        := fnd_global.conc_program_id;   --Bug#9660082
6 L_FND_PROG_APPL_ID          CONSTANT NUMBER        := fnd_global.prog_appl_id ;     --Bug#9660082
7 L_FND_CONC_REQUEST_ID       CONSTANT NUMBER        := fnd_global.conc_request_id;   --Bug#9660082
8 L_FND_LOCAL_CHR10           CONSTANT VARCHAR2(100) := fnd_global.local_chr (10);    --Bug#9660082
9 L_FND_LOGIN_ID              CONSTANT NUMBER        := fnd_global.login_id;          --Bug#9660082
10 L_FND_EXC_ERROR             EXCEPTION;                                              --Bug#9660082
11 L_FND_EXC_UNEXPECTED_ERROR  EXCEPTION;                                              --Bug#9660082
12 L_FND_RET_STS_SUCCESS       CONSTANT VARCHAR2(1)   := fnd_api.g_ret_sts_success;    --Bug#9660082
13 L_FND_RET_STS_ERROR         CONSTANT VARCHAR2(1)   := fnd_api.g_ret_sts_error;      --Bug#9660082
14 L_FND_RET_STS_UNEXP_ERROR   CONSTANT VARCHAR2(1)   := fnd_api.g_ret_sts_unexp_error;--Bug#9660082
15 
16 /* unused --Bug#13987019 BEG
17 TYPE rcv_header_interface_rec_type
18 IS
19     RECORD
20     (
21         header_interface_id NUMBER,
22         notice_creation_date DATE,
23         transaction_type        VARCHAR2 (25),
24         processing_status_code  VARCHAR2 (25),
25         receipt_source_code     VARCHAR2 (25),
26         validation_flag         VARCHAR2 (1),
27         ship_to_organization_id NUMBER,
28         vendor_id               NUMBER,
29         vendor_site_id          NUMBER,
30         group_id                NUMBER,
31         shipment_num            VARCHAR2 (30),
32         shipped_date DATE,
33         last_update_date DATE,
34         last_updated_by NUMBER,
35         creation_date DATE,
36         created_by        NUMBER,
37         last_update_login NUMBER) ;
38 TYPE rcv_header_interface_tbl
39 IS
40     TABLE OF rcv_header_interface_rec_type INDEX BY BINARY_INTEGER;
41     rcv_header_interface rcv_header_interface_tbl;
42 TYPE rcv_trx_interface_rec_type
43 IS
44     RECORD
45     (
46         interface_transaction_id NUMBER,
47         transaction_type         VARCHAR2 (25),
48         quantity                 NUMBER,
49         interface_source_code    VARCHAR2 (30),
50         interface_source_line_id NUMBER,
51         transaction_date DATE,
52         processing_status_code  VARCHAR2 (25),
53         processing_mode_code    VARCHAR2 (25),
54         transaction_status_code VARCHAR2 (25),
55         receipt_source_code     VARCHAR2 (25),
56         source_document_code    VARCHAR2 (25),
57         validation_flag         VARCHAR2 (1),
58         po_header_id            NUMBER,
59         po_line_id              NUMBER,
60         po_line_location_id     NUMBER,
61         po_release_id           NUMBER,
62         item_id                 NUMBER,
63         item_num                VARCHAR2 (50),
64         item_description        VARCHAR2 (240),
65         uom_code                VARCHAR2 (3),
66         vendor_item_num         VARCHAR2 (25),
67         vendor_id               NUMBER,
68         vendor_site_id          NUMBER,
69         ship_to_location_id     NUMBER,
70         location_id             NUMBER,
71         org_id                  NUMBER,
72         to_organization_id      NUMBER,
73         group_id                NUMBER,
74         lpn_group_id            NUMBER,
75         header_interface_id     NUMBER,
76         last_update_date DATE,
77         last_updated_by NUMBER,
78         creation_date DATE,
79         created_by        NUMBER,
80         last_update_login NUMBER,
81         unit_landed_cost NUMBER) ;
82 
83 TYPE rcv_trx_interface_tbl
84 IS
85     TABLE OF rcv_trx_interface_rec_type INDEX BY BINARY_INTEGER;
86     rcv_trx_interface rcv_trx_interface_tbl;
87     --Bug#13987019 END
88 */
89     -- Utl name   : Handle_ShipError
90     -- Type       : Private
91     -- Function   : Insert errors in INL_SHIP_HOLDS
92     -- Pre-reqs   : None
93     -- Parameters :
94     -- IN         : p_ship_header_id     IN NUMBER  ,
95     --              p_ship_line_id       IN NUMBER,
96     --              p_charge_line_id     IN NUMBER,
97     --              p_table_name         IN VARCHAR2,
98     --              p_column_name        IN VARCHAR2,
99     --              p_column_value       IN VARCHAR2,
100     --              p_error_message      IN VARCHAR2,
101     --              p_error_message_name IN VARCHAR2,
102     --              p_token1_name        IN VARCHAR2,
103     --              p_token1_value       IN VARCHAR2,
104     --              p_token2_name        IN VARCHAR2,
105     --              p_token2_value       IN VARCHAR2,
106     --              p_token3_name        IN VARCHAR2,
107     --              p_token3_value       IN VARCHAR2,
108     --              p_token4_name        IN VARCHAR2,
109     --              p_token4_value       IN VARCHAR2,
110     --              p_token5_name        IN VARCHAR2,
111     --              p_token5_value       IN VARCHAR2,
112     --              p_token6_name        IN VARCHAR2,
113     --              p_token6_value       IN VARCHAR2,
114     --
115     --
116     -- OUT          x_return_status    OUT NOCOPY VARCHAR2
117     --
118     -- Version    : Current version 1.0
119     --
120     -- Notes      :
121 PROCEDURE Handle_ShipError(
122         p_ship_header_id     IN NUMBER,
123         p_ship_line_id       IN NUMBER,
124         p_charge_line_id     IN NUMBER,
125         p_table_name         IN VARCHAR2,
126         p_column_name        IN VARCHAR2,
127         p_column_value       IN VARCHAR2,
128         p_error_message      IN VARCHAR2,
129         p_error_message_name IN VARCHAR2,
130         p_token1_name        IN VARCHAR2,
131         p_token1_value       IN VARCHAR2,
132         p_token2_name        IN VARCHAR2,
133         p_token2_value       IN VARCHAR2,
134         p_token3_name        IN VARCHAR2,
135         p_token3_value       IN VARCHAR2,
136         p_token4_name        IN VARCHAR2,
137         p_token4_value       IN VARCHAR2,
138         p_token5_name        IN VARCHAR2,
139         p_token5_value       IN VARCHAR2,
140         p_token6_name        IN VARCHAR2,
141         p_token6_value       IN VARCHAR2,
142         x_return_status OUT NOCOPY VARCHAR2
143 ) IS
144     l_program_name     CONSTANT VARCHAR2 (30) := 'Handle_ShipError';
145     l_return_status VARCHAR2 (1) ;
146     l_msg_count     NUMBER;
147     l_msg_data      VARCHAR2 (2000) ;
148     l_debug_info    VARCHAR2 (200) ;
149 BEGIN
150     -- Standard Beginning of Procedure/Function Logging
151     INL_LOGGING_PVT.Log_BeginProc ( p_module_name => g_module_name,
152                                     p_procedure_name => l_program_name) ;
153     --  Initialize return status to success
154     x_return_status                              := L_FND_RET_STS_SUCCESS;
155     l_debug_info                                 := 'Insert error details in inl_ship_holds.';
156     INL_LOGGING_PVT.Log_Statement (
157         p_module_name => g_module_name,
158         p_procedure_name => l_program_name,
159         p_debug_info => l_debug_info
160     ) ;
161      INSERT
162        INTO inl_ship_holds
163         (
164             ship_hold_id          ,         /* 01 */
165             ship_header_id        ,         /* 02 */
166             ship_line_id          ,         /* 03 */
167             table_name            ,         /* 04 */
168             column_name           ,         /* 05 */
169             column_value          ,         /* 06 */
170             processing_date       ,         /* 07 */
171             error_message_name    ,         /* 08 */
172             error_message         ,         /* 09 */
173             token1_name           ,         /* 10 */
174             token1_value          ,         /* 11 */
175             token2_name           ,         /* 12 */
176             token2_value          ,         /* 13 */
177             token3_name           ,         /* 14 */
178             token3_value          ,         /* 15 */
179             token4_name           ,         /* 16 */
180             token4_value          ,         /* 17 */
181             token5_name           ,         /* 18 */
182             token5_value          ,         /* 19 */
183             token6_name           ,         /* 20 */
184             token6_value          ,         /* 21 */
185             created_by            ,         /* 22 */
186             creation_date         ,         /* 23 */
187             last_updated_by       ,         /* 24 */
188             last_update_date      ,         /* 25 */
189             last_update_login     ,         /* 26 */
190             program_id            ,         /* 27 */
191             program_application_id,         /* 28 */
192             program_update_date   ,         /* 29 */
193             request_id                      /* 30 */
194         )
195         VALUES
196         (
197             inl_ship_holds_s.NEXTVAL  ,     /* 01 */
198             p_ship_header_id          ,     /* 02 */
199             p_ship_line_id            ,     /* 03 */
200             p_table_name              ,     /* 04 */
201             p_column_name             ,     /* 05 */
202             p_column_value            ,     /* 06 */
203             SYSDATE                   ,     /* 07 */
204             p_error_message_name      ,     /* 08 */
205             p_error_message           ,     /* 09 */
206             p_token1_name             ,     /* 10 */
207             p_token1_value            ,     /* 11 */
208             p_token2_name             ,     /* 12 */
209             p_token2_value            ,     /* 13 */
210             p_token3_name             ,     /* 14 */
211             p_token3_value            ,     /* 15 */
212             p_token4_name             ,     /* 16 */
213             p_token4_value            ,     /* 17 */
214             p_token5_name             ,     /* 18 */
215             p_token5_value            ,     /* 19 */
216             p_token6_name             ,     /* 20 */
217             p_token6_value            ,     /* 21 */
218             L_FND_USER_ID             ,     /* 22 */
219             SYSDATE                   ,     /* 23 */
220             L_FND_USER_ID             ,     /* 24 */
221             SYSDATE                   ,     /* 25 */
222             L_FND_LOGIN_ID            ,     /* 26 */ --SCM-051
223             L_FND_CONC_PROGRAM_ID     ,     /* 27 */
224             L_FND_PROG_APPL_ID        ,     /* 28 */
225             SYSDATE                   ,     /* 29 */
226             L_FND_CONC_REQUEST_ID           /* 30 */
227         ) ;
228     -- Standard End of Procedure/Function Logging
229     INL_LOGGING_PVT.Log_EndProc(
230         p_module_name => g_module_name,
231         p_procedure_name => l_program_name
232     );
233 EXCEPTION
234 WHEN L_FND_EXC_ERROR THEN
235     -- Standard Expected Error Logging
236     INL_LOGGING_PVT.Log_ExpecError(
237         p_module_name => g_module_name,
238         p_procedure_name => l_program_name
239     );
240     x_return_status := L_FND_RET_STS_ERROR;
241 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
242     -- Standard Unexpected Error Logging
243     INL_LOGGING_PVT.Log_UnexpecError(
244         p_module_name => g_module_name,
245         p_procedure_name => l_program_name
246     );
247     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
248 WHEN OTHERS THEN
249     -- Standard Unexpected Error Logging
250     INL_LOGGING_PVT.Log_UnexpecError(
251         p_module_name => g_module_name,
252         p_procedure_name => l_program_name
253     );
254     x_return_status := L_FND_RET_STS_UNEXP_ERROR ;
255     IF FND_MSG_PUB.Check_Msg_Level(
256             p_message_level => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
257         THEN
258         FND_MSG_PUB.Add_Exc_Msg(
259             p_pkg_name => g_pkg_name,
260             p_procedure_name => l_program_name
261         );
262     END IF;
263 END Handle_ShipError;
264 -- Utility name   : Reset_ShipError
265 -- Type       : Private
266 -- Function   : Delete previous errors for the current shipment
267 -- Pre-reqs   : None
268 -- Parameters :
269 -- IN         : p_ship_header_id IN NUMBER     Required Id of Ship Header record
270 --              p_ship_line_id   IN NUMBER     Optional Id of Ship Line record
271 --              p_charge_line_id IN NUMBER     Optional Id of Ship Line record
272 --
273 -- OUT          x_return_status  OUT NOCOPY VARCHAR2
274 --
275 -- Version    : Current version 1.0
276 --
277 -- Notes      :
278 PROCEDURE Reset_ShipError(
279         p_ship_header_id IN NUMBER,
280         p_ship_line_id   IN NUMBER,
281         p_charge_line_id IN NUMBER,
282         x_return_status OUT NOCOPY VARCHAR2
283 ) IS
284     l_program_name CONSTANT VARCHAR2(30):= 'Reset_ShipError';
285     l_api_version   CONSTANT NUMBER := 1.0;
286     l_return_status VARCHAR2(1);
287     l_msg_count NUMBER;
288     l_msg_data  VARCHAR2(2000);
289     l_debug_info VARCHAR2(200);
290 BEGIN
291     -- Standard Beginning of Procedure/Function Logging
292     INL_LOGGING_PVT.Log_BeginProc    (
293         p_module_name => g_module_name,
294         p_procedure_name => l_program_name
295     );
296     --  Initialize return status to success
297     x_return_status := L_FND_RET_STS_SUCCESS;
298     l_debug_info    := 'Delete Errors from previous validation.';
299     INL_LOGGING_PVT.Log_Statement (
300         p_module_name => g_module_name,
301         p_procedure_name => l_program_name,
302         p_debug_info => l_debug_info
303     ) ;
304     IF p_ship_line_id IS NULL AND p_charge_line_id IS NULL THEN
305          DELETE FROM inl_ship_holds
306          WHERE ship_header_id = p_ship_header_id;
307     ELSE
308         IF p_ship_line_id IS NOT NULL THEN
309              DELETE
310                FROM inl_ship_holds
311               WHERE ship_header_id = p_ship_header_id
312                 AND ship_line_id   = p_ship_line_id;
313         END IF;
314         IF p_charge_line_id IS NOT NULL THEN
315              DELETE
316                FROM inl_ship_holds
317               WHERE ship_header_id = p_ship_header_id
318                 AND ship_line_id   = p_charge_line_id;
319         END IF;
320     END IF;
321     -- Standard End of Procedure/Function Logging
322     INL_LOGGING_PVT.Log_EndProc (
323         p_module_name => g_module_name,
324         p_procedure_name => l_program_name) ;
325 EXCEPTION
326 WHEN L_FND_EXC_ERROR THEN
327     -- Standard Expected Error Logging
328     INL_LOGGING_PVT.Log_ExpecError (
329         p_module_name => g_module_name,
330         p_procedure_name => l_program_name) ;
331     x_return_status := L_FND_RET_STS_ERROR;
332 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
333     -- Standard Unexpected Error Logging
334     INL_LOGGING_PVT.Log_UnexpecError (
335         p_module_name => g_module_name,
336         p_procedure_name => l_program_name) ;
337     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
338 WHEN OTHERS THEN
339     -- Standard Unexpected Error Logging
340     INL_LOGGING_PVT.Log_UnexpecError (
341         p_module_name => g_module_name,
342         p_procedure_name => l_program_name) ;
343     x_return_status := L_FND_RET_STS_UNEXP_ERROR ;
344     IF FND_MSG_PUB.Check_Msg_Level (p_message_level  => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
345         FND_MSG_PUB.Add_Exc_Msg (
346             p_pkg_name => g_pkg_name,
347             p_procedure_name => l_program_name) ;
348     END IF;
349 END Reset_ShipError;
350 -- API name   : Complete_Shipment
351 -- Type       : Private
352 -- Function   : Complete a given LCM Shipment.
353 -- Pre-reqs   : None
354 -- Parameters :
355 -- IN         : p_api_version           IN NUMBER
356 --              p_init_msg_list         IN VARCHAR2  Default = L_FND_FALSE
357 --              p_commit                IN VARCHAR2  Default = L_FND_FALSE
358 --              p_ship_header_id        IN NUMBER
359 --              p_rcv_enabled_flag      IN VARCHAR2
360 --              p_pending_elc_flag      IN VARCHAR2
361 --              p_pending_matching_flag IN VARCHAR2
362 --              p_organization_id       IN NUMBER
363 --
364 -- OUT          x_return_status         OUT NOCOPY VARCHAR2
365 --              x_msg_count             OUT NOCOPY   NUMBER
366 --              x_msg_data              OUT NOCOPY VARCHAR2
367 --
368 -- Version    : Current version 1.0
369 --
370 -- Notes      :
371 PROCEDURE Complete_Shipment (
372     p_api_version            IN NUMBER,
373     p_init_msg_list          IN VARCHAR2 := L_FND_FALSE,
374     p_commit                 IN VARCHAR2 := L_FND_FALSE,
375     p_ship_header_id         IN NUMBER,
376     p_rcv_enabled_flag       IN VARCHAR2,
377     p_pending_matching_flag  IN VARCHAR2,
378     p_pending_elc_flag       IN VARCHAR2, -- SCM-051
379     p_organization_id        IN NUMBER,
380     p_max_allocation_id      IN NUMBER, --Bug#10032820
381     x_return_status          OUT NOCOPY VARCHAR2,
382     x_msg_count              OUT NOCOPY NUMBER,
383     x_msg_data               OUT NOCOPY VARCHAR2)
384 IS
385     l_api_name    CONSTANT VARCHAR2 (30) := 'Complete_Shipment';
386     l_api_version CONSTANT NUMBER := 1.0;
387     l_msg_count NUMBER;
388     l_msg_data VARCHAR2 (2000);
389     l_ship_status VARCHAR2 (30) ;
390     l_exist_status NUMBER := 0;
391     l_return_status VARCHAR2 (1) ;
392     l_debug_info VARCHAR2 (200) ;
393     l_errbuf VARCHAR2 (240) ;
394     l_retcode NUMBER;
395     l_pre_receive VARCHAR2 (1);
396     l_ship_num VARCHAR2(25); -- SCM-051
397 BEGIN
398     INL_LOGGING_PVT.Log_BeginProc (
399         p_module_name => g_module_name,
400         p_procedure_name => l_api_name) ;
401     -- Standard Start of API savepoint
402     SAVEPOINT Complete_Shipment_PVT;
403     -- Initialize message list if p_init_msg_list is set to TRUE.
404     IF FND_API.to_Boolean (p_init_msg_list) THEN
405         FND_MSG_PUB.initialize;
406     END IF;
407     -- Check for call compatibility.
408     IF NOT
409     FND_API.Compatible_API_Call (
410         p_current_version_number => l_api_version,
411         p_caller_version_number => p_api_version,
412         p_api_name => l_api_name,
413         p_pkg_name => G_PKG_NAME
414     ) THEN
415         RAISE L_FND_EXC_UNEXPECTED_ERROR;
416     END IF;
417     --  Initialize API return status to success
418     x_return_status := L_FND_RET_STS_SUCCESS;
419     -------------------------------------------------
420     -- Required steps only for NOT Pending Shipments
421     -------------------------------------------------
422     IF NVL (p_pending_matching_flag, 'N') = 'N' AND
423        NVL (p_pending_elc_flag, 'N') = 'N' AND  -- SCM-051
424        NVL (p_rcv_enabled_flag, 'N') = 'Y' THEN
425         -- Check which scenario is setup in RCV
426         -- Parameters for the current Inventory Organization
427         SELECT pre_receive
428         INTO l_pre_receive
429         FROM rcv_parameters
430         WHERE organization_id = p_organization_id;
431         -- Pre-Receive scenario
432         IF (NVL (l_pre_receive, 'N') = 'Y') THEN
433           l_debug_info := 'Call INL_INTEGRATION_GRP.Export_toRCV';
434             INL_LOGGING_PVT.Log_Statement (
435                 p_module_name => g_module_name,
436                 p_procedure_name => l_api_name,
437                 p_debug_info => l_debug_info) ;
438 
439           -- Run integration procedure to transport LCM to RCV
440           INL_INTEGRATION_GRP.Export_toRCV (
441                 p_api_version       => l_api_version,
442                 p_init_msg_list     => L_FND_FALSE,
443                 p_commit            => L_FND_FALSE,
444                 p_ship_header_id    => p_ship_header_id,
445                 x_return_status     => l_return_status,
446                 x_msg_count         => l_msg_count,
447                 x_msg_data          => l_msg_data);
448 
449           l_debug_info := 'l_return_status: ' || l_return_status;
450           INL_LOGGING_PVT.Log_Statement (
451               p_module_name => g_module_name,
452               p_procedure_name => l_api_name,
453               p_debug_info => l_debug_info) ;
454 
455           -- If any errors happen abort the process.
456           IF l_return_status = L_FND_RET_STS_ERROR THEN
457               RAISE L_FND_EXC_ERROR;
458           ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
459               RAISE L_FND_EXC_UNEXPECTED_ERROR;
460           END IF;
461         -- Blackbox scenario
462         ELSIF (NVL (l_pre_receive, 'N') = 'N') THEN
463             l_debug_info := 'Call INL_INTEGRATION_GRP.Call_StampLC';
464             INL_LOGGING_PVT.Log_Statement (
465                 p_module_name => g_module_name,
466                 p_procedure_name => l_api_name,
467                 p_debug_info => l_debug_info) ;
468 
469             INL_INTEGRATION_GRP.Call_StampLC (
470                 p_api_version    => l_api_version,
471                 p_init_msg_list  => L_FND_FALSE,
472                 p_commit         => L_FND_FALSE,
473                 p_ship_header_id  => p_ship_header_id,
474                 x_return_status  => l_return_status,
475                 x_msg_count      => l_msg_count,
476                 x_msg_data       => l_msg_data
477             );
478             -- If any errors happen abort the process.
479             IF l_return_status = L_FND_RET_STS_ERROR THEN
480                 RAISE L_FND_EXC_ERROR;
481             ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
482                 RAISE L_FND_EXC_UNEXPECTED_ERROR;
483             END IF;
484         END IF;
485     ----------------------------------------------
486     -- Required step only for Pending Shipments
487     ----------------------------------------------
488     ELSIF (NVL (p_pending_matching_flag, 'N') = 'Y' OR
489            NVL (p_pending_elc_flag, 'N') = 'Y' ) AND -- SCM-051
490           NVL(p_rcv_enabled_flag, 'N') = 'Y' THEN
491         -- Run Create Costing Interfaces
492         l_debug_info := 'Run INL_INTEGRATION_GRP.Export_ToCST';
493         INL_LOGGING_PVT.Log_Statement (
494             p_module_name   => g_module_name,
495             p_procedure_name=> l_api_name,
496             p_debug_info    => l_debug_info) ;
497 
498         INL_INTEGRATION_GRP.Export_ToCST (
499             p_api_version       => 1.0,
500             p_init_msg_list     => L_FND_FALSE,
501             p_commit            => L_FND_FALSE,
502             p_ship_header_id    => p_ship_header_id,
503             p_max_allocation_id => p_max_allocation_id, --Bug#10032820
504             x_return_status     => l_return_status,
505             x_msg_count         => l_msg_count,
506             x_msg_data          => l_msg_data
507         ) ;
508         -- If any errors happen abort the process.
509         IF l_return_status = L_FND_RET_STS_ERROR THEN
510             RAISE L_FND_EXC_ERROR;
511         ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
512             RAISE L_FND_EXC_UNEXPECTED_ERROR;
513         END IF;
514     END IF;
515 
516     l_debug_info := 'Update the current INL_SHIP_HEADERS_ALL.ship_status_code to COMPLETED';
517     INL_LOGGING_PVT.Log_Statement (
518         p_module_name   => g_module_name,
519         p_procedure_name=> l_api_name,
520         p_debug_info    => l_debug_info ) ;
521 
522     UPDATE inl_ship_headers
523     SET ship_status_code = 'COMPLETED',
524         last_updated_by  = L_FND_USER_ID,
525         last_update_date = SYSDATE
526     WHERE ship_header_id = p_ship_header_id;
527 
528     -- Standard check of p_commit.
529     IF FND_API.To_Boolean (p_commit) THEN
530         COMMIT WORK;
531     END IF;
532     -- Standard call to get message count and if count is 1, get message info.
533     FND_MSG_PUB.Count_And_Get (
534         p_encoded => L_FND_FALSE,
535         p_count => x_msg_count,
536         p_data => x_msg_data) ;
537     INL_LOGGING_PVT.Log_EndProc (
538         p_module_name => g_module_name,
539         p_procedure_name => l_api_name) ;
540 EXCEPTION
541 WHEN L_FND_EXC_ERROR THEN
542     INL_LOGGING_PVT.Log_ExpecError (
543         p_module_name => g_module_name,
544         p_procedure_name => l_api_name) ;
545     ROLLBACK TO Complete_Shipment_PVT;
546     x_return_status := L_FND_RET_STS_ERROR;
547     FND_MSG_PUB.Count_And_Get (
548         p_encoded => L_FND_FALSE,
549         p_count => x_msg_count,
550         p_data => x_msg_data) ;
551 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
552     INL_LOGGING_PVT.Log_UnexpecError (
553         p_module_name => g_module_name,
554         p_procedure_name => l_api_name) ;
555     ROLLBACK TO Complete_Shipment_PVT;
556     x_return_status                      := L_FND_RET_STS_UNEXP_ERROR;
557     FND_MSG_PUB.Count_And_Get (
558         p_encoded => L_FND_FALSE,
559         p_count => x_msg_count,
560         p_data => x_msg_data) ;
561 WHEN OTHERS THEN
562     INL_LOGGING_PVT.Log_UnexpecError (
563         p_module_name => g_module_name,
564         p_procedure_name => l_api_name) ;
565     ROLLBACK TO Complete_Shipment_PVT;
566     x_return_status := L_FND_RET_STS_UNEXP_ERROR ;
567     IF FND_MSG_PUB.Check_Msg_Level (p_message_level => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
568         FND_MSG_PUB.Add_Exc_Msg (
569             p_pkg_name => g_pkg_name,
570             p_procedure_name => l_api_name) ;
571     END IF;
572     FND_MSG_PUB.Count_And_Get (
573         p_encoded => L_FND_FALSE,
574         p_count => x_msg_count,
575         p_data => x_msg_data) ;
576 END Complete_Shipment;
577 -- Utility name   : Delete_Allocations
578 -- Type       : Private
579 -- Function   : Delete allocations from the previous landed cost calculation.
580 -- Pre-reqs   : None
581 -- Parameters :
582 -- IN         : p_ship_header_id  IN NUMBER
583 -- OUT          x_return_status OUT NOCOPY VARCHAR2
584 --
585 -- Version    : Current version 1.0
586 --
587 -- Notes      :
588 PROCEDURE Delete_Allocations(
589         p_ship_header_id IN NUMBER,
590         x_return_status OUT NOCOPY VARCHAR2
591 ) IS
592     l_program_name  CONSTANT VARCHAR2 (100) := 'Delete_Allocations ';
593     l_debug_info VARCHAR2 (200) ;
594 BEGIN
595     -- Verify if there is allocation for Shipment
596      DELETE
597        FROM inl_allocations cfa
598       WHERE cfa.ship_header_id = p_ship_header_id
599         AND NOT EXISTS
600         (
601              SELECT 'x'
602                FROM inl_allocations al1
603               WHERE al1.ship_header_id = cfa.ship_header_id
604                 AND al1.adjustment_num > 0
605                 AND ROWNUM             < 2
606         ) ;
607     l_debug_info := 'deleted '||sql%ROWCOUNT||' allocations rows ';
608     INL_LOGGING_PVT.Log_Statement (
609         p_module_name => g_module_name,
610         p_procedure_name => l_program_name,
611         p_debug_info => l_debug_info
612     ) ;
613 EXCEPTION
614 WHEN L_FND_EXC_ERROR THEN
615     x_return_status := L_FND_RET_STS_ERROR;
616 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
617     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
618 WHEN OTHERS THEN
619     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
620     IF FND_MSG_PUB.Check_Msg_Level (p_message_level => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
621         FND_MSG_PUB.Add_Exc_Msg (
622             p_pkg_name => g_pkg_name,
623             p_procedure_name => l_program_name) ;
624     END IF;
625 END Delete_Allocations;
626 
627 -- API name   : Set_ToRevalidate
628 -- Type       : Private
629 -- Function   : Set a given LCM Shipment to "Validation Required" status.
630 -- Pre-reqs   : None
631 -- Parameters :
632 -- IN         : p_api_version     IN         NUMBER   Required
633 --              p_init_msg_list   IN         VARCHAR2 Optional  Default = L_FND_FALSE
634 --              p_commit          IN         VARCHAR2 Optional  Default = L_FND_FALSE
635 --              p_ship_header_id  IN         NUMBER   Required
636 -- OUT          x_msg_count       OUT NOCOPY NUMBER
637 --              x_msg_data        OUT NOCOPY VARCHAR2
638 --              x_return_status   OUT NOCOPY VARCHAR2
639 --
640 -- Version    : Current version 1.0
641 --
642 -- Notes      :
643 PROCEDURE Set_ToRevalidate(
644         p_api_version    IN NUMBER,
645         p_init_msg_list  IN VARCHAR2 := L_FND_FALSE,
646         p_commit         IN VARCHAR2 := L_FND_FALSE,
647         p_ship_header_id IN NUMBER,
648         x_msg_count OUT NOCOPY     NUMBER,
649         x_msg_data OUT NOCOPY      VARCHAR2,
650         x_return_status OUT NOCOPY VARCHAR2
651 ) IS
652     l_ship_status   VARCHAR2 (30) ;
653     l_api_name      CONSTANT VARCHAR2 (100) := 'Set_ToRevalidate';
654     l_api_version   CONSTANT NUMBER         := 1.0;
655     l_exist_event   VARCHAR2 (5) ;
656     l_msg_data      VARCHAR2 (200) ;
657     l_msg_count     NUMBER;
658     l_return_status VARCHAR2 (1) ;
659     l_exist_status  NUMBER := 0;
660     l_exist_calc    NUMBER := 0;
661     l_debug_info    VARCHAR2 (200) ;
662 BEGIN
663     INL_LOGGING_PVT.Log_BeginProc (
664         p_module_name => g_module_name,
665         p_procedure_name => l_api_name) ;
666     -- Standard Start of API savepoint
667     SAVEPOINT Set_ToRevalidate_PVT;
668     -- Initialize message list if p_init_msg_list is set to TRUE.
669     IF FND_API.to_Boolean (p_init_msg_list) THEN
670         FND_MSG_PUB.initialize;
671     END IF;
672     -- Check for call compatibility.
673     IF NOT FND_API.Compatible_API_Call (
674         p_current_version_number => l_api_version,
675         p_caller_version_number => p_api_version,
676         p_api_name => l_api_name,
677         p_pkg_name => G_PKG_NAME
678     ) THEN
679         RAISE L_FND_EXC_UNEXPECTED_ERROR;
680     END IF;
681     --  Initialize API return status to success
682     x_return_status := L_FND_RET_STS_SUCCESS;
683      SELECT sh.ship_status_code
684        INTO l_ship_status
685        FROM inl_ship_headers sh
686       WHERE sh.ship_header_id = p_ship_header_id;
687     INL_LOGGING_PVT.Log_Variable (
688         p_module_name => g_module_name,
689         p_procedure_name => l_api_name,
690         p_var_name => 'current Shipment status',
691         p_var_value => l_ship_status
692     ) ;
693     IF (l_ship_status = 'VALIDATED' OR l_ship_status = 'ON HOLD') THEN
694         Delete_Allocations (p_ship_header_id, l_return_status) ;
695         -- If any errors happen abort API.
696         IF l_return_status = L_FND_RET_STS_ERROR THEN
697             RAISE L_FND_EXC_ERROR;
698         ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
699             RAISE L_FND_EXC_UNEXPECTED_ERROR;
700         END IF;
701         -- Update Shipment status to VALIDATION REQ
702          UPDATE inl_ship_headers
703         SET ship_status_code   = 'VALIDATION REQ'
704           WHERE ship_header_id = p_ship_header_id;
705     END IF;
706     -- Standard check of p_commit.
707     IF FND_API.To_Boolean (p_commit) THEN
708         COMMIT WORK;
709     END IF;
710     -- Standard call to get message count and if count is 1, get message info.
711     FND_MSG_PUB.Count_And_Get (
712         p_encoded => L_FND_FALSE,
713         p_count => x_msg_count,
714         p_data => x_msg_data
715     ) ;
716     INL_LOGGING_PVT.Log_EndProc (
717         p_module_name => g_module_name,
718         p_procedure_name => l_api_name) ;
719 EXCEPTION
720 WHEN L_FND_EXC_ERROR THEN
721     l_debug_info := 'MSG: '||SQLERRM;
722     INL_LOGGING_PVT.Log_Statement (
723         p_module_name => g_module_name,
724         p_procedure_name => l_api_name,
725         p_debug_info => l_debug_info
726     ) ;
727     INL_LOGGING_PVT.Log_ExpecError (
728         p_module_name => g_module_name,
729         p_procedure_name => l_api_name) ;
730     ROLLBACK TO Set_ToRevalidate_PVT;
731     x_return_status := L_FND_RET_STS_ERROR;
732     FND_MSG_PUB.Count_And_Get (
733         p_encoded => L_FND_FALSE,
734         p_count => x_msg_count,
735         p_data => x_msg_data) ;
736 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
737     l_debug_info := 'MSG: '||SQLERRM;
738     INL_LOGGING_PVT.Log_Statement (
739         p_module_name => g_module_name,
740         p_procedure_name => l_api_name,
741         p_debug_info => l_debug_info
742     ) ;
743     INL_LOGGING_PVT.Log_UnexpecError (
744         p_module_name => g_module_name,
745         p_procedure_name => l_api_name) ;
746     ROLLBACK TO Set_ToRevalidate_PVT;
747     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
748     FND_MSG_PUB.Count_And_Get (
749         p_encoded => L_FND_FALSE,
750         p_count => x_msg_count,
751         p_data => x_msg_data) ;
752 WHEN OTHERS THEN
753     l_debug_info := 'MSG: '||SQLERRM;
754     INL_LOGGING_PVT.Log_Statement (
755         p_module_name => g_module_name,
756         p_procedure_name => l_api_name,
757         p_debug_info => l_debug_info
758     ) ;
759     INL_LOGGING_PVT.Log_UnexpecError (
760         p_module_name => g_module_name,
761         p_procedure_name => l_api_name) ;
762     ROLLBACK TO Set_ToRevalidate_PVT;
763     x_return_status := L_FND_RET_STS_UNEXP_ERROR ;
764     IF FND_MSG_PUB.Check_Msg_Level (p_message_level => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
765         FND_MSG_PUB.Add_Exc_Msg (
766             p_pkg_name => g_pkg_name,
767             p_procedure_name => l_api_name) ;
768     END IF;
769     FND_MSG_PUB.Count_And_Get (
770         p_encoded => L_FND_FALSE,
771         p_count => x_msg_count,
772         p_data => x_msg_data) ;
773 END Set_ToRevalidate;
774 
775 -- Utility name   : Has_ShipLine
776 -- Type       : Private
777 -- Function   : Checks if an LCM Shipment contains Shipment Lines
778 -- Pre-reqs   : None
779 -- Parameters :
780 -- IN         : p_ship_header_id  IN NUMBER
781 --
782 -- OUT        : x_group_line_num IN OUT NOCOPY  NUMBER
783 -- Version    : Current version 1.0
784 --
785 -- Notes      :
786 FUNCTION Has_ShipLine(
787         p_ship_header_id IN NUMBER,
788         x_group_line_num IN OUT NOCOPY NUMBER -- Bug 12630218
789 ) RETURN BOOLEAN IS
790     l_program_name  CONSTANT VARCHAR2 (30) := 'Has_ShipLine';
791     count_ship_line NUMBER;
792     l_debug_info VARCHAR2 (200);
793     l_count_group_no_line NUMBER := 0;
794 
795     -- Bug 12630218
796     CURSOR c_group_lines IS
797     SELECT slg.ship_line_group_id, slg.ship_line_group_num, COUNT(ol.ship_line_id) count_ship_line
798     FROM inl_ship_line_groups slg,
799          inl_adj_ship_lines_v ol
800     WHERE ol.ship_header_id (+) = slg.ship_header_id
801     AND ol.ship_line_group_id (+) = slg.ship_line_group_id
802     AND slg.ship_header_id = p_ship_header_id
803     GROUP BY slg.ship_line_group_id, slg.ship_line_group_num
804     ORDER BY slg.ship_line_group_id;
805 
806     TYPE group_lines_type IS TABLE OF c_group_lines%ROWTYPE;
807     c_group_lines_tl group_lines_type;
808     l_group_lines group_lines_type;
809 
810 BEGIN
811     INL_LOGGING_PVT.Log_BeginProc (
812         p_module_name => g_module_name,
813         p_procedure_name => l_program_name) ;
814 
815     -- Logging variables
816     INL_LOGGING_PVT.Log_Variable (
817           p_module_name => g_module_name,
818           p_procedure_name => l_program_name,
819           p_var_name => 'p_ship_header_id',
820           p_var_value => p_ship_header_id);
821 
822     OPEN c_group_lines;
823     FETCH c_group_lines BULK COLLECT INTO c_group_lines_tl;
824     CLOSE c_group_lines;
825 
826     -- Logging variables
827     INL_LOGGING_PVT.Log_Variable (
828           p_module_name => g_module_name,
829           p_procedure_name => l_program_name,
830           p_var_name => 'NVL(c_group_lines_tl.LAST, 0)',
831           p_var_value => NVL(c_group_lines_tl.LAST, 0));
832 
833     IF NVL(c_group_lines_tl.LAST, 0) = 0 THEN
834         RETURN FALSE;
835     ELSE
836         FOR i IN NVL (c_group_lines_tl.FIRST, 0) ..NVL (c_group_lines_tl.LAST, 0)
837         LOOP
838             -- Logging variables
839             INL_LOGGING_PVT.Log_Variable (
840                 p_module_name => g_module_name,
841                 p_procedure_name => l_program_name,
842                 p_var_name => 'c_group_lines_tl.count_ship_line(' || i || ')',
843                 p_var_value => c_group_lines_tl(i).count_ship_line);
844 
845             -- Group without Line
846             IF NVL (c_group_lines_tl(i).count_ship_line, 0) <= 0 THEN
847                 l_count_group_no_line := 1;
848                 x_group_line_num := c_group_lines_tl(i).ship_line_group_num;
849                 EXIT WHEN l_count_group_no_line = 1;
850             END IF;
851         END LOOP;
852     END IF;
853 
854    INL_LOGGING_PVT.Log_EndProc (
855         p_module_name => g_module_name,
856         p_procedure_name => l_program_name) ;
857 
858     IF NVL (l_count_group_no_line, 0) <> 0 THEN
859         RETURN FALSE;
860     ELSE
861         RETURN TRUE;
862     END IF;
863 END Has_ShipLine;
864 
865 -- Utl name   : Get_ShipHeadNum
866 -- Type       : Private
867 -- Function   : Get Shipment Number
868 -- Pre-reqs   : None
869 -- Parameters :
870 -- IN         : p_ship_header_id  IN NUMBER
871 --
872 -- Version    : Current version 1.0
873 --
874 -- Notes      :
875 FUNCTION Get_ShipHeadNum(
876         p_ship_header_id IN NUMBER
877 ) RETURN VARCHAR2 IS
878     l_program_name       CONSTANT VARCHAR2 (30) := 'Get_ShipHeadNum';
879     l_ship_header_num VARCHAR2 (25) ;
880     l_debug_info      VARCHAR2 (200) ;
881 BEGIN
882     INL_LOGGING_PVT.Log_BeginProc (
883         p_module_name => g_module_name,
884         p_procedure_name => l_program_name) ;
885     BEGIN
886          SELECT ship_num
887            INTO l_ship_header_num
888            FROM inl_ship_headers
889           WHERE ship_header_id = p_ship_header_id;
890     EXCEPTION
891     WHEN NO_DATA_FOUND THEN
892         RETURN '';
893     END;
894     INL_LOGGING_PVT.Log_EndProc (
895         p_module_name => g_module_name,
896         p_procedure_name => l_program_name) ;
897     RETURN l_ship_header_num;
898 END Get_ShipHeadNum;
899 
900 -- Utl name   : Get_ShipLineNum
901 -- Type       : Private
902 -- Function   : Get Shipment Line Number
903 -- Pre-reqs   : None
904 -- Parameters :
905 -- IN         : p_ship_line_id  IN NUMBER
906 --
907 -- Version    : Current version 1.0
908 --
909 -- Notes      :
910 FUNCTION Get_ShipLineNum(
911         p_ship_line_id IN NUMBER
912 ) RETURN VARCHAR2 IS
913     l_program_name     CONSTANT VARCHAR2 (30) := 'Get_ShipLineNum';
914     l_ship_line_num VARCHAR2 (25) ;
915     l_debug_info    VARCHAR2 (200) ;
916 BEGIN
917     INL_LOGGING_PVT.Log_BeginProc (
918         p_module_name => g_module_name,
919         p_procedure_name => l_program_name) ;
920     BEGIN
921          SELECT ship_line_num
922            INTO l_ship_line_num
923            FROM inl_adj_ship_lines_v
924           WHERE NVL (parent_ship_line_id, ship_line_id) = p_ship_line_id;
925     EXCEPTION
926     WHEN NO_DATA_FOUND THEN
927         RETURN '';
928     END;
929     INL_LOGGING_PVT.Log_EndProc (
930         p_module_name => g_module_name,
931         p_procedure_name => l_program_name) ;
932     RETURN TO_CHAR (l_ship_line_num) ;
933 END Get_ShipLineNum;
934 -- API name   : Get_AvailableQty
935 -- Type       : Private
936 -- Function   : Encapsulate the logic to call RCV routines and return the Available and Tolerable quantities.
937 -- Pre-reqs   : None
938 -- Parameters :
939 -- IN         : p_api_version        IN NUMBER           Required
940 --              p_init_msg_list      IN VARCHAR2         Optional  Default = L_FND_FALSE
941 --              p_commit             IN VARCHAR2         Optional  Default = L_FND_FALSE
942 --              p_ship_line_src_code IN VARCHAR2
943 --              p_parent_id          IN NUMBER
944 --              p_available_quantity IN OUT NOCOPY NUMBER
945 --              p_tolerable_quantity IN OUT NOCOPY NUMBER
946 --              p_unit_of_measure    IN OUT NOCOPY VARCHAR2
947 -- OUT          x_return_status      OUT NOCOPY VARCHAR2
948 --              x_msg_count          OUT NOCOPY   NUMBER
949 --              x_msg_data           OUT NOCOPY VARCHAR2
950 --
951 -- Version    : Current version 1.0
952 --
953 -- Notes      :
954 PROCEDURE Get_AvailableQty(
955     p_api_version        IN NUMBER,
956     p_init_msg_list      IN VARCHAR2 := L_FND_FALSE,
957     p_commit             IN VARCHAR2 := L_FND_FALSE,
958     p_ship_line_src_code IN VARCHAR2,
959     p_parent_id          IN NUMBER,
960     p_available_quantity IN OUT NOCOPY NUMBER,
961     p_tolerable_quantity IN OUT NOCOPY NUMBER,
962     p_unit_of_measure    IN OUT NOCOPY VARCHAR2,
963     x_return_status      OUT NOCOPY VARCHAR2,
964     x_msg_count          OUT NOCOPY NUMBER,
965     x_msg_data           OUT NOCOPY VARCHAR2)
966 IS
967     CURSOR c_rcv_shipmt_lines IS
968       SELECT rsl.shipment_line_id,
969              rsl.item_id,
970              pll.unit_meas_lookup_code
971       FROM rcv_shipment_lines rsl,
972            po_line_locations_all pll
973       WHERE rsl.lcm_shipment_line_id IS NOT NULL
974       AND pll.line_location_id = rsl.po_line_location_id
975       AND rsl.po_line_location_id = p_parent_id
976       AND NOT EXISTS(SELECT 1
977                      FROM rcv_transactions_interface rti,
978                           rcv_transactions rt
979                WHERE rti.shipment_line_id (+) = rt.shipment_line_id -- Bug #8235573
980                  AND rsl.shipment_line_id = rt.shipment_line_id);
981 
982     l_rcv_shipmt_lines c_rcv_shipmt_lines%ROWTYPE;
983     l_api_name CONSTANT VARCHAR2(30) := 'Get_AvailableQty';
984     l_api_version CONSTANT NUMBER := 1.0;
985     l_return_status VARCHAR2(1) ;
986     l_msg_count NUMBER;
987     l_msg_data VARCHAR2(2000);
988     l_debug_info VARCHAR2(200);
989     l_transaction_type VARCHAR2(100);
990     l_receipt_source_code VARCHAR2(100);
991     l_quantity_rsl NUMBER;
992     l_tolerable_quantity_rsl NUMBER;
993     l_secondary_available_qty_rsl NUMBER;
994     l_unit_of_measure_rsl VARCHAR2(30);
995     l_converted_qty_rsl NUMBER;
996     l_total_quantity_rsl NUMBER := 0;
997 BEGIN
998     -- Standard Beginning of Procedure/Function Logging
999     INL_LOGGING_PVT.Log_BeginProc (
1000         p_module_name => g_module_name,
1001         p_procedure_name => l_api_name) ;
1002     -- Initialize message list if p_init_msg_list is set to TRUE.
1003     IF FND_API.to_Boolean (p_init_msg_list) THEN
1004         FND_MSG_PUB.initialize;
1005     END IF;
1006     -- Check for call compatibility.
1007     IF NOT
1008         FND_API.Compatible_API_Call (
1009             l_api_version,
1010             p_api_version,
1011             l_api_name,
1012             G_PKG_NAME)
1013     THEN
1014         RAISE L_FND_EXC_UNEXPECTED_ERROR;
1015     END IF;
1016     --  Initialize API return status to success
1017     x_return_status := L_FND_RET_STS_SUCCESS;
1018     -- Define the transaction type and receipt source code
1019     -- based the current Shipment Line Source Code.
1020     IF p_ship_line_src_code = 'PO' THEN
1021         l_transaction_type := 'RECEIVE';
1022         l_receipt_source_code := 'VENDOR';
1023     ELSIF p_ship_line_src_code = 'IR' THEN
1024         l_transaction_type := 'RECEIVE';
1025         l_receipt_source_code := 'INTERNAL ORDER';
1026     ELSIF p_ship_line_src_code = 'RMA' THEN
1027         l_transaction_type := 'RECEIVE';
1028         l_receipt_source_code := 'CUSTOMER';
1029     END IF;
1030     -- Logging variables
1031     INL_LOGGING_PVT.Log_Variable (
1032         p_module_name => g_module_name,
1033         p_procedure_name => l_api_name,
1034         p_var_name => 'l_transaction_type',
1035         p_var_value => l_transaction_type) ;
1036     INL_LOGGING_PVT.Log_Variable (
1037         p_module_name => g_module_name,
1038         p_procedure_name => l_api_name,
1039         p_var_name => 'l_receipt_source_code',
1040         p_var_value => l_receipt_source_code) ;
1041     l_debug_info := 'Call RCV_QUANTITIES_S.get_available_quantity - PLL';
1042     INL_LOGGING_PVT.Log_Statement (
1043         p_module_name => g_module_name,
1044         p_procedure_name => l_api_name,
1045         p_debug_info => l_debug_info);
1046     -- This call will return the available qty not considering qty on RSL.
1047     RCV_QUANTITIES_S.get_available_quantity (
1048         p_transaction_type        => l_transaction_type,
1049         p_parent_id               => p_parent_id,
1050         p_receipt_source_code     => l_receipt_source_code,
1051         p_parent_transaction_type => NULL,
1052         p_grand_parent_id         => NULL,
1053         p_correction_type         => NULL,
1054         p_available_quantity      => p_available_quantity,
1055         p_tolerable_quantity      => p_tolerable_quantity,
1056         p_unit_of_measure         => p_unit_of_measure);
1057     -- Logging variables
1058     INL_LOGGING_PVT.Log_Variable (
1059         p_module_name => g_module_name,
1060         p_procedure_name => l_api_name,
1061         p_var_name => 'p_available_quantity',
1062         p_var_value => p_available_quantity);
1063     INL_LOGGING_PVT.Log_Variable (
1064         p_module_name => g_module_name,
1065         p_procedure_name => l_api_name,
1066         p_var_name => 'p_tolerable_quantity',
1067         p_var_value => p_tolerable_quantity);
1068     -- Iterate through all RCV Shipment Lines based on a given PLL.
1069     FOR l_rcv_shipmt_lines IN c_rcv_shipmt_lines
1070     LOOP
1071         l_debug_info := 'Call RCV_QUANTITIES_S.get_available_quantity - RSL';
1072         INL_LOGGING_PVT.Log_Statement (
1073             p_module_name => g_module_name,
1074             p_procedure_name => l_api_name,
1075             p_debug_info => l_debug_info);
1076         -- This call will return the quantity on RSL that should be deducted from the available quantity.
1077         RCV_QUANTITIES_S.get_available_quantity(
1078             p_transaction_type        => 'RECEIVE',
1079             p_parent_id               => l_rcv_shipmt_lines.shipment_line_id,
1080             p_receipt_source_code     => 'INVENTORY',
1081             p_parent_transaction_type => NULL,
1082             p_grand_parent_id         => NULL,
1083             p_correction_type         => NULL,
1084             p_available_quantity      => l_quantity_rsl,
1085             p_tolerable_quantity      => l_tolerable_quantity_rsl,
1086             p_unit_of_measure         => l_unit_of_measure_rsl,
1087             p_secondary_available_qty => l_secondary_available_qty_rsl);
1088         -- Necessary convertion so that the available quantity can be calculated in the PO UOM.
1089         PO_UOM_S.uom_convert(
1090             l_quantity_rsl,
1091             l_unit_of_measure_rsl,
1092             l_rcv_shipmt_lines.item_id,
1093             l_rcv_shipmt_lines.unit_meas_lookup_code,
1094             l_converted_qty_rsl);
1095         l_total_quantity_rsl := l_total_quantity_rsl + NVL(l_converted_qty_rsl,0);
1096     END LOOP;
1097     -- Deduct from the current available qty the converted qty from RSL
1098     p_available_quantity := NVL(p_available_quantity,0) - l_total_quantity_rsl;
1099     -- Deduct from the current tolerance the converted qty from RSL
1100     p_tolerable_quantity := NVL(p_tolerable_quantity,0) - l_total_quantity_rsl;
1101     -- Just to prevent negative if this shipment has been over received. In this
1102     -- case, the available/tolerable quantities that needs to be passed back should be 0.
1103     IF p_available_quantity < 0 THEN
1104       p_available_quantity := 0;
1105     END IF;
1106     IF p_tolerable_quantity < 0 THEN
1107       p_tolerable_quantity := 0;
1108     END IF;
1109     INL_LOGGING_PVT.Log_Variable (
1110         p_module_name => g_module_name,
1111         p_procedure_name => l_api_name,
1112         p_var_name => 'p_available_quantity',
1113         p_var_value => p_available_quantity);
1114     INL_LOGGING_PVT.Log_Variable (
1115         p_module_name => g_module_name,
1116         p_procedure_name => l_api_name,
1117         p_var_name => 'p_tolerable_quantity',
1118         p_var_value => p_tolerable_quantity);
1119     INL_LOGGING_PVT.Log_Variable (
1120         p_module_name => g_module_name,
1121         p_procedure_name => l_api_name,
1122         p_var_name => 'p_unit_of_measure',
1123         p_var_value => p_unit_of_measure) ;
1124     -- Standard check of p_commit.
1125     IF FND_API.To_Boolean (p_commit) THEN
1126         COMMIT WORK;
1127     END IF;
1128     -- Standard call to get message count and if count is 1, get message info.
1129     FND_MSG_PUB.Count_And_Get (
1130         p_encoded => L_FND_FALSE,
1131         p_count => x_msg_count,
1132         p_data => x_msg_data) ;
1133     -- Standard End of Procedure/Function Logging
1134     INL_LOGGING_PVT.Log_EndProc (
1135         p_module_name => g_module_name,
1136         p_procedure_name => l_api_name) ;
1137 EXCEPTION
1138 WHEN L_FND_EXC_ERROR THEN
1139     -- Standard Expected Error Logging
1140     INL_LOGGING_PVT.Log_ExpecError (
1141         p_module_name => g_module_name,
1142         p_procedure_name => l_api_name) ;
1143     x_return_status := L_FND_RET_STS_ERROR;
1144     FND_MSG_PUB.Count_And_Get (
1145         p_encoded => L_FND_FALSE,
1146         p_count => x_msg_count,
1147         p_data => x_msg_data) ;
1148 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
1149     -- Standard Unexpected Error Logging
1150     INL_LOGGING_PVT.Log_UnexpecError (
1151         p_module_name => g_module_name,
1152         p_procedure_name => l_api_name) ;
1153     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
1154     FND_MSG_PUB.Count_And_Get (
1155         p_encoded => L_FND_FALSE,
1156         p_count => x_msg_count,
1157         p_data => x_msg_data) ;
1158 WHEN OTHERS THEN
1159     -- Standard Unexpected Error Logging
1160     INL_LOGGING_PVT.Log_UnexpecError (
1161         p_module_name => g_module_name,
1162         p_procedure_name => l_api_name) ;
1163     x_return_status := L_FND_RET_STS_UNEXP_ERROR ;
1164     IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1165         FND_MSG_PUB.Add_Exc_Msg (
1166             p_pkg_name => g_pkg_name,
1167             p_procedure_name => l_api_name) ;
1168     END IF;
1169     FND_MSG_PUB.Count_And_Get (
1170         p_encoded => L_FND_FALSE,
1171         p_count => x_msg_count,
1172         p_data => x_msg_data) ;
1173 END Get_AvailableQty;
1174 -- Utility name : Check_AvailableQty
1175 -- Type       : Private
1176 -- Function   : Check whether Shipment Line Qty is compliant with the PO available Qty
1177 -- Pre-reqs   : None
1178 -- Parameters :
1179 -- IN         : p_primary_qty             IN NUMBER
1180 --              p_sum_primary_qty         IN NUMBER
1181 --              p_primary_uom_code        IN VARCHAR2
1182 --              p_txn_uom_code            IN VARCHAR2
1183 --              p_inventory_item_id       IN NUMBER
1184 --              p_inv_org_id              IN NUMBER
1185 --              p_ship_line_id            IN NUMBER
1186 --              p_ship_line_num           IN NUMBER
1187 --              p_ship_line_src_type_code IN VARCHAR2
1188 --              p_ship_line_src_id        IN NUMBER
1189 --              p_same_shiph_id           IN NUMBER
1190 --              p_ship_header_id          IN NUMBER
1191 -- OUT          x_return_status           OUT NOCOPY VARCHAR2
1192 --
1193 -- Version    : Current version 1.0
1194 --
1195 -- Notes      :
1196 PROCEDURE Check_AvailableQty(
1197     p_primary_qty             IN NUMBER,
1198     p_sum_primary_qty         IN NUMBER,
1199     p_primary_uom_code        IN VARCHAR2,
1200     p_txn_uom_code            IN VARCHAR2,
1201     p_inventory_item_id       IN NUMBER,
1202     p_inv_org_id              IN NUMBER,
1203     p_ship_line_id            IN NUMBER,
1204     p_ship_line_num           IN NUMBER,
1205     p_ship_line_src_type_code IN VARCHAR2,
1206     p_ship_line_src_id        IN NUMBER,
1207     p_same_shiph_id           IN NUMBER,
1208     p_ship_header_id          IN NUMBER,
1209     x_return_status           OUT NOCOPY VARCHAR2
1210 ) IS
1211     l_program_name CONSTANT VARCHAR2(30) := 'Check_AvailableQty';
1212     l_msg VARCHAR2(2000);
1213     l_debug_info VARCHAR2(200);
1214     l_msg_count NUMBER;
1215     l_msg_data VARCHAR2 (2000);
1216     l_acpt_qty VARCHAR2(1);
1217     l_return_status VARCHAR2 (1);
1218     l_error_message_name VARCHAR2(200);
1219     l_shipln_duplicated BOOLEAN := FALSE;
1220     x_uom_code VARCHAR2(3);
1221     x_available_quantity NUMBER;
1222     x_tolerable_quantity NUMBER;
1223     x_unit_of_measure VARCHAR2(100);
1224     x_qty_in_others_ops NUMBER;
1225     l_txn_uom_tl VARCHAR2(30);
1226     l_txn_uom_code VARCHAR2(3);
1227     l_primary_uom_tl VARCHAR2(30);
1228     l_msg_tolerable_qty NUMBER;
1229     l_msg_uom_tl VARCHAR2(30);
1230     l_pre_receive VARCHAR2(1);
1231     l_ship_qty_validation_inf_tbl ship_qty_validation_inf_tbl;
1232 BEGIN
1233     -- Standard Beginning of Procedure/Function Logging
1234     INL_LOGGING_PVT.Log_BeginProc (
1235         p_module_name => g_module_name,
1236         p_procedure_name => l_program_name) ;
1237     --  Initialize API return status to success
1238     x_return_status := L_FND_RET_STS_SUCCESS;
1239     INL_LOGGING_PVT.Log_Variable (
1240         p_module_name => g_module_name,
1241         p_procedure_name => l_program_name,
1242         p_var_name => 'x_qty_in_others_ops',
1243         p_var_value => x_qty_in_others_ops) ;
1244 
1245     INL_LOGGING_PVT.Log_Variable (
1246         p_module_name => g_module_name,
1247         p_procedure_name => l_program_name,
1248         p_var_name => 'p_primary_qty',
1249         p_var_value => p_primary_qty) ;
1250 
1251     INL_LOGGING_PVT.Log_Variable (
1252         p_module_name => g_module_name,
1253         p_procedure_name => l_program_name,
1254         p_var_name => 'p_sum_primary_qty',
1255         p_var_value => p_sum_primary_qty) ;
1256 
1257     INL_LOGGING_PVT.Log_Variable (
1258         p_module_name => g_module_name,
1259         p_procedure_name => l_program_name,
1260         p_var_name => 'p_primary_uom_code',
1261         p_var_value => p_primary_uom_code) ;
1262 
1263     INL_LOGGING_PVT.Log_Variable (
1264         p_module_name => g_module_name,
1265         p_procedure_name => l_program_name,
1266         p_var_name => 'p_inventory_item_id',
1267         p_var_value => p_inventory_item_id) ;
1268 
1269     INL_LOGGING_PVT.Log_Variable (
1270         p_module_name => g_module_name,
1271         p_procedure_name => l_program_name,
1272         p_var_name => 'p_inv_org_id',
1273         p_var_value => p_inv_org_id) ;
1274 
1275     INL_LOGGING_PVT.Log_Variable (
1276         p_module_name => g_module_name,
1277         p_procedure_name => l_program_name,
1278         p_var_name => 'p_ship_line_id',
1279         p_var_value => p_ship_line_id) ;
1280 
1281     INL_LOGGING_PVT.Log_Variable (
1282         p_module_name => g_module_name,
1283         p_procedure_name => l_program_name,
1284         p_var_name => 'p_ship_line_num',
1285         p_var_value => p_ship_line_num) ;
1286 
1287     INL_LOGGING_PVT.Log_Variable (
1288         p_module_name => g_module_name,
1289         p_procedure_name => l_program_name,
1290         p_var_name => 'p_ship_line_src_type_code',
1291         p_var_value => p_ship_line_src_type_code) ;
1292 
1293     INL_LOGGING_PVT.Log_Variable (
1294         p_module_name => g_module_name,
1295         p_procedure_name => l_program_name,
1296         p_var_name => 'p_ship_line_src_id',
1297         p_var_value => p_ship_line_src_id) ;
1298 
1299     INL_LOGGING_PVT.Log_Variable (
1300         p_module_name => g_module_name,
1301         p_procedure_name => l_program_name,
1302         p_var_name => 'p_same_shiph_id',
1303         p_var_value => p_same_shiph_id) ;
1304 
1305     INL_LOGGING_PVT.Log_Variable (
1306         p_module_name => g_module_name,
1307         p_procedure_name => l_program_name,
1308         p_var_name => 'p_ship_header_id',
1309         p_var_value => p_ship_header_id) ;
1310 
1311 
1312     -- Bug #9232187
1313     -- Just validate PO Available Qty for Pre-Receiving
1314     -- Organizations. In Blackbox, RCV handles this validation.
1315     SELECT pre_receive
1316       INTO l_pre_receive
1317       FROM rcv_parameters
1318      WHERE organization_id = p_inv_org_id;
1319 
1320     IF (NVL(l_pre_receive, 'N') = 'N') THEN
1321         RETURN;
1322     END IF;
1323 
1324     -- Check if primary qty is ZERO
1325     IF NVL (p_primary_qty, 0) = 0 THEN
1326         FND_MESSAGE.SET_NAME ('INL', 'INL_ERR_CHK_SHIP_LN_QTY_ZERO') ;
1327         FND_MESSAGE.SET_TOKEN ('SHIP_LINE_NUM', p_ship_line_num) ;
1328         FND_MSG_PUB.ADD;
1329         -- INCLUDE A LINE IN INL_SHIP_HOLdS
1330         Handle_ShipError (
1331             p_ship_header_id => p_ship_header_id,
1332             p_ship_line_id => p_ship_line_id,
1333             p_charge_line_id => NULL,
1334             p_table_name => 'INL_SHIP_LINES',
1335             p_column_name => 'PRIMARY_QTY',
1336             p_column_value => 0,
1337             p_error_message => SUBSTR (FND_MSG_PUB.Get(
1338                                             p_msg_index => FND_MSG_PUB.Count_Msg (),
1339                                             p_encoded => L_FND_FALSE), 1, 2000
1340                                 ),
1341             p_error_message_name => 'INL_ERR_CHK_SHIP_LN_QTY_ZERO',
1342             p_token1_name => 'SHIP_LINE_NUM',
1343             p_token1_value => p_ship_line_num,
1344             p_token2_name => NULL,
1345             p_token2_value => NULL,
1346             p_token3_name => NULL,
1347             p_token3_value => NULL,
1348             p_token4_name => NULL,
1349             p_token4_value => NULL,
1350             p_token5_name => NULL,
1351             p_token5_value => NULL,
1352             p_token6_name => NULL,
1353             p_token6_value => NULL,
1354             x_return_status => l_return_status) ;
1355         -- If unexpected errors happen abort
1356         IF l_return_status <> L_FND_RET_STS_SUCCESS THEN
1357             RAISE L_FND_EXC_UNEXPECTED_ERROR;
1358         END IF;
1359     ELSE
1360         l_debug_info := 'INL_SHIPMENT_PVT.Get_AvailableQty';
1361         INL_LOGGING_PVT.Log_Statement (
1362             p_module_name => g_module_name,
1363             p_procedure_name => l_program_name,
1364             p_debug_info => l_debug_info ) ;
1365         -- Get the PO Avaliable and Tolerable Quantities
1366         INL_SHIPMENT_PVT.Get_AvailableQty(
1367             p_api_version        => 1.0,
1368             p_init_msg_list      => L_FND_FALSE,
1369             p_commit             => L_FND_FALSE,
1370             p_ship_line_src_code => p_ship_line_src_type_code,
1371             p_parent_id          => p_ship_line_src_id,
1372             p_available_quantity => x_available_quantity,
1373             p_tolerable_quantity => x_tolerable_quantity,
1374             p_unit_of_measure    => x_unit_of_measure,
1375             x_return_status      => l_return_status,
1376             x_msg_count          => l_msg_count,
1377             x_msg_data           => l_msg_data);
1378         INL_LOGGING_PVT.Log_Variable (
1379             p_module_name => g_module_name,
1380             p_procedure_name => l_program_name,
1381             p_var_name => 'x_available_quantity',
1382             p_var_value => x_available_quantity);
1383 
1384         INL_LOGGING_PVT.Log_Variable (
1385             p_module_name => g_module_name,
1386             p_procedure_name => l_program_name,
1387             p_var_name => 'x_tolerable_quantity',
1388             p_var_value => x_tolerable_quantity);
1389 
1390         INL_LOGGING_PVT.Log_Variable (
1391             p_module_name => g_module_name,
1392             p_procedure_name => l_program_name,
1393             p_var_name => 'x_unit_of_measure',
1394             p_var_value => x_unit_of_measure);
1395         -- Get the UOM Code
1396         SELECT uom_code
1397         INTO x_uom_code
1398         FROM mtl_units_of_measure
1399         WHERE unit_of_measure = x_unit_of_measure;
1400         INL_LOGGING_PVT.Log_Variable (
1401             p_module_name  => g_module_name,
1402             p_procedure_name => l_program_name,
1403             p_var_name => 'x_uom_code',
1404             p_var_value => x_uom_code) ;
1405 
1406         INL_LOGGING_PVT.Log_Variable (
1407             p_module_name  => g_module_name,
1408             p_procedure_name => l_program_name,
1409             p_var_name => 'p_primary_uom_code',
1410             p_var_value => p_primary_uom_code
1411         ) ;
1412         l_debug_info := 'If necessary, it converts the qty (INL_landedcost_pvt.Converted_Qty).';
1413         INL_LOGGING_PVT.Log_Statement (
1414             p_module_name => g_module_name,
1415             p_procedure_name => l_program_name,
1416             p_debug_info => l_debug_info ) ;
1417         -- Convert to Primary Qty when Unit of Measure is different
1418         IF x_uom_code <> p_primary_uom_code THEN
1419             x_available_quantity := INL_LANDEDCOST_PVT.converted_qty (
1420                                         p_organization_id => p_inv_org_id,
1421                                         p_inventory_item_id => p_inventory_item_id,
1422                                         p_qty => x_available_quantity,
1423                                         p_from_uom_code => x_uom_code,
1424                                         p_to_uom_code => p_primary_uom_code);
1425             x_tolerable_quantity := INL_LANDEDCOST_PVT.converted_qty (
1426                                         p_organization_id => p_inv_org_id,
1427                                         p_inventory_item_id => p_inventory_item_id,
1428                                         p_qty => x_tolerable_quantity,
1429                                         p_from_uom_code => x_uom_code,
1430                                         p_to_uom_code => p_primary_uom_code);
1431         END IF;
1432         -- Get the transaction UOM description. This will be used to show the
1433         -- validation error message in the transaction uom instead of the primary uom.
1434         SELECT mum.unit_of_measure_tl
1435           INTO l_txn_uom_tl
1436           FROM mtl_units_of_measure_vl mum
1437          WHERE mum.uom_code = p_txn_uom_code;
1438         -- Since Primary and Transaction UOM are different, convert to Transaction UOM.
1439         IF p_txn_uom_code <> p_primary_uom_code THEN
1440             l_msg_tolerable_qty := INL_LANDEDCOST_PVT.converted_qty (
1441                                         p_organization_id => p_inv_org_id,
1442                                         p_inventory_item_id => p_inventory_item_id,
1443                                         p_qty => x_tolerable_quantity,
1444                                         p_from_uom_code => x_uom_code,
1445                                         p_to_uom_code => p_txn_uom_code);
1446             l_msg_uom_tl := l_txn_uom_tl;
1447         -- Otherwise keep the same value that comes from Primary UOM.
1448         ELSE
1449             -- Get the Primary Unit of Measure Description
1450             SELECT unit_of_measure_tl
1451             INTO l_primary_uom_tl
1452             FROM mtl_units_of_measure_vl
1453             WHERE uom_code = p_primary_uom_code;
1454             l_msg_tolerable_qty := x_tolerable_quantity;
1455             l_msg_uom_tl := l_primary_uom_tl;
1456         END IF;
1457         -- Validate the transaction primary qty with the tolerable qty
1458         IF p_primary_qty > x_tolerable_quantity OR p_sum_primary_qty > x_tolerable_quantity THEN
1459             l_acpt_qty  := 'N';
1460             -- Check if the validation message should be handled as
1461             -- a duplicated (two or more lines with the same Line
1462             -- Location Id) or as a single Shipment Line
1463             IF (p_sum_primary_qty    > p_primary_qty) THEN
1464                 l_shipln_duplicated := TRUE;
1465             END IF;
1466             -- In Receiving (RCV_QUANTITIES_S) the rcv_exception_code is checked FOR POs only.
1467             IF p_ship_line_src_type_code = 'PO' THEN
1468                 l_debug_info := 'Verify in po_line_locations_all the Over-Receipt Quantity Control Action';
1469                 INL_LOGGING_PVT.Log_Statement (
1470                     p_module_name => g_module_name,
1471                     p_procedure_name => l_program_name,
1472                     p_debug_info => l_debug_info) ;
1473 
1474                  SELECT DECODE (pll.qty_rcv_exception_code, 'NONE', 'Y', 'N')
1475                    INTO l_acpt_qty
1476                    FROM po_line_locations pll
1477                   WHERE pll.line_location_id = p_ship_line_src_id;
1478             END IF;
1479             IF l_acpt_qty = 'N' THEN
1480                 IF (l_shipln_duplicated = TRUE) THEN
1481                     FND_MESSAGE.SET_NAME ('INL', 'INL_ERR_CHK_SHIP_LN_QTY_TOL_S') ;
1482                 ELSE
1483                     FND_MESSAGE.SET_NAME ('INL', 'INL_ERR_CHK_SHIP_LN_QTY_TOL') ;
1484                 END IF;
1485                 FND_MESSAGE.SET_TOKEN ('SHIP_LINE_NUM', p_ship_line_num) ;
1486                 FND_MESSAGE.SET_TOKEN ('QTY', l_msg_tolerable_qty) ;
1487                 FND_MESSAGE.SET_TOKEN ('UOM', l_msg_uom_tl) ;
1488                 FND_MSG_PUB.ADD;
1489                 -- INCLUDE A LINE IN INL_SHIP_HOLdS
1490                 Handle_ShipError (
1491                     p_ship_header_id => p_ship_header_id,
1492                     p_ship_line_id => p_ship_line_id,
1493                     p_charge_line_id => NULL,
1494                     p_table_name => 'INL_SHIP_LINES',
1495                     p_column_name => 'PRIMARY_QTY',
1496                     p_column_value => p_primary_qty,
1497                     p_error_message => SUBSTR (FND_MSG_PUB.Get (
1498                                                 p_msg_index => FND_MSG_PUB.Count_Msg (),
1499                                                 p_encoded => L_FND_FALSE), 1, 2000),
1500                     p_error_message_name => l_error_message_name,
1501                     p_token1_name => 'SHIP_LINE_NUM',
1502                     p_token1_value => p_ship_line_num,
1503                     p_token2_name => 'QTY',
1504                     p_token2_value => l_msg_tolerable_qty,
1505                     p_token3_name => 'UOM',
1506                     p_token3_value => l_msg_uom_tl,
1507                     p_token4_name => NULL,
1508                     p_token4_value => NULL,
1509                     p_token5_name => NULL,
1510                     p_token5_value => NULL,
1511                     p_token6_name => NULL,
1512                     p_token6_value => NULL,
1513                     x_return_status => l_return_status) ;
1514                 -- If unexpected errors happen abort
1515                 IF l_return_status <> L_FND_RET_STS_SUCCESS THEN
1516                     RAISE L_FND_EXC_UNEXPECTED_ERROR;
1517                 END IF;
1518             END IF;
1519         ELSE
1520             -- Search for other Shipment lines in Validated Shipments
1521             -- with receipts for the same receipt_source_code and src_id
1522              SELECT NVL (SUM (sl.primary_qty), 0)
1523                INTO x_qty_in_others_ops
1524                FROM inl_ship_headers sh,
1525                 inl_adj_ship_lines_v sl
1526               WHERE sl.ship_header_id = sh.ship_header_id
1527                 AND NVL (sl.parent_ship_line_id, sl.ship_line_id) <> p_ship_line_id
1528                 AND
1529                 (
1530                     sh.ship_status_code  = 'VALIDATED'
1531                     OR sh.ship_header_id = NVL (p_same_shiph_id, 9999999999)
1532                 )
1533                 AND sh.rcv_enabled_flag = 'Y' -- Bug #8981485
1534                 AND sl.ship_line_src_type_code = p_ship_line_src_type_code
1535                 AND sl.ship_line_source_id = p_ship_line_src_id;
1536             INL_LOGGING_PVT.Log_Variable (
1537                 p_module_name => g_module_name,
1538                 p_procedure_name => l_program_name,
1539                 p_var_name => 'x_qty_in_others_ops',
1540                 p_var_value => x_qty_in_others_ops) ;
1541 
1542             IF x_qty_in_others_ops + p_primary_qty > x_tolerable_quantity THEN
1543                 l_debug_info := 'x_qty_in_others_ops + p_primary_qty > x_tolerable_quantity';
1544                 INL_LOGGING_PVT.Log_Statement (
1545                     p_module_name => g_module_name,
1546                     p_procedure_name => l_program_name,
1547                     p_debug_info => l_debug_info) ;
1548 
1549                 -- Start of Bug #9755545
1550                 FND_MESSAGE.SET_NAME ('INL', 'INL_ERR_CHK_SHIP_LN_QTY_OTH_L');
1551                 FND_MESSAGE.SET_TOKEN ('SHIP_LINE_NUM', p_ship_line_num);
1552                 FND_MESSAGE.SET_TOKEN ('SRC_TYPE', p_ship_line_src_type_code);
1553                 FND_MESSAGE.SET_TOKEN ('QTY', l_msg_tolerable_qty);
1554                 FND_MESSAGE.SET_TOKEN ('UOM', l_msg_uom_tl);
1555                 FND_MSG_PUB.ADD;
1556 
1557                 SELECT DISTINCT sh.ship_num,
1558                                 sl.ship_line_num
1559                 BULK COLLECT INTO l_ship_qty_validation_inf_tbl
1560                   FROM inl_ship_headers sh,
1561                        inl_adj_ship_lines_v sl
1562                  WHERE sl.ship_header_id = sh.ship_header_id
1563                    AND NVL (sl.parent_ship_line_id, sl.ship_line_id) <> p_ship_line_id
1564                    AND
1565                      (
1566                         sh.ship_status_code  = 'VALIDATED'
1567                         OR sh.ship_header_id = NVL (p_same_shiph_id, 9999999999)
1568                      )
1569                    AND sh.rcv_enabled_flag = 'Y' -- Bug 9735125
1570                    AND sl.ship_line_src_type_code = p_ship_line_src_type_code
1571                    AND sl. ship_line_source_id = p_ship_line_src_id
1572                 ORDER BY sh.ship_num, sl.ship_line_num;
1573 
1574                 FOR i IN 1 .. l_ship_qty_validation_inf_tbl.COUNT LOOP
1575                     FND_MESSAGE.SET_NAME ('INL', 'INL_ERR_CHK_SHIP_LN_QTY_INFO');
1576                     FND_MESSAGE.SET_TOKEN ('SHIP_NUM', l_ship_qty_validation_inf_tbl(i).ship_num);
1577                     FND_MESSAGE.SET_TOKEN ('SHIP_LINE_NUM', l_ship_qty_validation_inf_tbl(i).ship_line_num);
1578                     FND_MSG_PUB.ADD;
1579                 END LOOP;
1580                 -- End of Bug #9755545
1581 
1582                 /*FOR c_ship_num IN
1583                 (
1584                     SELECT DISTINCT sh.ship_num
1585                        FROM inl_ship_headers sh,
1586                         inl_adj_ship_lines_v sl
1587                       WHERE sl.ship_header_id = sh.ship_header_id
1588                         AND NVL (sl.parent_ship_line_id, sl.ship_line_id) <> p_ship_line_id
1589                         AND
1590                         (
1591                             sh.ship_status_code  = 'VALIDATED'
1592                             OR sh.ship_header_id = NVL (p_same_shiph_id, 9999999999)
1593                         )
1594                         AND sh.rcv_enabled_flag = 'Y' -- Bug 9735125
1595                         AND sl.ship_line_src_type_code = p_ship_line_src_type_code
1596                         AND sl. ship_line_source_id = p_ship_line_src_id
1597                    ORDER BY sh.ship_num
1598                 )
1599                 LOOP
1600                     l_msg := l_msg||c_ship_num.ship_num||', ';-- Bug 9735125
1601                     exit when LENGTH(l_msg)>30;
1602                 END LOOP;
1603                 IF LENGTH(l_msg)>2 THEN
1604                     l_msg := SUBSTR(l_msg,1,LENGTH(l_msg)-2);-- Bug 9735125
1605                 END IF;
1606                 FND_MESSAGE.SET_NAME ('INL', 'INL_ERR_CHK_SHIP_LN_QTY_OTH_L') ;
1607                 FND_MESSAGE.SET_TOKEN ('SRC_TYPE', p_ship_line_src_type_code) ;
1608                 FND_MESSAGE.SET_TOKEN ('QTY', l_msg_tolerable_qty) ;
1609                 FND_MESSAGE.SET_TOKEN ('UOM', l_msg_uom_tl) ;
1610                 FND_MESSAGE.SET_TOKEN ('SHIPHS', l_msg) ;--BUG#9735125
1611                 FND_MSG_PUB.ADD;*/
1612 
1613 
1614 
1615                 --INCLUDE A LINE IN INL_SHIP_HOLdS
1616                 Handle_ShipError (
1617                     p_ship_header_id => p_ship_header_id,
1618                     p_ship_line_id => p_ship_line_id,
1619                     p_charge_line_id => NULL,
1620                     p_table_name => 'INL_SHIP_LINES',
1621                     p_column_name => NULL,
1622                     p_column_value => NULL,
1623                     p_error_message => SUBSTR (FND_MSG_PUB.Get (
1624                                                 p_msg_index => FND_MSG_PUB.Count_Msg (),
1625                                                 p_encoded => L_FND_FALSE), 1, 2000),
1626                     p_error_message_name => 'INL_ERR_CHK_SHIP_LN_QTY_OTH_L',
1627                     p_token1_name => 'SRC_TYPE',
1628                     p_token1_value => p_ship_line_src_type_code,
1629                     p_token2_name => 'QTY',
1630                     p_token2_value => l_msg_tolerable_qty,
1631                     p_token3_name => 'UOM',
1632                     p_token3_value => l_msg_uom_tl,
1633                     p_token4_name => 'SHIPHS',
1634                     p_token4_value => l_msg, --BUG#9735125
1635                     p_token5_name => NULL,
1636                     p_token5_value => NULL,
1637                     p_token6_name => NULL,
1638                     p_token6_value => NULL,
1639                     x_return_status => l_return_status) ;
1640             END IF;
1641         END IF;
1642     END IF;
1643     INL_LOGGING_PVT.Log_EndProc ( p_module_name => g_module_name,
1644                                   p_procedure_name => l_program_name) ;
1645 EXCEPTION
1646 WHEN L_FND_EXC_ERROR THEN
1647     x_return_status := L_FND_RET_STS_ERROR;
1648 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
1649     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
1650 WHEN OTHERS THEN
1651     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
1652     IF FND_MSG_PUB.Check_Msg_Level (p_message_level => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1653         FND_MSG_PUB.Add_Exc_Msg (
1654             p_pkg_name => g_pkg_name,
1655             p_procedure_name => l_program_name) ;
1656     END IF;
1657 END Check_AvailableQty;
1658 -- Utility name : Check_PoPriceTolerance
1659 -- Type       : Private
1660 -- Function   : Check whether Shipment Line Price is compliant with the PO
1661 --              Price Tolerance defined in the INL Setup Options
1662 -- Pre-reqs   : None
1663 -- Parameters :
1664 -- IN         : p_ship_header_id     IN NUMBER
1665 --              p_ship_line_id             IN NUMBER,
1666 --              p_organization_id          IN NUMBER,
1667 --              p_ship_line_num            IN NUMBER,
1668 --              p_ship_line_src_id         IN NUMBER,
1669 --              p_pri_unit_price           IN NUMBER,
1670 --              p_primary_uom_code         IN VARCHAR2,
1671 --              p_currency_code            IN VARCHAR2,
1672 --              p_currency_conversion_type IN VARCHAR2,
1673 --              p_currency_conversion_date IN DATE,
1674 --              p_currency_conversion_rate IN NUMBER,
1675 --              x_return_status            OUT NOCOPY VARCHAR2
1676 --
1677 -- OUT          x_return_status      OUT NOCOPY VARCHAR2
1678 --
1679 -- Version    : Current version 1.0
1680 --
1681 -- Notes      :
1682 PROCEDURE Check_PoPriceTolerance(
1683     p_ship_header_id           IN NUMBER,
1684     p_ship_line_id             IN NUMBER,
1685     p_organization_id          IN NUMBER,
1686     p_ship_line_num            IN NUMBER,
1687     p_ship_line_src_id         IN NUMBER,
1688     p_pri_unit_price           IN NUMBER,
1689     p_primary_uom_code         IN VARCHAR2, --BUG#7670307
1690     p_currency_code            IN VARCHAR2, --BUG#7670307
1691     p_currency_conversion_type IN VARCHAR2, --BUG#7670307
1692     p_currency_conversion_date IN DATE,     --BUG#7670307
1693     p_currency_conversion_rate IN NUMBER,   --BUG#7670307
1694     x_return_validation_status OUT NOCOPY VARCHAR2, -- SCM-051
1695     x_return_status            OUT NOCOPY VARCHAR2
1696 ) IS
1697     l_program_name           CONSTANT VARCHAR2(30) := 'Check_PoPriceTolerance';
1698     l_msg                 VARCHAR2(2000) ;
1699     l_debug_info          VARCHAR2(200) ;
1700     l_return_status       VARCHAR2(1) ;
1701     l_po_price_toler_perc NUMBER;
1702     l_actual_price_dif    NUMBER;
1703     l_tolerable_dif       NUMBER;
1704     l_po_unit_price       NUMBER;
1705    -- l_amount              NUMBER; -- Bug #11710754
1706     l_po_qty              NUMBER;
1707     l_inventory_item_id   NUMBER;
1708     l_po_currency_code             VARCHAR2(15);
1709     l_po_currency_conversion_type  VARCHAR2(30);
1710     l_po_currency_conversion_date  DATE;
1711     l_po_currency_conversion_rate  NUMBER;
1712     l_po_converted_price           NUMBER;
1713     l_p_converted_PUP              NUMBER;
1714     l_po_UOM_code                  VARCHAR2(30);
1715 BEGIN
1716     -- Standard Beginning of Procedure/Function Logging
1717     INL_LOGGING_PVT.Log_BeginProc (
1718         p_module_name => g_module_name,
1719         p_procedure_name => l_program_name) ;
1720     --  Initialize API return status variables
1721     x_return_status := L_FND_RET_STS_SUCCESS;
1722     x_return_validation_status := 'TRUE'; -- SCM-051
1723 
1724     -- Get the Price Tolerance from INL Setup Options
1725     SELECT po_price_toler_perc
1726       INTO l_po_price_toler_perc
1727       FROM inl_parameters
1728      WHERE organization_id = p_organization_id;
1729     INL_LOGGING_PVT.Log_Variable (
1730         p_module_name => g_module_name,
1731         p_procedure_name => l_program_name,
1732         p_var_name => 'l_po_price_toler_perc',
1733         p_var_value => l_po_price_toler_perc
1734     ) ;
1735 
1736     INL_LOGGING_PVT.Log_Variable (
1737         p_module_name => g_module_name,
1738         p_procedure_name => l_program_name,
1739         p_var_name => 'p_pri_unit_price',
1740         p_var_value => p_pri_unit_price
1741     ) ;
1742     INL_LOGGING_PVT.Log_Variable (
1743         p_module_name => g_module_name,
1744         p_procedure_name => l_program_name,
1745         p_var_name => 'p_primary_uom_code',
1746         p_var_value => p_primary_uom_code
1747     ) ;
1748     INL_LOGGING_PVT.Log_Variable (
1749         p_module_name => g_module_name,
1750         p_procedure_name => l_program_name,
1751         p_var_name => 'p_currency_code',
1752         p_var_value => p_currency_code
1753     ) ;
1754     INL_LOGGING_PVT.Log_Variable (
1755         p_module_name => g_module_name,
1756         p_procedure_name => l_program_name,
1757         p_var_name => 'p_currency_conversion_type',
1758         p_var_value => p_currency_conversion_type
1759     ) ;
1760     INL_LOGGING_PVT.Log_Variable (
1761         p_module_name => g_module_name,
1762         p_procedure_name => l_program_name,
1763         p_var_name => 'p_currency_conversion_date',
1764         p_var_value => p_currency_conversion_date
1765     ) ;
1766     INL_LOGGING_PVT.Log_Variable (
1767         p_module_name => g_module_name,
1768         p_procedure_name => l_program_name,
1769         p_var_name => 'p_currency_conversion_rate',
1770         p_var_value => p_currency_conversion_rate
1771     ) ;
1772     INL_LOGGING_PVT.Log_Variable (
1773         p_module_name => g_module_name,
1774         p_procedure_name => l_program_name,
1775         p_var_name => 'p_ship_header_id',
1776         p_var_value => p_ship_header_id
1777     ) ;
1778     INL_LOGGING_PVT.Log_Variable (
1779         p_module_name => g_module_name,
1780         p_procedure_name => l_program_name,
1781         p_var_name => 'p_ship_line_id',
1782         p_var_value => p_ship_line_id
1783     ) ;
1784     INL_LOGGING_PVT.Log_Variable (
1785         p_module_name => g_module_name,
1786         p_procedure_name => l_program_name,
1787         p_var_name => 'p_organization_id',
1788         p_var_value => p_organization_id
1789     ) ;
1790     INL_LOGGING_PVT.Log_Variable (
1791         p_module_name => g_module_name,
1792         p_procedure_name => l_program_name,
1793         p_var_name => 'p_ship_line_num',
1794         p_var_value => p_ship_line_num
1795     ) ;
1796     INL_LOGGING_PVT.Log_Variable (
1797         p_module_name => g_module_name,
1798         p_procedure_name => l_program_name,
1799         p_var_name => 'p_ship_line_src_id',
1800         p_var_value => p_ship_line_src_id
1801     ) ;
1802 
1803     -- Get the PO Unit Price
1804     SELECT po.unit_price,
1805            po.currency_code,                --BUG#7670307
1806            po.currency_conversion_type,     --BUG#7670307
1807            po.currency_conversion_date,     --BUG#7670307
1808            po.currency_conversion_rate,     --BUG#7670307
1809            muom.uom_code,                   --BUG#7670307
1810            po.ordered_qty,
1811            po.item_id
1812       INTO l_po_unit_price,
1813            l_po_currency_code,
1814            l_po_currency_conversion_type,
1815            l_po_currency_conversion_date,
1816            l_po_currency_conversion_rate,
1817            l_po_UOM_code,
1818            l_po_qty,
1819            l_inventory_item_id
1820       FROM inl_enter_receipts_v po,  -- BUG#8229331 (Pls see bug 9179775)
1821            mtl_units_of_measure muom
1822      WHERE po.po_line_location_id = p_ship_line_src_id
1823        AND muom.unit_of_measure (+) = po.ordered_uom;
1824     INL_LOGGING_PVT.Log_Variable (
1825         p_module_name => g_module_name,
1826         p_procedure_name => l_program_name,
1827         p_var_name => 'l_po_unit_price',
1828         p_var_value => l_po_unit_price
1829     ) ;
1830     INL_LOGGING_PVT.Log_Variable (
1831         p_module_name => g_module_name,
1832         p_procedure_name => l_program_name,
1833         p_var_name => 'l_po_currency_code',
1834         p_var_value => l_po_currency_code
1835     ) ;
1836     INL_LOGGING_PVT.Log_Variable (
1837         p_module_name => g_module_name,
1838         p_procedure_name => l_program_name,
1839         p_var_name => 'l_po_currency_conversion_type',
1840         p_var_value => l_po_currency_conversion_type
1841     ) ;
1842     INL_LOGGING_PVT.Log_Variable (
1843         p_module_name => g_module_name,
1844         p_procedure_name => l_program_name,
1845         p_var_name => 'l_po_currency_conversion_date',
1846         p_var_value => l_po_currency_conversion_date
1847     ) ;
1848     INL_LOGGING_PVT.Log_Variable (
1849         p_module_name => g_module_name,
1850         p_procedure_name => l_program_name,
1851         p_var_name => 'l_po_currency_conversion_rate',
1852         p_var_value => l_po_currency_conversion_rate
1853     ) ;
1854     INL_LOGGING_PVT.Log_Variable (
1855         p_module_name => g_module_name,
1856         p_procedure_name => l_program_name,
1857         p_var_name => 'l_po_UOM_code',
1858         p_var_value => l_po_UOM_code
1859     ) ;
1860     INL_LOGGING_PVT.Log_Variable (
1861         p_module_name => g_module_name,
1862         p_procedure_name => l_program_name,
1863         p_var_name => 'l_po_qty',
1864         p_var_value => l_po_qty
1865     ) ;
1866     INL_LOGGING_PVT.Log_Variable (
1867         p_module_name => g_module_name,
1868         p_procedure_name => l_program_name,
1869         p_var_name => 'l_inventory_item_id',
1870         p_var_value => l_inventory_item_id
1871     ) ;
1872 
1873     l_debug_info := 'Verifying if currency conversion is required. PO: '||l_po_currency_code ||' Shipment: '||p_currency_code;
1874     INL_LOGGING_PVT.Log_Statement (
1875         p_module_name => g_module_name,
1876         p_procedure_name => l_program_name,
1877         p_debug_info => l_debug_info
1878     );
1879     IF  l_po_currency_code = p_currency_code THEN --BUG#7670307
1880         l_po_converted_price := l_po_unit_price;
1881         l_p_converted_PUP    := p_pri_unit_price;
1882     ELSE
1883         IF l_po_currency_conversion_rate IS NOT NULL THEN
1884             l_po_converted_price := l_po_unit_price * l_po_currency_conversion_rate;
1885         ELSE
1886             l_po_converted_price := l_po_unit_price;
1887         END IF;
1888         IF p_currency_conversion_rate IS NOT NULL THEN
1889             l_p_converted_PUP := p_pri_unit_price * p_currency_conversion_rate;
1890         ELSE
1891             l_p_converted_PUP := p_pri_unit_price;
1892         END IF;
1893     END IF;
1894     INL_LOGGING_PVT.Log_Variable (
1895         p_module_name => g_module_name,
1896         p_procedure_name => l_program_name,
1897         p_var_name => 'l_po_converted_price',
1898         p_var_value => l_po_converted_price
1899         ) ;
1900     INL_LOGGING_PVT.Log_Variable (
1901         p_module_name => g_module_name,
1902         p_procedure_name => l_program_name,
1903         p_var_name => 'l_p_converted_PUP',
1904         p_var_value => l_p_converted_PUP
1905         ) ;
1906 
1907     l_debug_info := 'Verifying if UOM conversion is required. PO: '||l_po_UOM_code ||' Shipment: '||p_primary_uom_code;
1908     INL_LOGGING_PVT.Log_Statement (
1909         p_module_name => g_module_name,
1910         p_procedure_name => l_program_name,
1911         p_debug_info => l_debug_info
1912     );
1913     IF  p_primary_uom_code <> l_po_UOM_code THEN        --BUG#7670307
1914         -- Bug #11710754
1915         /*
1916         l_amount := l_po_converted_price * l_po_qty;
1917         l_po_qty := INL_LANDEDCOST_PVT.Converted_Qty(
1918                         p_organization_id   => p_organization_id,
1919                         p_inventory_item_id => l_inventory_item_id,
1920                         p_qty               => l_po_qty,
1921                         p_from_uom_code     => l_po_UOM_code,
1922                         P_to_uom_code       => p_primary_uom_code
1923                     );
1924         l_po_converted_price := l_amount / l_po_qty;
1925         */
1926 
1927         l_po_converted_price := INL_LANDEDCOST_PVT.Converted_Price(
1928                             p_unit_price        => l_po_converted_price,
1929                             p_organization_id   => p_organization_id,
1930                             p_inventory_item_id => l_inventory_item_id,
1931                             p_from_uom_code     => l_po_uom_code,
1932                             p_to_uom_code       => p_primary_uom_code);
1933 
1934         -- /Bug #11710754
1935 
1936         INL_LOGGING_PVT.Log_Variable (
1937             p_module_name => g_module_name,
1938             p_procedure_name => l_program_name,
1939             p_var_name => 'l_po_converted_price',
1940             p_var_value => l_po_converted_price
1941             ) ;
1942 
1943     END IF;
1944     -- When there is no tolerance defined in
1945     -- INL Setup Options for the current Inventory
1946     -- Organization, the Shipment Line price is validated
1947     -- not to be greater than price defined in PO.
1948     IF l_po_price_toler_perc IS NULL THEN
1949         IF (l_p_converted_PUP  > l_po_converted_price) THEN
1950             x_return_validation_status := 'FALSE'; -- SCM-051
1951             FND_MESSAGE.SET_NAME ('INL', 'INL_ERR_NOT_DEF_PO_PRICE_TOLER') ;
1952             FND_MESSAGE.SET_TOKEN ('SHIPLN_NUM', p_ship_line_num) ;
1953             FND_MSG_PUB.ADD;
1954             -- INCLUDE A LINE IN INL_SHIP_HOLdS
1955             Handle_ShipError (
1956                 p_ship_header_id => p_ship_header_id,
1957                 p_ship_line_id => p_ship_line_id,
1958                 p_charge_line_id => NULL,
1959                 p_table_name => 'INL_SHIP_LINES',
1960                 p_column_name => 'PRIMARY_UNIT_PRICE',
1961                 p_column_value => 0,
1962                 p_error_message => SUBSTR (FND_MSG_PUB.Get (
1963                                                 p_msg_index => FND_MSG_PUB.Count_Msg (),
1964                                                 p_encoded => L_FND_FALSE), 1, 2000),
1965                 p_error_message_name => 'INL_ERR_NOT_DEF_PO_PRICE_TOLER',
1966                 p_token1_name => 'SHIPLN_NUM',
1967                 p_token1_value => p_ship_line_num,
1968                 p_token2_name => NULL,
1969                 p_token2_value => NULL,
1970                 p_token3_name => NULL,
1971                 p_token3_value => NULL,
1972                 p_token4_name => NULL,
1973                 p_token4_value => NULL,
1974                 p_token5_name => NULL,
1975                 p_token5_value => NULL,
1976                 p_token6_name => NULL,
1977                 p_token6_value => NULL,
1978                 x_return_status => l_return_status) ;
1979         END IF;
1980     -- Otherwise will check a unique Shipment Line Unit Price
1981     -- Check the actual difference against the tolerable difference
1982     ELSE
1983         l_actual_price_dif := NVL (l_p_converted_PUP, 0) - NVL (l_po_converted_price, 0) ;
1984         IF l_actual_price_dif > 0 THEN
1985             l_tolerable_dif := (l_po_converted_price / 100) * l_po_price_toler_perc;
1986             IF (l_actual_price_dif > l_tolerable_dif) THEN
1987                 x_return_validation_status := 'FALSE';
1988                 FND_MESSAGE.SET_NAME ('INL', 'INL_ERR_PO_PRICE_TOLER') ;
1989                 FND_MESSAGE.SET_TOKEN ('SHIPLN_NUM', p_ship_line_num) ;
1990                 FND_MESSAGE.SET_TOKEN ('TOLER', l_po_price_toler_perc) ;
1991                 FND_MSG_PUB.ADD;
1992                 -- INCLUDE A LINE IN INL_SHIP_HOLdS
1993                 Handle_ShipError (
1994                     p_ship_header_id => p_ship_header_id,
1995                     p_ship_line_id => p_ship_line_id,
1996                     p_charge_line_id => NULL,
1997                     p_table_name => 'INL_SHIP_LINES',
1998                     p_column_name => 'PRIMARY_UNIT_PRICE',
1999                     p_column_value => 0,
2000                     p_error_message => SUBSTR (FND_MSG_PUB.Get (
2001                                                 p_msg_index => FND_MSG_PUB.Count_Msg (),
2002                                                 p_encoded => L_FND_FALSE), 1, 2000),
2003                     p_error_message_name => 'INL_ERR_PO_PRICE_TOLER',
2004                     p_token1_name => 'SHIPLN_NUM',
2005                     p_token1_value => p_ship_line_num,
2006                     p_token2_name => 'TOLER',
2007                     p_token2_value => l_po_price_toler_perc,
2008                     p_token3_name => NULL,
2009                     p_token3_value => NULL,
2010                     p_token4_name => NULL,
2011                     p_token4_value => NULL,
2012                     p_token5_name => NULL,
2013                     p_token5_value => NULL,
2014                     p_token6_name => NULL,
2015                     p_token6_value => NULL,
2016                     x_return_status => l_return_status) ;
2017             END IF;
2018         END IF;
2019     END IF;
2020     -- Standard End of Procedure/Function Logging
2021     INL_LOGGING_PVT.Log_EndProc (
2022         p_module_name => g_module_name,
2023         p_procedure_name => l_program_name) ;
2024 EXCEPTION
2025 WHEN L_FND_EXC_ERROR THEN
2026     x_return_status := L_FND_RET_STS_ERROR;
2027 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
2028     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
2029 WHEN OTHERS THEN
2030     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
2031     IF FND_MSG_PUB.Check_Msg_Level (p_message_level => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
2032         FND_MSG_PUB.Add_Exc_Msg (
2033             p_pkg_name => g_pkg_name,
2034             p_procedure_name => l_program_name) ;
2035     END IF;
2036 END Check_PoPriceTolerance;
2037 
2038 -- SCM-051 Bug# 13590582
2039 -- API name   : Check_PoTolerances
2040 -- Type       : Private
2041 -- Function   : API for PO Price and Quantity Tolerances validation.
2042 -- Pre-reqs   : None
2043 -- Parameters :
2044 -- IN         : p_api_version              IN NUMBER    Required
2045 --              p_init_msg_list            IN VARCHAR2  Optional  Default = L_FND_FALSE
2046 --              p_commit                   IN VARCHAR2  Optional  Default = L_FND_FALSE
2047 --              p_ship_header_id           IN NUMBER
2048 --              p_ship_line_id             IN NUMBER
2049 --              p_organization_id          IN NUMBER
2050 --              p_ship_line_num            IN NUMBER
2051 --              p_ship_line_src_id         IN NUMBER
2052 --              p_inventory_item_id        IN NUMBER
2053 --              p_primary_qty              IN NUMBER
2054 --              p_primary_uom_code         IN VARCHAR2
2055 --              p_txn_uom_code             IN VARCHAR2
2056 --              p_new_txn_unit_price       IN NUMBER
2057 --              p_pri_unit_price           IN NUMBER
2058 --              p_currency_code            IN VARCHAR2
2059 --              p_currency_conversion_type IN VARCHAR2
2060 --              p_currency_conversion_date IN DATE
2061 --              p_currency_conversion_rate IN NUMBER
2062 --
2063 -- OUT          x_return_status     OUT NOCOPY VARCHAR2
2064 --              x_msg_count         OUT NOCOPY   NUMBER
2065 --              x_msg_data          OUT NOCOPY VARCHAR2
2066 --
2067 -- Version    : Current version 1.0
2068 --
2069 -- Notes      :
2070 PROCEDURE Check_PoTolerances(
2071     p_api_version              IN NUMBER,
2072     p_init_msg_list            IN VARCHAR2 := L_FND_FALSE,
2073     p_commit                   IN VARCHAR2 := L_FND_FALSE,
2074     p_ship_header_id           IN NUMBER,
2075     p_ship_line_id             IN NUMBER,
2076     p_organization_id          IN NUMBER,
2077     p_ship_line_num            IN NUMBER,
2078     p_ship_line_src_id         IN NUMBER,
2079     p_inventory_item_id        IN NUMBER,
2080     p_primary_qty              IN NUMBER,
2081     p_primary_uom_code         IN VARCHAR2,
2082     p_txn_uom_code             IN VARCHAR2,
2083     p_new_txn_unit_price       IN NUMBER,
2084     p_pri_unit_price           IN NUMBER,
2085     p_currency_code            IN VARCHAR2,
2086     p_currency_conversion_type IN VARCHAR2,
2087     p_currency_conversion_date IN DATE,
2088     p_currency_conversion_rate IN NUMBER,
2089     x_return_status            OUT NOCOPY VARCHAR2,
2090     x_msg_count                OUT NOCOPY NUMBER,
2091     x_msg_data                 OUT NOCOPY VARCHAR2)
2092 IS
2093     l_program_name    CONSTANT VARCHAR2(30) := 'Check_PoTolerances';
2094     l_api_version CONSTANT NUMBER := 1.0;
2095     l_return_status VARCHAR2(1);
2096     l_msg_count NUMBER;
2097     l_msg_data VARCHAR2(2000);
2098     l_debug_info VARCHAR2(200);
2099     l_return_validation_status VARCHAR2(30);
2100     l_ship_status_code VARCHAR2(30);
2101     l_pri_unit_price NUMBER;
2102 
2103 BEGIN
2104     -- Standard Beginning of Procedure/Function Logging
2105     INL_LOGGING_PVT.Log_BeginProc (
2106         p_module_name => g_module_name,
2107         p_procedure_name => l_program_name) ;
2108     -- Standard Start of API savepoint
2109     SAVEPOINT Check_PoTolerances_PVT;
2110     -- Initialize message list if p_init_msg_list is set to TRUE.
2111     IF FND_API.to_Boolean (p_init_msg_list) THEN
2112         FND_MSG_PUB.initialize;
2113     END IF;
2114     -- Check for call compatibility.
2115     IF NOT FND_API.Compatible_API_Call(l_api_version,
2116                                        p_api_version,
2117                                        l_program_name,
2118                                        G_PKG_NAME) THEN
2119         RAISE L_FND_EXC_UNEXPECTED_ERROR;
2120     END IF;
2121     --  Initialize API return status to success
2122     x_return_status := L_FND_RET_STS_SUCCESS;
2123 
2124     INL_LOGGING_PVT.Log_Variable(p_module_name => g_module_name,
2125                                  p_procedure_name => l_program_name,
2126                                  p_var_name => 'p_new_txn_unit_price',
2127                                  p_var_value => p_new_txn_unit_price);
2128 
2129     l_pri_unit_price := p_pri_unit_price;
2130 
2131     BEGIN
2132         IF p_new_txn_unit_price IS NOT NULL THEN
2133 
2134             l_debug_info := 'Get Primary Unit Price for New Transaction Unit Price';
2135             INL_LOGGING_PVT.Log_Statement(p_module_name => g_module_name,
2136                                           p_procedure_name => l_program_name,
2137                                           p_debug_info => l_debug_info);
2138 
2139             l_pri_unit_price := INL_LANDEDCOST_PVT.Converted_Price(
2140                                                   p_unit_price => p_new_txn_unit_price,
2141                                                   p_organization_id   => p_organization_id,
2142                                                   p_inventory_item_id => p_inventory_item_id,
2143                                                   p_from_uom_code     => p_txn_uom_code,
2144                                                   p_to_uom_code       => p_primary_uom_code);
2145 
2146             INL_LOGGING_PVT.Log_Variable(p_module_name => g_module_name,
2147                                          p_procedure_name => l_program_name,
2148                                          p_var_name => 'l_pri_unit_price',
2149                                          p_var_value => l_pri_unit_price);
2150 
2151         END IF;
2152 
2153         INL_SHIPMENT_PVT.Check_PoTolerances(p_api_version              => 1.0,
2154                                             p_init_msg_list            => FND_API.G_TRUE,
2155                                             p_commit                   => FND_API.G_FALSE,
2156                                             p_ship_header_id           => p_ship_header_id ,
2157                                             p_ship_line_id             => p_ship_line_id ,
2158                                             p_organization_id          => p_organization_id,
2159                                             p_ship_line_num            => p_ship_line_num,
2160                                             p_ship_line_src_id         => p_ship_line_src_id,
2161                                             p_inventory_item_id        => p_inventory_item_id,
2162                                             p_primary_qty              => p_primary_qty,
2163                                             p_primary_uom_code         => p_primary_uom_code,
2164                                             p_txn_uom_code             => p_txn_uom_code,
2165                                             p_pri_unit_price           => l_pri_unit_price,
2166                                             p_currency_code            => p_currency_code,
2167                                             p_currency_conversion_type => p_currency_conversion_type,
2168                                             p_currency_conversion_date => p_currency_conversion_date,
2169                                             p_currency_conversion_rate => p_currency_conversion_rate,
2170                                             x_return_status            => l_return_status,
2171                                             x_msg_count                => l_msg_count,
2172                                             x_msg_data                 => l_msg_data);
2173     END;
2174 
2175     -- Standard check of p_commit.
2176     IF FND_API.To_Boolean (p_commit) THEN
2177         COMMIT WORK;
2178     END IF;
2179     -- Standard call to get message count and if count is 1, get message info.
2180     FND_MSG_PUB.Count_And_Get (
2181         p_encoded => L_FND_FALSE,
2182         p_count => x_msg_count,
2183         p_data => x_msg_data) ;
2184     -- Standard End of Procedure/Function Logging
2185     INL_LOGGING_PVT.Log_EndProc (
2186         p_module_name => g_module_name,
2187         p_procedure_name => l_program_name) ;
2188 EXCEPTION
2189 WHEN L_FND_EXC_ERROR THEN
2190     -- Standard Expected Error Logging
2191     INL_LOGGING_PVT.Log_ExpecError (
2192         p_module_name => g_module_name,
2193         p_procedure_name => l_program_name) ;
2194     ROLLBACK TO Check_PoTolerances_PVT;
2195     x_return_status := L_FND_RET_STS_ERROR;
2196     FND_MSG_PUB.Count_And_Get (
2197         p_encoded => L_FND_FALSE,
2198         p_count => x_msg_count,
2199         p_data => x_msg_data) ;
2200 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
2201     -- Standard Unexpected Error Logging
2202     INL_LOGGING_PVT.Log_UnexpecError (
2203         p_module_name => g_module_name,
2204         p_procedure_name => l_program_name) ;
2205     ROLLBACK TO Check_PoTolerances_PVT;
2206     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
2207     FND_MSG_PUB.Count_And_Get (
2208         p_encoded => L_FND_FALSE,
2209         p_count => x_msg_count,
2210         p_data => x_msg_data) ;
2211 WHEN OTHERS THEN
2212     -- Standard Unexpected Error Logging
2213     INL_LOGGING_PVT.Log_UnexpecError (
2214         p_module_name => g_module_name,
2215         p_procedure_name => l_program_name) ;
2216     ROLLBACK TO Check_PoTolerances_PVT;
2217     x_return_status := L_FND_RET_STS_UNEXP_ERROR ;
2218     IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
2219         FND_MSG_PUB.Add_Exc_Msg (
2220             p_pkg_name => g_pkg_name,
2221             p_procedure_name => l_program_name) ;
2222     END IF;
2223     FND_MSG_PUB.Count_And_Get (
2224         p_encoded => L_FND_FALSE,
2225         p_count => x_msg_count,
2226         p_data => x_msg_data) ;
2227 END Check_PoTolerances;
2228 -- /SCM-051
2229 
2230 
2231 
2232 -- API name   : Check_PoTolerances
2233 -- Type       : Private
2234 -- Function   : API for PO Price and Quantity Tolerances validation.
2235 -- Pre-reqs   : None
2236 -- Parameters :
2237 -- IN         : p_api_version              IN NUMBER    Required
2238 --              p_init_msg_list            IN VARCHAR2  Optional  Default = L_FND_FALSE
2239 --              p_commit                   IN VARCHAR2  Optional  Default = L_FND_FALSE
2240 --              p_ship_header_id           IN NUMBER
2241 --              p_ship_line_id             IN NUMBER
2242 --              p_organization_id          IN NUMBER
2243 --              p_ship_line_num            IN NUMBER
2244 --              p_ship_line_src_id         IN NUMBER
2245 --              p_inventory_item_id        IN NUMBER
2246 --              p_primary_qty              IN NUMBER
2247 --              p_primary_uom_code         IN VARCHAR2
2248 --              p_txn_uom_code             IN VARCHAR2
2249 --              p_pri_unit_price           IN NUMBER
2250 --              p_currency_code            IN VARCHAR2
2251 --              p_currency_conversion_type IN VARCHAR2
2252 --              p_currency_conversion_date IN DATE
2253 --              p_currency_conversion_rate IN NUMBER
2254 --
2255 -- OUT          x_return_status     OUT NOCOPY VARCHAR2
2256 --              x_msg_count         OUT NOCOPY   NUMBER
2257 --              x_msg_data          OUT NOCOPY VARCHAR2
2258 --
2259 -- Version    : Current version 1.0
2260 --
2261 -- Notes      :
2262 PROCEDURE Check_PoTolerances(
2263     p_api_version              IN NUMBER,
2264     p_init_msg_list            IN VARCHAR2 := L_FND_FALSE,
2265     p_commit                   IN VARCHAR2 := L_FND_FALSE,
2266     p_ship_header_id           IN NUMBER,
2267     p_ship_line_id             IN NUMBER,
2268     p_organization_id          IN NUMBER,
2269     p_ship_line_num            IN NUMBER,
2270     p_ship_line_src_id         IN NUMBER,
2271     p_inventory_item_id        IN NUMBER,
2272     p_primary_qty              IN NUMBER,
2273     p_primary_uom_code         IN VARCHAR2,
2274     p_txn_uom_code             IN VARCHAR2,
2275     p_pri_unit_price           IN NUMBER,
2276     p_currency_code            IN VARCHAR2,  --BUG#7670307
2277     p_currency_conversion_type IN VARCHAR2,  --BUG#7670307
2278     p_currency_conversion_date IN DATE,      --BUG#7670307
2279     p_currency_conversion_rate IN NUMBER,    --BUG#7670307
2280     x_return_status            OUT NOCOPY VARCHAR2,
2281     x_msg_count                OUT NOCOPY NUMBER,
2282     x_msg_data                 OUT NOCOPY VARCHAR2)
2283 IS
2284     l_program_name    CONSTANT VARCHAR2(30) := 'Check_PoTolerances';
2285     l_api_version CONSTANT NUMBER := 1.0;
2286     l_return_status VARCHAR2(1);
2287     l_msg_count NUMBER;
2288     l_msg_data VARCHAR2(2000);
2289     l_debug_info VARCHAR2(200);
2290     l_return_validation_status VARCHAR2(30); -- SCM-051
2291     l_ship_status_code VARCHAR2(30);
2292 BEGIN
2293     -- Standard Beginning of Procedure/Function Logging
2294     INL_LOGGING_PVT.Log_BeginProc (
2295         p_module_name => g_module_name,
2296         p_procedure_name => l_program_name) ;
2297     -- Standard Start of API savepoint
2298     SAVEPOINT Check_PoTolerances_PVT;
2299     -- Initialize message list if p_init_msg_list is set to TRUE.
2300     IF FND_API.to_Boolean (p_init_msg_list) THEN
2301         FND_MSG_PUB.initialize;
2302     END IF;
2303     -- Check for call compatibility.
2304     IF NOT FND_API.Compatible_API_Call (
2305         l_api_version,
2306         p_api_version,
2307         l_program_name,
2308         G_PKG_NAME
2309     ) THEN
2310         RAISE L_FND_EXC_UNEXPECTED_ERROR;
2311     END IF;
2312     --  Initialize API return status to success
2313     x_return_status := L_FND_RET_STS_SUCCESS;
2314 
2315     INL_LOGGING_PVT.Log_Variable (
2316         p_module_name => g_module_name,
2317         p_procedure_name => l_program_name,
2318         p_var_name => 'p_ship_line_id: ',
2319         p_var_value => p_ship_line_id);
2320     INL_LOGGING_PVT.Log_Variable (
2321         p_module_name => g_module_name,
2322         p_procedure_name => l_program_name,
2323         p_var_name => 'p_ship_header_id: ',
2324         p_var_value => p_ship_header_id);
2325     INL_LOGGING_PVT.Log_Variable (
2326         p_module_name => g_module_name,
2327         p_procedure_name => l_program_name,
2328         p_var_name => 'p_ship_line_src_id: ',
2329         p_var_value => p_ship_line_src_id);
2330 
2331 
2332     l_debug_info := 'Getting Shipment Status Code ';
2333     INL_LOGGING_PVT.Log_Statement (p_module_name => g_module_name,
2334                                    p_procedure_name => l_program_name,
2335                                    p_debug_info => l_debug_info);
2336     --SCM-051 Begin
2337     BEGIN
2338     -- during insert from UI at this point the record has not been posted yet
2339         SELECT ish.ship_status_code
2340           INTO l_ship_status_code
2341           FROM inl_ship_headers_all ish
2342          WHERE ish.ship_header_id = p_ship_header_id;
2343     EXCEPTION
2344         WHEN NO_DATA_FOUND THEN
2345             l_ship_status_code := 'INCOMPLETE';
2346     END;
2347     -- SCM-051 (Check_AvailableQty should only be called for NOT Completed Shipments)
2348     IF l_ship_status_code <> 'COMPLETED' THEN
2349     --SCM-051 End
2350         -- Validate PO Quantity Available
2351         l_debug_info := 'Call Check_AvailableQty';
2352         INL_LOGGING_PVT.Log_Statement (p_module_name => g_module_name,
2353                                        p_procedure_name => l_program_name,
2354                                        p_debug_info => l_debug_info);
2355 
2356         Check_AvailableQty(p_primary_qty             => p_primary_qty,
2357                            p_sum_primary_qty         => NULL,
2358                            p_primary_uom_code        => p_primary_uom_code,
2359                            p_txn_uom_code            => p_txn_uom_code,
2360                            p_inventory_item_id       => p_inventory_item_id,
2361                            p_inv_org_id              => p_organization_id,
2362                            p_ship_line_id            => p_ship_line_id,
2363                            p_ship_line_num           => p_ship_line_num,
2364                            p_ship_line_src_type_code => 'PO',
2365                            p_ship_line_src_id        => p_ship_line_src_id,
2366                            p_same_shiph_id           => p_ship_header_id,
2367                            p_ship_header_id          => p_ship_header_id,
2368                            x_return_status           => l_return_status);
2369 
2370         -- If any errors happen abort the process.
2371         IF l_return_status = L_FND_RET_STS_ERROR THEN
2372             RAISE L_FND_EXC_ERROR;
2373         ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
2374             RAISE L_FND_EXC_UNEXPECTED_ERROR;
2375         END IF;
2376     END IF;
2377 
2378     -- Standard call to get message count and if count is 1, get message info.
2379     FND_MSG_PUB.Count_And_Get (
2380      p_encoded => L_FND_FALSE,
2381      p_count => x_msg_count,
2382      p_data => x_msg_data) ;
2383 
2384     IF x_msg_count = 0 THEN
2385         -- Validate PO Price Tolerance
2386         l_debug_info := 'Call Check_PoPriceTolerance';
2387         INL_LOGGING_PVT.Log_Statement (
2388             p_module_name => g_module_name,
2389             p_procedure_name => l_program_name,
2390             p_debug_info => l_debug_info) ;
2391         Check_PoPriceTolerance(
2392             p_ship_header_id           => p_ship_header_id,
2393             p_ship_line_id             => p_ship_line_id,
2394             p_organization_id          => p_organization_id,
2395             p_ship_line_num            => p_ship_line_num,
2396             p_ship_line_src_id         => p_ship_line_src_id,
2397             p_pri_unit_price           => p_pri_unit_price,
2398             p_primary_uom_code         => p_primary_uom_code,           --BUG#7670307
2399             p_currency_code            => p_currency_code,              --BUG#7670307
2400             p_currency_conversion_type => p_currency_conversion_type,   --BUG#7670307
2401             p_currency_conversion_date => p_currency_conversion_date,   --BUG#7670307
2402             p_currency_conversion_rate => p_currency_conversion_rate,   --BUG#7670307
2403             x_return_validation_status => l_return_validation_status, -- SCM-051
2404             x_return_status            => l_return_status
2405         );
2406         -- If any errors happen abort the process.
2407         IF l_return_status = L_FND_RET_STS_ERROR THEN
2408            RAISE L_FND_EXC_ERROR;
2409         ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
2410            RAISE L_FND_EXC_UNEXPECTED_ERROR;
2411         END IF;
2412     END IF;
2413     -- Standard check of p_commit.
2414     IF FND_API.To_Boolean (p_commit) THEN
2415         COMMIT WORK;
2416     END IF;
2417     -- Standard call to get message count and if count is 1, get message info.
2418     FND_MSG_PUB.Count_And_Get (
2419         p_encoded => L_FND_FALSE,
2420         p_count => x_msg_count,
2421         p_data => x_msg_data) ;
2422     -- Standard End of Procedure/Function Logging
2423     INL_LOGGING_PVT.Log_EndProc (
2424         p_module_name => g_module_name,
2425         p_procedure_name => l_program_name) ;
2426 EXCEPTION
2427 WHEN L_FND_EXC_ERROR THEN
2428     -- Standard Expected Error Logging
2429     INL_LOGGING_PVT.Log_ExpecError (
2430         p_module_name => g_module_name,
2431         p_procedure_name => l_program_name) ;
2432     ROLLBACK TO Check_PoTolerances_PVT;
2433     x_return_status := L_FND_RET_STS_ERROR;
2434     FND_MSG_PUB.Count_And_Get (
2435         p_encoded => L_FND_FALSE,
2436         p_count => x_msg_count,
2437         p_data => x_msg_data) ;
2438 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
2439     -- Standard Unexpected Error Logging
2440     INL_LOGGING_PVT.Log_UnexpecError (
2441         p_module_name => g_module_name,
2442         p_procedure_name => l_program_name) ;
2443     ROLLBACK TO Check_PoTolerances_PVT;
2444     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
2445     FND_MSG_PUB.Count_And_Get (
2446         p_encoded => L_FND_FALSE,
2447         p_count => x_msg_count,
2448         p_data => x_msg_data) ;
2449 WHEN OTHERS THEN
2450     -- Standard Unexpected Error Logging
2451     INL_LOGGING_PVT.Log_UnexpecError (
2452         p_module_name => g_module_name,
2453         p_procedure_name => l_program_name) ;
2454     ROLLBACK TO Check_PoTolerances_PVT;
2455     x_return_status := L_FND_RET_STS_UNEXP_ERROR ;
2456     IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
2457         FND_MSG_PUB.Add_Exc_Msg (
2458             p_pkg_name => g_pkg_name,
2459             p_procedure_name => l_program_name) ;
2460     END IF;
2461     FND_MSG_PUB.Count_And_Get (
2462         p_encoded => L_FND_FALSE,
2463         p_count => x_msg_count,
2464         p_data => x_msg_data) ;
2465 END Check_PoTolerances;
2466 
2467 -- Utility name   : Validate_ChargeLine
2468 -- Type       : Private
2469 -- Function   : Validate Charge Line
2470 -- Pre-reqs   : None
2471 -- Parameters :
2472 -- IN         : p_ship_header_id              IN  NUMBER
2473 --              p_to_parent_table_name        IN  VARCHAR2
2474 --              p_to_parent_table_id          IN  NUMBER
2475 --              p_functional_currency_code    IN  VARCHAR2
2476 --              p_foreign_currency_flag       IN  VARCHAR2
2477 --              p_third_parties_allowed       IN  VARCHAR2
2478 --
2479 -- OUT        : x_ch_line_tot_amt_func_curr   OUT NOCOPY NUMBER
2480 --              x_return_status               OUT NOCOPY VARCHAR2
2481 --
2482 -- Version    : Current version 1.0
2483 --
2484 -- Notes      :
2485 PROCEDURE Validate_ChargeLine (
2486     p_ship_header_id             IN NUMBER,
2487     p_to_parent_table_name       IN VARCHAR2,
2488     p_to_parent_table_id         IN NUMBER,
2489     p_functional_currency_code   IN VARCHAR2,
2490     p_foreign_currency_flag      IN VARCHAR2,
2491     p_third_parties_allowed      IN VARCHAR2,
2492     x_ch_line_tot_amt_func_curr OUT NOCOPY NUMBER,
2493     x_return_status             OUT NOCOPY VARCHAR2
2494 ) IS
2495     l_program_name CONSTANT VARCHAR2 (30) := 'Validate_ChargeLine';
2496     l_debug_info VARCHAR2 (200);
2497     l_return_status VARCHAR2 (1);
2498     CURSOR c_ch_lines IS
2499       SELECT DECODE (cl.currency_code,
2500                      p_functional_currency_code,
2501                      cl.charge_amt,
2502                      cl.charge_amt * cl.currency_conversion_rate) AS ch_line_amt_func_curr,
2503              cl.currency_code,
2504              cl.charge_line_id,
2505              cl.charge_line_num
2506       FROM inl_adj_charge_lines_v cl,
2507            inl_associations assoc
2508       WHERE assoc.from_parent_table_name = 'INL_CHARGE_LINES'
2509       AND assoc.from_parent_table_id = NVL (cl.parent_charge_line_id, cl.charge_line_id)
2510       AND assoc.ship_header_id = p_ship_header_id
2511       AND assoc.to_parent_table_name = p_to_parent_table_name
2512       AND assoc.to_parent_table_id = p_to_parent_table_id
2513       ORDER BY cl.charge_line_num;
2514       l_ch_lines_rec c_ch_lines%ROWTYPE;
2515 BEGIN
2516     INL_LOGGING_PVT.Log_BeginProc ( p_module_name => g_module_name,
2517                                     p_procedure_name => l_program_name) ;
2518     x_return_status := L_FND_RET_STS_SUCCESS;
2519     x_ch_line_tot_amt_func_curr := 0;
2520     FOR l_ch_lines_rec IN c_ch_lines
2521     LOOP
2522         l_debug_info := 'Check Foreign Currency for Charge Line';
2523         INL_LOGGING_PVT.Log_Statement (
2524             p_module_name => g_module_name,
2525             p_procedure_name => l_program_name,
2526             p_debug_info => l_debug_info) ;
2527         IF l_ch_lines_rec.currency_code <> p_functional_currency_code AND p_foreign_currency_flag = 'N' THEN
2528             FND_MESSAGE.SET_NAME ('INL', 'INL_ERR_CHK_FRGN_CUR') ;
2529             FND_MESSAGE.SET_TOKEN ('CLNUM', l_ch_lines_rec.charge_line_num) ;
2530             FND_MSG_PUB.ADD;
2531             -- INCLUDE A LINE IN INL_SHIP_HOLdS
2532             Handle_ShipError (
2533                 p_ship_header_id => p_ship_header_id,
2534                 p_ship_line_id => NULL,
2535                 p_charge_line_id => l_ch_lines_rec.charge_line_id,
2536                 p_table_name => 'INL_CHARGE_LINES',
2537                 p_column_name => 'CURRENCY_CODE',
2538                 p_column_value => l_ch_lines_rec.CURRENCY_CODE,
2539                 p_error_message => SUBSTR (FND_MSG_PUB.Get (
2540                                                 p_msg_index => FND_MSG_PUB.Count_Msg (),
2541                                                 p_encoded => L_FND_FALSE), 1, 2000),
2542                 p_error_message_name => 'INL_ERR_CHK_FRGN_CUR',
2543                 p_token1_name => 'CLNUM',
2544                 p_token1_value => l_ch_lines_rec.charge_line_num,
2545                 p_token2_name => NULL,
2546                 p_token2_value => NULL,
2547                 p_token3_name => NULL,
2548                 p_token3_value => NULL,
2549                 p_token4_name => NULL,
2550                 p_token4_value => NULL,
2551                 p_token5_name => NULL,
2552                 p_token5_value => NULL,
2553                 p_token6_name => NULL,
2554                 p_token6_value => NULL,
2555                 x_return_status => l_return_status) ;
2556             -- If unexpected errors happen abort
2557             IF l_return_status <> L_FND_RET_STS_SUCCESS THEN
2558                 RAISE L_FND_EXC_UNEXPECTED_ERROR;
2559             END IF;
2560         END IF;
2561         -- the flag l_ch_lines_rec.dflt_charge_amt_flag has been removed from table, and the original pkg
2562         -- fas been  changed without the if clause, this is a temporarily wrk proc that will replace the actual
2563         x_ch_line_tot_amt_func_curr := x_ch_line_tot_amt_func_curr + NVL (l_ch_lines_rec.ch_line_amt_func_curr, 0) ;
2564     END LOOP;
2565     INL_LOGGING_PVT.Log_EndProc (
2566         p_module_name => g_module_name,
2567         p_procedure_name => l_program_name) ;
2568 EXCEPTION
2569 WHEN L_FND_EXC_ERROR THEN
2570     -- Standard Expected Error Logging
2571     INL_LOGGING_PVT.Log_ExpecError (
2572         p_module_name => g_module_name,
2573         p_procedure_name => l_program_name) ;
2574     x_return_status := L_FND_RET_STS_ERROR;
2575 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
2576     -- Standard Unexpected Error Logging
2577     INL_LOGGING_PVT.Log_UnexpecError (
2578         p_module_name => g_module_name,
2579         p_procedure_name => l_program_name) ;
2580     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
2581 WHEN OTHERS THEN
2582     -- Standard Unexpected Error Logging
2583     INL_LOGGING_PVT.Log_UnexpecError (
2584         p_module_name => g_module_name,
2585         p_procedure_name => l_program_name) ;
2586     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
2587     IF FND_MSG_PUB.Check_Msg_Level (p_message_level => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
2588         FND_MSG_PUB.Add_Exc_Msg (
2589             p_pkg_name => g_pkg_name,
2590             p_procedure_name => l_program_name) ;
2591     END IF;
2592 END Validate_ChargeLine;
2593 
2594 -- Utility name   : Validate_SrcOperatingUnit
2595 -- Type       : Private
2596 -- Function   : Check whether the Operating Unit from LCM Shipment is
2597 --              the same of the Operating Unit from PO.
2598 -- Pre-reqs   : None
2599 -- Parameters :
2600 -- IN         :  p_ship_header_id IN NUMBER,
2601 --               p_ship_line_id   IN NUMBER,
2602 --               p_ship_line_num  IN NUMBER
2603 --               x_return_status  IN OUT NOCOPY VARCHAR2
2604 --
2605 -- Version    : Current version 1.0
2606 --
2607 -- Notes      :
2608 PROCEDURE Validate_SrcOperatingUnit(
2609     p_ship_header_id IN NUMBER,
2610     p_ship_line_id    IN NUMBER,
2611     p_ship_line_num   IN NUMBER,
2612     x_return_status   IN OUT NOCOPY VARCHAR2
2613 ) IS
2614   l_program_name VARCHAR2 (200) := 'Validate_SrcOperatingUnit';
2615   l_return_status VARCHAR2 (1) := L_FND_RET_STS_SUCCESS;
2616   l_lcm_org_id NUMBER;
2617   l_po_org_id NUMBER;
2618   l_lcm_org_name VARCHAR2(240);
2619   l_po_org_name VARCHAR2(240);
2620 BEGIN
2621     INL_LOGGING_PVT.Log_BeginProc (
2622         p_module_name => g_module_name,
2623         p_procedure_name => l_program_name);
2624     SELECT ish.org_id LCM_ORG_ID,
2625            ph.org_id PO_ORG_ID
2626      INTO  l_lcm_org_id,
2627            l_po_org_id
2628      FROM  inl_ship_headers_all ish,
2629            inl_ship_lines_all isl,
2630            po_headers_all ph,
2631            po_line_locations_all pll
2632      WHERE isl.ship_header_id = ish.ship_header_id
2633        AND ph.po_header_id = pll.po_header_id
2634        AND pll.line_location_id = isl.ship_line_source_id
2635        AND isl.ship_line_src_type_code = 'PO'
2636        AND ish.ship_header_id = p_ship_header_id
2637        AND isl.ship_line_id = p_ship_line_id;
2638     -- The Operating Unit from LCM Shipment must not be
2639     -- different from the Operating Unit from PO.
2640     IF l_lcm_org_id <> l_po_org_id THEN
2641         -- Get LCM Op Unit Name
2642         SELECT NAME
2643           INTO l_lcm_org_name
2644           FROM hr_operating_units
2645          WHERE organization_id = l_lcm_org_id;
2646          -- Get PO Op Unit Name
2647          SELECT NAME
2648           INTO l_po_org_name
2649           FROM hr_operating_units
2650          WHERE organization_id = l_po_org_id;
2651         FND_MESSAGE.SET_NAME ('INL', 'INL_ERR_INVALID_SRC_OPUNIT') ;
2652         FND_MESSAGE.SET_TOKEN ('SHIPLN_NUM', p_ship_line_num) ;
2653         FND_MESSAGE.SET_TOKEN ('LCM_OPUNIT', l_lcm_org_name) ;
2654         FND_MESSAGE.SET_TOKEN ('PO_OPUNIT', l_po_org_name) ;
2655         FND_MSG_PUB.ADD;
2656         -- INCLUDE A LINE IN INL_SHIP_HOLdS
2657         Handle_ShipError (
2658             p_ship_header_id => p_ship_header_id,
2659             p_ship_line_id => p_ship_line_id,
2660             p_charge_line_id => NULL,
2661             p_table_name => 'INL_SHIP_HEADERS',
2662             p_column_name => 'ORG_ID',
2663             p_column_value => 0,
2664             p_error_message => SUBSTR (FND_MSG_PUB.Get (
2665                                             p_msg_index => FND_MSG_PUB.Count_Msg (),
2666                                             p_encoded => L_FND_FALSE), 1, 2000),
2667             p_error_message_name => 'INL_ERR_INVALID_SRC_OPUNIT',
2668             p_token1_name => 'SHIPLN_NUM',
2669             p_token1_value => p_ship_line_num,
2670             p_token2_name => 'LCM_OPUNIT',
2671             p_token2_value => l_lcm_org_name,
2672             p_token3_name => 'PO_OPUNIT',
2673             p_token3_value => l_po_org_name,
2674             p_token4_name => NULL,
2675             p_token4_value => NULL,
2676             p_token5_name => NULL,
2677             p_token5_value => NULL,
2678             p_token6_name => NULL,
2679             p_token6_value => NULL,
2680             x_return_status => l_return_status);
2681         -- If unexpected errors happen abort
2682         IF l_return_status <> L_FND_RET_STS_SUCCESS THEN
2683           RAISE L_FND_EXC_UNEXPECTED_ERROR;
2684         END IF;
2685     END IF;
2686     INL_LOGGING_PVT.Log_EndProc (
2687         p_module_name => g_module_name,
2688         p_procedure_name => l_program_name) ;
2689 EXCEPTION
2690 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
2691     -- Standard Unexpected Error Logging
2692     INL_LOGGING_PVT.Log_UnexpecError (
2693         p_module_name => g_module_name,
2694         p_procedure_name => l_program_name) ;
2695     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
2696 WHEN OTHERS THEN
2697     -- Standard Unexpected Error Logging
2698     INL_LOGGING_PVT.Log_UnexpecError (
2699         p_module_name => g_module_name,
2700         p_procedure_name => l_program_name) ;
2701     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
2702     IF FND_MSG_PUB.Check_Msg_Level (p_message_level  => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
2703         FND_MSG_PUB.Add_Exc_Msg (
2704             p_pkg_name => g_pkg_name,
2705             p_procedure_name => l_program_name) ;
2706     END IF;
2707 END Validate_SrcOperatingUnit;
2708 -- Utility name   : Validate_ThirdPartySiteAllowed
2709 -- Type       : Private
2710 -- Function   : Check whether the Third Patry Site from LCM Shipment is
2711 --              following the setup.
2712 -- Pre-reqs   : None
2713 -- Parameters :
2714 -- IN         :  p_ship_header_id        IN NUMBER,
2715 --               p_ship_type_id          IN NUMBER,
2716 --               p_ship_type_code        IN VARCHAR2,
2717 --               p_group_reference       IN VARCHAR2,
2718 --               p_party_site_id         IN NUMBER,
2719 --               p_taxation_country      IN VARCHAR2,
2720 --               p_third_parties_allowed IN VARCHAR2,
2721 --               x_return_status         IN OUT NOCOPY VARCHAR2
2722 --
2723 -- Version    : Current version 1.0
2724 --
2725 -- Notes      :
2726 PROCEDURE Validate_ThirdPartySiteAllowed(
2727     p_ship_header_id        IN NUMBER,
2728     p_ship_type_code        IN VARCHAR2,
2729     p_group_reference       IN VARCHAR2,
2730     p_party_site_id         IN NUMBER,
2731     p_party_site_name       IN VARCHAR2,
2732     p_taxation_country      IN VARCHAR2,
2733     p_third_parties_allowed IN VARCHAR2,
2734     x_return_status         IN OUT NOCOPY VARCHAR2
2735 ) IS
2736   l_program_name VARCHAR2 (200) := 'Validate_ThirdPartyAllowed';
2737   l_return_status VARCHAR2 (1) := L_FND_RET_STS_SUCCESS;
2738   l_party_site_id NUMBER;
2739 BEGIN
2740     INL_LOGGING_PVT.Log_BeginProc (
2741         p_module_name => g_module_name,
2742         p_procedure_name => l_program_name);
2743     INL_LOGGING_PVT.Log_Variable (
2744         p_module_name => g_module_name,
2745         p_procedure_name => l_program_name,
2746         p_var_name => 'p_ship_type_code: ',
2747         p_var_value => p_ship_type_code);
2748     INL_LOGGING_PVT.Log_Variable (
2749         p_module_name => g_module_name,
2750         p_procedure_name => l_program_name,
2751         p_var_name => 'p_party_site_id: ',
2752         p_var_value => p_party_site_id);
2753     INL_LOGGING_PVT.Log_Variable (
2754         p_module_name => g_module_name,
2755         p_procedure_name => l_program_name,
2756         p_var_name => 'p_taxation_country: ',
2757         p_var_value => p_taxation_country);
2758     INL_LOGGING_PVT.Log_Variable (
2759         p_module_name => g_module_name,
2760         p_procedure_name => l_program_name,
2761         p_var_name => 'p_third_parties_allowed: ',
2762         p_var_value => p_third_parties_allowed);
2763     BEGIN
2764       SELECT hps.party_site_id
2765       INTO   l_party_site_id
2766       FROM   hz_party_sites   hps,
2767              hz_locations     hl
2768       WHERE hps.location_id = hl.location_id
2769       AND   hps.party_site_id = p_party_site_id
2770       AND  ((p_third_parties_allowed = 1
2771       AND   hl.country = p_taxation_country )
2772       OR   (p_third_parties_allowed = 2
2773       AND   hl.country <> p_taxation_country )
2774       OR   ( p_third_parties_allowed = 3 ));
2775     EXCEPTION
2776       WHEN NO_DATA_FOUND THEN
2777         FND_MESSAGE.SET_NAME ('INL', 'INL_ERR_3RD_PTY_ST_ALLOWED') ;
2778         FND_MESSAGE.SET_TOKEN ('GROUP_REF', p_group_reference) ;
2779         FND_MESSAGE.SET_TOKEN ('PARTY_SITE', p_party_site_name) ;
2780         FND_MESSAGE.SET_TOKEN ('SHIP_TYPE', p_ship_type_code) ;
2781         FND_MSG_PUB.ADD;
2782         -- INCLUDE A LINE IN INL_SHIP_HOLDS
2783         Handle_ShipError (
2784             p_ship_header_id => p_ship_header_id,
2785             p_ship_line_id => NULL,
2786             p_charge_line_id => NULL,
2787             p_table_name => 'INL_SHIP_LINE_GROUPS',
2788             p_column_name => 'PARTY_SITE_ID',
2789             p_column_value => p_party_site_id,
2790             p_error_message => SUBSTR (FND_MSG_PUB.Get (
2791                                         p_msg_index => FND_MSG_PUB.Count_Msg (),
2792                                         p_encoded => L_FND_FALSE), 1, 2000),
2793             p_error_message_name => 'INL_ERR_3RD_PTY_ST_ALLOWED',
2794             p_token1_name => 'GROUP_REF',
2795             p_token1_value => p_group_reference,
2796             p_token2_name => 'PARTY_SITE',
2797             p_token2_value => p_party_site_id,
2798             p_token3_name => 'SHIP_TYPE',
2799             p_token3_value => p_ship_type_code,
2800             p_token4_name => NULL,
2801             p_token4_value => NULL,
2802             p_token5_name => NULL,
2803             p_token5_value => NULL,
2804             p_token6_name => NULL,
2805             p_token6_value => NULL,
2806             x_return_status => l_return_status);
2807         -- If unexpected errors happen abort
2808         IF l_return_status <> L_FND_RET_STS_SUCCESS THEN
2809           RAISE L_FND_EXC_UNEXPECTED_ERROR;
2810         END IF;
2811     END;
2812     INL_LOGGING_PVT.Log_EndProc (
2813         p_module_name => g_module_name,
2814         p_procedure_name => l_program_name) ;
2815 EXCEPTION
2816 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
2817     -- Standard Unexpected Error Logging
2818     INL_LOGGING_PVT.Log_UnexpecError (
2819         p_module_name => g_module_name,
2820         p_procedure_name => l_program_name) ;
2821     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
2822 WHEN OTHERS THEN
2823     -- Standard Unexpected Error Logging
2824     INL_LOGGING_PVT.Log_UnexpecError (
2825         p_module_name => g_module_name,
2826         p_procedure_name => l_program_name) ;
2827     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
2828     IF FND_MSG_PUB.Check_Msg_Level (p_message_level  => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
2829         FND_MSG_PUB.Add_Exc_Msg (
2830             p_pkg_name => g_pkg_name,
2831             p_procedure_name => l_program_name) ;
2832     END IF;
2833 END Validate_ThirdPartySiteAllowed;
2834 
2835 -- Utility name   : Validate_LineGroup
2836 -- Type       : Private
2837 -- Function   : Validate Line Group
2838 -- Pre-reqs   : None
2839 -- Parameters :
2840 -- IN         : p_ship_header_id        IN NUMBER,
2841 --              p_ship_type_code        IN VARCHAR2,
2842 --              p_inv_org_id            IN NUMBER  -- Bug 15956572
2843 --              p_ln_group_id           IN NUMBER,
2844 --              p_ln_group_num          IN NUMBER, --Bug#13987019
2845 --              p_group_reference       IN  VARCHAR2,
2846 --              p_party_id              IN NUMBER, --Bug#13987019
2847 --              p_party_site_id         IN NUMBER,
2848 --              p_party_site_name       IN VARCHAR2,
2849 --              p_taxation_country      IN VARCHAR2,
2850 --              p_third_parties_allowed IN VARCHAR2,
2851 --
2852 -- OUT        : x_return_status                OUT NOCOPY VARCHAR2
2853 --
2854 -- Version    : Current version 1.0
2855 --
2856 -- Notes      :
2857 PROCEDURE Validate_LineGroup(
2858     p_ship_header_id        IN NUMBER,
2859     p_ship_type_code        IN VARCHAR2,
2860     p_inv_org_id            IN NUMBER, -- Bug 15956572
2861     p_ln_group_id           IN NUMBER,
2862     p_ln_group_num          IN NUMBER, --Bug#13987019
2863     p_group_reference       IN VARCHAR2,
2864     p_party_id              IN NUMBER, --Bug#13987019
2865     p_party_site_id         IN NUMBER,
2866     p_party_site_name       IN VARCHAR2,
2867     p_taxation_country      IN VARCHAR2,
2868     p_third_parties_allowed IN VARCHAR2,
2869     x_return_status         OUT NOCOPY VARCHAR2
2870 ) IS
2871     l_program_name CONSTANT VARCHAR2 (30) := 'Validate_LineGroup';
2872     l_return_status VARCHAR2 (1)  := L_FND_RET_STS_SUCCESS;
2873     l_debug_info VARCHAR2 (200);
2874     l_pre_receive VARCHAR2 (1) ; -- Bug 15956572
2875 
2876     --Bug#13987019 beg
2877     CURSOR c_sl_parties is
2878     SELECT
2879         ph.vendor_id,
2880         ph.vendor_site_id,
2881         pv.party_id,
2882         pvs.party_site_id,
2883         hps.party_site_name,
2884         pv.vendor_name,
2885         pvs.vendor_site_code,
2886         COUNT(*) how_many,
2887         MAX(sl.ship_line_num) max_ship_line_num
2888     FROM
2889         inl_ship_lines_all sl,
2890         po_headers_all ph,
2891         po_line_locations_all pll,
2892         po_vendors pv,
2893         po_vendor_sites_all pvs,
2894         hz_party_sites hps
2895     WHERE
2896         ph.po_header_id = pll.po_header_id
2897     AND hps.party_site_id = pvs.party_site_id
2898     AND pll.line_location_id = sl.ship_line_source_id
2899     AND pv.vendor_id = ph.vendor_id
2900     AND pvs.vendor_site_id = ph.vendor_site_id
2901     AND sl.ship_header_id = p_ship_header_id
2902     AND sl.ship_line_group_id  = p_ln_group_id
2903     GROUP BY
2904         ph.vendor_id,
2905         ph.vendor_site_id,
2906         pv.party_id,
2907         pvs.party_site_id,
2908         hps.party_site_name,
2909         pv.vendor_name,
2910         pvs.vendor_site_code
2911     ORDER BY 1,2
2912     ;
2913     TYPE sl_parties_Tp
2914     IS
2915         TABLE OF c_sl_parties%ROWTYPE;
2916     l_sl_parties_lst sl_parties_Tp;
2917 
2918     CURSOR c_sl_num (pc_party_site_id NUMBER) is
2919     SELECT
2920         sl.ship_line_num
2921     FROM
2922         inl_ship_lines_all sl,
2923         po_headers_all ph,
2924         po_line_locations_all pll,
2925         po_vendors pv,
2926         po_vendor_sites_all pvs,
2927         hz_party_sites hps
2928     WHERE
2929         ph.po_header_id = pll.po_header_id
2930     AND hps.party_site_id = pvs.party_site_id
2931     AND pll.line_location_id = sl.ship_line_source_id
2932     AND pv.vendor_id = ph.vendor_id
2933     AND pvs.vendor_site_id = ph.vendor_site_id
2934     AND sl.ship_header_id = p_ship_header_id
2935     AND sl.ship_line_group_id  = p_ln_group_id
2936     AND pvs.party_site_id = pc_party_site_id
2937     ORDER BY 1
2938     ;
2939     TYPE sl_num_Tp
2940     IS
2941         TABLE OF c_sl_num%ROWTYPE;
2942     l_sl_num_lst sl_num_Tp;
2943 
2944     l_vendor_record rcv_shipment_header_sv.vendorrectype;
2945     l_vendor_site_record rcv_shipment_header_sv.VendorSiteRecType;
2946     l_prev_party_id NUMBER;
2947     l_msg VARCHAR2(30);
2948     l_ln_num VARCHAR2(200);
2949     --Bug#13987019 end
2950 BEGIN
2951     INL_LOGGING_PVT.Log_BeginProc (
2952         p_module_name     => g_module_name,
2953         p_procedure_name  => l_program_name) ;
2954     x_return_status := L_FND_RET_STS_SUCCESS;
2955     INL_LOGGING_PVT.Log_Variable (
2956         p_module_name => g_module_name,
2957         p_procedure_name => l_program_name,
2958         p_var_name => 'p_ship_type_code',
2959         p_var_value => p_ship_type_code);
2960     INL_LOGGING_PVT.Log_Variable (
2961         p_module_name => g_module_name,
2962         p_procedure_name => l_program_name,
2963         p_var_name => 'p_ln_group_num',
2964         p_var_value => p_ln_group_num);
2965     INL_LOGGING_PVT.Log_Variable (
2966         p_module_name => g_module_name,
2967         p_procedure_name => l_program_name,
2968         p_var_name => 'p_ln_group_id',
2969         p_var_value => p_ln_group_id);
2970     INL_LOGGING_PVT.Log_Variable (
2971         p_module_name => g_module_name,
2972         p_procedure_name => l_program_name,
2973         p_var_name => 'p_group_reference',
2974         p_var_value => p_group_reference);
2975     INL_LOGGING_PVT.Log_Variable (
2976         p_module_name => g_module_name,
2977         p_procedure_name => l_program_name,
2978         p_var_name => 'p_party_id',
2979         p_var_value => p_party_id);
2980     INL_LOGGING_PVT.Log_Variable (
2981         p_module_name => g_module_name,
2982         p_procedure_name => l_program_name,
2983         p_var_name => 'p_party_site_id',
2984         p_var_value => p_party_site_id);
2985     INL_LOGGING_PVT.Log_Variable (
2986         p_module_name => g_module_name,
2987         p_procedure_name => l_program_name,
2988         p_var_name => 'p_party_site_name',
2989         p_var_value => p_party_site_name);
2990     INL_LOGGING_PVT.Log_Variable (
2991         p_module_name => g_module_name,
2992         p_procedure_name => l_program_name,
2993         p_var_name => 'p_taxation_country',
2994         p_var_value => p_taxation_country);
2995     INL_LOGGING_PVT.Log_Variable (
2996         p_module_name => g_module_name,
2997         p_procedure_name => l_program_name,
2998         p_var_name => 'p_third_parties_allowed',
2999         p_var_value => p_third_parties_allowed);
3000 
3001     -- Bug 15956572
3002     -- Just validate Third Party Allowed for Pre-Receiving Organizations
3003     SELECT pre_receive
3004       INTO l_pre_receive
3005       FROM rcv_parameters
3006      WHERE organization_id = p_inv_org_id;
3007     -- /Bug 15956572
3008 
3009     INL_LOGGING_PVT.Log_Variable (
3010         p_module_name => g_module_name,
3011         p_procedure_name => l_program_name,
3012         p_var_name => 'l_pre_receive',
3013         p_var_value => l_pre_receive);
3014 
3015     IF (NVL (l_pre_receive, 'N') = 'Y') THEN  -- Bug 15956572
3016         l_debug_info := 'Validate Third Party Allowed. Call Validate_ThirdPartyAllowed (Group)';
3017         INL_LOGGING_PVT.Log_Statement (
3018             p_module_name     => g_module_name,
3019             p_procedure_name  => l_program_name,
3020             p_debug_info      => l_debug_info) ;
3021         Validate_ThirdPartySiteAllowed(
3022             p_ship_header_id        => p_ship_header_id,
3023             p_ship_type_code        => p_ship_type_code,
3024             p_group_reference       => p_group_reference,
3025             p_party_site_id         => p_party_site_id,
3026             p_party_site_name       => p_party_site_name,
3027             p_taxation_country      => p_taxation_country,
3028             p_third_parties_allowed => p_third_parties_allowed,
3029             x_return_status         => l_return_status);
3030         -- If unexpected errors happen abort API
3031         IF l_return_status   = L_FND_RET_STS_ERROR THEN
3032           x_return_status := l_return_status;
3033           RAISE L_FND_EXC_ERROR;
3034         ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
3035           x_return_status  := l_return_status;
3036           RAISE L_FND_EXC_UNEXPECTED_ERROR;
3037         END IF;
3038     END IF; -- Bug 15956572
3039 
3040 --Bug#13987019 BEG
3041     --Verifying the party and vendor of all lines (PO)
3042     INL_LOGGING_PVT.Log_Statement (
3043         p_module_name     => g_module_name,
3044         p_procedure_name  => l_program_name,
3045         p_debug_info      => 'Verifying the party and vendor of all lines (PO)') ;
3046 
3047     OPEN c_sl_parties;
3048     FETCH c_sl_parties BULK COLLECT INTO l_sl_parties_lst;
3049     CLOSE c_sl_parties;
3050     l_debug_info := l_sl_parties_lst.LAST||' lines have been retrieved.';
3051     INL_LOGGING_PVT.Log_Statement (
3052         p_module_name => g_module_name,
3053         p_procedure_name => l_program_name,
3054         p_debug_info => l_debug_info
3055     ) ;
3056     IF NVL (l_sl_parties_lst.LAST, 0) > 0 THEN
3057         FOR i IN NVL (l_sl_parties_lst.FIRST, 0) ..NVL (l_sl_parties_lst.LAST, 0)
3058         LOOP
3059             INL_LOGGING_PVT.Log_Variable (
3060                 p_module_name => g_module_name,
3061                 p_procedure_name => l_program_name,
3062                 p_var_name => 'l_sl_parties_lst(i)',
3063                 p_var_value => i);
3064             IF l_sl_parties_lst(i).party_id <> p_party_id THEN
3065                 IF l_sl_parties_lst(i).party_id <> NVL(l_prev_party_id,-1)
3066                 THEN
3067                     l_prev_party_id:= l_sl_parties_lst(i).party_id;
3068                     FND_MESSAGE.SET_NAME ('INL', 'INL_ERR_CHK_VEN_INV') ;
3069                     FND_MESSAGE.SET_TOKEN ('P_LN_GROUP_NUM', p_ln_group_num) ;
3070                     FND_MESSAGE.SET_TOKEN ('P_VENDOR_NAME', l_sl_parties_lst(i).vendor_name) ;
3071                     FND_MSG_PUB.ADD;
3072 
3073                     Handle_ShipError (
3074                         p_ship_header_id   => p_ship_header_id,
3075                         p_ship_line_id     => NULL,
3076                         p_charge_line_id   => NULL,
3077                         p_table_name       => 'INL_SHIP_LINE_GROUPS',
3078                         p_column_name      => 'PARTY_ID',
3079                         p_column_value     => p_party_id,
3080                         p_error_message    => SUBSTR (FND_MSG_PUB.Get (
3081                                                     p_msg_index => FND_MSG_PUB.Count_Msg (),
3082                                                     p_encoded => L_FND_FALSE), 1, 2000),
3083                         p_error_message_name => 'INL_ERR_CHK_VEN_INV',
3084                         p_token1_name      => 'P_LN_GROUP_NUM',
3085                         p_token1_value     => p_ln_group_num,
3086                         p_token2_name      => 'P_VENDOR_NAME',
3087                         p_token2_value     => l_sl_parties_lst(i).vendor_name,
3088                         p_token3_name      => NULL,
3089                         p_token3_value     => NULL,
3090                         p_token4_name      => NULL,
3091                         p_token4_value     => NULL,
3092                         p_token5_name      => NULL,
3093                         p_token5_value     => NULL,
3094                         p_token6_name      => NULL,
3095                         p_token6_value     => NULL,
3096                         x_return_status    => l_return_status);
3097                     -- If unexpected errors happen abort
3098                     IF l_return_status <> L_FND_RET_STS_SUCCESS THEN
3099                       RAISE L_FND_EXC_UNEXPECTED_ERROR;
3100                     END IF;
3101                 END IF;
3102             ELSE
3103                 IF l_sl_parties_lst(i).party_id <> NVL(l_prev_party_id,-1)
3104                 THEN
3105                     l_prev_party_id:= l_sl_parties_lst(i).party_id;
3106 -- Based on rcv_roi_header.validate_vendor_info  CHECKING VENDOR  BEG
3107                     INL_LOGGING_PVT.Log_Statement (
3108                         p_module_name     => g_module_name,
3109                         p_procedure_name  => l_program_name,
3110                         p_debug_info      => 'Checking Vendor: '||l_sl_parties_lst(i).vendor_name) ;
3111 
3112                     IF  l_sl_parties_lst(i).vendor_name  IS NULL
3113                     AND l_sl_parties_lst(i).vendor_id    IS NULL
3114                     THEN
3115                         l_vendor_record.error_record.error_status   := 'E';
3116                         l_vendor_record.error_record.error_message  := 'TBD';
3117 
3118                         INL_LOGGING_PVT.Log_Statement (
3119                             p_module_name     => g_module_name,
3120                             p_procedure_name  => l_program_name,
3121                             p_debug_info      => 'Vendor ID and Vendor Name is null') ;
3122 
3123                     ELSE
3124                         l_vendor_record.vendor_name                   := l_sl_parties_lst(i).vendor_name;
3125                         l_vendor_record.vendor_num                    := NULL;
3126                         l_vendor_record.vendor_id                     := l_sl_parties_lst(i).vendor_id;
3127                         l_vendor_record.error_record.error_status     := NULL;
3128                         l_vendor_record.error_record.error_message    := NULL;
3129 
3130                         INL_LOGGING_PVT.Log_Variable (
3131                             p_module_name => g_module_name,
3132                             p_procedure_name => l_program_name,
3133                             p_var_name => 'l_vendor_record.vendor_name',
3134                             p_var_value => l_vendor_record.vendor_name);
3135 
3136                         INL_LOGGING_PVT.Log_Variable (
3137                             p_module_name => g_module_name,
3138                             p_procedure_name => l_program_name,
3139                             p_var_name => 'l_vendor_record.vendor_id',
3140                             p_var_value => l_vendor_record.vendor_id);
3141 
3142                         INL_LOGGING_PVT.Log_Statement (
3143                             p_module_name     => g_module_name,
3144                             p_procedure_name  => l_program_name,
3145                             p_debug_info      => 'Calling po_vendors_sv.validate_vendor_info') ;
3146 
3147                         po_vendors_sv.validate_vendor_info(l_vendor_record);
3148 
3149                         INL_LOGGING_PVT.Log_Variable (
3150                             p_module_name => g_module_name,
3151                             p_procedure_name => l_program_name,
3152                             p_var_name => 'l_vendor_record.error_record.error_status',
3153                             p_var_value => l_vendor_record.error_record.error_status);
3154 
3155                         INL_LOGGING_PVT.Log_Variable (
3156                             p_module_name => g_module_name,
3157                             p_procedure_name => l_program_name,
3158                             p_var_name => 'l_vendor_record.error_record.error_message',
3159                             p_var_value => l_vendor_record.error_record.error_message);
3160 
3161                     END IF;
3162                     IF l_vendor_record.error_record.error_status = 'E' THEN
3163                         IF l_vendor_record.error_record.error_message = 'VEN_DISABLED' THEN
3164                             l_msg:= 'INL_ERR_CHK_VEN_DIS';
3165                         ELSIF l_vendor_record.error_record.error_message = 'VEN_HOLD' THEN
3166                             l_msg:= 'INL_ERR_CHK_VEN_HLD';
3167                         ELSE -- 'VEN_ID','TOOMANYROWS'
3168                             l_msg:= 'INL_ERR_CHK_VEN_INV';
3169                         END IF;
3170                         INL_LOGGING_PVT.Log_Variable (
3171                             p_module_name => g_module_name,
3172                             p_procedure_name => l_program_name,
3173                             p_var_name => 'l_msg',
3174                             p_var_value => l_msg);
3175 
3176                         FND_MESSAGE.SET_NAME ('INL', l_msg) ;
3177                         FND_MESSAGE.SET_TOKEN ('P_LN_GROUP_NUM', p_ln_group_num) ;
3178                         FND_MESSAGE.SET_TOKEN ('P_VENDOR_NAME', l_sl_parties_lst(i).vendor_name) ;
3179                         FND_MSG_PUB.ADD;
3180 
3181                         Handle_ShipError (
3182                             p_ship_header_id   => p_ship_header_id,
3183                             p_ship_line_id     => NULL,
3184                             p_charge_line_id   => NULL,
3185                             p_table_name       => 'INL_SHIP_LINE_GROUPS',
3186                             p_column_name      => 'PARTY_ID',
3187                             p_column_value     => p_party_id,
3188                             p_error_message    => SUBSTR (FND_MSG_PUB.Get (
3189                                                         p_msg_index => FND_MSG_PUB.Count_Msg (),
3190                                                         p_encoded => L_FND_FALSE), 1, 2000),
3191                             p_error_message_name => l_msg,
3192                             p_token1_name      => 'P_LN_GROUP_NUM',
3193                             p_token1_value     => p_ln_group_num,
3194                             p_token2_name      => 'P_VENDOR_NAME',
3195                             p_token2_value     => l_sl_parties_lst(i).vendor_name,
3196                             p_token3_name      => NULL,
3197                             p_token3_value     => NULL,
3198                             p_token4_name      => NULL,
3199                             p_token4_value     => NULL,
3200                             p_token5_name      => NULL,
3201                             p_token5_value     => NULL,
3202                             p_token6_name      => NULL,
3203                             p_token6_value     => NULL,
3204                             x_return_status    => l_return_status);
3205                         -- If unexpected errors happen abort
3206                         IF l_return_status <> L_FND_RET_STS_SUCCESS THEN
3207                           RAISE L_FND_EXC_UNEXPECTED_ERROR;
3208                         END IF;
3209                     END IF;
3210                 END IF;
3211 -- Based on rcv_roi_header.validate_vendor_info END
3212 -- Based on rcv_roi_header.validate_vendor_site_info:  checking vendor site  BEG
3213 
3214                 INL_LOGGING_PVT.Log_Statement (
3215                     p_module_name     => g_module_name,
3216                     p_procedure_name  => l_program_name,
3217                     p_debug_info      => 'Checking Vendor Site: '||l_sl_parties_lst(i).vendor_site_code) ;
3218 
3219                 IF l_sl_parties_lst(i).party_site_id <> p_party_site_id THEN
3220                     l_debug_info := 'Validate Third Party Allowed (PO). Call Validate_ThirdPartyAllowed:'||l_sl_parties_lst(i).party_site_name;
3221                     INL_LOGGING_PVT.Log_Statement (
3222                         p_module_name     => g_module_name,
3223                         p_procedure_name  => l_program_name,
3224                         p_debug_info      => l_debug_info) ;
3225                     Validate_ThirdPartySiteAllowed(
3226                         p_ship_header_id        => p_ship_header_id,
3227                         p_ship_type_code        => p_ship_type_code,
3228                         p_group_reference       => p_group_reference,
3229                         p_party_site_id         => l_sl_parties_lst(i).party_site_id,
3230                         p_party_site_name       => l_sl_parties_lst(i).party_site_name,
3231                         p_taxation_country      => p_taxation_country,
3232                         p_third_parties_allowed => p_third_parties_allowed,
3233                         x_return_status         => l_return_status);
3234                     -- If unexpected errors happen abort API
3235                     IF l_return_status   = L_FND_RET_STS_ERROR THEN
3236                       x_return_status := l_return_status;
3237                       RAISE L_FND_EXC_ERROR;
3238                     ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
3239                       x_return_status  := l_return_status;
3240                       RAISE L_FND_EXC_UNEXPECTED_ERROR;
3241                     END IF;
3242                 END IF;
3243 
3244                 l_vendor_site_record.vendor_site_code            := NULL;
3245                 l_vendor_site_record.vendor_id                   := l_sl_parties_lst(i).vendor_id;
3246                 l_vendor_site_record.vendor_site_id              := l_sl_parties_lst(i).vendor_site_id;
3247                 l_vendor_site_record.organization_id             := NULL;
3248                 l_vendor_site_record.error_record.error_status   := NULL;
3249                 l_vendor_site_record.error_record.error_message  := NULL;
3250 
3251                 INL_LOGGING_PVT.Log_Variable (
3252                     p_module_name => g_module_name,
3253                     p_procedure_name => l_program_name,
3254                     p_var_name => 'l_vendor_site_record.vendor_site_id',
3255                     p_var_value => l_vendor_site_record.vendor_site_id);
3256 
3257                 INL_LOGGING_PVT.Log_Statement (
3258                     p_module_name     => g_module_name,
3259                     p_procedure_name  => l_program_name,
3260                     p_debug_info      => 'Calling po_vendor_sites_sv.validate_vendor_site_info') ;
3261 
3262                 po_vendor_sites_sv.validate_vendor_site_info(l_vendor_site_record);
3263 
3264                 INL_LOGGING_PVT.Log_Variable (
3265                     p_module_name => g_module_name,
3266                     p_procedure_name => l_program_name,
3267                     p_var_name => 'l_vendor_site_record.error_record.error_status',
3268                     p_var_value => l_vendor_site_record.error_record.error_status);
3269 
3270                 INL_LOGGING_PVT.Log_Variable (
3271                     p_module_name => g_module_name,
3272                     p_procedure_name => l_program_name,
3273                     p_var_name => 'l_vendor_site_record.error_record.error_message',
3274                     p_var_value => l_vendor_site_record.error_record.error_message);
3275 
3276                 IF l_vendor_site_record.error_record.error_status = 'E'
3277                 THEN
3278 
3279                     IF l_vendor_site_record.error_record.error_message = 'VEN_SITE_HOLD_PMT' THEN
3280                         NULL;
3281                     ELSIF l_vendor_site_record.error_record.error_message = 'VEN_SITE_NOT_POR_SITE' THEN
3282                         NULL;
3283                     ELSIF l_vendor_site_record.error_record.error_message = 'VEN_SITE_ID' THEN
3284                         NULL;
3285                     ELSE
3286                         IF l_vendor_site_record.error_record.error_message = 'VEN_SITE_DISABLED' THEN
3287                             l_msg:= 'INL_ERR_CHK_VEN_SITE_DIS';
3288                         ELSIF l_vendor_site_record.error_record.error_message = 'VEN_SITE_NOT_PURCH' THEN
3289                             l_msg:= 'INL_ERR_CHK_VEN_SITE_NP';
3290                         ELSE
3291                             l_msg:= 'INL_ERR_CHK_VEN_SITE_INV';
3292                         END IF;
3293                         INL_LOGGING_PVT.Log_Variable (
3294                             p_module_name => g_module_name,
3295                             p_procedure_name => l_program_name,
3296                             p_var_name => 'l_msg',
3297                             p_var_value => l_msg);
3298 
3299                         IF l_sl_parties_lst(i).how_many = 1 THEN
3300                             l_ln_num:= l_sl_parties_lst(i).max_ship_line_num;
3301                         ELSIF l_sl_parties_lst(i).how_many > 1 THEN
3302                             --Getting the affected lines
3303                             INL_LOGGING_PVT.Log_Statement (
3304                                 p_module_name     => g_module_name,
3305                                 p_procedure_name  => l_program_name,
3306                                 p_debug_info      => 'Getting the affected lines') ;
3307 
3308                             l_ln_num:=NULL;
3309                             OPEN c_sl_num (l_sl_parties_lst(i).party_site_id);
3310                             FETCH c_sl_num BULK COLLECT INTO l_sl_num_lst;
3311                             CLOSE c_sl_num;
3312                             l_debug_info := l_sl_num_lst.LAST||' lines have been retrieved.';
3313                             INL_LOGGING_PVT.Log_Statement (
3314                                 p_module_name => g_module_name,
3315                                 p_procedure_name => l_program_name,
3316                                 p_debug_info => l_debug_info
3317                             ) ;
3318                             IF NVL (l_sl_num_lst.LAST, 0) > 0 THEN
3319                                 FOR j IN NVL (l_sl_num_lst.FIRST, 0) ..NVL (l_sl_num_lst.LAST, 0)
3320                                 LOOP
3321                                     IF NVL(LENGTH(l_ln_num),0)+NVL(LENGTH(l_sl_num_lst(j).ship_line_num),0) < 200 THEN
3322                                         l_ln_num:=l_ln_num||l_sl_num_lst(j).ship_line_num||',';
3323                                     ELSE
3324                                         EXIT;
3325                                     END IF;
3326                                 END LOOP;
3327                                 IF LENGTH(l_ln_num)>2 THEN
3328                                     l_ln_num:=SUBSTR(l_ln_num,1,LENGTH(l_ln_num)-1);
3329                                 END IF;
3330                                 INL_LOGGING_PVT.Log_Variable (
3331                                     p_module_name => g_module_name,
3332                                     p_procedure_name => l_program_name,
3333                                     p_var_name => 'l_ln_num',
3334                                     p_var_value => l_ln_num);
3335 
3336                             END IF;
3337                         ELSE
3338                           l_ln_num:=NULL;
3339                         END IF;
3340                         FND_MESSAGE.SET_NAME ('INL', l_msg) ;
3341                         FND_MESSAGE.SET_TOKEN ('P_LN_GROUP_NUM', p_ln_group_num) ;
3342                         FND_MESSAGE.SET_TOKEN ('P_VENDOR_SITE_CODE', l_sl_parties_lst(i).vendor_site_code) ;
3343                         FND_MESSAGE.SET_TOKEN ('P_LINES', l_ln_num) ;
3344                         FND_MSG_PUB.ADD;
3345                         Handle_ShipError (
3346                             p_ship_header_id   => p_ship_header_id,
3347                             p_ship_line_id     => NULL,
3348                             p_charge_line_id   => NULL,
3349                             p_table_name       => 'INL_SHIP_LINE_GROUPS',
3350                             p_column_name      => 'PARTY_SITE_ID',
3351                             p_column_value     => p_party_site_id,
3352                             p_error_message    => SUBSTR (FND_MSG_PUB.Get (
3353                                                         p_msg_index => FND_MSG_PUB.Count_Msg (),
3354                                                         p_encoded => L_FND_FALSE), 1, 2000),
3355                             p_error_message_name => l_msg,
3356                             p_token1_name      => 'P_LN_GROUP_NUM',
3357                             p_token1_value     => p_ln_group_num,
3358                             p_token2_name      => 'P_VENDOR_SITE_CODE',
3359                             p_token2_value     => l_sl_parties_lst(i).vendor_site_code,
3360                             p_token3_name      => 'P_LINES',
3361                             p_token3_value     => l_ln_num,
3362                             p_token4_name      => NULL,
3363                             p_token4_value     => NULL,
3364                             p_token5_name      => NULL,
3365                             p_token5_value     => NULL,
3366                             p_token6_name      => NULL,
3367                             p_token6_value     => NULL,
3368                             x_return_status    => l_return_status);
3369 
3370                             -- If unexpected errors happen abort
3371                             IF l_return_status <> L_FND_RET_STS_SUCCESS THEN
3372                               RAISE L_FND_EXC_UNEXPECTED_ERROR;
3373                             END IF;
3374 
3375                        END IF;
3376                 END IF;
3377   -- Based on rcv_roi_header.validate_vendor_site_info:  checking vendor site  END
3378 
3379             END IF;
3380         END LOOP;
3381     END IF;
3382     INL_LOGGING_PVT.Log_EndProc (
3383         p_module_name    => g_module_name,
3384         p_procedure_name => l_program_name) ;
3385 --Bug#13987019 END
3386 EXCEPTION
3387 WHEN L_FND_EXC_ERROR THEN
3388     -- Standard Expected Error Logging
3389     INL_LOGGING_PVT.Log_ExpecError (
3390         p_module_name => g_module_name,
3391         p_procedure_name => l_program_name) ;
3392     x_return_status := L_FND_RET_STS_ERROR;
3393 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
3394     -- Standard Unexpected Error Logging
3395     INL_LOGGING_PVT.Log_UnexpecError (
3396         p_module_name => g_module_name,
3397         p_procedure_name => l_program_name) ;
3398     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
3399 WHEN OTHERS THEN
3400     -- Standard Unexpected Error Logging
3401     INL_LOGGING_PVT.Log_UnexpecError (
3402         p_module_name => g_module_name,
3403         p_procedure_name => l_program_name) ;
3404     x_return_status  := L_FND_RET_STS_UNEXP_ERROR;
3405     IF FND_MSG_PUB.Check_Msg_Level (p_message_level  => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3406         FND_MSG_PUB.Add_Exc_Msg (
3407             p_pkg_name => g_pkg_name,
3408             p_procedure_name => l_program_name) ;
3409     END IF;
3410 END Validate_LineGroup;
3411 
3412 -- Bug #8928896
3413 -- Utility name   : Validate_AllocEnabledFlag
3414 -- Type       : Private
3415 -- Function   : Check if exists associations for the Ship Line Type for which
3416 --              Associable flag is disabled.
3417 -- Pre-reqs   : None
3418 -- Parameters :
3419 -- IN         : p_ship_header_id      IN NUMBER
3420 --              p_alloc_enabled_flag  IN VARCHAR2
3421 --              p_ship_line_type_code IN VARCHAR2
3422 --              p_ship_line_id        IN NUMBER
3423 --              p_ship_line_num       IN NUMBER
3424 -- OUT        : x_return_status       OUT NOCOPY VARCHAR2
3425 --
3426 -- Version    : Current version 1.0
3427 --
3428 -- Notes      :
3429 
3430 PROCEDURE Validate_AllocEnabledFlag(
3431     p_ship_header_id      IN NUMBER,
3432     p_alloc_enabled_flag  IN VARCHAR2,
3433     p_ship_line_type_code IN VARCHAR2,
3434     p_ship_line_id        IN NUMBER,
3435     p_ship_line_num       IN NUMBER,
3436     x_return_status       OUT NOCOPY VARCHAR2
3437 )IS
3438 
3439     l_program_name          VARCHAR2 (200) := 'Validate_AllocEnabledFlag';
3440     l_count_associations NUMBER;
3441     l_debug_info         VARCHAR2 (400);
3442     l_return_status      VARCHAR2 (1) := L_FND_RET_STS_SUCCESS;
3443 
3444 BEGIN
3445 
3446     INL_LOGGING_PVT.Log_BeginProc(
3447         p_module_name => g_module_name,
3448         p_procedure_name => l_program_name);
3449 
3450     x_return_status := L_FND_RET_STS_SUCCESS;
3451 
3452     INL_LOGGING_PVT.Log_Variable (
3453         p_module_name => g_module_name,
3454         p_procedure_name => l_program_name,
3455         p_var_name => 'p_ship_header_id',
3456         p_var_value => p_ship_header_id);
3457 
3458     INL_LOGGING_PVT.Log_Variable (
3459         p_module_name => g_module_name,
3460         p_procedure_name => l_program_name,
3461         p_var_name => 'p_ship_line_type_code',
3462         p_var_value => p_ship_line_type_code) ;
3463 
3464     INL_LOGGING_PVT.Log_Variable (
3465         p_module_name => g_module_name,
3466         p_procedure_name => l_program_name,
3467         p_var_name => 'p_ship_line_id',
3468         p_var_value => p_ship_line_id) ;
3469 
3470     INL_LOGGING_PVT.Log_Variable (
3471         p_module_name => g_module_name,
3472         p_procedure_name => l_program_name,
3473         p_var_name => 'p_alloc_enabled_flag',
3474         p_var_value => p_alloc_enabled_flag) ;
3475 
3476     IF p_alloc_enabled_flag = 'N' THEN
3477         -- Check if ship lines is associable to other line
3478         SELECT NVL(COUNT(1),0)
3479         INTO  l_count_associations
3480         FROM inl_associations ia
3481         WHERE ship_header_id = p_ship_header_id
3482         AND  ia.from_parent_table_name = 'INL_SHIP_LINES'
3483         AND  ia.from_parent_table_id = p_ship_line_id;
3484 
3485         INL_LOGGING_PVT.Log_Variable (
3486             p_module_name => g_module_name,
3487             p_procedure_name => l_program_name,
3488             p_var_name => 'l_count_associations',
3489             p_var_value => l_count_associations) ;
3490 
3491         IF l_count_associations > 0 THEN
3492             FND_MESSAGE.SET_NAME ('INL', 'INL_ERR_ASSOC_ALLOC_FLAG_DISAB') ;
3493             FND_MESSAGE.SET_TOKEN ('SHIPLN_NUM', p_ship_line_num) ;
3494             FND_MESSAGE.SET_TOKEN ('SHIPLN_TYPE', p_ship_line_type_code) ;
3495             FND_MSG_PUB.ADD;
3496             -- INCLUDE A LINE IN INL_SHIP_HOLDS
3497             Handle_ShipError (
3498                 p_ship_header_id => p_ship_header_id,
3499                 p_ship_line_id => p_ship_line_id,
3500                 p_charge_line_id => NULL,
3501                 p_table_name => 'INL_SHIP_LINES',
3502                 p_column_name => 'SHIP_LINE_TYPE_ID',
3503                 p_column_value => 0,
3504                 p_error_message => SUBSTR (FND_MSG_PUB.Get (
3505                                                 p_msg_index => FND_MSG_PUB.Count_Msg (),
3506                                                 p_encoded => L_FND_FALSE), 1, 2000),
3507                 p_error_message_name => 'INL_ERR_ASSOC_ALLOC_FLAG_DISAB',
3508                 p_token1_name => 'SHIPLN_NUM',
3509                 p_token1_value => p_ship_line_num,
3510                 p_token2_name => 'SHIPLN_TYPE',
3511                 p_token2_value => p_ship_line_type_code,
3512                 p_token3_name => NULL,
3513                 p_token3_value => NULL,
3514                 p_token4_name => NULL,
3515                 p_token4_value => NULL,
3516                 p_token5_name => NULL,
3517                 p_token5_value => NULL,
3518                 p_token6_name => NULL,
3519                 p_token6_value => NULL,
3520                 x_return_status => l_return_status);
3521         END IF;
3522     END IF;
3523 
3524     INL_LOGGING_PVT.Log_EndProc (
3525         p_module_name => g_module_name,
3526         p_procedure_name => l_program_name) ;
3527 EXCEPTION
3528 WHEN L_FND_EXC_ERROR THEN
3529     x_return_status := L_FND_RET_STS_ERROR;
3530 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
3531     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
3532 WHEN OTHERS THEN
3533     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
3534     IF FND_MSG_PUB.Check_Msg_Level (p_message_level => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3535         FND_MSG_PUB.Add_Exc_Msg (
3536             p_pkg_name => g_pkg_name,
3537             p_procedure_name => l_program_name) ;
3538     END IF;
3539 END Validate_AllocEnabledFlag;
3540 
3541 -- Utility name   : Validate_ShipLine
3542 -- Type       : Private
3543 -- Function   : Validate Shipment Line
3544 -- Pre-reqs   : None
3545 -- Parameters :
3546 -- IN         : p_ship_header_id               IN  NUMBER
3547 --              p_rcv_enabled_flag             IN VARCHAR2
3548 --              p_ln_group_id                  IN  NUMBER
3549 --              p_functional_currency_code     IN  VARCHAR2
3550 --              p_foreign_currency_flag        IN  VARCHAR2
3551 --              p_organization_id              IN  NUMBER
3552 --              p_country_code_location        IN  VARCHAR2
3553 --              p_third_parties_allowed        IN  VARCHAR2
3554 --
3555 -- OUT        : x_return_status                OUT NOCOPY VARCHAR2
3556 --
3557 -- Version    : Current version 1.0
3558 --
3559 -- Notes      :
3560 PROCEDURE Validate_ShipLine (
3561     p_ship_header_id           IN NUMBER,
3562     p_rcv_enabled_flag         IN VARCHAR2,
3563     p_ln_group_id              IN NUMBER,
3564     p_functional_currency_code IN VARCHAR2,
3565     p_foreign_currency_flag    IN VARCHAR2,
3566     p_organization_id          IN NUMBER,
3567     p_country_code_location    IN VARCHAR2,
3568     p_third_parties_allowed    IN VARCHAR2,
3569     x_return_status            OUT NOCOPY VARCHAR2
3570 ) IS
3571     l_program_name  CONSTANT    VARCHAR2 (30) := 'Validate_ShipLine';
3572     l_return_status             VARCHAR2 (1)  := L_FND_RET_STS_SUCCESS;
3573     l_debug_info                VARCHAR2 (200);
3574 
3575 
3576     l_ch_line_tot_amt_func_curr NUMBER;
3577     l_pre_receive               VARCHAR2 (1) ;
3578     l_return_validation_status  VARCHAR2(30); -- SCM-051
3579 
3580     -- Bug 13401780
3581     l_closed_code              VARCHAR2(20);
3582     l_ship_line_num            VARCHAR2(20);
3583     l_ship_ln_grp_num          VARCHAR2(20) ;
3584     -- Bug 13401780
3585 
3586     CURSOR c_ship_lines IS
3587         -- Bug 9814099 (Removed unecessary join with inl_ship_line_types_b)
3588         SELECT ol.ship_line_id,
3589             ol.ship_line_num,
3590             ol.ship_line_src_type_code,
3591             ol.ship_line_source_id,
3592             ol.inventory_item_id,
3593             (SELECT SUM (a.primary_qty)
3594              FROM inl_adj_ship_lines_v a
3595              WHERE a.ship_header_id = ol.ship_header_id
3596              AND a.ship_line_source_id = ol.ship_line_source_id) AS sum_primary_qty,
3597             ol.primary_qty,
3598             ol.primary_unit_price,
3599             ol.primary_uom_code,
3600             ol.txn_uom_code,
3601             ol.currency_code,
3602             ol.currency_conversion_type,
3603             ol.currency_conversion_date,
3604             ol.currency_conversion_rate,
3605             'INL_SHIP_LINES' to_parent_table_name
3606       FROM inl_adj_ship_lines_v ol
3607       WHERE ol.ship_header_id = p_ship_header_id
3608       AND ol.ship_line_group_id = p_ln_group_id
3609       ORDER BY ol.ship_line_num;
3610     l_ship_lines_rec c_ship_lines%ROWTYPE;
3611 BEGIN
3612     INL_LOGGING_PVT.Log_BeginProc ( p_module_name => g_module_name,
3613                                     p_procedure_name => l_program_name) ;
3614     x_return_status := L_FND_RET_STS_SUCCESS;
3615     FOR l_ship_lines_rec IN c_ship_lines
3616     LOOP
3617         l_debug_info := 'Validate Charge Line. Call Validate_ChargeLine';
3618         INL_LOGGING_PVT.Log_Statement (
3619             p_module_name => g_module_name,
3620             p_procedure_name => l_program_name,
3621             p_debug_info => l_debug_info) ;
3622         Validate_ChargeLine (
3623             p_ship_header_id            => p_ship_header_id,
3624             p_to_parent_table_name      => l_ship_lines_rec.to_parent_table_name,
3625             p_to_parent_table_id        => l_ship_lines_rec.ship_line_id,
3626             p_functional_currency_code  => p_functional_currency_code,
3627             p_foreign_currency_flag     => p_foreign_currency_flag,
3628             p_third_parties_allowed     => p_third_parties_allowed,
3629             x_ch_line_tot_amt_func_curr => l_ch_line_tot_amt_func_curr,
3630             x_return_status             => l_return_status);
3631         -- If unexpected errors happen abort API
3632         IF l_return_status   = L_FND_RET_STS_ERROR THEN
3633             x_return_status := l_return_status;
3634             RAISE L_FND_EXC_ERROR;
3635         ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
3636             x_return_status  := l_return_status;
3637             RAISE L_FND_EXC_UNEXPECTED_ERROR;
3638         END IF;
3639         l_debug_info := 'Getting which scenartio is setup in RCV Parameters. Pre_Receive or BlackBox';
3640         INL_LOGGING_PVT.Log_Statement (
3641             p_module_name => g_module_name,
3642             p_procedure_name => l_program_name,
3643             p_debug_info => l_debug_info) ;
3644         SELECT pre_receive
3645         INTO l_pre_receive
3646         FROM rcv_parameters
3647         WHERE organization_id = p_organization_id;
3648 
3649         -- Bug 13401780 starts here - Added code to validate if the PO line is CLOSED FOR RECEIVING or NOT
3650 
3651         INL_LOGGING_PVT.Log_Variable (
3652                     p_module_name => g_module_name,
3653                     p_procedure_name => l_program_name,
3654                     p_var_name => 'Profile Option - RCV_CLOSED_PO_DEFAULT_OPTION',
3655                     p_var_value => FND_PROFILE.VALUE('RCV_CLOSED_PO_DEFAULT_OPTION')) ;
3656 
3657         SELECT DECODE(FND_PROFILE.VALUE('RCV_CLOSED_PO_DEFAULT_OPTION'),'N',NVL(pll.closed_code,'OPEN'), 'OPEN')
3658         INTO l_closed_code
3659         FROM po_line_locations pll
3660         WHERE pll.line_location_id= l_ship_lines_rec.ship_line_source_id;
3661 
3662         INL_LOGGING_PVT.Log_Variable (
3663                     p_module_name => g_module_name,
3664                     p_procedure_name => l_program_name,
3665                     p_var_name => 'l_closed_code',
3666                     p_var_value => l_closed_code) ;
3667 
3668         IF l_closed_code <> 'OPEN' THEN
3669 
3670             SELECT isl.ship_line_num, islg.ship_line_group_num
3671             INTO   l_ship_line_num,l_ship_ln_grp_num
3672             FROM   inl_ship_lines isl,
3673                    inl_ship_line_groups islg
3674             WHERE  isl.ship_line_group_id=islg.ship_line_group_id
3675               AND  isl.ship_line_id = l_ship_lines_rec.ship_line_id
3676               AND  isl.ship_header_id = p_ship_header_id;
3677 
3678             INL_LOGGING_PVT.Log_Variable (
3679                         p_module_name => g_module_name,
3680                         p_procedure_name => l_program_name,
3681                         p_var_name => 'l_ship_line_num',
3682                         p_var_value => l_ship_line_num) ;
3683 
3684             INL_LOGGING_PVT.Log_Variable (
3685                         p_module_name => g_module_name,
3686                         p_procedure_name => l_program_name,
3687                         p_var_name => 'l_ship_ln_grp_num',
3688                         p_var_value => l_ship_ln_grp_num) ;
3689 
3690             FND_MESSAGE.SET_NAME ('INL', 'INL_ERR_CHK_LOC_CLOSE_CODE') ;
3691             FND_MESSAGE.SET_TOKEN ('LNGRP_NUM', l_ship_ln_grp_num) ;
3692             FND_MESSAGE.SET_TOKEN ('SHIPLN_NUM', l_ship_line_num) ;
3693             FND_MSG_PUB.ADD;
3694             l_debug_info := 'Line Location is not in OPEN status';
3695 
3696             INL_LOGGING_PVT.Log_Statement (
3697                 p_module_name => g_pkg_name,
3698                 p_procedure_name => l_program_name,
3699                 p_debug_info => l_debug_info) ;
3700             INL_LOGGING_PVT.Log_Variable (
3701                 p_module_name  => g_module_name,
3702                 p_procedure_name => l_program_name,
3703                 p_var_name => 'l_ship_lines_rec.ship_line_source_id',
3704                 p_var_value => l_ship_lines_rec.ship_line_source_id) ;
3705             -- INCLUDE A LINE IN INL_SHIP_HOLdS
3706             Handle_ShipError (
3707                 p_ship_header_id => p_ship_header_id,
3708                 p_ship_line_id => NULL,
3709                 p_charge_line_id => NULL,
3710                 p_table_name => 'INL_SHIP_LINES',
3711                 p_column_name => 'SHIP_LINE_SOURCE_ID',
3712                 p_column_value => l_ship_lines_rec.ship_line_source_id,
3713                 p_error_message => SUBSTR (FND_MSG_PUB.Get (
3714                                                 p_msg_index => FND_MSG_PUB.Count_Msg (),
3715                                                 p_encoded => L_FND_FALSE), 1, 2000),
3716                 p_error_message_name => 'INL_ERR_CHK_LOC_CLOSE_CODE',
3717                 p_token1_name => 'LNGRP_NUM',
3718                 p_token1_value => l_ship_ln_grp_num,
3719                 p_token2_name => 'SHIPLN_NUM',
3720                 p_token2_value => l_ship_line_num,
3721                 p_token3_name => NULL,
3722                 p_token3_value => NULL,
3723                 p_token4_name => NULL,
3724                 p_token4_value => NULL,
3725                 p_token5_name => NULL,
3726                 p_token5_value => NULL,
3727                 p_token6_name => NULL,
3728                 p_token6_value => NULL,
3729                 x_return_status => l_return_status) ;
3730             -- If unexpected errors happen abort
3731             IF l_return_status <> L_FND_RET_STS_SUCCESS THEN
3732                 RAISE L_FND_EXC_UNEXPECTED_ERROR;
3733             END IF;
3734         END IF;
3735 
3736         -- Bug 13401780 ends
3737 
3738         -- Just validate PO Available Qty for Pre-Receive scenario
3739         -- In Blackbox, RCV handles this validation
3740         IF (NVL (l_pre_receive, 'N') = 'Y') THEN
3741             IF p_rcv_enabled_flag = 'Y' THEN
3742                 l_debug_info := 'Call to Check_AvailableQty';
3743                 INL_LOGGING_PVT.Log_Statement (
3744                     p_module_name => g_module_name,
3745                     p_procedure_name => l_program_name,
3746                     p_debug_info => l_debug_info) ;
3747                 Check_AvailableQty (
3748                     l_ship_lines_rec.primary_qty,
3749                     l_ship_lines_rec.sum_primary_qty,
3750                     l_ship_lines_rec.primary_uom_code,
3751                     l_ship_lines_rec.txn_uom_code,
3752                     l_ship_lines_rec.inventory_item_id,
3753                     p_organization_id,
3754                     l_ship_lines_rec.ship_line_id,
3755                     l_ship_lines_rec.ship_line_num,
3756                     l_ship_lines_rec.ship_line_src_type_code,
3757                     l_ship_lines_rec.ship_line_source_id,
3758                     NULL,
3759                     p_ship_header_id,
3760                     l_return_status) ;
3761                -- If unexpected errors happen abort API
3762                 IF l_return_status   = L_FND_RET_STS_ERROR THEN
3763                     x_return_status := l_return_status;
3764                     RAISE L_FND_EXC_ERROR;
3765                 ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
3766                     x_return_status  := l_return_status;
3767                     RAISE L_FND_EXC_UNEXPECTED_ERROR;
3768                 END IF;
3769             END IF;
3770 
3771             IF l_ship_lines_rec.ship_line_src_type_code = 'PO' THEN
3772 
3773                 l_debug_info := 'Call to Validate_SrcOperatingUnit';
3774                 INL_LOGGING_PVT.Log_Statement (
3775                     p_module_name => g_module_name,
3776                     p_procedure_name => l_program_name,
3777                     p_debug_info => l_debug_info) ;
3778                 Validate_SrcOperatingUnit(
3779                     p_ship_header_id => p_ship_header_id,
3780                     p_ship_line_id   => l_ship_lines_rec.ship_line_id,
3781                     p_ship_line_num  => l_ship_lines_rec.ship_line_num,
3782                     x_return_status  => l_return_status);
3783                 -- If unexpected errors happen abort API
3784                 IF l_return_status   = L_FND_RET_STS_ERROR THEN
3785                     x_return_status := l_return_status;
3786                     RAISE L_FND_EXC_ERROR;
3787                 ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
3788                     x_return_status  := l_return_status;
3789                     RAISE L_FND_EXC_UNEXPECTED_ERROR;
3790                 END IF;
3791             END IF;
3792         END IF;
3793         -- Required validation only for Source Type Code = PO
3794         IF l_ship_lines_rec.ship_line_src_type_code   = 'PO' AND
3795            p_rcv_enabled_flag = 'Y' THEN
3796             l_debug_info := 'Call Check_PoPriceTolerance';
3797             INL_LOGGING_PVT.Log_Statement (
3798                 p_module_name => g_module_name,
3799                 p_procedure_name => l_program_name,
3800                 p_debug_info => l_debug_info) ;
3801             Check_PoPriceTolerance (
3802                 p_ship_header_id            => p_ship_header_id,
3803                 p_ship_line_id              => l_ship_lines_rec.ship_line_id,
3804                 p_organization_id           => p_organization_id,
3805                 p_ship_line_num             => l_ship_lines_rec.ship_line_num,
3806                 p_ship_line_src_id          => l_ship_lines_rec.ship_line_source_id,
3807                 p_pri_unit_price            => l_ship_lines_rec.primary_unit_price,
3808                 p_primary_uom_code          => l_ship_lines_rec.primary_uom_code,
3809                 p_currency_code             => l_ship_lines_rec.currency_code,
3810                 p_currency_conversion_type  => l_ship_lines_rec.currency_conversion_type,
3811                 p_currency_conversion_date  => l_ship_lines_rec.currency_conversion_date,
3812                 p_currency_conversion_rate  => l_ship_lines_rec.currency_conversion_rate,
3813                 x_return_validation_status  => l_return_validation_status, -- SCM-051
3814                 x_return_status             => l_return_status
3815             ) ;
3816             -- If unexpected errors happen abort API
3817             IF l_return_status  = L_FND_RET_STS_ERROR THEN
3818                 x_return_status := l_return_status;
3819                 RAISE L_FND_EXC_ERROR;
3820             ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
3821                 x_return_status  := l_return_status;
3822                 RAISE L_FND_EXC_UNEXPECTED_ERROR;
3823             END IF;
3824         END IF;
3825 
3826         -- Bug 9814099 - Code commented as it is wrong to validate
3827         -- allocation_enabled_flag with the value setup on INL_SHIP_LINE_TYPES.
3828         -- Allocation Enabled flag on INL_SHIP_LINE_TYPES is just used as a
3829         -- default value to INL_SHIPMENT_LINE table. The correct value to be
3830         -- used in this case would be the Allocation Enabled flag on
3831         -- INL_SHIPMENT_LINE, however this validation is automatically handled
3832         -- by the UI, so the code below would be redundant.
3833 
3834         -- Bug #8928896
3835         -- Check associations when allocation enabled flag is disabled
3836         /*IF NVL(l_ship_lines_rec.dflt_allocation_enabled_flag, 'N') = 'N' THEN
3837           l_debug_info := 'Call Validate_AllocEnabledFlag';
3838             INL_LOGGING_PVT.Log_Statement (
3839                 p_module_name => g_module_name,
3840                 p_procedure_name => l_program_name,
3841                 p_debug_info => l_debug_info) ;
3842             Validate_AllocEnabledFlag (
3843                 p_ship_header_id      => p_ship_header_id,
3844                 p_alloc_enabled_flag  => l_ship_lines_rec.dflt_allocation_enabled_flag,
3845                 p_ship_line_type_code => l_ship_lines_rec.ship_line_type_code,
3846                 p_ship_line_id        => l_ship_lines_rec.ship_line_id,
3847                 p_ship_line_num       => l_ship_lines_rec.ship_line_num,
3848                 x_return_status       => l_return_status ) ;
3849 
3850             -- If unexpected errors happen abort API
3851             IF l_return_status  = L_FND_RET_STS_ERROR THEN
3852                 x_return_status := l_return_status;
3853                 RAISE L_FND_EXC_ERROR;
3854             ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
3855                 x_return_status  := l_return_status;
3856                 RAISE L_FND_EXC_UNEXPECTED_ERROR;
3857             END IF;
3858         END IF;*/
3859         -- Bug /#8928896
3860 
3861     END LOOP;
3862     INL_LOGGING_PVT.Log_EndProc (
3863         p_module_name => g_module_name,
3864         p_procedure_name => l_program_name) ;
3865 EXCEPTION
3866 WHEN L_FND_EXC_ERROR THEN
3867     -- Standard Expected Error Logging
3868     INL_LOGGING_PVT.Log_ExpecError (
3869         p_module_name => g_module_name,
3870         p_procedure_name => l_program_name) ;
3871     x_return_status := L_FND_RET_STS_ERROR;
3872 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
3873     -- Standard Unexpected Error Logging
3874     INL_LOGGING_PVT.Log_UnexpecError (
3875         p_module_name => g_module_name,
3876         p_procedure_name => l_program_name) ;
3877     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
3878 WHEN OTHERS THEN
3879     -- Standard Unexpected Error Logging
3880     INL_LOGGING_PVT.Log_UnexpecError (
3881         p_module_name => g_module_name,
3882         p_procedure_name => l_program_name) ;
3883     x_return_status  := L_FND_RET_STS_UNEXP_ERROR;
3884     IF FND_MSG_PUB.Check_Msg_Level (p_message_level  => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3885         FND_MSG_PUB.Add_Exc_Msg (
3886             p_pkg_name => g_pkg_name,
3887             p_procedure_name => l_program_name) ;
3888     END IF;
3889 END Validate_ShipLine;
3890 -- Utility name   : Validate_ShipHdr
3891 -- Type       : Private
3892 -- Function   : Validate Shipment Header
3893 -- Pre-reqs   : None
3894 -- Parameters :
3895 -- IN         : p_ship_header_id IN  NUMBER
3896 -- OUT        : x_return_status  OUT NOCOPY VARCHAR2
3897 --
3898 -- Version    : Current version 1.0
3899 --
3900 -- Notes      :
3901 PROCEDURE Validate_ShipHdr (
3902     p_ship_header_id IN NUMBER,
3903     p_task_code        IN VARCHAR2,--Bug#9836174
3904     x_return_status  OUT NOCOPY VARCHAR2
3905 ) IS
3906     l_program_name CONSTANT VARCHAR2 (30) := 'Validate_ShipHdr';
3907     l_return_status VARCHAR2 (1) := L_FND_RET_STS_SUCCESS;
3908     l_debug_info VARCHAR2 (200);
3909     l_ship_type_id NUMBER;
3910     l_ship_status VARCHAR2 (30);
3911     l_inv_org_id NUMBER;
3912     l_ship_date DATE;
3913     l_error_type VARCHAR2 (3);
3914     l_pending_matching_flag VARCHAR2 (1);
3915     l_sob_id NUMBER (15);
3916     l_comp_num VARCHAR2 (50) ;
3917     l_func_curr_code VARCHAR2 (15);
3918     l_ship_type_code VARCHAR2 (15);
3919     l_shipt_third_parties_allowed VARCHAR2 (1);
3920     l_in_adjust_flag VARCHAR2 (1);
3921     l_location_id NUMBER;
3922     l_error_message_name VARCHAR2 (200);
3923     l_error_token_name VARCHAR2 (200);
3924     l_country_code_location VARCHAR2 (100);
3925     l_taxation_country VARCHAR2(30); -- Bug #8271690
3926     l_rcv_enabled_flag VARCHAR2(1);
3927     l_sysdate date := sysdate; --Bug#9836174
3928     l_group_line_num NUMBER; --Bug #12630218
3929     CURSOR c_ln_group IS
3930       SELECT ship_line_group_num, ship_line_group_id, lg.party_id, lg.party_site_id,
3931              lg.ship_line_group_reference, hps.party_site_name
3932       FROM inl_ship_line_groups lg,
3933            hz_party_sites hps
3934       WHERE hps.party_site_id = lg.party_site_id
3935       AND   ship_header_id = p_ship_header_id
3936       ORDER BY ship_line_group_num;
3937 BEGIN
3938     INL_LOGGING_PVT.Log_BeginProc (
3939         p_module_name => g_module_name,
3940         p_procedure_name => l_program_name) ;
3941     x_return_status := L_FND_RET_STS_SUCCESS;
3942     l_debug_info := 'Get Shipment Header and Shipment Type information';
3943     INL_LOGGING_PVT.Log_Statement (
3944         p_module_name => g_module_name,
3945         p_procedure_name => l_program_name,
3946         p_debug_info => l_debug_info) ;
3947      SELECT shipt.ship_type_id,
3948             shipt.ship_type_code,
3949             shipt.trd_pties_alwd_code,
3950             NVL(sh.rcv_enabled_flag,'Y') rcv_enabled_flag, -- dependence
3951             sh.ship_status_code,
3952             sh.organization_id,
3953             sh.location_id,
3954             sh.ship_date,
3955             sh.pending_matching_flag,
3956             sh.taxation_country -- Bug #8271690
3957      INTO   l_ship_type_id,
3958             l_ship_type_code,
3959             l_shipt_third_parties_allowed,
3960             l_rcv_enabled_flag,
3961             l_ship_status,
3962             l_inv_org_id,
3963             l_location_id,
3964             l_ship_date,
3965             l_pending_matching_flag,
3966             l_taxation_country
3967      FROM   inl_ship_headers_all sh,
3968             inl_ship_types_vl shipt
3969      WHERE sh.ship_type_id = shipt.ship_type_id
3970      AND sh.ship_header_id = p_ship_header_id;
3971     IF l_ship_status = 'COMPLETED' AND l_pending_matching_flag = 'Y' THEN
3972         l_in_adjust_flag := 'Y';
3973     ELSE
3974         l_in_adjust_flag := 'N';
3975         --Bug#9836174 BEGIN
3976         IF  l_rcv_enabled_flag = 'Y'
3977             AND p_task_code > '50'
3978             AND TRUNC(l_ship_date) > l_sysdate
3979         THEN
3980 
3981             FND_MESSAGE.SET_NAME ('INL', 'INL_ERR_CHK_RCV_SHIP_DATE') ;
3982             FND_MSG_PUB.ADD;
3983             l_debug_info := 'Shipment date greater than current date.';
3984             INL_LOGGING_PVT.Log_Statement (
3985                 p_module_name => g_pkg_name,
3986                 p_procedure_name => l_program_name,
3987                 p_debug_info => l_debug_info) ;
3988             INL_LOGGING_PVT.Log_Variable (
3989                 p_module_name  => g_module_name,
3990                 p_procedure_name => l_program_name,
3991                 p_var_name => 'l_ship_date',
3992                 p_var_value => TO_CHAR (l_ship_date)) ;
3993             -- INCLUDE A LINE IN INL_SHIP_HOLdS
3994             Handle_ShipError (
3995                 p_ship_header_id => p_ship_header_id,
3996                 p_ship_line_id => NULL,
3997                 p_charge_line_id => NULL,
3998                 p_table_name => 'INL_SHIP_HEADERS',
3999                 p_column_name => 'SHIP_DATE',
4000                 p_column_value => TO_CHAR (l_ship_date),
4001                 p_error_message => SUBSTR (FND_MSG_PUB.Get (
4002                                                 p_msg_index => FND_MSG_PUB.Count_Msg (),
4003                                                 p_encoded => L_FND_FALSE), 1, 2000),
4004                 p_error_message_name => 'INL_ERR_CHK_RCV_SHIP_DATE',
4005                 p_token1_name => NULL,
4006                 p_token1_value => NULL,
4007                 p_token2_name => NULL,
4008                 p_token2_value => NULL,
4009                 p_token3_name => NULL,
4010                 p_token3_value => NULL,
4011                 p_token4_name => NULL,
4012                 p_token4_value => NULL,
4013                 p_token5_name => NULL,
4014                 p_token5_value => NULL,
4015                 p_token6_name => NULL,
4016                 p_token6_value => NULL,
4017                 x_return_status => l_return_status) ;
4018             -- If unexpected errors happen abort
4019             IF l_return_status <> L_FND_RET_STS_SUCCESS THEN
4020                 RAISE L_FND_EXC_UNEXPECTED_ERROR;
4021             END IF;
4022         END IF;
4023         --Bug#9836174 END
4024 
4025     END IF;
4026     l_debug_info := 'Get Set of Books by a given Inventory Organization';
4027     INL_LOGGING_PVT.Log_Statement (
4028         p_module_name => g_module_name,
4029         p_procedure_name => l_program_name,
4030         p_debug_info => l_debug_info) ;
4031     SELECT set_of_books_id
4032     INTO l_sob_id
4033     FROM org_organization_definitions ood
4034     WHERE organization_id = l_inv_org_id;
4035     l_debug_info := 'Check Shipment Date against the Inventory Open Period';
4036     INL_LOGGING_PVT.Log_Statement (
4037         p_module_name => g_module_name,
4038         p_procedure_name => l_program_name,
4039         p_debug_info => l_debug_info) ;
4040     IF l_rcv_enabled_flag = 'Y' THEN
4041         IF Validate_InvOpenPeriod (
4042             x_trx_date => TO_CHAR (l_ship_date, 'YYYY-MM-DD'),
4043             x_sob_id => l_sob_id,
4044             x_org_id => l_inv_org_id,
4045             x_return_status => l_return_status) = 'FALSE'
4046         THEN
4047             FND_MESSAGE.SET_NAME ('INL', 'INL_ERR_CHK_INV_SHIP_DATE') ;
4048             FND_MESSAGE.SET_TOKEN ('SHIP_DATE', TO_CHAR (l_ship_date)) ;
4049             FND_MSG_PUB.ADD;
4050             l_debug_info := 'Transaction period is not open in Inventory.';
4051             INL_LOGGING_PVT.Log_Statement (
4052                 p_module_name => g_pkg_name,
4053                 p_procedure_name => l_program_name,
4054                 p_debug_info => l_debug_info) ;
4055             INL_LOGGING_PVT.Log_Variable (
4056                 p_module_name  => g_module_name,
4057                 p_procedure_name => l_program_name,
4058                 p_var_name => 'l_ship_date',
4059                 p_var_value => TO_CHAR (l_ship_date)) ;
4060             -- INCLUDE A LINE IN INL_SHIP_HOLdS
4061             Handle_ShipError (
4062                 p_ship_header_id => p_ship_header_id,
4063                 p_ship_line_id => NULL,
4064                 p_charge_line_id => NULL,
4065                 p_table_name => 'INL_SHIP_HEADERS',
4066                 p_column_name => 'SHIP_DATE',
4067                 p_column_value => TO_CHAR (l_ship_date),
4068                 p_error_message => SUBSTR (FND_MSG_PUB.Get (
4069                                                 p_msg_index => FND_MSG_PUB.Count_Msg (),
4070                                                 p_encoded => L_FND_FALSE), 1, 2000),
4071                 p_error_message_name => 'INL_ERR_CHK_INV_SHIP_DATE',
4072                 p_token1_name => 'SHIP_DATE',
4073                 p_token1_value => TO_CHAR (l_ship_date),
4074                 p_token2_name => NULL,
4075                 p_token2_value => NULL,
4076                 p_token3_name => NULL,
4077                 p_token3_value => NULL,
4078                 p_token4_name => NULL,
4079                 p_token4_value => NULL,
4080                 p_token5_name => NULL,
4081                 p_token5_value => NULL,
4082                 p_token6_name => NULL,
4083                 p_token6_value => NULL,
4084                 x_return_status => l_return_status) ;
4085             -- If unexpected errors happen abort
4086             IF l_return_status <> L_FND_RET_STS_SUCCESS THEN
4087                 RAISE L_FND_EXC_UNEXPECTED_ERROR;
4088             END IF;
4089         END IF;
4090     END IF;
4091 
4092     l_debug_info := 'Check if the current Shipment has Shipment Lines for each Group';
4093     INL_LOGGING_PVT.Log_Statement (
4094         p_module_name => g_module_name,
4095         p_procedure_name => l_program_name,
4096         p_debug_info => l_debug_info) ;
4097     IF (NOT Has_ShipLine (p_ship_header_id, l_group_line_num)) THEN -- Bug #12630218
4098         IF l_group_line_num IS NOT NULL THEN
4099             FND_MESSAGE.SET_NAME ('INL', 'INL_ERR_CHK_NO_SHIP_LN_GRP_NUM');
4100             FND_MESSAGE.SET_TOKEN('LINE_GROUP_NUM',l_group_line_num);
4101             FND_MSG_PUB.ADD;
4102             -- INCLUDE A LINE IN INL_SHIP_HOLDS
4103             Handle_ShipError (
4104                 p_ship_header_id => p_ship_header_id,
4105                 p_ship_line_id => NULL,
4106                 p_charge_line_id => NULL,
4107                 p_table_name => 'INL_SHIP_HEADERS',
4108                 p_column_name => 'SHIP_TYPE_ID',
4109                 p_column_value => l_ship_type_id,
4110                 p_error_message => SUBSTR (FND_MSG_PUB.Get (
4111                                          p_msg_index => FND_MSG_PUB.Count_Msg (),
4112                                             p_encoded => L_FND_FALSE), 1, 2000),
4113                 p_error_message_name => 'INL_ERR_CHK_NO_SHIP_LN_GRP_NUM',
4114                 p_token1_name => 'LINE_GROUP_NUM',
4115                 p_token1_value => l_group_line_num,
4116                 p_token2_name => NULL,
4117                 p_token2_value => NULL,
4118                 p_token3_name => NULL,
4119                 p_token3_value => NULL,
4120                 p_token4_name => NULL,
4121                 p_token4_value => NULL,
4122                 p_token5_name => NULL,
4123                 p_token5_value => NULL,
4124                 p_token6_name => NULL,
4125                 p_token6_value => NULL,
4126                 x_return_status => l_return_status) ;
4127             -- If unexpected errors happen abort
4128             IF l_return_status <> L_FND_RET_STS_SUCCESS THEN
4129                 RAISE L_FND_EXC_UNEXPECTED_ERROR;
4130             END IF;
4131         ELSE -- Bug 12630218 Shipment has no Group Lines
4132             FND_MESSAGE.SET_NAME ('INL', 'INL_ERR_CHK_NO_SHIP_LN');
4133             FND_MSG_PUB.ADD;
4134             -- INCLUDE A LINE IN INL_SHIP_HOLDS
4135             Handle_ShipError (
4136                 p_ship_header_id => p_ship_header_id,
4137                 p_ship_line_id => NULL,
4138                 p_charge_line_id => NULL,
4139                 p_table_name => 'INL_SHIP_HEADERS',
4140                 p_column_name => 'SHIP_TYPE_ID',
4141                 p_column_value => l_ship_type_id,
4142                 p_error_message => SUBSTR (FND_MSG_PUB.Get (
4143                                          p_msg_index => FND_MSG_PUB.Count_Msg (),
4144                                             p_encoded => L_FND_FALSE), 1, 2000),
4145                 p_error_message_name => 'INL_ERR_CHK_NO_SHIP_LN',
4146                 p_token1_name => NULL,
4147                 p_token1_value => NULL,
4148                 p_token2_name => NULL,
4149                 p_token2_value => NULL,
4150                 p_token3_name => NULL,
4151                 p_token3_value => NULL,
4152                 p_token4_name => NULL,
4153                 p_token4_value => NULL,
4154                 p_token5_name => NULL,
4155                 p_token5_value => NULL,
4156                 p_token6_name => NULL,
4157                 p_token6_value => NULL,
4158                 x_return_status => l_return_status) ;
4159             -- If unexpected errors happen abort
4160             IF l_return_status <> L_FND_RET_STS_SUCCESS THEN
4161                 RAISE L_FND_EXC_UNEXPECTED_ERROR;
4162             END IF;
4163         END IF;
4164     ELSIF l_in_adjust_flag = 'N' THEN
4165         l_debug_info := 'Get the functional currency code';
4166         INL_LOGGING_PVT.Log_Statement (
4167             p_module_name => g_pkg_name,
4168             p_procedure_name => l_program_name,
4169             p_debug_info => l_debug_info) ;
4170         SELECT gsb.currency_code
4171         INTO l_func_curr_code
4172         FROM org_organization_definitions ood,
4173              gl_sets_of_books gsb
4174         WHERE gsb.set_of_books_id = ood.set_of_books_id
4175         AND organization_id = l_inv_org_id;
4176         l_debug_info := 'Get Country from Location';
4177         INL_LOGGING_PVT.Log_Statement (
4178             p_module_name => g_module_name,
4179             p_procedure_name => l_program_name,
4180             p_debug_info => l_debug_info) ;
4181         SELECT country
4182         INTO l_country_code_location
4183         FROM hr_locations
4184         WHERE location_id = l_location_id;
4185         FOR l_ln_group_rec IN c_ln_group
4186         LOOP
4187             l_debug_info := 'Call Validate_LineGroup';
4188             INL_LOGGING_PVT.Log_Statement (
4189                 p_module_name => g_module_name,
4190                 p_procedure_name => l_program_name,
4191                 p_debug_info => l_debug_info) ;
4192             Validate_LineGroup(
4193                 p_ship_header_id        => p_ship_header_id,
4194                 p_ship_type_code        => l_ship_type_code,
4195                 p_inv_org_id            => l_inv_org_id,  -- Bug 15956572
4196                 p_ln_group_id           => l_ln_group_rec.ship_line_group_id,
4197                 p_ln_group_num          => l_ln_group_rec.ship_line_group_num, --Bug#13987019
4198                 p_group_reference       => l_ln_group_rec.ship_line_group_reference,
4199                 p_party_id              => l_ln_group_rec.party_id, --Bug#13987019
4200                 p_party_site_id         => l_ln_group_rec.party_site_id,
4201                 p_party_site_name       => l_ln_group_rec.party_site_name,
4202                 p_taxation_country      => l_taxation_country,
4203                 p_third_parties_allowed => l_shipt_third_parties_allowed,
4204                 x_return_status         => l_return_status);
4205             -- /Bug #8271690
4206             l_debug_info := 'Call Validate_ShipLine';
4207             INL_LOGGING_PVT.Log_Statement (
4208                 p_module_name => g_module_name,
4209                 p_procedure_name => l_program_name,
4210                 p_debug_info => l_debug_info) ;
4211             Validate_ShipLine (
4212                 p_ship_header_id => p_ship_header_id,
4213                 p_rcv_enabled_flag => l_rcv_enabled_flag,
4214                 p_ln_group_id => l_ln_group_rec.ship_line_group_id,
4215                 p_functional_currency_code => l_func_curr_code,
4216                 p_foreign_currency_flag => 'Y',
4217                 p_organization_id => l_inv_org_id,
4218                 p_country_code_location => l_country_code_location,
4219                 p_third_parties_allowed => l_shipt_third_parties_allowed,
4220                 x_return_status => l_return_status) ;
4221             -- If unexpected errors happen abort API
4222             IF l_return_status = L_FND_RET_STS_ERROR THEN
4223                 x_return_status := l_return_status;
4224                 RAISE L_FND_EXC_ERROR;
4225             ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
4226                 x_return_status := l_return_status;
4227                 RAISE L_FND_EXC_UNEXPECTED_ERROR;
4228             END IF;
4229         END LOOP;
4230     END IF;
4231 EXCEPTION
4232 WHEN L_FND_EXC_ERROR THEN
4233     -- Standard Expected Error Logging
4234     INL_LOGGING_PVT.Log_ExpecError (
4235         p_module_name => g_module_name,
4236         p_procedure_name => l_program_name) ;
4237     x_return_status := L_FND_RET_STS_ERROR;
4238 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
4239     -- Standard Unexpected Error Logging
4240     INL_LOGGING_PVT.Log_UnexpecError (
4241         p_module_name => g_module_name,
4242         p_procedure_name => l_program_name) ;
4243     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
4244 WHEN OTHERS THEN
4245     -- Standard Unexpected Error Logging
4246     INL_LOGGING_PVT.Log_UnexpecError (
4247         p_module_name => g_module_name,
4248         p_procedure_name => l_program_name) ;
4249     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
4250     IF FND_MSG_PUB.Check_Msg_Level (p_message_level  => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
4251         FND_MSG_PUB.Add_Exc_Msg (
4252             p_pkg_name => g_pkg_name,
4253             p_procedure_name => l_program_name) ;
4254     END IF;
4255 END Validate_ShipHdr;
4256 
4257 -- Utility name   : Validate_InvOpenPeriod
4258 -- Type       : Private
4259 -- Function   : Check whether the Inventory Period is open
4260 -- Pre-reqs   : None
4261 -- Parameters :
4262 -- IN         : x_trx_date      IN VARCHAR2
4263 --              x_sob_id        IN NUMBER
4264 --              x_org_id        IN NUMBER
4265 -- OUT        : x_return_status IN OUT NOCOPY VARCHAR2
4266 --
4267 -- Version    : Current version 1.0
4268 --
4269 -- Notes      :
4270 FUNCTION Validate_InvOpenPeriod     (
4271     x_trx_date      IN VARCHAR2,
4272     x_sob_id        IN NUMBER,
4273     x_org_id        IN NUMBER,
4274     x_return_status IN OUT NOCOPY VARCHAR2
4275 ) RETURN VARCHAR2
4276                                IS
4277     l_program_name       VARCHAR2 (200) := 'Validate_InvOpenPeriod';
4278     l_boolean         BOOLEAN;
4279     l_boolean_to_char VARCHAR2 (10) ;
4280     l_trx_date DATE;
4281     l_debug_info VARCHAR2 (400) ;
4282 BEGIN
4283     l_trx_date := TO_DATE (x_trx_date, 'YYYY-MM-DD') ;
4284     -- the x_return_status parameter mustn't been reseted
4285     INL_LOGGING_PVT.Log_BeginProc (
4286         p_module_name => g_module_name,
4287         p_procedure_name => l_program_name) ;
4288     -- information about the input parameters
4289     INL_LOGGING_PVT.Log_APICallIn (
4290         p_module_name => g_module_name,
4291         p_procedure_name => l_program_name,
4292         p_call_api_name => 'po_dates_s.val_open_period',
4293         p_in_param_name1 => 'x_trx_date',
4294         p_in_param_value1 => x_trx_date,
4295         p_in_param_name2 => 'x_sob_id',
4296         p_in_param_value2 => x_sob_id,
4297         p_in_param_name3 => 'x_org_id',
4298         p_in_param_value3 => x_org_id,
4299         p_in_param_name4 => 'x_return_status',
4300         p_in_param_value4 => x_return_status) ;
4301     --  Initialize API return status to success
4302     x_return_status := L_FND_RET_STS_SUCCESS;
4303     l_boolean       := po_dates_s.val_open_period (
4304                             x_trx_date => l_trx_date,
4305                             x_sob_id => x_sob_id,
4306                             x_app_name => 'INV',
4307                             x_org_id => x_org_id) ;
4308     IF l_boolean THEN
4309         l_boolean_to_char := 'TRUE';
4310     ELSE
4311         l_boolean_to_char := 'FALSE';
4312     END IF;
4313     -- information about the respose
4314     INL_LOGGING_PVT.Log_APICallIn (
4315         p_module_name => g_module_name,
4316         p_procedure_name => l_program_name,
4317         p_call_api_name => 'po_dates_s.val_open_period',
4318         p_in_param_name1 => 'l_boolean_to_char',
4319         p_in_param_value1 => l_boolean_to_char) ;
4320     INL_LOGGING_PVT.Log_EndProc (
4321         p_module_name => g_module_name,
4322         p_procedure_name => l_program_name) ;
4323     RETURN l_boolean_to_char;
4324 EXCEPTION
4325 WHEN L_FND_EXC_ERROR THEN
4326     -- Standard Expected Error Logging
4327     INL_LOGGING_PVT.Log_ExpecError (
4328         p_module_name => g_module_name,
4329         p_procedure_name => l_program_name) ;
4330     x_return_status := L_FND_RET_STS_ERROR;
4331     RETURN 'FALSE';
4332 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
4333     -- Standard Unexpected Error Logging
4334     INL_LOGGING_PVT.Log_UnexpecError (
4335         p_module_name => g_module_name,
4336         p_procedure_name => l_program_name) ;
4337     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
4338     RETURN 'FALSE';
4339 WHEN OTHERS THEN
4340     -- Standard Unexpected Error Logging
4341     INL_LOGGING_PVT.Log_UnexpecError (
4342         p_module_name => g_module_name,
4343         p_procedure_name => l_program_name) ;
4344     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
4345     IF FND_MSG_PUB.Check_Msg_Level (p_message_level  => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
4346         FND_MSG_PUB.Add_Exc_Msg (
4347             p_pkg_name => g_pkg_name,
4348             p_procedure_name => l_program_name) ;
4349     END IF;
4350     RETURN 'FALSE';
4351 END Validate_InvOpenPeriod;
4352 
4353 -- API name   : Validate_Shipment
4354 -- Type       : Private
4355 -- Function   : Controls the validation of a given LCM Shipment.
4356 -- Pre-reqs   : None
4357 -- Parameters :
4358 -- IN         : p_api_version      IN NUMBER
4359 --              p_init_msg_list    IN VARCHAR2 L_FND_FALSE
4360 --              p_commit           IN VARCHAR2 L_FND_FALSE
4361 --              p_validation_level IN NUMBER   L_FND_VALID_LEVEL_FULL
4362 --              p_ship_header_id   IN NUMBER
4363 --
4364 -- OUT          x_return_status    OUT NOCOPY VARCHAR2
4365 --              x_msg_count        OUT NOCOPY NUMBER
4366 --              x_msg_data         OUT NOCOPY VARCHAR2
4367 --
4368 -- Version    : Current version 1.0
4369 --
4370 -- Notes      :
4371 PROCEDURE Validate_Shipment (
4372     p_api_version      IN NUMBER,
4373     p_init_msg_list    IN VARCHAR2 := L_FND_FALSE,
4374     p_commit           IN VARCHAR2 := L_FND_FALSE,
4375     p_validation_level IN NUMBER := L_FND_VALID_LEVEL_FULL,
4376     p_ship_header_id   IN NUMBER,
4377     p_task_code        IN VARCHAR2 DEFAULT NULL,--Bug#9836174
4378     x_return_status    OUT NOCOPY VARCHAR2,
4379     x_msg_count        OUT NOCOPY NUMBER,
4380     x_msg_data         OUT NOCOPY VARCHAR2
4381 ) IS
4382     l_api_name    CONSTANT VARCHAR2 (30) := 'Validate_Shipment';
4383     l_api_version CONSTANT NUMBER := 1.0;
4384     l_return_status VARCHAR2 (1) := L_FND_RET_STS_SUCCESS;
4385     l_ship_status VARCHAR2 (30) ;
4386     l_exist_event VARCHAR2 (5) ;
4387     l_exist_status NUMBER := 0;
4388     l_debug_info VARCHAR2 (200);
4389 BEGIN
4390     INL_LOGGING_PVT.Log_BeginProc (
4391         p_module_name => g_module_name,
4392         p_procedure_name => l_api_name) ;
4393     -- Standard Start of API savepoint
4394     SAVEPOINT Validate_Shipment_PVT;
4395     -- Initialize message list if p_init_msg_list is set to TRUE.
4396     IF FND_API.to_Boolean (p_init_msg_list) THEN
4397         FND_MSG_PUB.initialize;
4398     END IF;
4399     -- Check for call compatibility.
4400     IF NOT FND_API.Compatible_API_Call (
4401         p_current_version_number => l_api_version,
4402         p_caller_version_number => p_api_version,
4403         p_api_name => l_api_name,
4404         p_pkg_name => G_PKG_NAME
4405     ) THEN
4406         RAISE L_FND_EXC_UNEXPECTED_ERROR;
4407     END IF;
4408     --  Initialize API return status to success
4409     x_return_status := L_FND_RET_STS_SUCCESS;
4410     l_debug_info := 'Reset errors in inl_ship_holds table';
4411     INL_LOGGING_PVT.Log_Statement (
4412         p_module_name => g_module_name,
4413         p_procedure_name => l_api_name,
4414         p_debug_info => l_debug_info
4415     ) ;
4416     Reset_ShipError (
4417         p_ship_header_id => p_ship_header_id,
4418         p_ship_line_id => NULL,
4419         p_charge_line_id => NULL,
4420         x_return_status => l_return_status) ;
4421     -- If unexpected errors happen abort API
4422     IF l_return_status = L_FND_RET_STS_ERROR THEN
4423         x_return_status := l_return_status;
4424         RAISE L_FND_EXC_ERROR;
4425     ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
4426         x_return_status := l_return_status;
4427         RAISE L_FND_EXC_UNEXPECTED_ERROR;
4428     END IF;
4429     l_debug_info := 'Shipment Header validation';
4430     INL_LOGGING_PVT.Log_Statement (
4431         p_module_name => g_pkg_name,
4432         p_procedure_name => l_api_name,
4433         p_debug_info => l_debug_info) ;
4434     Validate_ShipHdr (
4435         p_ship_header_id => p_ship_header_id,
4436         p_task_code      => p_task_code, --Bug#9836174
4437         x_return_status => l_return_status) ;
4438     -- If unexpected errors happen abort API
4439     IF l_return_status   = L_FND_RET_STS_ERROR THEN
4440         x_return_status := l_return_status;
4441         RAISE L_FND_EXC_ERROR;
4442     ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
4443         x_return_status  := l_return_status;
4444         RAISE L_FND_EXC_UNEXPECTED_ERROR;
4445     END IF;
4446     l_debug_info := 'fnd_msg_pub.count_msg';
4447     INL_LOGGING_PVT.Log_Variable (
4448         p_module_name  => g_module_name,
4449         p_procedure_name => l_api_name,
4450         p_var_name => 'fnd_msg_pub.count_msg',
4451         p_var_value => TO_CHAR (fnd_msg_pub.count_msg)) ;
4452     IF (NVL (fnd_msg_pub.count_msg, 0) = 0) THEN
4453          SELECT ship_status_code
4454            INTO l_ship_status
4455            FROM inl_ship_headers
4456           WHERE ship_header_id = p_ship_header_id;
4457         IF l_ship_status <> 'COMPLETED' THEN
4458             l_debug_info := 'Update INL_SHIP_HEADERS_ALL.ship_status_code to VALIDATED';
4459             INL_LOGGING_PVT.Log_Statement (
4460                 p_module_name => g_module_name,
4461                 p_procedure_name => l_api_name,
4462                 p_debug_info => l_debug_info) ;
4463             UPDATE inl_ship_headers
4464             SET ship_status_code = 'VALIDATED',
4465                 last_updated_by = L_FND_USER_ID,
4466                 last_update_date = SYSDATE
4467             WHERE ship_header_id = p_ship_header_id;
4468         END IF;
4469     ELSE
4470          l_debug_info := 'Update INL_SHIP_HEADERS_ALL.ship_status_code to ON HOLD';
4471          INL_LOGGING_PVT.Log_Statement (
4472             p_module_name => g_module_name,
4473             p_procedure_name => l_api_name,
4474             p_debug_info => l_debug_info) ;
4475          UPDATE inl_ship_headers
4476         SET ship_status_code = 'ON HOLD',
4477             last_updated_by = L_FND_USER_ID,
4478             last_update_date = SYSDATE
4479           WHERE ship_header_id = p_ship_header_id;
4480     END IF;
4481     -- Standard check of p_commit.
4482     IF FND_API.To_Boolean (p_commit) THEN
4483         COMMIT WORK;
4484     END IF;
4485     -- Standard call to get message count and if count is 1, get message info.
4486     FND_MSG_PUB.Count_And_Get (
4487         p_encoded => L_FND_FALSE,
4488         p_count => x_msg_count,
4489         p_data => x_msg_data) ;
4490     INL_LOGGING_PVT.Log_EndProc (
4491         p_module_name => g_module_name,
4492         p_procedure_name => l_api_name) ;
4493 EXCEPTION
4494 WHEN L_FND_EXC_ERROR THEN
4495     INL_LOGGING_PVT.Log_ExpecError (
4496         p_module_name => g_module_name,
4497         p_procedure_name => l_api_name) ;
4498     ROLLBACK TO Validate_Shipment_PVT;
4499     x_return_status := L_FND_RET_STS_ERROR;
4500     FND_MSG_PUB.Count_And_Get (
4501         p_encoded => L_FND_FALSE,
4502         p_count => x_msg_count,
4503         p_data => x_msg_data) ;
4504 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
4505     INL_LOGGING_PVT.Log_UnexpecError (
4506         p_module_name => g_module_name,
4507         p_procedure_name => l_api_name) ;
4508     ROLLBACK TO Validate_Shipment_PVT;
4509     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
4510     FND_MSG_PUB.Count_And_Get (
4511         p_encoded => L_FND_FALSE,
4512         p_count => x_msg_count,
4513         p_data => x_msg_data) ;
4514 WHEN OTHERS THEN
4515     INL_LOGGING_PVT.Log_UnexpecError (
4516         p_module_name => g_module_name,
4517         p_procedure_name => l_api_name) ;
4518     ROLLBACK TO Validate_Shipment_PVT;
4519     x_return_status := L_FND_RET_STS_UNEXP_ERROR ;
4520     IF FND_MSG_PUB.Check_Msg_Level (p_message_level => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
4521         FND_MSG_PUB.Add_Exc_Msg (
4522             p_pkg_name => g_pkg_name,
4523             p_procedure_name => l_api_name) ;
4524     END IF;
4525     FND_MSG_PUB.Count_And_Get (
4526         p_encoded => L_FND_FALSE,
4527         p_count => x_msg_count,
4528         p_data => x_msg_data) ;
4529 END Validate_Shipment;
4530 -- Utility name: Create_Assoc
4531 -- Type       : Private
4532 -- Function   : Create Associations
4533 -- Pre-reqs   : None
4534 -- Parameters :
4535 -- IN         : p_assoc                  IN inl_Assoc_tp
4536 --              p_from_parent_table_name IN VARCHAR2,
4537 --              p_new_line_id            IN NUMBER, charge line at a highest level
4538 --
4539 -- OUT        : x_return_status          OUT NOCOPY VARCHAR2
4540 --
4541 -- Version    : Current version 1.0
4542 --
4543 -- Notes      :
4544 PROCEDURE Create_Assoc (
4545     p_Assoc                  IN inl_Assoc_tp,
4546     p_from_parent_table_name IN VARCHAR2,
4547     p_new_line_id            IN NUMBER,
4548     x_return_status OUT NOCOPY VARCHAR2
4549 ) IS
4550     l_program_name     CONSTANT VARCHAR2 (30) := 'Create_Assoc';
4551     l_return_status VARCHAR2 (1) ;
4552     l_debug_info    VARCHAR2 (200) ;
4553 BEGIN
4554     -- Standard Beginning of Procedure/Function Logging
4555     INL_LOGGING_PVT.Log_BeginProc (
4556         p_module_name => g_module_name,
4557         p_procedure_name => l_program_name) ;
4558     --  Initialize return status to success
4559     x_return_status := L_FND_RET_STS_SUCCESS;
4560     l_debug_info := 'Insert in inl_associations.';
4561     INL_LOGGING_PVT.Log_Statement (
4562         p_module_name => g_module_name,
4563         p_procedure_name => l_program_name,
4564         p_debug_info => l_debug_info) ;
4565 
4566     INL_LOGGING_PVT.Log_Variable (
4567         p_module_name  => g_module_name,
4568         p_procedure_name => l_program_name,
4569         p_var_name => 'p_new_line_id',
4570         p_var_value => p_new_line_id) ;
4571 
4572     IF p_Assoc.association_id IS NULL THEN
4573         l_debug_info := 'Including association';
4574         INSERT
4575            INTO inl_associations (
4576                 association_id,               /* 01 */
4577                 ship_header_id,               /* 02 */
4578                 from_parent_table_name,       /* 03 */
4579                 from_parent_table_id,         /* 04 */
4580                 to_parent_table_name,         /* 05 */
4581                 to_parent_table_id,           /* 06 */
4582                 allocation_basis,             /* 07 */
4583                 allocation_uom_code,          /* 08 */
4584                 created_by,                   /* 09 */
4585                 creation_date,                /* 10 */
4586                 last_updated_by,              /* 11 */
4587                 last_update_date,             /* 12 */
4588                 last_update_login             /* 13 */
4589             )
4590         VALUES (
4591                 inl_associations_s.nextval,   /* 01 */
4592                 p_Assoc.ship_header_id,       /* 02 */
4593                 p_from_parent_table_name,     /* 03 */
4594                 p_new_line_id,                /* 04 */
4595                 p_Assoc.to_parent_table_name, /* 05 */
4596                 p_Assoc.to_parent_table_id,   /* 06 */
4597                 p_Assoc.allocation_basis,     /* 07 */
4598                 p_Assoc.allocation_uom_code,  /* 08 */
4599                 L_FND_USER_ID,                /* 09 */
4600                 sysdate,                      /* 10 */
4601                 L_FND_USER_ID,                /* 11 */
4602                 sysdate,                      /* 12 */
4603                 l_fnd_login_id                /* 13 */ --SCM-051
4604         );
4605     ELSE
4606         l_debug_info := 'Updating association';
4607         UPDATE inl_associations
4608         SET
4609                 ship_header_id               = p_Assoc.ship_header_id      ,
4610                 from_parent_table_name       = p_from_parent_table_name    ,
4611                 from_parent_table_id         = p_new_line_id               ,
4612                 to_parent_table_name         = p_Assoc.to_parent_table_name,
4613                 to_parent_table_id           = p_Assoc.to_parent_table_id  ,
4614                 allocation_basis             = p_Assoc.allocation_basis    ,
4615                 allocation_uom_code          = p_Assoc.allocation_uom_code ,
4616                 last_updated_by              = L_FND_USER_ID               ,
4617                 last_update_date             = SYSDATE                     ,
4618                 last_update_login            = l_fnd_login_id --SCM-051
4619         WHERE association_id = p_Assoc.association_id
4620         ;
4621     END IF;
4622     INL_LOGGING_PVT.Log_Statement (
4623         p_module_name => g_module_name,
4624         p_procedure_name => l_program_name,
4625         p_debug_info => l_debug_info) ;
4626     INL_LOGGING_PVT.Log_Variable (
4627         p_module_name  => g_module_name,
4628         p_procedure_name => l_program_name,
4629         p_var_name => 'p_new_line_id',
4630         p_var_value => p_new_line_id) ;
4631     -- Standard End of Procedure/Function Logging
4632     INL_LOGGING_PVT.Log_EndProc(
4633         p_module_name => g_module_name,
4634         p_procedure_name => l_program_name
4635     );
4636 EXCEPTION
4637 WHEN L_FND_EXC_ERROR THEN
4638     -- Standard Expected Error Logging
4639     INL_LOGGING_PVT.Log_ExpecError(
4640         p_module_name => g_module_name,
4641         p_procedure_name => l_program_name
4642     );
4643     x_return_status := L_FND_RET_STS_ERROR;
4644 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
4645     -- Standard Unexpected Error Logging
4646     INL_LOGGING_PVT.Log_UnexpecError(
4647         p_module_name => g_module_name,
4648         p_procedure_name => l_program_name
4649     );
4650     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
4651 WHEN OTHERS THEN
4652     -- Standard Unexpected Error Logging
4653     INL_LOGGING_PVT.Log_UnexpecError(
4654         p_module_name => g_module_name,
4655         p_procedure_name => l_program_name
4656     );
4657     x_return_status := L_FND_RET_STS_UNEXP_ERROR ;
4658     IF FND_MSG_PUB.Check_Msg_Level(
4659             p_message_level => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
4660     ) THEN
4661         FND_MSG_PUB.Add_Exc_Msg (
4662             p_pkg_name => g_pkg_name,
4663             p_procedure_name => l_program_name
4664         );
4665     END IF;
4666 END Create_Assoc;
4667 -- Utility name: Create_TxLines
4668 -- Type       : Private
4669 -- Function   : Create Tax Lines
4670 -- Pre-reqs   : None
4671 -- Parameters :
4672 -- IN         : p_TxLn_Assoc            IN inl_TxLn_Assoc_tp
4673 --              p_include_assoc         IN VARCHAR2 := 'Y'
4674 --              p_adjustment_num        IN NUMBER
4675 --
4676 -- OUT        : x_new_tax_line_id       OUT NOCOPY NUMBER,
4677 --              x_return_status         OUT NOCOPY VARCHAR2
4678 --
4679 -- Version    : Current version 1.0
4680 --
4681 -- Notes      :
4682 PROCEDURE Create_TxLines(
4683         p_TxLn_Assoc        IN inl_TxLn_Assoc_tp,
4684         p_include_assoc     IN VARCHAR2 := 'Y',
4685         p_adjustment_num    IN NUMBER,
4686         x_new_tax_line_id   OUT NOCOPY NUMBER,
4687         x_return_status     OUT NOCOPY VARCHAR2
4688     ) IS
4689     l_program_name CONSTANT VARCHAR2(30):= 'Create_TxLines';
4690     l_return_status VARCHAR2(1);
4691     l_debug_info VARCHAR2(200);
4692     l_tax_line_num    NUMBER;
4693     l_adjustment_num  NUMBER;
4694 BEGIN
4695     -- Standard Beginning of Procedure/Function Logging
4696     INL_LOGGING_PVT.Log_BeginProc (
4697         p_module_name => g_module_name,
4698         p_procedure_name => l_program_name
4699     );
4700     --  Initialize return status to success
4701     x_return_status := L_FND_RET_STS_SUCCESS;
4702     --
4703     -- Get Max val to tax line num
4704     --
4705     IF p_TxLn_Assoc.tax_line_num IS NULL THEN
4706         l_debug_info             := 'Get Max val from tax line num';
4707         INL_LOGGING_PVT.Log_Statement(
4708             p_module_name   => g_module_name,
4709             p_procedure_name=> l_program_name,
4710             p_debug_info    => l_debug_info
4711         )
4712         ;
4713          SELECT NVL (MAX (tl.tax_line_num), 0) + 1
4714            INTO l_tax_line_num
4715            FROM inl_tax_lines tl
4716           WHERE NVL (tl.ship_header_id, 0) = NVL (p_TxLn_Assoc.inl_Assoc.ship_header_id, 0) ;
4717     ELSE
4718         l_tax_line_num := p_TxLn_Assoc.tax_line_num;
4719     END IF;
4720     --
4721     -- Get Val to adjustment num
4722     --
4723     IF p_TxLn_Assoc.adjustment_num IS NULL THEN
4724         l_debug_info     := 'Set l_adjustment_num to p_adjustment_num';
4725         l_adjustment_num := p_adjustment_num;
4726     ELSE
4727         l_debug_info     := 'Set l_adjustment_num to p_TxLn_Assoc.adjustment_num';
4728         l_adjustment_num := p_TxLn_Assoc.adjustment_num;
4729     END IF;
4730     INL_LOGGING_PVT.Log_Statement (
4731         p_module_name => g_module_name,
4732         p_procedure_name => l_program_name,
4733         p_debug_info => l_debug_info) ;
4734     --
4735     -- Get inl_tax_lines_s.nextval
4736     --
4737     l_debug_info := 'Get inl_tax_lines_s.nextval';
4738     INL_LOGGING_PVT.Log_Statement (
4739         p_module_name => g_module_name,
4740         p_procedure_name => l_program_name,
4741         p_debug_info => l_debug_info
4742     ) ;
4743     SELECT inl_tax_lines_s.nextval
4744     INTO x_new_tax_line_id
4745     FROM dual;
4746     --
4747     -- include Tax Line record
4748     --
4749     l_debug_info := 'Including Tax Line record ';
4750     INL_LOGGING_PVT.Log_Statement (
4751         p_module_name => g_module_name,
4752         p_procedure_name => l_program_name,
4753         p_debug_info => l_debug_info) ;
4754      INSERT
4755        INTO inl_tax_lines        (
4756             tax_line_id,                           /* 01 */
4757             tax_line_num,                          /* 02 */
4758             tax_code,                              /* 03 */
4759             ship_header_id,                        /* 04 */
4760             parent_tax_line_id,                    /* 05 */
4761             adjustment_num,                        /* 06 */
4762             match_id,                              /* 07 */
4763             match_amount_id,                       /* 08 */
4764             source_parent_table_name,              /* 09 */
4765             source_parent_table_id,                /* 10 */
4766             tax_amt,                               /* 11 */
4767             nrec_tax_amt,                          /* 12 */
4768             currency_code,                         /* 13 */
4769             currency_conversion_type,              /* 14 */
4770             currency_conversion_date,              /* 15 */
4771             currency_conversion_rate,              /* 16 */
4772             tax_amt_included_flag,                 /* 17 */
4773             created_by,                            /* 18 */
4774             creation_date,                         /* 19 */
4775             last_updated_by,                       /* 20 */
4776             last_update_date,                      /* 21 */
4777             last_update_login                      /* 22 */
4778         )
4779         VALUES
4780         (
4781             x_new_tax_line_id,                     /* 01 */
4782             l_tax_line_num,                        /* 02 */
4783             p_TxLn_Assoc.tax_code,                 /* 03 */
4784             p_TxLn_Assoc.inl_Assoc.ship_header_id, /* 04 */
4785             p_TxLn_Assoc.parent_tax_line_id,       /* 05 */
4786             l_adjustment_num,                      /* 06 */
4787             p_TxLn_Assoc.match_id,                 /* 07 */
4788             p_TxLn_Assoc.match_amount_id,          /* 08 */
4789             p_TxLn_Assoc.source_parent_table_name, /* 09 */
4790             p_TxLn_Assoc.source_parent_table_id,   /* 10 */
4791             p_TxLn_Assoc.matched_amt,              /* 11 */
4792             p_TxLn_Assoc.nrec_tax_amt,             /* 12 */
4793             p_TxLn_Assoc.currency_code,            /* 13 */
4794             p_TxLn_Assoc.currency_conversion_type, /* 14 */
4795             p_TxLn_Assoc.currency_conversion_date, /* 15 */
4796             p_TxLn_Assoc.currency_conversion_rate, /* 16 */
4797             p_TxLn_Assoc.tax_amt_included_flag,    /* 17 */
4798             L_FND_USER_ID,                         /* 18 */
4799             sysdate,                               /* 19 */
4800             L_FND_USER_ID,                         /* 20 */
4801             sysdate,                               /* 21 */
4802             l_fnd_login_id --SCM-051               /* 22 */
4803         ) ;
4804     IF p_include_assoc = 'Y' THEN
4805         Create_Assoc(
4806             p_Assoc                  => p_TxLn_Assoc.inl_Assoc,
4807             p_from_parent_table_name => 'INL_TAX_LINES',
4808             p_new_line_id            => x_new_tax_line_id,
4809             x_return_status          => l_return_status
4810         )
4811         ;
4812         IF l_return_status = L_FND_RET_STS_ERROR THEN
4813             RAISE L_FND_EXC_ERROR;
4814         ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
4815             RAISE L_FND_EXC_UNEXPECTED_ERROR;
4816         END IF;
4817     END IF;
4818     -- Standard End of Procedure/Function Logging
4819     INL_LOGGING_PVT.Log_EndProc(
4820         p_module_name => g_module_name,
4821         p_procedure_name => l_program_name
4822     );
4823 EXCEPTION
4824 WHEN L_FND_EXC_ERROR THEN
4825     -- Standard Expected Error Logging
4826     INL_LOGGING_PVT.Log_ExpecError(
4827         p_module_name => g_module_name,
4828         p_procedure_name => l_program_name
4829     );
4830     x_return_status := L_FND_RET_STS_ERROR;
4831 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
4832     -- Standard Unexpected Error Logging
4833     INL_LOGGING_PVT.Log_UnexpecError(
4834         p_module_name => g_module_name,
4835         p_procedure_name => l_program_name
4836     );
4837     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
4838 WHEN OTHERS THEN
4839     -- Standard Unexpected Error Logging
4840     INL_LOGGING_PVT.Log_UnexpecError(
4841         p_module_name => g_module_name,
4842         p_procedure_name => l_program_name
4843     );
4844     x_return_status := L_FND_RET_STS_UNEXP_ERROR ;
4845     IF FND_MSG_PUB.Check_Msg_Level(
4846             p_message_level => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
4847         ) THEN
4848         FND_MSG_PUB.Add_Exc_Msg(
4849             p_pkg_name      => g_pkg_name,
4850             p_procedure_name=> l_program_name
4851         );
4852     END IF;
4853 END Create_TxLines;
4854 
4855 -- Utility name: Zero_EstimTaxLines
4856 -- Type       : Private
4857 -- Function   : Create a Adj Tax Line with amt = 0
4858 -- Pre-reqs   : None
4859 -- Parameters :
4860 -- IN         :     p_ship_header_id    IN NUMBER, -- sent null to process only one component
4861 --                  p_match_id          IN NUMBER,
4862 --                  p_comp_name         IN VARCHAR2, -- name of the component to make tax = 0
4863 --                  p_comp_id           IN NUMBER, -- id of the component to make tax = 0
4864 --                  p_tax_code          IN VARCHAR2, -- IF NULL = ALL
4865 --                  p_adjustment_num    IN NUMBER
4866 --                  p_prev_adjustment_num
4867 --
4868 -- OUT        : x_return_status         OUT NOCOPY VARCHAR2
4869 --
4870 -- Version    : Current version 1.0
4871 --
4872 -- Notes      :
4873 PROCEDURE Zero_EstimTaxLines (
4874     p_ship_header_id        IN NUMBER,
4875     p_match_id              IN NUMBER,
4876     p_comp_name             IN VARCHAR2,
4877     p_comp_id               IN VARCHAR2,
4878     p_tax_code              IN VARCHAR2,
4879     p_adjustment_num        IN NUMBER,
4880     p_prev_adjustment_num   IN NUMBER DEFAULT 0, -- BUG#8411594
4881     x_return_status OUT NOCOPY VARCHAR2
4882 ) IS
4883     l_program_name CONSTANT VARCHAR2(30) := 'Zero_EstimTaxLines';
4884     l_return_status VARCHAR2(1);
4885     l_debug_info VARCHAR2(200);
4886     CURSOR estimated_TL
4887     IS
4888          SELECT tl.tax_line_id         ,
4889             tl.tax_line_num            ,
4890             tl.tax_code                ,
4891             tl.ship_header_id          ,
4892             tl.parent_tax_line_id      ,
4893             tl.adjustment_num          ,
4894             tl.match_id                ,
4895             tl.source_parent_table_name,
4896             tl.source_parent_table_id  ,
4897             tl.tax_amt                 ,
4898             tl.nrec_tax_amt            ,
4899             tl.currency_code           ,
4900             tl.currency_conversion_type,
4901             tl.currency_conversion_date,
4902             tl.currency_conversion_rate,
4903             tl.tax_amt_included_flag
4904            FROM inl_adj_tax_lines_v tl
4905           WHERE  p_ship_header_id IS NOT NULL  --Bug#14044298
4906             AND tl.adjustment_num = p_prev_adjustment_num
4907             AND tl.ship_header_id = p_ship_header_id
4908             AND
4909             (
4910                 p_tax_code    IS NULL
4911                 OR tl.tax_code = p_tax_code
4912             )
4913   UNION ALL
4914      SELECT tl.tax_line_id         ,
4915         tl.tax_line_num            ,
4916         tl.tax_code                ,
4917         tl.ship_header_id          ,
4918         tl.parent_tax_line_id      ,
4919         tl.adjustment_num          ,
4920         tl.match_id                ,
4921         tl.source_parent_table_name,
4922         tl.source_parent_table_id  ,
4923         tl.tax_amt                 ,
4924         tl.nrec_tax_amt            ,
4925         tl.currency_code           ,
4926         tl.currency_conversion_type,
4927         tl.currency_conversion_date,
4928         tl.currency_conversion_rate,
4929         tl.tax_amt_included_flag
4930        FROM
4931             inl_adj_tax_lines_v tl,
4932             inl_associations assoc
4933       WHERE p_ship_header_id IS NULL
4934         AND (tl.tax_amt > 0
4935              OR tl.nrec_tax_amt > 0)        --SCM-051
4936         AND (tl.adjustment_num = p_prev_adjustment_num
4937              OR tl.adjustment_num < 1)
4938         AND
4939         (
4940             p_tax_code    IS NULL
4941             OR tl.tax_code = p_tax_code
4942         )
4943         -- SCM-051
4944         AND assoc.from_parent_table_name = 'INL_TAX_LINES'
4945         AND assoc.to_parent_table_name   = p_comp_name
4946         AND assoc.to_parent_table_id     = p_comp_id
4947         AND assoc.from_parent_table_id =
4948         (
4949             SELECT parntTxLn0.tax_line_id
4950             FROM inl_tax_lines parntTxLn0
4951             WHERE CONNECT_BY_ISLEAF = 1
4952             START WITH parntTxLn0.tax_line_id = tl.tax_line_id
4953             CONNECT BY PRIOR parntTxLn0.parent_tax_line_id = parntTxLn0.tax_line_id
4954         )
4955         -- SCM-051
4956         ;
4957 TYPE est_TL_Type
4958 IS
4959     TABLE OF estimated_TL%ROWTYPE;
4960     C_est_TL est_TL_Type;
4961     l_TxLn_Assoc inl_TxLn_Assoc_tp;
4962     l_new_tax_line_id NUMBER;
4963 BEGIN
4964     -- Standard Beginning of Procedure/Function Logging
4965     INL_LOGGING_PVT.Log_BeginProc (
4966         p_module_name => g_module_name,
4967         p_procedure_name => l_program_name
4968     );
4969     --  Initialize return status to success
4970     x_return_status := L_FND_RET_STS_SUCCESS;
4971 
4972     INL_LOGGING_PVT.Log_Variable (
4973         p_module_name => g_module_name,
4974         p_procedure_name => l_program_name,
4975         p_var_name => 'p_prev_adjustment_num',
4976         p_var_value => p_prev_adjustment_num
4977     );
4978 
4979     INL_LOGGING_PVT.Log_Variable (
4980         p_module_name => g_module_name,
4981         p_procedure_name => l_program_name,
4982         p_var_name => 'p_comp_name',
4983         p_var_value => p_comp_name
4984     );
4985     INL_LOGGING_PVT.Log_Variable (
4986         p_module_name => g_module_name,
4987         p_procedure_name => l_program_name,
4988         p_var_name => 'p_comp_id',
4989         p_var_value => p_comp_id
4990     );
4991 
4992     l_debug_info := 'Getting existent estimated TaxLine.';
4993     INL_LOGGING_PVT.Log_Statement (
4994         p_module_name => g_module_name,
4995         p_procedure_name => l_program_name,
4996         p_debug_info => l_debug_info
4997     ) ;
4998     OPEN estimated_TL;
4999     FETCH estimated_TL BULK COLLECT INTO C_est_TL;
5000     CLOSE estimated_TL;
5001     l_debug_info := C_est_TL.LAST||' lines have been retrieved.';
5002     INL_LOGGING_PVT.Log_Statement (
5003         p_module_name => g_module_name,
5004         p_procedure_name => l_program_name,
5005         p_debug_info => l_debug_info
5006     ) ;
5007     IF NVL (C_est_TL.LAST, 0) > 0 THEN
5008         l_TxLn_Assoc.inl_Assoc.allocation_basis := NULL;
5009         l_TxLn_Assoc.inl_Assoc.allocation_uom_code := NULL;
5010         l_TxLn_Assoc.inl_Assoc.to_parent_table_name := NULL;
5011         l_TxLn_Assoc.inl_Assoc.to_parent_table_id := NULL;
5012         l_TxLn_Assoc.adjustment_num := p_adjustment_num;
5013         l_TxLn_Assoc.match_id := p_match_id;
5014         l_TxLn_Assoc.matched_amt := 0;
5015         l_TxLn_Assoc.nrec_tax_amt := 0;
5016         l_TxLn_Assoc.source_parent_table_name := 'INL_TAX_LINES';
5017         FOR i IN NVL (C_est_TL.FIRST, 0) ..NVL (C_est_TL.LAST, 0)
5018         LOOP
5019             l_TxLn_Assoc.inl_Assoc.ship_header_id := C_est_TL (i) .ship_header_id;
5020             l_TxLn_Assoc.tax_code                 := C_est_TL (i) .tax_code;
5021             l_TxLn_Assoc.tax_line_num             := C_est_TL (i) .tax_line_num;
5022             l_TxLn_Assoc.parent_tax_line_id       := C_est_TL (i) .tax_line_id;
5023             l_TxLn_Assoc.source_parent_table_id   := C_est_TL (i) .tax_line_id; --Unique index U2 in INL_TAX_LINES
5024             l_TxLn_Assoc.currency_code            := C_est_TL (i) .currency_code;
5025             l_TxLn_Assoc.currency_conversion_type := C_est_TL (i) .currency_conversion_type;
5026             l_TxLn_Assoc.currency_conversion_date := C_est_TL (i) .currency_conversion_date;
5027             l_TxLn_Assoc.currency_conversion_rate := C_est_TL (i) .currency_conversion_rate;
5028             l_TxLn_Assoc.tax_amt_included_flag    := C_est_TL (i) .tax_amt_included_flag;
5029             -- Create_TxLines
5030             l_debug_info := 'Estimated Tax line found new with 0.';
5031             INL_LOGGING_PVT.Log_Statement (
5032                 p_module_name => g_module_name,
5033                 p_procedure_name => l_program_name,
5034                 p_debug_info => l_debug_info
5035             ) ;
5036             Create_TxLines (
5037                 p_TxLn_Assoc        => l_TxLn_Assoc,
5038                 p_include_assoc     => 'N',
5039                 p_adjustment_num    => p_adjustment_num,
5040                 x_new_tax_line_id   => l_new_tax_line_id,
5041                 x_return_status     => l_return_status
5042             ) ;
5043             IF l_return_status = L_FND_RET_STS_ERROR THEN
5044                 RAISE L_FND_EXC_ERROR;
5045             ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
5046                 RAISE L_FND_EXC_UNEXPECTED_ERROR;
5047             END IF;
5048         END LOOP;
5049     END IF;
5050     -- Standard End of Procedure/Function Logging
5051     INL_LOGGING_PVT.Log_EndProc (
5052         p_module_name => g_module_name,
5053         p_procedure_name => l_program_name
5054     ) ;
5055 EXCEPTION
5056 WHEN L_FND_EXC_ERROR THEN
5057     -- Standard Expected Error Logging
5058     INL_LOGGING_PVT.Log_ExpecError (
5059         p_module_name => g_module_name,
5060         p_procedure_name => l_program_name
5061     ) ;
5062     x_return_status := L_FND_RET_STS_ERROR;
5063 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
5064     -- Standard Unexpected Error Logging
5065     INL_LOGGING_PVT.Log_UnexpecError (
5066         p_module_name => g_module_name,
5067         p_procedure_name => l_program_name
5068     ) ;
5069     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
5070 WHEN OTHERS THEN
5071     -- Standard Unexpected Error Logging
5072     INL_LOGGING_PVT.Log_UnexpecError (
5073         p_module_name => g_module_name,
5074         p_procedure_name => l_program_name
5075     ) ;
5076     x_return_status := L_FND_RET_STS_UNEXP_ERROR ;
5077     IF FND_MSG_PUB.Check_Msg_Level (p_message_level  => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5078         FND_MSG_PUB.Add_Exc_Msg (
5079             p_pkg_name => g_pkg_name,
5080             p_procedure_name => l_program_name
5081         ) ;
5082     END IF;
5083 END Zero_EstimTaxLines;
5084 
5085 -- Utility name: Zero_TaxLinesPerMatchAmt
5086 -- Type       : Private
5087 -- Function   : Create a Adj Tax Line with amt = 0
5088 -- Pre-reqs   : None
5089 -- Parameters :
5090 -- IN         :     p_match_amount_id   IN NUMBER,
5091 --                  p_adjustment_num    IN NUMBER
5092 --
5093 -- OUT        : x_return_status         OUT NOCOPY VARCHAR2
5094 --
5095 -- Version    : Current version 1.0
5096 --
5097 -- Notes      : When a invoice is resubmited, in case of existence of new matches in the same match amount,
5098 --              the lines from old match_amount has been made zero (charge and taxes)
5099 PROCEDURE Zero_TaxLinesPerMatchAmt (
5100     p_match_amount_id IN NUMBER,
5101     p_adjustment_num IN NUMBER,
5102     x_return_status OUT NOCOPY VARCHAR2
5103 ) IS
5104     l_program_name CONSTANT VARCHAR2(30) := 'Zero_TaxLinesPerMatchAmt';
5105     l_return_status VARCHAR2(1);
5106     l_debug_info VARCHAR2(200);
5107     CURSOR original_TL
5108     IS
5109          SELECT tl.tax_line_id         ,
5110             tl.tax_line_num            ,
5111             tl.tax_code                ,
5112             tl.ship_header_id          ,
5113             tl.parent_tax_line_id      ,
5114             tl.adjustment_num          ,
5115             tl.match_id                ,
5116             tl.source_parent_table_name,
5117             tl.source_parent_table_id  ,
5118             tl.tax_amt                 ,
5119             tl.nrec_tax_amt            ,
5120             tl.currency_code           ,
5121             tl.currency_conversion_type,
5122             tl.currency_conversion_date,
5123             tl.currency_conversion_rate,
5124             tl.tax_amt_included_flag
5125            FROM inl_adj_tax_lines_v tl
5126           WHERE match_Amount_id = p_match_Amount_id
5127           AND NOT EXISTS (SELECT 1
5128                             FROM INL_TAX_LINES t
5129                             WHERE t.parent_tax_line_id = tl.tax_line_id)
5130           ;
5131     TYPE ori_TL_Type
5132     IS
5133         TABLE OF original_TL%ROWTYPE;
5134     C_ori_TL ori_TL_Type;
5135     l_TxLn_Assoc inl_TxLn_Assoc_tp;
5136     l_new_tax_line_id NUMBER;
5137 BEGIN
5138     -- Standard Beginning of Procedure/Function Logging
5139     INL_LOGGING_PVT.Log_BeginProc (
5140         p_module_name => g_module_name,
5141         p_procedure_name => l_program_name
5142     );
5143     --  Initialize return status to success
5144     x_return_status := L_FND_RET_STS_SUCCESS;
5145     l_debug_info := 'Getting existent estimated TaxLine.';
5146     INL_LOGGING_PVT.Log_Statement (
5147         p_module_name       => g_module_name,
5148         p_procedure_name    => l_program_name,
5149         p_debug_info        => l_debug_info
5150     ) ;
5151     OPEN original_TL;
5152     FETCH original_TL BULK COLLECT INTO C_ori_TL;
5153     CLOSE original_TL;
5154     l_debug_info := C_ori_TL.LAST||' lines have been retrieved.';
5155     INL_LOGGING_PVT.Log_Statement (
5156         p_module_name => g_module_name,
5157         p_procedure_name => l_program_name,
5158         p_debug_info => l_debug_info
5159     ) ;
5160     IF NVL (C_ori_TL.LAST, 0) > 0 THEN
5161         l_TxLn_Assoc.inl_Assoc.allocation_basis     := NULL;
5162         l_TxLn_Assoc.inl_Assoc.allocation_uom_code  := NULL;
5163         l_TxLn_Assoc.inl_Assoc.to_parent_table_name := NULL;
5164         l_TxLn_Assoc.inl_Assoc.to_parent_table_id   := NULL;
5165         l_TxLn_Assoc.adjustment_num := p_adjustment_num;
5166         l_TxLn_Assoc.match_id       := null;
5167         l_TxLn_Assoc.match_Amount_id := p_match_Amount_id;
5168         l_TxLn_Assoc.matched_amt    := 0;
5169         l_TxLn_Assoc.nrec_tax_amt   := 0;
5170         l_TxLn_Assoc.source_parent_table_name := 'INL_TAX_LINES';
5171         FOR i IN NVL (C_ori_TL.FIRST, 0) ..NVL (C_ori_TL.LAST, 0)
5172         LOOP
5173             l_TxLn_Assoc.inl_Assoc.ship_header_id := C_ori_TL (i) .ship_header_id;
5174             l_TxLn_Assoc.tax_code                 := C_ori_TL (i) .tax_code;
5175             l_TxLn_Assoc.tax_line_num             := C_ori_TL (i) .tax_line_num;
5176             l_TxLn_Assoc.parent_tax_line_id       := C_ori_TL (i) .tax_line_id;
5177             l_TxLn_Assoc.source_parent_table_id   := C_ori_TL (i) .tax_line_id; --Unique index U2 in INL_TAX_LINES
5178             l_TxLn_Assoc.currency_code            := C_ori_TL (i) .currency_code;
5179             l_TxLn_Assoc.currency_conversion_type := C_ori_TL (i) .currency_conversion_type;
5180             l_TxLn_Assoc.currency_conversion_date := C_ori_TL (i) .currency_conversion_date;
5181             l_TxLn_Assoc.currency_conversion_rate := C_ori_TL (i) .currency_conversion_rate;
5182             l_TxLn_Assoc.tax_amt_included_flag    := C_ori_TL (i) .tax_amt_included_flag;
5183             -- Create_TxLines
5184             l_debug_info := 'Estimated Tax line found new with 0.';
5185             INL_LOGGING_PVT.Log_Statement (
5186                 p_module_name => g_module_name,
5187                 p_procedure_name => l_program_name,
5188                 p_debug_info => l_debug_info
5189             ) ;
5190             Create_TxLines (
5191                 p_TxLn_Assoc        => l_TxLn_Assoc,
5192                 p_include_assoc     => 'N',
5193                 p_adjustment_num    => p_adjustment_num,
5194                 x_new_tax_line_id   => l_new_tax_line_id,
5195                 x_return_status     => l_return_status
5196             ) ;
5197             IF l_return_status = L_FND_RET_STS_ERROR THEN
5198                 RAISE L_FND_EXC_ERROR;
5199             ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
5200                 RAISE L_FND_EXC_UNEXPECTED_ERROR;
5201             END IF;
5202         END LOOP;
5203     END IF;
5204     -- Standard End of Procedure/Function Logging
5205     INL_LOGGING_PVT.Log_EndProc (
5206         p_module_name => g_module_name,
5207         p_procedure_name => l_program_name
5208     ) ;
5209 EXCEPTION
5210 WHEN L_FND_EXC_ERROR THEN
5211     -- Standard Expected Error Logging
5212     INL_LOGGING_PVT.Log_ExpecError (
5213         p_module_name => g_module_name,
5214         p_procedure_name => l_program_name
5215     ) ;
5216     x_return_status := L_FND_RET_STS_ERROR;
5217 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
5218     -- Standard Unexpected Error Logging
5219     INL_LOGGING_PVT.Log_UnexpecError (
5220         p_module_name => g_module_name,
5221         p_procedure_name => l_program_name
5222     ) ;
5223     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
5224 WHEN OTHERS THEN
5225     -- Standard Unexpected Error Logging
5226     INL_LOGGING_PVT.Log_UnexpecError (
5227         p_module_name => g_module_name,
5228         p_procedure_name => l_program_name
5229     ) ;
5230     x_return_status := L_FND_RET_STS_UNEXP_ERROR ;
5231     IF FND_MSG_PUB.Check_Msg_Level (p_message_level  => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5232         FND_MSG_PUB.Add_Exc_Msg (
5233             p_pkg_name => g_pkg_name,
5234             p_procedure_name => l_program_name
5235         ) ;
5236     END IF;
5237 END Zero_TaxLinesPerMatchAmt;
5238 
5239 ---
5240 ---
5241 -- API name   : Adjust_ShipLines
5242 -- Type       : Private
5243 -- Function   : Create Adjustments for Shipment Lines
5244 -- Pre-reqs   : None
5245 -- Parameters :
5246 -- IN         : p_api_version     IN NUMBER   Required
5247 --              p_init_msg_list   IN VARCHAR2 Optional  Default = L_FND_FALSE
5248 --              p_commit          IN VARCHAR2 Optional  Default = L_FND_FALSE
5249 --              p_match_id        IN  NUMBER,
5250 --              p_adjustment_num  IN NUMBER,
5251 --              p_func_currency_code IN VARCHAR2 , --BUG#8468830
5252 -- OUT          x_return_status   OUT NOCOPY VARCHAR2
5253 --              x_msg_count       OUT NOCOPY NUMBER
5254 --              x_msg_data        OUT NOCOPY VARCHAR2
5255 --
5256 -- Version    : Current version 1.0
5257 --
5258 -- Notes      :
5259 PROCEDURE Adjust_ShipLines    (
5260         p_api_version        IN NUMBER,
5261         p_init_msg_list      IN VARCHAR2 := L_FND_FALSE,
5262         p_commit             IN VARCHAR2 := L_FND_FALSE,
5263         p_match_id           IN NUMBER,
5264         p_adjustment_num     IN NUMBER,
5265         p_func_currency_code IN VARCHAR2, --BUG#8468830
5266         x_return_status      OUT NOCOPY VARCHAR2,
5267         x_msg_count          OUT NOCOPY NUMBER,
5268         x_msg_data           OUT NOCOPY VARCHAR2
5269 ) IS
5270     -- Cursor to get previous matching values
5271     -- in order to calculate partial match
5272     CURSOR c_previous_matchings (
5273         pc_ship_line_id IN NUMBER,
5274         pc_curr_match_id IN NUMBER,
5275         pc_to_currency_code IN VARCHAR2,
5276         pc_to_curr_conversion_type IN VARCHAR2,
5277         pc_to_curr_conversion_date IN DATE)
5278                          IS
5279          SELECT mat.matched_qty,
5280             mat.match_id       ,
5281             DECODE (pc_to_currency_code,
5282                     mat.matched_curr_code,
5283                     mat.matched_amt,
5284                     inl_landedcost_pvt.Converted_Amt (
5285                         mat.matched_amt,
5286                         mat.matched_curr_code,
5287                         pc_to_currency_code,
5288                         pc_to_curr_conversion_type,
5289                         pc_to_curr_conversion_date
5290                     )) matched_amt
5291            FROM inl_corr_matches_v mat
5292           WHERE mat.to_parent_table_name = 'INL_SHIP_LINES'
5293             AND mat.match_type_code      = 'ITEM'
5294             AND mat.to_parent_table_id   = pc_ship_line_id
5295             AND NOT EXISTS
5296             (
5297                  SELECT 1
5298                    FROM inl_corr_matches_v m2
5299                   WHERE m2.from_parent_table_name = mat.from_parent_table_name
5300                     AND m2.from_parent_table_id   = mat.from_parent_table_id
5301                     AND m2.match_id               > mat.match_id
5302             )
5303         AND mat.match_id <> pc_curr_match_id
5304    ORDER BY match_id ;
5305     l_prev_matchings_rec c_previous_matchings%ROWTYPE;
5306     l_api_name                  CONSTANT VARCHAR2 (30) := 'Adjust_ShipLines';
5307     l_api_version               CONSTANT NUMBER        := 1.0;
5308     l_return_status             VARCHAR2 (1) ;
5309     l_next_adjust_num           NUMBER;
5310     l_sum_adj_price             NUMBER;
5311     l_shipl_qty_sub_match       NUMBER;
5312     l_final_qty                 NUMBER;
5313     l_final_price               NUMBER;
5314     l_sl_inv_item_id            NUMBER;
5315     l_net_rcv_txn_qty           NUMBER;
5316     l_shipl_unit_price          NUMBER;
5317     l_to_ship_header_id         NUMBER;
5318     l_to_ship_line_id           NUMBER;
5319     l_matched_qty               NUMBER;
5320     l_primary_qty               NUMBER;
5321     l_secondary_qty             NUMBER; --BUG#8924795
5322     l_primary_unit_price        NUMBER;
5323     l_secondary_unit_price      NUMBER; -- BUG#8924795
5324     l_inv_org_id                NUMBER;
5325     l_matched_uom_code          VARCHAR2 (3) ;
5326     l_primary_uom_code          VARCHAR2 (3) ;
5327     l_secondary_uom_code        VARCHAR2 (3) ; -- BUG#8924795
5328     l_txn_uom_code              VARCHAR2 (3) ; --BUG#7674121
5329     l_debug_info                VARCHAR2 (240) ;
5330     l_replace_estim_qty_flag    VARCHAR2 (1) ;
5331     l_ship_line_num             NUMBER;
5332     l_ship_line_group_id        NUMBER;
5333     l_matched_amt               NUMBER;
5334     l_ship_line_curr_code       VARCHAR2 (15) ;
5335     l_current_curr_code         VARCHAR2 (15) ;
5336     l_current_curr_conv_type    VARCHAR2 (15) ;
5337     l_ship_line_curr_conv_type  VARCHAR2 (15) ; --BUG#8468830
5338     l_current_curr_conv_date    DATE;
5339     l_ship_line_curr_conv_rate  NUMBER; --BUG#8468830
5340     l_current_curr_conv_rate    NUMBER;
5341     l_ori_unit_price            NUMBER;
5342     l_existing_match_info_flag  VARCHAR2 (1) ;
5343     l_curr_match_id             NUMBER;
5344     l_from_parent_table_name    VARCHAR2 (30) ;
5345     l_from_parent_table_id      NUMBER;
5346 -- Bug #7702294
5347     l_rt_transaction_id         NUMBER;
5348     l_rt_uom_code               VARCHAR2(3);
5349     l_ordered_po_qty            NUMBER;
5350     l_cancelled_po_qty          NUMBER;
5351     l_received_po_qty           NUMBER;
5352     l_corrected_po_qty          NUMBER;
5353     l_delivered_po_qty          NUMBER;
5354     l_rtv_po_qty                NUMBER;
5355     l_billed_po_qty             NUMBER;
5356     l_accepted_po_qty           NUMBER;
5357     l_rejected_po_qty           NUMBER;
5358     l_ordered_txn_qty           NUMBER;
5359     l_cancelled_txn_qty         NUMBER;
5360     l_received_txn_qty          NUMBER;
5361     l_corrected_txn_qty         NUMBER;
5362     l_delivered_txn_qty         NUMBER;
5363     l_rtv_txn_qty               NUMBER;
5364     l_billed_txn_qty            NUMBER;
5365     l_accepted_txn_qty          NUMBER;
5366     l_rejected_txn_qty          NUMBER;
5367 -- Bug #7702294
5368     l_nrq_zero_exception_flag   VARCHAR2(1):='N'; --BUG#8334078
5369 
5370    -- Bug 11775590
5371    CURSOR c_last_adj_sl(p_to_ship_line_id IN NUMBER) IS
5372      SELECT rt.transaction_id,
5373            um.uom_code
5374      INTO l_rt_transaction_id,
5375           l_rt_uom_code
5376      FROM mtl_units_of_measure um,
5377           rcv_transactions rt,
5378           inl_ship_lines sl
5379      WHERE um.unit_of_measure = rt.unit_of_measure
5380      AND rt.destination_type_code = 'RECEIVING'
5381      AND ((rt.transaction_type = 'RECEIVE'
5382             AND rt.parent_transaction_id = -1)
5383           OR (rt.transaction_type = 'MATCH' -- Bug#9275335
5384           ))
5385      AND  rt.lcm_shipment_line_id = sl.ship_line_id
5386      AND rt.po_line_location_id = sl.ship_line_source_id
5387      AND sl.ship_line_src_type_code = 'PO'
5388      AND sl.ship_line_id = p_to_ship_line_id;
5389 
5390      TYPE last_adj_sl IS
5391      TABLE OF c_last_adj_sl%ROWTYPE INDEX BY BINARY_INTEGER;
5392      l_last_adj_sl last_adj_sl;
5393      -- /Bug 11775590
5394 
5395 BEGIN
5396     -- Standard Beginning of Procedure/Function Logging
5397     INL_LOGGING_PVT.Log_BeginProc (
5398         p_module_name => g_module_name,
5399         p_procedure_name => l_api_name
5400     ) ;
5401     -- Standard Start of API savepoint
5402     SAVEPOINT Adjust_ShipLines_PVT;
5403     -- Initialize message list if p_init_msg_list is set to TRUE.
5404     IF FND_API.to_Boolean (p_init_msg_list) THEN
5405         FND_MSG_PUB.initialize;
5406     END IF;
5407     -- Check for call compatibility.
5408     IF NOT FND_API.Compatible_API_Call (
5409         p_current_version_number => l_api_version,
5410         p_caller_version_number => p_api_version,
5411         p_api_name => l_api_name,
5412         p_pkg_name => g_pkg_name
5413     ) THEN
5414         RAISE L_FND_EXC_UNEXPECTED_ERROR;
5415     END IF;
5416     --  Initialize API return status to success
5417     x_return_status := L_FND_RET_STS_SUCCESS;
5418     -- Getting Matching Data
5419     l_debug_info := 'Getting Matching Data';
5420     INL_LOGGING_PVT.Log_Statement (
5421         p_module_name => g_module_name,
5422         p_procedure_name => l_api_name,
5423         p_debug_info => l_debug_info
5424     ) ;
5425     SELECT
5426         mat.ship_header_id ,                                                        /* 01 */
5427         mat.to_parent_table_id,                                                     /* 02 */
5428         mat.matched_qty,                                                            /* 03 */
5429         mat.matched_uom_code,                                                       /* 04 */
5430         mat.replace_estim_qty_flag,                                                 /* 05 */
5431         mat.existing_match_info_flag,                                               /* 06 */
5432         mat.matched_amt,                                                            /* 07 */
5433 --      sl.txn_qty,                                                                 /* 08 */ -- Bug #7702294
5434         sl.primary_uom_code,                                                        /* 09a*/
5435         sl.secondary_uom_code,                                                      /* 09b*/
5436         sl.txn_uom_code,                                                            /* 09c*/ --Bug #7674121
5437         sh.organization_id,                                                         /* 10 */
5438         sl.inventory_item_id,                                                       /* 11 */
5439         sl.ship_line_num,                                                           /* 12 */
5440         sl.ship_line_group_id,                                                      /* 13 */
5441         sl.currency_code,                                                           /* 14 */
5442         mat.matched_curr_code,                                                      /* 15 */
5443         mat.matched_curr_conversion_type,                                           /* 16 */ --BUG#8468830
5444         mat.matched_curr_conversion_rate  ,                                         /* 16a*/ --BUG#8468830
5445         sl.currency_conversion_type  ,                                              /* 16b*/ --BUG#8468830
5446         NVL (mat.matched_curr_conversion_date, sl.currency_conversion_date),        /* 17 */
5447         sl.currency_conversion_rate,                                                /* 17a*/ --BUG#8468830
5448         sl.txn_unit_price,                                                          /* 18 */
5449         mat.from_parent_table_name,                                                 /* 19 */
5450         mat.from_parent_table_id,                                                   /* 20 */
5451         mat.match_id                                                                /* 21 */
5452        INTO
5453         l_to_ship_header_id   ,                                                     /* 01 */
5454         l_to_ship_line_id         ,                                                 /* 02 */
5455         l_matched_qty             ,                                                 /* 03 */
5456         l_matched_uom_code        ,                                                 /* 04 */
5457         l_replace_estim_qty_flag  ,                                                 /* 05 */
5458         l_existing_match_info_flag,                                                 /* 06 */
5459         l_matched_amt             ,                                                 /* 07 */
5460 --      l_net_rcv_txn_qty           ,                                               /* 08 */ -- Bug #7702294
5461         l_primary_uom_code        ,                                                 /* 09a*/
5462         l_secondary_uom_code      ,                                                 /* 09b*/
5463         l_txn_uom_code            ,                                                 /* 09c*/ --Bug #7674121
5464         l_inv_org_id              ,                                                 /* 10 */
5465         l_sl_inv_item_id          ,                                                 /* 11 */
5466         l_ship_line_num           ,                                                 /* 12 */
5467         l_ship_line_group_id      ,                                                 /* 13 */
5468         l_ship_line_curr_code     ,                                                 /* 14 */
5469         l_current_curr_code       ,                                                 /* 15 */
5470         l_current_curr_conv_type  ,                                                 /* 16 */
5471         l_current_curr_conv_rate  ,                                                 /* 16a*/ --BUG#8468830
5472         l_ship_line_curr_conv_type,                                                 /* 16b*/ --BUG#8468830
5473         l_current_curr_conv_date  ,                                                 /* 17 */
5474         l_ship_line_curr_conv_rate,                                                 /* 17a*/ --BUG#8468830
5475         l_ori_unit_price          ,                                                 /* 18 */
5476         l_from_parent_table_name  ,                                                 /* 19 */
5477         l_from_parent_table_id    ,                                                 /* 20 */
5478         l_curr_match_id                                                             /* 21 */
5479        FROM inl_corr_matches_v mat,
5480         inl_ship_lines sl         ,
5481         inl_ship_lines sl0        ,
5482         inl_ship_headers sh
5483       WHERE mat.match_id                   = p_match_id
5484         AND mat.to_parent_table_name       = 'INL_SHIP_LINES'
5485         AND mat.adj_already_generated_flag = 'N'
5486         AND sl.ship_header_id              = sh.ship_header_id
5487         AND sl0.ship_line_id = mat.to_parent_table_id
5488         AND sl0.ship_header_id     = sl.ship_header_id
5489         AND sl0.ship_line_group_id = sl.ship_line_group_id
5490         AND sl0.ship_line_num      = sl.ship_line_num
5491         AND sl.adjustment_num =
5492                 (
5493                     SELECT MIN(sl2.adjustment_num)
5494                     FROM inl_ship_lines sl2
5495                     WHERE sl0.ship_header_id     = sl2.ship_header_id
5496                     AND   sl0.ship_line_group_id = sl2.ship_line_group_id
5497                     AND   sl0.ship_line_num      = sl2.ship_line_num
5498                 )
5499         AND (mat.correction_match_id is null OR
5500             mat.correction_match_id = (select min(mat2.correction_match_id)
5501                                          FROM inl_corr_matches_v mat2
5502                                         WHERE mat2.match_id                   = p_match_id
5503                                           AND mat2.to_parent_table_name       = 'INL_SHIP_LINES'
5504                                           AND mat2.adj_already_generated_flag = 'N'
5505                                       ));
5506     INL_LOGGING_PVT.Log_Variable (
5507         p_module_name => g_module_name,
5508         p_procedure_name => l_api_name,
5509         p_var_name => 'l_to_ship_line_id',
5510         p_var_value => l_to_ship_line_id
5511     );
5512 
5513 
5514     l_debug_info := 'Getting Receiving Data';
5515     INL_LOGGING_PVT.Log_Statement (
5516         p_module_name => g_module_name,
5517         p_procedure_name => l_api_name,
5518         p_debug_info => l_debug_info
5519     ) ;
5520 
5521 -- BUG#7702294
5522 -- We should always consider the net rcv quantity, instead of the quantity of the
5523 -- last adjustment done in shipment line. That is because corrections/returns may have been done in RCV.
5524     -- BUG#8235284
5525 
5526  -- Bug 11775590 Replaced by cursor
5527     /*
5528     SELECT rt.transaction_id,
5529            um.uom_code
5530      INTO l_rt_transaction_id,
5531           l_rt_uom_code
5532      FROM mtl_units_of_measure um,
5533           rcv_transactions rt,
5534           inl_ship_lines sl
5535      WHERE um.unit_of_measure = rt.unit_of_measure
5536      AND rt.destination_type_code = 'RECEIVING'
5537      AND ((rt.transaction_type = 'RECEIVE'
5538             AND rt.parent_transaction_id = -1)
5539           OR (rt.transaction_type = 'MATCH' -- Bug#9275335
5540           ))
5541      AND  rt.lcm_shipment_line_id = sl.ship_line_id
5542      AND rt.po_line_location_id = sl.ship_line_source_id
5543      AND sl.ship_line_src_type_code = 'PO'
5544      AND sl.ship_line_id = l_to_ship_line_id;
5545     */
5546 
5547     OPEN c_last_adj_sl(l_to_ship_line_id);
5548     FETCH c_last_adj_sl BULK COLLECT INTO l_last_adj_sl;
5549     CLOSE c_last_adj_sl;
5550 
5551     IF NVL(l_last_adj_sl.LAST, 0) > 0 THEN
5552 
5553         FOR i IN NVL(l_last_adj_sl.FIRST, 0)..NVL(l_last_adj_sl.LAST, 0)
5554         LOOP
5555 
5556             l_rt_transaction_id := l_last_adj_sl(i).transaction_id;
5557             l_rt_uom_code :=  l_last_adj_sl(i).uom_code;
5558 
5559     l_debug_info := 'Call rcv_invoice_matching_sv';
5560     INL_LOGGING_PVT.Log_Statement (
5561         p_module_name => g_module_name,
5562         p_procedure_name => l_api_name,
5563         p_debug_info => l_debug_info
5564     ) ;
5565 
5566     INL_LOGGING_PVT.Log_Variable (
5567         p_module_name => g_module_name,
5568         p_procedure_name => l_api_name,
5569         p_var_name => 'l_rt_transaction_id',
5570         p_var_value => l_rt_transaction_id
5571     );
5572 
5573     rcv_invoice_matching_sv.get_quantities
5574      (top_transaction_id => l_rt_transaction_id,
5575       ordered_po_qty     => l_ordered_po_qty   ,
5576       cancelled_po_qty   => l_cancelled_po_qty ,
5577       received_po_qty    => l_received_po_qty  ,
5578       corrected_po_qty   => l_corrected_po_qty ,
5579       delivered_po_qty   => l_delivered_po_qty ,
5580       rtv_po_qty         => l_rtv_po_qty       ,
5581       billed_po_qty      => l_billed_po_qty    ,
5582       accepted_po_qty    => l_accepted_po_qty  ,
5583       rejected_po_qty    => l_rejected_po_qty  ,
5584       ordered_txn_qty    => l_ordered_txn_qty  ,
5585       cancelled_txn_qty  => l_cancelled_txn_qty,
5586       received_txn_qty   => l_received_txn_qty ,
5587       corrected_txn_qty  => l_corrected_txn_qty,
5588       delivered_txn_qty  => l_delivered_txn_qty,
5589       rtv_txn_qty        => l_rtv_txn_qty      ,
5590       billed_txn_qty     => l_billed_txn_qty   ,
5591       accepted_txn_qty   => l_accepted_txn_qty ,
5592       rejected_txn_qty   => l_rejected_txn_qty);
5593 
5594     --- Bug  11775590
5595     --l_net_rcv_txn_qty := l_received_txn_qty + l_corrected_txn_qty - l_rtv_txn_qty;
5596     l_net_rcv_txn_qty := NVL(l_net_rcv_txn_qty,0) + l_received_txn_qty + l_corrected_txn_qty - l_rtv_txn_qty;
5597 
5598     INL_LOGGING_PVT.Log_Variable (
5599         p_module_name => g_module_name,
5600         p_procedure_name => l_api_name,
5601         p_var_name => 'l_received_txn_qty',
5602         p_var_value => l_received_txn_qty
5603     );
5604 
5605     --BUG#8334078
5606     -- 3rd alternative: if net_rcv = 0 get 1st qty and put a mark in the record
5607     IF l_net_rcv_txn_qty = 0 THEN
5608 
5609         INL_LOGGING_PVT.Log_Variable (
5610             p_module_name => g_module_name,
5611             p_procedure_name => l_api_name,
5612             p_var_name => 'l_net_rcv_txn_qty',
5613             p_var_value => l_net_rcv_txn_qty
5614         );
5615         l_nrq_zero_exception_flag := 'Y';
5616         SELECT txn_qty
5617         INTO l_net_rcv_txn_qty
5618         FROM inl_ship_lines
5619         WHERE ship_header_id = l_to_ship_header_id
5620         AND   ship_line_num = l_ship_line_num
5621         AND   ship_line_group_id = l_ship_line_group_id
5622         AND   adjustment_num = 0
5623         ;
5624     END IF;
5625     --BUG#8334078
5626 
5627     INL_LOGGING_PVT.Log_Variable (
5628         p_module_name => g_module_name,
5629         p_procedure_name => l_api_name,
5630         p_var_name => 'l_received_txn_qty',
5631         p_var_value => l_received_txn_qty
5632     );
5633     INL_LOGGING_PVT.Log_Variable (
5634         p_module_name => g_module_name,
5635         p_procedure_name => l_api_name,
5636         p_var_name => 'l_corrected_txn_qty',
5637         p_var_value => l_corrected_txn_qty
5638     );
5639 
5640     INL_LOGGING_PVT.Log_Variable (
5641         p_module_name => g_module_name,
5642         p_procedure_name => l_api_name,
5643         p_var_name => 'l_rtv_txn_qty',
5644         p_var_value => l_rtv_txn_qty
5645     );
5646 
5647     INL_LOGGING_PVT.Log_Variable (
5648         p_module_name => g_module_name,
5649         p_procedure_name => l_api_name,
5650         p_var_name => 'l_net_rcv_txn_qty',
5651         p_var_value => l_net_rcv_txn_qty
5652     );
5653 -- Bug #7849658
5654     l_net_rcv_txn_qty := INL_LANDEDCOST_PVT.Converted_Qty (
5655                             p_organization_id => l_inv_org_id,
5656                             p_inventory_item_id => l_sl_inv_item_id,
5657                             p_qty => l_net_rcv_txn_qty,
5658                             p_from_uom_code => l_rt_uom_code,
5659                             p_to_uom_code => l_txn_uom_code
5660     );
5661 
5662     INL_LOGGING_PVT.Log_Variable (
5663         p_module_name => g_module_name,
5664         p_procedure_name => l_api_name,
5665         p_var_name => 'l_net_rcv_txn_qty',
5666         p_var_value => l_net_rcv_txn_qty
5667     );
5668 
5669         END LOOP;
5670     END IF;
5671     -- /Bug 11775590
5672 
5673 -- Bug #7702294
5674 
5675     INL_LOGGING_PVT.Log_Variable (
5676         p_module_name => g_module_name,
5677         p_procedure_name => l_api_name,
5678         p_var_name => 'l_ship_line_curr_code',
5679         p_var_value => l_ship_line_curr_code
5680     );
5681     INL_LOGGING_PVT.Log_Variable (
5682         p_module_name => g_module_name,
5683         p_procedure_name => l_api_name,
5684         p_var_name => 'l_current_curr_code',
5685         p_var_value => l_current_curr_code
5686     );
5687     IF l_ship_line_curr_code <> l_current_curr_code
5688         AND nvl(l_current_curr_conv_type,l_ship_line_curr_conv_type)  IS NOT NULL THEN  --BUG#8468830
5689         INL_LOGGING_PVT.Log_Variable (
5690             p_module_name => g_module_name,
5691             p_procedure_name => l_api_name,
5692             p_var_name => 'l_current_curr_conv_type',
5693             p_var_value => l_current_curr_conv_type
5694         );
5695 
5696         IF l_current_curr_conv_type = 'User' THEN  --BUG#8468830
5697             -- if currency conversion rate is in match: divide
5698             l_shipl_unit_price :=  l_ori_unit_price / l_current_curr_conv_rate;
5699         ELSIF l_current_curr_conv_type IS NULL AND l_ship_line_curr_conv_type = 'User' THEN  --BUG#8468830
5700             -- else if currency conversion rate is in ship line: multiply
5701             l_shipl_unit_price :=  l_ori_unit_price * l_ship_line_curr_conv_rate;
5702         ELSE
5703             l_shipl_unit_price :=  inl_landedcost_pvt.Converted_Amt (
5704                                         l_ori_unit_price,
5705                                         l_ship_line_curr_code,
5706                                         l_current_curr_code,
5707                                         nvl(l_current_curr_conv_type,l_ship_line_curr_conv_type),  --BUG#8468830
5708                                         l_current_curr_conv_date
5709             );
5710         END IF;
5711     ELSE
5712         l_shipl_unit_price  := l_ori_unit_price;
5713     END IF;
5714 
5715     l_debug_info := 'l_to_ship_header_id';
5716     INL_LOGGING_PVT.Log_Variable (
5717         p_module_name     => g_module_name,
5718         p_procedure_name  => l_api_name,
5719         p_var_name        => l_debug_info,
5720         p_var_value       => l_to_ship_header_id) ;
5721     l_debug_info := 'l_to_ship_line_id';
5722     INL_LOGGING_PVT.Log_Variable (
5723         p_module_name     => g_module_name,
5724         p_procedure_name  => l_api_name,
5725         p_var_name        => l_debug_info,
5726         p_var_value       => l_to_ship_line_id) ;
5727     l_debug_info := 'l_matched_qty';
5728     INL_LOGGING_PVT.Log_Variable (
5729         p_module_name     => g_module_name,
5730         p_procedure_name  => l_api_name,
5731         p_var_name        => l_debug_info,
5732         p_var_value       => l_matched_qty) ;
5733     l_debug_info := 'l_matched_uom_code';
5734     INL_LOGGING_PVT.Log_Variable (
5735         p_module_name     => g_module_name,
5736         p_procedure_name  => l_api_name,
5737         p_var_name        => l_debug_info,
5738         p_var_value       => l_matched_uom_code) ;
5739     -- STEP 2: Get Estimated Shipment Line Data
5740     l_debug_info := 'Get Estimated Shipment Line Data';
5741     INL_LOGGING_PVT.Log_Statement (
5742         p_module_name    => g_module_name,
5743         p_procedure_name => l_api_name,
5744         p_debug_info     => l_debug_info) ;
5745     l_debug_info := 'l_sl_inv_item_id';
5746     INL_LOGGING_PVT.Log_Variable (
5747         p_module_name     => g_module_name,
5748         p_procedure_name  => l_api_name,
5749         p_var_name        => l_debug_info,
5750         p_var_value       => l_sl_inv_item_id) ;
5751     l_debug_info := 'l_net_rcv_txn_qty';
5752     INL_LOGGING_PVT.Log_Variable (
5753         p_module_name     => g_module_name,
5754         p_procedure_name  => l_api_name,
5755         p_var_name        => l_debug_info,
5756         p_var_value       => l_net_rcv_txn_qty) ;
5757     l_debug_info := 'l_shipl_unit_price';
5758     INL_LOGGING_PVT.Log_Variable (
5759         p_module_name     => g_module_name,
5760         p_procedure_name  => l_api_name,
5761         p_var_name        => l_debug_info,
5762         p_var_value       => l_shipl_unit_price) ;
5763     -- STEP 3: Get the Adjustment Number
5764     l_debug_info := 'Get the Adjustment Number';
5765     INL_LOGGING_PVT.Log_Statement (
5766         p_module_name    => g_module_name,
5767         p_procedure_name => l_api_name,
5768         p_debug_info     => l_debug_info) ;
5769     l_next_adjust_num := p_adjustment_num;
5770     l_debug_info := 'l_next_adjust_num';
5771     INL_LOGGING_PVT.Log_Variable (
5772         p_module_name     => g_module_name,
5773         p_procedure_name  => l_api_name,
5774         p_var_name        => l_debug_info,
5775         p_var_value       => l_next_adjust_num) ;
5776 
5777     -- STEP 4: Partial Matching handling
5778     --IF l_matched_qty < l_opl_txn_qty THEN
5779     --Calculate Partial Matching based on previous Adjustments
5780     l_debug_info := 'Calculate Partial Matching based on previous Adjustments';
5781     INL_LOGGING_PVT.Log_Statement (
5782         p_module_name => g_module_name,
5783         p_procedure_name => l_api_name,
5784         p_debug_info => l_debug_info
5785     );
5786     IF l_replace_estim_qty_flag = 'Y' THEN  --Match from RCV
5787         l_debug_info := 'Getting the values from Adj';
5788         INL_LOGGING_PVT.Log_Statement (
5789             p_module_name => g_module_name,
5790             p_procedure_name => l_api_name,
5791             p_debug_info => l_debug_info
5792         );
5793         SELECT txn_unit_price,
5794             txn_qty           ,
5795             primary_qty       ,
5796             primary_unit_price
5797            INTO l_final_price,
5798             l_final_qty      ,
5799             l_primary_qty    ,
5800             l_primary_unit_price
5801            FROM inl_adj_ship_lines_v
5802           WHERE ship_header_id     = l_to_ship_header_id
5803             AND ship_line_group_id = l_ship_line_group_id
5804             AND ship_line_num      = l_ship_line_num;
5805         l_final_price := l_matched_amt / l_matched_qty;
5806         l_debug_info := 'Setting the new quantity ';
5807         INL_LOGGING_PVT.Log_Statement (
5808             p_module_name => g_module_name,
5809             p_procedure_name => l_api_name,
5810             p_debug_info => l_debug_info
5811         ) ;
5812         INL_LOGGING_PVT.Log_Variable (
5813             p_module_name     => g_module_name,
5814             p_procedure_name  => l_api_name,
5815             p_var_name        => 'l_final_qty',
5816             p_var_value       => l_final_qty
5817         );
5818         INL_LOGGING_PVT.Log_Variable (
5819             p_module_name     => g_module_name,
5820             p_procedure_name  => l_api_name,
5821             p_var_name        => 'l_primary_qty',
5822             p_var_value       => l_primary_qty
5823         );
5824         INL_LOGGING_PVT.Log_Variable (
5825             p_module_name     => g_module_name,
5826             p_procedure_name  => l_api_name,
5827             p_var_name        => 'l_primary_unit_price',
5828             p_var_value       => l_primary_unit_price
5829         );
5830 
5831         IF l_final_qty = l_primary_qty THEN
5832             l_final_qty := l_matched_qty;
5833             l_primary_qty := l_matched_qty;
5834             l_primary_unit_price := l_final_price;
5835         ELSE
5836             l_final_qty := l_matched_qty;
5837             -- Getting Primary Quantity and Primary Unit Price
5838             l_primary_qty := INL_LANDEDCOST_PVT.Converted_Qty (
5839                                 p_organization_id => l_inv_org_id,
5840                                 p_inventory_item_id => l_sl_inv_item_id,
5841                                 p_qty => l_final_qty,
5842                                 p_from_uom_code => l_matched_uom_code,
5843                                 p_to_uom_code => l_primary_uom_code
5844                             ) ;
5845             l_primary_unit_price := (l_final_qty * l_final_price) / l_primary_qty;
5846         END IF;
5847     ELSE
5848 
5849         INL_LOGGING_PVT.Log_Variable (
5850             p_module_name => g_module_name,
5851             p_procedure_name => l_api_name,
5852             p_var_name => 'l_existing_match_info_flag',
5853             p_var_value => l_existing_match_info_flag
5854         ) ;
5855 
5856         FOR l_prev_matchings_rec IN c_previous_matchings (
5857                                         l_to_ship_line_id,
5858                                         l_curr_match_id,
5859                                         l_current_curr_code,
5860                                         nvl(l_current_curr_conv_type,l_ship_line_curr_conv_type),
5861                                         l_current_curr_conv_date
5862                                         )
5863         LOOP
5864 
5865             l_sum_adj_price := NVL (l_sum_adj_price, 0) + NVL(l_prev_matchings_rec.matched_amt,0);
5866 --shouldn't be consider            IF NVL(l_prev_matchings_rec.matched_qty,0) > 0 THEN  -- BUG#8198265
5867             l_final_qty     := NVL (l_final_qty, 0)     + NVL(l_prev_matchings_rec.matched_qty,0);
5868 --shouldn't be consider            END IF;
5869 
5870         END LOOP;
5871         -- Add the current transaction values to the calculation
5872         l_debug_info := 'Add the current transaction values to the calculation';
5873         INL_LOGGING_PVT.Log_Statement (
5874             p_module_name => g_module_name,
5875             p_procedure_name => l_api_name,
5876             p_debug_info => l_debug_info
5877         ) ;
5878 
5879 
5880 --shouldn't be consider        IF NVL(l_matched_qty,0) > 0 THEN  -- BUG#8198265
5881         l_final_qty           := NVL (l_final_qty, 0)     + NVL (l_matched_qty, 0) ;
5882 --shouldn't be consider        END IF;
5883         IF l_final_qty < 0 then
5884             l_final_qty := 0;   -- BUG#8198265
5885         END IF;
5886 
5887         l_sum_adj_price       := NVL (l_sum_adj_price, 0) + l_matched_amt;
5888         IF NVL (l_final_qty, 0) < NVL (l_net_rcv_txn_qty, 0) THEN   -- BUG#8198265
5889             l_shipl_qty_sub_match := NVL (l_net_rcv_txn_qty, 0) - NVL (l_final_qty, 0) ;
5890         ELSE
5891             l_shipl_qty_sub_match := 0;
5892         END IF;
5893 
5894         l_sum_adj_price       := NVL (l_sum_adj_price, 0) + (l_shipl_qty_sub_match * nvl(l_shipl_unit_price,0)) ;
5895         l_final_qty           := NVL (l_final_qty, 0)     + l_shipl_qty_sub_match;
5896         --
5897         -- The code above this point should be review in order to verify the necessity of l_final_qty
5898         --
5899         l_final_qty           := l_net_rcv_txn_qty;  --BUG#8198265
5900         l_final_price         := l_sum_adj_price / l_final_qty;            --BUG#8198265
5901 
5902         INL_LOGGING_PVT.Log_Variable (
5903             p_module_name => g_module_name,
5904             p_procedure_name => l_api_name,
5905             p_var_name => 'l_final_qty',
5906             p_var_value => l_final_qty
5907         ) ;
5908 
5909         INL_LOGGING_PVT.Log_Variable (
5910             p_module_name => g_module_name,
5911             p_procedure_name => l_api_name,
5912             p_var_name => 'l_final_price',
5913             p_var_value => l_final_price
5914         ) ;
5915         IF l_matched_uom_code IS NULL THEN          --BUG#7674121
5916             l_matched_uom_code := l_txn_uom_code;   --BUG#7674121
5917         END IF;
5918         -- Verifying if UOM conversion are required
5919         IF l_primary_uom_code <>  l_matched_uom_code THEN     --BUG#7674121
5920             l_primary_qty := INL_LANDEDCOST_PVT.Converted_Qty (
5921                                 p_organization_id => l_inv_org_id,
5922                                 p_inventory_item_id => l_sl_inv_item_id,
5923                                 p_qty => l_final_qty,
5924                                 p_from_uom_code => l_matched_uom_code,
5925                                 p_to_uom_code => l_primary_uom_code) ;
5926         ELSE
5927             l_primary_qty := l_final_qty;
5928         END IF;
5929         l_primary_unit_price := (l_final_qty * l_final_price) / l_primary_qty;
5930 
5931         l_debug_info := 'Ckecking secondary fields';
5932         INL_LOGGING_PVT.Log_Statement (
5933             p_module_name => g_module_name,
5934             p_procedure_name => l_api_name,
5935             p_debug_info => l_debug_info
5936         ) ;
5937         -- BUG 8924795
5938         IF l_secondary_uom_code IS NOT NULL THEN
5939 
5940             l_secondary_qty := INL_LANDEDCOST_PVT.Converted_Qty (
5941                 p_organization_id => l_inv_org_id,
5942                 p_inventory_item_id => l_sl_inv_item_id,
5943                 p_qty => l_primary_qty,
5944                 p_from_uom_code => l_primary_uom_code,
5945                 p_to_uom_code => l_secondary_uom_code) ;
5946 
5947            l_secondary_unit_price := (l_final_qty * l_final_price) / l_secondary_qty;
5948 
5949             l_debug_info := 'l_secondary_qty';
5950             INL_LOGGING_PVT.Log_Variable ( p_module_name     => g_module_name,
5951                                    p_procedure_name  => l_api_name,
5952                                    p_var_name        => l_debug_info,
5953                                    p_var_value       => l_secondary_qty) ;
5954 
5955             l_debug_info := 'l_secondary_unit_price';
5956             INL_LOGGING_PVT.Log_Variable ( p_module_name     => g_module_name,
5957                                    p_procedure_name  => l_api_name,
5958                                    p_var_name        => l_debug_info,
5959                                    p_var_value       => l_secondary_unit_price) ;
5960 
5961         END IF;
5962         --
5963         -- STEP 5: Copy Shipment Line from Estimated to Actual
5964         l_debug_info := 'Copy Shipment Line from Estimated to Actual';
5965         INL_LOGGING_PVT.Log_Statement (
5966             p_module_name => g_module_name,
5967             p_procedure_name => l_api_name,
5968             p_debug_info => l_debug_info
5969         ) ;
5970     END IF;
5971     INL_LOGGING_PVT.Log_Variable (
5972         p_module_name     => g_module_name,
5973         p_procedure_name  => l_api_name,
5974         p_var_name        => 'l_final_qty',
5975         p_var_value       => l_final_qty
5976     );
5977     INL_LOGGING_PVT.Log_Variable (
5978         p_module_name     => g_module_name,
5979         p_procedure_name  => l_api_name,
5980         p_var_name        => 'l_primary_qty',
5981         p_var_value       => l_primary_qty
5982     );
5983     INL_LOGGING_PVT.Log_Variable (
5984         p_module_name     => g_module_name,
5985         p_procedure_name  => l_api_name,
5986         p_var_name        => 'l_primary_unit_price',
5987         p_var_value       => l_primary_unit_price
5988     );
5989 
5990     --BUG#8468830
5991     IF p_func_currency_code <> l_current_curr_code THEN
5992         l_current_curr_conv_type:=nvl(l_current_curr_conv_type,l_ship_line_curr_conv_type);
5993     ELSE
5994         l_current_curr_conv_type:= NULL;
5995         l_current_curr_conv_rate:= NULL;
5996     END IF;
5997 
5998     --BUG#8468830
5999     INSERT
6000        INTO inl_ship_lines_all
6001         (
6002             ship_header_id,             /* 01 */
6003             ship_line_group_id,         /* 02 */
6004             ship_line_id,               /* 03 */
6005             ship_line_num,              /* 04 */
6006             ship_line_type_id,          /* 05 */
6007             ship_line_src_type_code,    /* 06 */
6008             ship_line_source_id,        /* 07 */
6009             parent_ship_line_id,        /* 08 */
6010             adjustment_num,             /* 09 */
6011             match_id,                   /* 10 */
6012             currency_code,              /* 12 */
6013             currency_conversion_type,   /* 13 */
6014             currency_conversion_date,   /* 14 */
6015             currency_conversion_rate,   /* 15 */
6016             inventory_item_id,          /* 16 */
6017             txn_qty,                    /* 17 */
6018             txn_uom_code,               /* 18 */
6019             txn_unit_price,             /* 19 */
6020             primary_qty,                /* 20 */
6021             primary_uom_code,           /* 21 */
6022             primary_unit_price,         /* 22 */
6023             secondary_qty,              /* 23 */
6024             secondary_uom_code,         /* 24 */
6025             secondary_unit_price,       /* 25 */
6026             landed_cost_flag,           /* 30 */
6027             allocation_enabled_flag,    /* 31 */
6028             trx_business_category,      /* 32 */
6029             intended_use,               /* 33 */
6030             product_fiscal_class,       /* 34 */
6031             product_category,           /* 35 */
6032             product_type,               /* 36 */
6033             user_def_fiscal_class,      /* 37 */
6034             tax_classification_code,    /* 38 */
6035             assessable_value,           /* 39 */
6036             tax_already_calculated_flag,/* 40 */
6037             ship_from_party_id,         /* 41 */
6038             ship_from_party_site_id,    /* 42 */
6039             ship_to_organization_id,    /* 43 */
6040             ship_to_location_id,        /* 44 */
6041             bill_from_party_id,         /* 45 */
6042             bill_from_party_site_id,    /* 46 */
6043             bill_to_organization_id,    /* 47 */
6044             bill_to_location_id,        /* 48 */
6045             poa_party_id,               /* 49 */
6046             poa_party_site_id,          /* 50 */
6047             poo_organization_id,        /* 51 */
6048             poo_location_id,            /* 52 */
6049             org_id,                     /* 53 */
6050             created_by,                 /* 54 */
6051             creation_date,              /* 55 */
6052             last_updated_by,            /* 56 */
6053             last_update_date,           /* 57 */
6054             last_update_login,          /* 58 */
6055             program_id,                 /* 59 */
6056             program_update_date,        /* 60 */
6057             program_application_id,     /* 61 */
6058             request_id,                 /* 62 */
6059             attribute_category,         /* 63 */
6060             attribute1,                 /* 64 */
6061             attribute2,                 /* 65 */
6062             attribute3,                 /* 66 */
6063             attribute4,                 /* 67 */
6064             attribute5,                 /* 68 */
6065             attribute6,                 /* 69 */
6066             attribute7,                 /* 70 */
6067             attribute8,                 /* 71 */
6068             attribute9,                 /* 72 */
6069             attribute10,                /* 73 */
6070             attribute11,                /* 74 */
6071             attribute12,                /* 75 */
6072             attribute13,                /* 76 */
6073             attribute14,                /* 77 */
6074             attribute15,                /* 78 */
6075             nrq_zero_exception_flag     /* 79 */ --BUG#8334078
6076             )
6077     SELECT sl.ship_header_id,          /* 01 */
6078         sl.ship_line_group_id,          /* 02 */
6079         inl_ship_lines_all_s.NEXTVAL,   /* 03 */
6080         sl.ship_line_num,               /* 04 */
6081         sl.ship_line_type_id,           /* 05 */
6082         sl.ship_line_src_type_code,     /* 06 */
6083         sl.ship_line_source_id,         /* 07 */
6084         sl.ship_line_id,                /* 08 */
6085         l_next_adjust_num,              /* 09 */
6086         p_match_id,                     /* 10 */
6087         l_current_curr_code,            /* 12 */
6088         l_current_curr_conv_type,       /* 13 */
6089         l_current_curr_conv_date,       /* 14 */
6090         l_current_curr_conv_rate,       /* 15 */
6091         sl.inventory_item_id,           /* 16 */
6092         l_final_qty,                    /* 17 */
6093         l_txn_uom_code,                 /* 18 */   --BUG#8198265
6094         l_final_price,                  /* 19 */
6095         l_primary_qty,                  /* 20 */
6096         l_primary_uom_code,             /* 21 */   --BUG#8198265
6097         l_primary_unit_price,           /* 22 */
6098         NVL(l_secondary_qty,sl.secondary_qty),               /* 23 */
6099         sl.secondary_uom_code,          /* 24 */
6100         NVL(l_secondary_unit_price, sl.secondary_unit_price), /* 25 */
6101         sl.landed_cost_flag,            /* 30 */
6102         sl.allocation_enabled_flag,     /* 31 */
6103         sl.trx_business_category,       /* 32 */
6104         sl.intended_use,                /* 33 */
6105         sl.product_fiscal_class,        /* 34 */
6106         sl.product_category,            /* 35 */
6107         sl.product_type,                /* 36 */
6108         sl.user_def_fiscal_class,       /* 37 */
6109         sl.tax_classification_code,     /* 38 */
6110         sl.assessable_value,            /* 39 */
6111         'N'                  , -- tax_already_calculated_flag/* 40 */
6112         sl.ship_from_party_id,          /* 41 */
6113         sl.ship_from_party_site_id,     /* 42 */
6114         sl.ship_to_organization_id,     /* 43 */
6115         sl.ship_to_location_id,         /* 44 */
6116         sl.bill_from_party_id,          /* 45 */
6117         sl.bill_from_party_site_id,     /* 46 */
6118         sl.bill_to_organization_id,     /* 47 */
6119         sl.bill_to_location_id,         /* 48 */
6120         sl.poa_party_id,                /* 49 */
6121         sl.poa_party_site_id,           /* 50 */
6122         sl.poo_organization_id,         /* 51 */
6123         sl.poo_location_id,             /* 52 */
6124         sl.org_id,                      /* 53 */
6125         sl.created_by,                  /* 54 */
6126         sl.creation_date,               /* 55 */
6127         sl.last_updated_by,             /* 56 */
6128         sl.last_update_date,            /* 57 */
6129         sl.last_update_login,           /* 58 */
6130         sl.program_id,                  /* 59 */
6131         sl.program_update_date,         /* 60 */
6132         sl.program_application_id,      /* 61 */
6133         sl.request_id,                  /* 62 */
6134         sl.attribute_category,          /* 63 */
6135         sl.attribute1,                  /* 64 */
6136         sl.attribute2,                  /* 65 */
6137         sl.attribute3,                  /* 66 */
6138         sl.attribute4,                  /* 67 */
6139         sl.attribute5,                  /* 68 */
6140         sl.attribute6,                  /* 69 */
6141         sl.attribute7,                  /* 70 */
6142         sl.attribute8,                  /* 71 */
6143         sl.attribute9,                  /* 72 */
6144         sl.attribute10,                 /* 73 */
6145         sl.attribute11,                 /* 74 */
6146         sl.attribute12,                 /* 75 */
6147         sl.attribute13,                 /* 76 */
6148         sl.attribute14,                 /* 77 */
6149         sl.attribute15,                 /* 78 */
6150         l_nrq_zero_exception_flag       /* 79 */ --BUG#8334078
6151     FROM inl_ship_lines sl
6152     WHERE ship_line_id        = l_to_ship_line_id;
6153     IF l_replace_estim_qty_flag = 'N' THEN --THIS TRANSACTION IS ABOUT AN ACTUAL VALUE
6154         -- IF SHIP LINE HAS ESTIMATED TAXES THEY WILL WILL BE = 0
6155         Zero_EstimTaxLines (
6156             p_ship_header_id => NULL,
6157             p_match_id => p_match_id,
6158             p_comp_name => 'INL_SHIP_LINES',
6159             p_comp_id => l_to_ship_line_id,
6160             p_tax_code => NULL,
6161             p_adjustment_num => p_adjustment_num,
6162             x_return_status => l_return_status
6163         ) ;
6164         IF l_return_status = L_FND_RET_STS_ERROR THEN
6165             RAISE L_FND_EXC_ERROR;
6166         ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
6167             RAISE L_FND_EXC_UNEXPECTED_ERROR;
6168         END IF;
6169     END IF;
6170     -- Standard check of p_commit.
6171     IF FND_API.To_Boolean (p_commit) THEN
6172         COMMIT WORK;
6173     END IF;
6174     -- Standard call to get message count and if count is 1, get message info.
6175     FND_MSG_PUB.Count_And_Get (
6176         p_encoded => L_FND_FALSE,
6177         p_count => x_msg_count,
6178         p_data => x_msg_data
6179     ) ;
6180     -- Standard End of Procedure/Function Logging
6181     INL_LOGGING_PVT.Log_EndProc (
6182         p_module_name => g_module_name,
6183         p_procedure_name => l_api_name
6184     ) ;
6185 EXCEPTION
6186 WHEN L_FND_EXC_ERROR THEN
6187     -- Standard Expected Error Logging
6188     INL_LOGGING_PVT.Log_ExpecError (
6189         p_module_name => g_module_name,
6190         p_procedure_name => l_api_name
6191     ) ;
6192     ROLLBACK TO Adjust_ShipLines_PVT;
6193     x_return_status := L_FND_RET_STS_ERROR;
6194     FND_MSG_PUB.Count_And_Get (
6195         p_encoded => L_FND_FALSE,
6196         p_count => x_msg_count,
6197         p_data => x_msg_data
6198     ) ;
6199 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
6200     -- Standard Unexpected Error Logging
6201     INL_LOGGING_PVT.Log_UnexpecError (
6202         p_module_name => g_module_name,
6203         p_procedure_name => l_api_name
6204     ) ;
6205     ROLLBACK TO Adjust_ShipLines_PVT;
6206     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
6207     FND_MSG_PUB.Count_And_Get (
6208         p_encoded => L_FND_FALSE,
6209         p_count => x_msg_count,
6210         p_data => x_msg_data
6211     ) ;
6212 WHEN OTHERS THEN
6213     -- Standard Unexpected Error Logging
6214     INL_LOGGING_PVT.Log_UnexpecError (
6215         p_module_name => g_module_name,
6216         p_procedure_name => l_api_name
6217     ) ;
6218     ROLLBACK TO Adjust_ShipLines_PVT;
6219     x_return_status := L_FND_RET_STS_UNEXP_ERROR ;
6220     IF FND_MSG_PUB.Check_Msg_Level (p_message_level => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
6221         FND_MSG_PUB.Add_Exc_Msg (
6222             p_pkg_name        => g_pkg_name,
6223             p_procedure_name => l_api_name
6224         ) ;
6225     END IF;
6226     FND_MSG_PUB.Count_And_Get (
6227         p_encoded => L_FND_FALSE,
6228         p_count => x_msg_count,
6229         p_data => x_msg_data
6230     ) ;
6231 END Adjust_ShipLines;
6232 
6233 -- Utility name: Create_ChLines
6234 -- Type       : Private
6235 -- Function   : Create Charge Lines
6236 -- Pre-reqs   : None
6237 -- Parameters :
6238 -- IN         : p_ChLn_Assoc            IN inl_ChLn_Assoc_tp
6239 --              p_include_assoc         IN VARCHAR2 := 'Y'
6240 --              p_adjustment_num        IN NUMBER
6241 --
6242 -- OUT        : x_new_charge_line_id    OUT NUMBER  new charge line at a ship line level
6243 --              x_return_status         OUT NOCOPY VARCHAR2
6244 --
6245 -- Version    : Current version 1.0
6246 --
6247 -- Notes      :
6248 PROCEDURE Create_ChLines(
6249     p_ChLn_Assoc     IN inl_ChLn_Assoc_tp,
6250     p_include_assoc  IN VARCHAR2 := 'Y',
6251     p_adjustment_num IN NUMBER,
6252     x_new_charge_line_id OUT NOCOPY NUMBER,
6253     x_return_status OUT NOCOPY      VARCHAR2
6254 ) IS
6255     l_program_name       CONSTANT VARCHAR2 (30) := 'Create_ChLines';
6256     l_return_status   VARCHAR2 (1) ;
6257     l_debug_info      VARCHAR2 (200) ;
6258     l_charge_line_num NUMBER;
6259     l_adjustment_num  NUMBER;
6260 BEGIN
6261     -- Standard Beginning of Procedure/Function Logging
6262     INL_LOGGING_PVT.Log_BeginProc ( p_module_name => g_module_name, p_procedure_name => l_program_name) ;
6263     --  Initialize return status to success
6264     x_return_status := L_FND_RET_STS_SUCCESS;
6265     --
6266     -- Get Max val to charge line num
6267     --
6268     IF p_ChLn_Assoc.charge_line_num IS NULL THEN
6269         l_debug_info := 'Get Max val from charge line num';
6270         INL_LOGGING_PVT.Log_Statement (
6271             p_module_name => g_module_name,
6272             p_procedure_name => l_program_name,
6273             p_debug_info => l_debug_info
6274         ) ;
6275 -- BUG#8411723 => MURALI
6276         IF p_ChLn_Assoc.match_amount_id IS NOT NULL THEN
6277             -- Get the max charge line num for all shipments affected by this match
6278             SELECT NVL(MAX(cl.charge_line_num),0) + 1
6279             INTO l_charge_line_num
6280             FROM inl_charge_lines cl
6281             WHERE EXISTS
6282                 (SELECT 1
6283                  FROM inl_associations assoc
6284                  WHERE assoc.from_parent_table_name = 'INL_CHARGE_LINES'
6285                  AND assoc.from_parent_table_id   = cl.charge_line_id
6286                  AND assoc.ship_header_id
6287                     IN (select m1.ship_header_id
6288                         from inl_corr_matches_v m1
6289                         where m1.match_amount_id = p_ChLn_Assoc.match_amount_id
6290                        )
6291                 )
6292            ;
6293 -- BUG#8411723 => MURALI
6294         ELSE
6295             SELECT NVL (MAX (cl.charge_line_num), 0) + 1
6296               INTO l_charge_line_num
6297               FROM inl_charge_lines cl
6298              WHERE NVL (cl.parent_charge_line_id, cl.charge_line_id) IN
6299                 (
6300                      SELECT assoc.from_parent_table_id
6301                        FROM inl_associations assoc
6302                       WHERE assoc.from_parent_table_name = 'INL_CHARGE_LINES'
6303                         AND assoc.ship_header_id = NVL (p_ChLn_Assoc.inl_Assoc.ship_header_id, 0)
6304                 ) ;
6305         END IF;
6306     ELSE
6307         l_charge_line_num := p_ChLn_Assoc.charge_line_num;
6308     END IF;
6309     --
6310     -- Get Val to adjustment num
6311     --
6312     IF p_ChLn_Assoc.adjustment_num IS NULL THEN
6313         l_adjustment_num := p_adjustment_num;
6314     ELSE
6315         l_adjustment_num := p_ChLn_Assoc.adjustment_num;
6316     END IF;
6317     --
6318     -- Get inl_charge_lines_s.nextval
6319     --
6320     l_debug_info := 'Get inl_charge_lines_s.nextval';
6321     INL_LOGGING_PVT.Log_Statement (
6322         p_module_name => g_module_name,
6323         p_procedure_name => l_program_name,
6324         p_debug_info => l_debug_info
6325     ) ;
6326     SELECT inl_charge_lines_s.nextval
6327     INTO x_new_charge_line_id FROM dual;
6328     --
6329     -- include Charge Line record
6330     --
6331     l_debug_info := 'Including Charge Line record ';
6332     INL_LOGGING_PVT.Log_Statement (
6333         p_module_name => g_module_name,
6334         p_procedure_name => l_program_name,
6335         p_debug_info => l_debug_info
6336     ) ;
6337      INSERT
6338        INTO inl_charge_lines
6339         (
6340             charge_line_id,                          /* 01 */
6341             charge_line_num,                         /* 02 */
6342             charge_line_type_id,                     /* 03 */
6343             landed_cost_flag,                        /* 04 */
6344             parent_charge_line_id,                   /* 06 */
6345             adjustment_num,                          /* 07 */
6346             match_id,                                /* 08 */
6347             match_amount_id,                         /* 09 */
6348             charge_amt,                              /* 11 */
6349             currency_code,                           /* 12 */
6350             currency_conversion_type,                /* 13 */
6351             currency_conversion_date,                /* 14 */
6352             currency_conversion_rate,                /* 15 */
6353             party_id,                                /* 16 */
6354             party_site_id,                           /* 17 */
6355             trx_business_category,                   /* 18 */
6356             intended_use,                            /* 19 */
6357             product_fiscal_class,                    /* 20 */
6358             product_category,                        /* 21 */
6359             product_type,                            /* 22 */
6360             user_def_fiscal_class,                   /* 23 */
6361             tax_classification_code,                 /* 24 */
6362             assessable_value,                        /* 25 */
6363             tax_already_calculated_flag,             /* 26 */
6364             ship_from_party_id,                      /* 27 */
6365             ship_from_party_site_id,                 /* 28 */
6366             ship_to_organization_id,                 /* 29 */
6367             ship_to_location_id,                     /* 30 */
6368             bill_from_party_id,                      /* 31 */
6369             bill_from_party_site_id,                 /* 32 */
6370             bill_to_organization_id,                 /* 34 */
6371             bill_to_location_id,                     /* 34 */
6372             poa_party_id,                            /* 35 */
6373             poa_party_site_id,                       /* 36 */
6374             poo_organization_id,                     /* 37 */
6375             poo_location_id,                         /* 38 */
6376             created_by,                              /* 39 */
6377             creation_date,                           /* 40 */
6378             last_updated_by,                         /* 41 */
6379             last_update_date,                        /* 42 */
6380             last_update_login                        /* 43 */
6381         )
6382         VALUES
6383         (
6384             x_new_charge_line_id,                    /* 01 */
6385             l_charge_line_num,                       /* 02 */
6386             p_ChLn_Assoc.charge_line_type_id,        /* 03 */
6387             p_ChLn_Assoc.landed_cost_flag,           /* 04 */
6388             p_ChLn_Assoc.parent_charge_line_id,      /* 06 */
6389             l_adjustment_num,                        /* 07 */
6390             p_ChLn_Assoc.match_id,                   /* 08 */
6391             p_ChLn_Assoc.match_amount_id,            /* 09 */
6392             p_ChLn_Assoc.charge_amt,                 /* 11 */
6393             p_ChLn_Assoc.currency_code,              /* 12 */
6394             p_ChLn_Assoc.currency_conversion_type,   /* 13 */
6395             p_ChLn_Assoc.currency_conversion_date,   /* 14 */
6396             p_ChLn_Assoc.currency_conversion_rate,   /* 15 */
6397             p_ChLn_Assoc.party_id,                   /* 16 */
6398             p_ChLn_Assoc.party_site_id,              /* 17 */
6399             p_ChLn_Assoc.trx_business_category,      /* 18 */
6400             p_ChLn_Assoc.intended_use,               /* 19 */
6401             p_ChLn_Assoc.product_fiscal_class,       /* 20 */
6402             p_ChLn_Assoc.product_category,           /* 21 */
6403             p_ChLn_Assoc.product_type,               /* 22 */
6404             p_ChLn_Assoc.user_def_fiscal_class,      /* 23 */
6405             p_ChLn_Assoc.tax_classification_code,    /* 24 */
6406             p_ChLn_Assoc.assessable_value,           /* 25 */
6407             p_ChLn_Assoc.tax_already_calculated_flag,/* 26 */
6408             p_ChLn_Assoc.ship_from_party_id,         /* 27 */
6409             p_ChLn_Assoc.ship_from_party_site_id,    /* 28 */
6410             p_ChLn_Assoc.ship_to_organization_id,    /* 29 */
6411             p_ChLn_Assoc.ship_to_location_id,        /* 30 */
6412             p_ChLn_Assoc.bill_from_party_id,         /* 31 */
6413             p_ChLn_Assoc.bill_from_party_site_id,    /* 32 */
6414             p_ChLn_Assoc.bill_to_organization_id,    /* 33 */
6415             p_ChLn_Assoc.bill_to_location_id,        /* 34 */
6416             p_ChLn_Assoc.poa_party_id,               /* 35 */
6417             p_ChLn_Assoc.poa_party_site_id,          /* 36 */
6418             p_ChLn_Assoc.poo_organization_id,        /* 37 */
6419             p_ChLn_Assoc.poo_location_id,            /* 38 */
6420             L_FND_USER_ID,                           /* 39 */
6421             sysdate,                                 /* 40 */
6422             L_FND_USER_ID,                           /* 41 */
6423             sysdate,                                 /* 42 */
6424             l_fnd_login_id --SCM-051                 /* 43 */
6425         ) ;
6426     IF p_include_assoc = 'Y' THEN
6427         Create_Assoc (
6428             p_Assoc => p_ChLn_Assoc.inl_Assoc,
6429             p_from_parent_table_name => 'INL_CHARGE_LINES',
6430             p_new_line_id => x_new_charge_line_id,
6431             x_return_status => l_return_status
6432         );
6433         IF l_return_status = L_FND_RET_STS_ERROR THEN
6434             RAISE L_FND_EXC_ERROR;
6435         ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
6436             RAISE L_FND_EXC_UNEXPECTED_ERROR;
6437         END IF;
6438     END IF;
6439     -- Standard End of Procedure/Function Logging
6440     INL_LOGGING_PVT.Log_EndProc(
6441         p_module_name => g_module_name,
6442         p_procedure_name => l_program_name
6443     );
6444 EXCEPTION
6445 WHEN L_FND_EXC_ERROR THEN
6446     -- Standard Expected Error Logging
6447     INL_LOGGING_PVT.Log_ExpecError(
6448         p_module_name => g_module_name,
6449         p_procedure_name => l_program_name
6450     );
6451     x_return_status := L_FND_RET_STS_ERROR;
6452 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
6453     -- Standard Unexpected Error Logging
6454     INL_LOGGING_PVT.Log_UnexpecError(
6455         p_module_name => g_module_name,
6456         p_procedure_name => l_program_name
6457     );
6458     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
6459 WHEN OTHERS THEN
6460     -- Standard Unexpected Error Logging
6461     INL_LOGGING_PVT.Log_UnexpecError(
6462         p_module_name => g_module_name,
6463         p_procedure_name => l_program_name
6464     );
6465     x_return_status := L_FND_RET_STS_UNEXP_ERROR ;
6466     IF FND_MSG_PUB.Check_Msg_Level(p_message_level => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
6467     THEN
6468         FND_MSG_PUB.Add_Exc_Msg(
6469             p_pkg_name => g_pkg_name,
6470             p_procedure_name => l_program_name
6471         );
6472     END IF;
6473 END Create_ChLines;
6474 
6475 -- Utility name: Zero_ChLnFromPrevMatchAmt -- BUG#8411594
6476 -- Type       : Private
6477 -- Function   : bring to zero the estimated charge line
6478 -- Pre-reqs   : None
6479 -- Parameters :
6480 -- IN         : p_prev_match_amount_id  IN NUMBER,
6481 --              p_prev_match_id         IN NUMBER,
6482 --              p_adjustment_num        IN NUMBER,
6483 --
6484 -- OUT        : x_return_status         OUT NOCOPY VARCHAR2
6485 --
6486 -- Version    : Current version 1.0
6487 --
6488 -- Notes      :
6489 PROCEDURE Zero_ChLnFromPrevMatchAmt ( --BUG#9474491
6490     p_prev_match_amount_id  IN NUMBER,--BUG#9474491
6491     p_prev_match_id         IN NUMBER,--BUG#9804065
6492     p_adjustment_num        IN NUMBER,
6493     x_return_status         OUT NOCOPY VARCHAR2
6494 ) IS
6495     l_program_name CONSTANT VARCHAR2(30) := 'Zero_ChLnFromPrevMatchAmt';
6496     l_return_status VARCHAR2(1);
6497     l_debug_info VARCHAR2(200);
6498     CURSOR original_CL
6499     IS
6500          SELECT charge_line_num        ,
6501             charge_line_type_id        ,
6502             landed_cost_flag           ,
6503             charge_line_id             ,
6504             adjustment_num             ,
6505             match_id                   ,
6506             currency_code              ,
6507             currency_conversion_type   ,
6508             currency_conversion_date   ,
6509             currency_conversion_rate   ,
6510             party_id                   ,
6511             party_site_id              ,
6512             trx_business_category      ,
6513             intended_use               ,
6514             product_fiscal_class       ,
6515             product_category           ,
6516             product_type               ,
6517             user_def_fiscal_class      ,
6518             tax_classification_code    ,
6519             tax_already_calculated_flag,
6520             ship_from_party_id         ,
6521             ship_from_party_site_id    ,
6522             ship_to_organization_id    ,
6523             ship_to_location_id        ,
6524             bill_from_party_id         ,
6525             bill_from_party_site_id    ,
6526             bill_to_organization_id    ,
6527             bill_to_location_id        ,
6528             poa_party_id               ,
6529             poa_party_site_id          ,
6530             poo_organization_id        ,
6531             poo_location_id
6532            FROM inl_charge_lines cl
6533           WHERE cl.match_Amount_id = p_prev_match_amount_id
6534           AND cl.match_id IS NULL
6535         UNION --BUG#9804065
6536          SELECT charge_line_num        ,
6537             charge_line_type_id        ,
6538             landed_cost_flag           ,
6539             charge_line_id             ,
6540             adjustment_num             ,
6541             match_id                   ,
6542             currency_code              ,
6543             currency_conversion_type   ,
6544             currency_conversion_date   ,
6545             currency_conversion_rate   ,
6546             party_id                   ,
6547             party_site_id              ,
6548             trx_business_category      ,
6549             intended_use               ,
6550             product_fiscal_class       ,
6551             product_category           ,
6552             product_type               ,
6553             user_def_fiscal_class      ,
6554             tax_classification_code    ,
6555             tax_already_calculated_flag,
6556             ship_from_party_id         ,
6557             ship_from_party_site_id    ,
6558             ship_to_organization_id    ,
6559             ship_to_location_id        ,
6560             bill_from_party_id         ,
6561             bill_from_party_site_id    ,
6562             bill_to_organization_id    ,
6563             bill_to_location_id        ,
6564             poa_party_id               ,
6565             poa_party_site_id          ,
6566             poo_organization_id        ,
6567             poo_location_id
6568            FROM inl_charge_lines cl
6569           WHERE p_prev_match_id IS NOT NULL --Bug#14044298
6570           AND cl.match_id = p_prev_match_id
6571           AND cl.match_amount_id IS NULL
6572     ;
6573     TYPE ori_CL_Type
6574     IS
6575     TABLE OF original_CL%ROWTYPE;
6576     C_ori_CL ori_CL_Type;
6577     l_ChLn_Assoc inl_ChLn_Assoc_tp;
6578     l_new_charge_line_id NUMBER;
6579     l_level_charge_is_applied VARCHAR(5):= 'X';
6580 BEGIN
6581     -- Standard Beginning of Procedure/Function Logging
6582     INL_LOGGING_PVT.Log_BeginProc (
6583         p_module_name => g_module_name,
6584         p_procedure_name => l_program_name
6585     );
6586     --  Initialize return status to success
6587     x_return_status := L_FND_RET_STS_SUCCESS;
6588     INL_LOGGING_PVT.Log_Variable (
6589         p_module_name    => g_module_name,
6590         p_procedure_name => l_program_name,
6591         p_var_name       => p_prev_match_amount_id,
6592         p_var_value      => p_prev_match_amount_id
6593     );
6594     INL_LOGGING_PVT.Log_Variable (
6595         p_module_name    => g_module_name,
6596         p_procedure_name => l_program_name,
6597         p_var_name       => p_prev_match_id,
6598         p_var_value      => p_prev_match_id
6599     );
6600     OPEN original_CL;
6601     FETCH original_CL BULK COLLECT INTO C_ori_CL;
6602     CLOSE original_CL;
6603     l_debug_info := C_ori_CL.LAST||' lines have been retrieved.';
6604     INL_LOGGING_PVT.Log_Statement (
6605         p_module_name => g_module_name,
6606         p_procedure_name => l_program_name,
6607         p_debug_info => l_debug_info
6608     ) ;
6609     IF NVL (C_ori_CL.LAST, 0)                        > 0 THEN
6610         l_ChLn_Assoc.inl_Assoc.allocation_basis     := NULL;
6611         l_ChLn_Assoc.inl_Assoc.allocation_uom_code  := NULL;
6612         l_ChLn_Assoc.inl_Assoc.to_parent_table_name := NULL;
6613         l_ChLn_Assoc.inl_Assoc.to_parent_table_id   := NULL;
6614         l_ChLn_Assoc.adjustment_num                 := p_adjustment_num;
6615         l_ChLn_Assoc.match_id                       := p_prev_match_id;   --BUG#9804065
6616         l_ChLn_Assoc.match_amount_id                := p_prev_match_amount_id;
6617         l_ChLn_Assoc.charge_amt                     := 0;
6618         l_ChLn_Assoc.assessable_value               := NULL;
6619         l_ChLn_Assoc.tax_already_calculated_flag    := 'N';
6620         FOR i IN NVL(C_ori_CL.FIRST, 0)..NVL(C_ori_CL.LAST, 0)
6621         LOOP
6622             l_ChLn_Assoc.charge_line_type_id      := C_ori_CL(i).charge_line_type_id;
6623             l_ChLn_Assoc.charge_line_num          := C_ori_CL(i).charge_line_num;
6624             l_ChLn_Assoc.landed_cost_flag         := C_ori_CL(i).landed_cost_flag;
6625             l_ChLn_Assoc.parent_charge_line_id    := C_ori_CL(i).charge_line_id;
6626             l_ChLn_Assoc.currency_code            := C_ori_CL(i).currency_code;
6627             l_ChLn_Assoc.currency_conversion_type := C_ori_CL(i).currency_conversion_type;
6628             l_ChLn_Assoc.currency_conversion_date := C_ori_CL(i).currency_conversion_date;
6629             l_ChLn_Assoc.currency_conversion_rate := C_ori_CL(i).currency_conversion_rate;
6630             l_ChLn_Assoc.party_id                 := C_ori_CL(i).party_id;
6631             l_ChLn_Assoc.party_site_id            := C_ori_CL(i).party_site_id;
6632             l_ChLn_Assoc.trx_business_category    := C_ori_CL(i).trx_business_category;
6633             l_ChLn_Assoc.intended_use             := C_ori_CL(i).intended_use;
6634             l_ChLn_Assoc.product_fiscal_class     := C_ori_CL(i).product_fiscal_class;
6635             l_ChLn_Assoc.product_category         := C_ori_CL(i).product_category;
6636             l_ChLn_Assoc.product_type             := C_ori_CL(i).product_type;
6637             l_ChLn_Assoc.user_def_fiscal_class    := C_ori_CL(i).user_def_fiscal_class;
6638             l_ChLn_Assoc.tax_classification_code  := C_ori_CL(i).tax_classification_code;
6639             l_ChLn_Assoc.ship_from_party_id       := C_ori_CL(i).ship_from_party_id;
6640             l_ChLn_Assoc.ship_from_party_site_id  := C_ori_CL(i).ship_from_party_site_id;
6641             l_ChLn_Assoc.ship_to_organization_id  := C_ori_CL(i).ship_to_organization_id;
6642             l_ChLn_Assoc.ship_to_location_id      := C_ori_CL(i).ship_to_location_id;
6643             l_ChLn_Assoc.bill_from_party_id       := C_ori_CL(i).bill_from_party_id;
6644             l_ChLn_Assoc.bill_from_party_site_id  := C_ori_CL(i).bill_from_party_site_id;
6645             l_ChLn_Assoc.bill_to_organization_id  := C_ori_CL(i).bill_to_organization_id;
6646             l_ChLn_Assoc.bill_to_location_id      := C_ori_CL(i).bill_to_location_id;
6647             l_ChLn_Assoc.poa_party_id             := C_ori_CL(i).poa_party_id;
6648             l_ChLn_Assoc.poa_party_site_id        := C_ori_CL(i).poa_party_site_id;
6649             l_ChLn_Assoc.poo_organization_id      := C_ori_CL(i).poo_organization_id;
6650             l_ChLn_Assoc.poo_location_id          := C_ori_CL(i).poo_location_id;
6651             -- Create_ChLines
6652             l_debug_info                                 := 'Create_ChLines';
6653             INL_LOGGING_PVT.Log_Statement (
6654                 p_module_name => g_module_name,
6655                 p_procedure_name => l_program_name,
6656                 p_debug_info => l_debug_info
6657             ) ;
6658             Create_ChLines (
6659                 p_ChLn_Assoc => l_ChLn_Assoc,
6660                 p_include_assoc => 'N',
6661                 p_adjustment_num => p_adjustment_num,
6662                 x_new_charge_line_id => l_new_charge_line_id,
6663                 x_return_status => l_return_status
6664             ) ;
6665             IF l_return_status = L_FND_RET_STS_ERROR THEN
6666                 RAISE L_FND_EXC_ERROR;
6667             ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
6668                 RAISE L_FND_EXC_UNEXPECTED_ERROR;
6669             END IF;
6670             -- TxLines
6671             l_debug_info  := 'Amount = 0 for estimated taxes associated with estimated charge';
6672             INL_LOGGING_PVT.Log_Statement (
6673                 p_module_name => g_module_name,
6674                 p_procedure_name => l_program_name,
6675                 p_debug_info => l_debug_info
6676             ) ;
6677             Zero_EstimTaxLines (
6678                 p_ship_header_id        => NULL,
6679                 p_match_id              => NULL,
6680                 p_comp_name             => 'INL_CHARGE_LINES',
6681                 p_comp_id               => C_ori_CL(i).charge_line_id,
6682                 p_tax_code              => NULL,
6683                 p_adjustment_num        => p_adjustment_num,
6684                 p_prev_adjustment_num   => C_ori_CL(i).adjustment_num,
6685                 x_return_status         => l_return_status
6686             ) ;
6687             IF l_return_status = L_FND_RET_STS_ERROR THEN
6688                 RAISE L_FND_EXC_ERROR;
6689             ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
6690                 RAISE L_FND_EXC_UNEXPECTED_ERROR;
6691             END IF;
6692         END LOOP;
6693     END IF;
6694     -- Standard End of Procedure/Function Logging
6695     INL_LOGGING_PVT.Log_EndProc (
6696         p_module_name => g_module_name,
6697         p_procedure_name => l_program_name
6698     ) ;
6699 EXCEPTION
6700 WHEN L_FND_EXC_ERROR THEN
6701     -- Standard Expected Error Logging
6702     INL_LOGGING_PVT.Log_ExpecError (
6703         p_module_name => g_module_name,
6704         p_procedure_name => l_program_name
6705     ) ;
6706     x_return_status := L_FND_RET_STS_ERROR;
6707 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
6708     -- Standard Unexpected Error Logging
6709     INL_LOGGING_PVT.Log_UnexpecError (
6710         p_module_name => g_module_name,
6711         p_procedure_name => l_program_name
6712     ) ;
6713     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
6714 WHEN OTHERS THEN
6715     -- Standard Unexpected Error Logging
6716     INL_LOGGING_PVT.Log_UnexpecError (
6717         p_module_name => g_module_name,
6718         p_procedure_name => l_program_name
6719     ) ;
6720     x_return_status := L_FND_RET_STS_UNEXP_ERROR ;
6721     IF FND_MSG_PUB.Check_Msg_Level (p_message_level  => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
6722         FND_MSG_PUB.Add_Exc_Msg (
6723             p_pkg_name => g_pkg_name,
6724             p_procedure_name => l_program_name
6725         ) ;
6726     END IF;
6727 END Zero_ChLnFromPrevMatchAmt;
6728 
6729 -- Utility name: Zero_EstimChargeLinesPerMatch
6730 -- Type       : Private
6731 -- Function   : bring to zero the estimated charge line
6732 -- Pre-reqs   : None
6733 -- Parameters :
6734 -- IN         :     p_match_id              IN NUMBER,
6735 --                  p_match_Amount_id       IN NUMBER,
6736 --                  p_charge_line_type_id   IN NUMBER,
6737 --
6738 -- OUT        : x_return_status         OUT NOCOPY VARCHAR2
6739 --
6740 -- Version    : Current version 1.0
6741 --
6742 -- Notes      :
6743 PROCEDURE Zero_EstimChargeLinesPerMatch (
6744     p_match_id              IN NUMBER,
6745     p_match_Amount_id       IN NUMBER,
6746     p_charge_line_type_id   IN NUMBER,
6747     p_adjustment_num        IN NUMBER,
6748     x_return_status         OUT NOCOPY VARCHAR2
6749 ) IS
6750     l_program_name CONSTANT VARCHAR2(30) := 'Zero_EstimChargeLinesPerMatch';
6751     l_return_status VARCHAR2(1);
6752     l_debug_info VARCHAR2(200);
6753 
6754 --Bug#9474491
6755     CURSOR estimated_CL
6756     IS
6757          SELECT distinct --Bug#9804065
6758             cl.charge_line_num        ,
6759             cl.charge_line_type_id        ,
6760             cl.landed_cost_flag           ,
6761             cl.charge_line_id             ,
6762             cl.adjustment_num             ,
6763             cl.match_id                   ,
6764             cl.currency_code              ,
6765             cl.currency_conversion_type   ,
6766             cl.currency_conversion_date   ,
6767             cl.currency_conversion_rate   ,
6768             cl.party_id                   ,
6769             cl.party_site_id              ,
6770             cl.trx_business_category      ,
6771             cl.intended_use               ,
6772             cl.product_fiscal_class       ,
6773             cl.product_category           ,
6774             cl.product_type               ,
6775             cl.user_def_fiscal_class      ,
6776             cl.tax_classification_code    ,
6777             cl.tax_already_calculated_flag,
6778             cl.ship_from_party_id         ,
6779             cl.ship_from_party_site_id    ,
6780             cl.ship_to_organization_id    ,
6781             cl.ship_to_location_id        ,
6782             cl.bill_from_party_id         ,
6783             cl.bill_from_party_site_id    ,
6784             cl.bill_to_organization_id    ,
6785             cl.bill_to_location_id        ,
6786             cl.poa_party_id               ,
6787             cl.poa_party_site_id          ,
6788             cl.poo_organization_id        ,
6789             cl.poo_location_id
6790     FROM inl_adj_charge_lines_v cl,
6791         inl_associations a,
6792         inl_matches m
6793     WHERE
6794         ((cl.match_id IS NULL
6795             AND cl.match_amount_id IS NULL)
6796          OR
6797          cl.adjustment_num < 0) -- SCM-051
6798     AND NVL(cl.charge_amt,0) <> 0
6799     AND a.from_parent_table_name = 'INL_CHARGE_LINES'
6800     AND a.ship_header_id  = m.ship_header_id
6801     AND a.from_parent_table_id
6802       = (SELECT
6803             cl1.charge_line_id
6804          FROM
6805             inl_charge_lines cl1
6806          WHERE
6807          CONNECT_BY_ISLEAF = 1
6808          START WITH cl1.charge_line_id = cl.charge_line_id
6809          CONNECT BY PRIOR cl1.parent_charge_line_id = cl1.charge_line_id)
6810     AND cl.charge_line_type_id = p_charge_line_type_id
6811     AND (
6812             m.match_id = p_match_id
6813             OR m.match_amount_id = p_match_amount_id
6814         )
6815 
6816     AND (
6817             (m.to_parent_table_name = 'INL_SHIP_HEADERS'
6818              AND a.to_parent_table_name = 'INL_SHIP_HEADERS'
6819              AND m.ship_header_id = a.ship_header_id)
6820             OR
6821             (m.to_parent_table_name = 'INL_SHIP_LINE_GROUPS'
6822              AND m.ship_header_id = a.ship_header_id
6823              AND (a.to_parent_table_name = 'INL_SHIP_HEADERS'
6824                   OR (a.to_parent_table_name = 'INL_SHIP_LINE_GROUPS'
6825                       AND a.to_parent_table_id = m.to_parent_table_id)
6826                 )
6827             )
6828             OR
6829             (m.to_parent_table_name = 'INL_SHIP_LINES'
6830              AND m.ship_header_id = a.ship_header_id
6831              AND (a.to_parent_table_name = 'INL_SHIP_HEADERS'
6832                   OR (a.to_parent_table_name = 'INL_SHIP_LINE_GROUPS'
6833                       AND EXISTS (SELECT 1
6834                                   FROM inl_ship_lines sl
6835                                   WHERE sl.ship_line_id = m.to_parent_table_id -- the match ship line
6836                                   AND sl.ship_line_group_id =  a.to_parent_table_id --belong to group of association
6837                                   )
6838                     )
6839                   OR (a.to_parent_table_name = 'INL_SHIP_LINES'
6840                       AND m.to_parent_table_id = a.to_parent_table_id
6841                      )
6842                 )
6843             )
6844         )
6845         ;
6846 --Bug#9474491
6847     TYPE est_CL_Type
6848     IS
6849     TABLE OF estimated_CL%ROWTYPE;
6850     C_est_CL est_CL_Type;
6851     l_ChLn_Assoc inl_ChLn_Assoc_tp;
6852     l_new_charge_line_id NUMBER;
6853     l_level_charge_is_applied VARCHAR(5):= 'X';
6854 BEGIN
6855     -- Standard Beginning of Procedure/Function Logging
6856     INL_LOGGING_PVT.Log_BeginProc (
6857         p_module_name => g_module_name,
6858         p_procedure_name => l_program_name
6859     );
6860     --  Initialize return status to success
6861     x_return_status := L_FND_RET_STS_SUCCESS;
6862     l_debug_info := 'Getting the maximum level where this charge_line_type_id is applied.';
6863     INL_LOGGING_PVT.Log_Statement (
6864         p_module_name => g_module_name,
6865         p_procedure_name => l_program_name,
6866         p_debug_info => l_debug_info
6867     ) ;
6868     l_debug_info := 'p_match_Amount_id';
6869     INL_LOGGING_PVT.Log_Variable (
6870         p_module_name    => g_module_name,
6871         p_procedure_name => l_program_name,
6872         p_var_name       => l_debug_info,
6873         p_var_value      => p_match_Amount_id
6874     );
6875     OPEN estimated_CL ;
6876     FETCH estimated_CL BULK COLLECT INTO C_est_CL;
6877     CLOSE estimated_CL;
6878     l_debug_info := C_est_CL.LAST||' lines have been retrieved.';
6879     INL_LOGGING_PVT.Log_Statement (
6880         p_module_name => g_module_name,
6881         p_procedure_name => l_program_name,
6882         p_debug_info => l_debug_info
6883     ) ;
6884     IF NVL (C_est_CL.LAST, 0)                        > 0 THEN
6885         l_ChLn_Assoc.inl_Assoc.allocation_basis     := NULL;
6886         l_ChLn_Assoc.inl_Assoc.allocation_uom_code  := NULL;
6887         l_ChLn_Assoc.inl_Assoc.to_parent_table_name := NULL;
6888         l_ChLn_Assoc.inl_Assoc.to_parent_table_id   := NULL;
6889         l_ChLn_Assoc.adjustment_num                 := p_adjustment_num;
6890         l_ChLn_Assoc.match_id                       := p_match_id;
6891         l_ChLn_Assoc.match_amount_id                := p_match_amount_id;
6892         l_ChLn_Assoc.charge_line_type_id            := p_charge_line_type_id;
6893         l_ChLn_Assoc.charge_amt                     := 0;
6894         l_ChLn_Assoc.assessable_value               := NULL;
6895         l_ChLn_Assoc.tax_already_calculated_flag    := 'N';
6896         FOR i                                       IN NVL (C_est_CL.FIRST, 0) ..NVL (C_est_CL.LAST, 0)
6897         LOOP
6898 
6899             INL_LOGGING_PVT.Log_Variable (
6900                 p_module_name    => g_module_name,
6901                 p_procedure_name => l_program_name,
6902                 p_var_name       => 'C_est_CL ('||i||') .charge_line_id',
6903                 p_var_value      => C_est_CL (i) .charge_line_id
6904             );
6905             l_ChLn_Assoc.charge_line_num          := C_est_CL (i) .charge_line_num;
6906             l_ChLn_Assoc.landed_cost_flag         := C_est_CL (i) .landed_cost_flag;
6907             l_ChLn_Assoc.parent_charge_line_id    := C_est_CL (i) .charge_line_id;
6908             l_ChLn_Assoc.currency_code            := C_est_CL (i) .currency_code;
6909             l_ChLn_Assoc.currency_conversion_type := C_est_CL (i) .currency_conversion_type;
6910             l_ChLn_Assoc.currency_conversion_date := C_est_CL (i) .currency_conversion_date;
6911             l_ChLn_Assoc.currency_conversion_rate := C_est_CL (i) .currency_conversion_rate;
6912             l_ChLn_Assoc.party_id                 := C_est_CL (i) .party_id;
6913             l_ChLn_Assoc.party_site_id            := C_est_CL (i) .party_site_id;
6914             l_ChLn_Assoc.trx_business_category    := C_est_CL (i) .trx_business_category;
6915             l_ChLn_Assoc.intended_use             := C_est_CL (i) .intended_use;
6916             l_ChLn_Assoc.product_fiscal_class     := C_est_CL (i) .product_fiscal_class;
6917             l_ChLn_Assoc.product_category         := C_est_CL (i) .product_category;
6918             l_ChLn_Assoc.product_type             := C_est_CL (i) .product_type;
6919             l_ChLn_Assoc.user_def_fiscal_class    := C_est_CL (i) .user_def_fiscal_class;
6920             l_ChLn_Assoc.tax_classification_code  := C_est_CL (i) .tax_classification_code;
6921             l_ChLn_Assoc.ship_from_party_id       := C_est_CL (i) .ship_from_party_id;
6922             l_ChLn_Assoc.ship_from_party_site_id  := C_est_CL (i) .ship_from_party_site_id;
6923             l_ChLn_Assoc.ship_to_organization_id  := C_est_CL (i) .ship_to_organization_id;
6924             l_ChLn_Assoc.ship_to_location_id      := C_est_CL (i) .ship_to_location_id;
6925             l_ChLn_Assoc.bill_from_party_id       := C_est_CL (i) .bill_from_party_id;
6926             l_ChLn_Assoc.bill_from_party_site_id  := C_est_CL (i) .bill_from_party_site_id;
6927             l_ChLn_Assoc.bill_to_organization_id  := C_est_CL (i) .bill_to_organization_id;
6928             l_ChLn_Assoc.bill_to_location_id      := C_est_CL (i) .bill_to_location_id;
6929             l_ChLn_Assoc.poa_party_id             := C_est_CL (i) .poa_party_id;
6930             l_ChLn_Assoc.poa_party_site_id        := C_est_CL (i) .poa_party_site_id;
6931             l_ChLn_Assoc.poo_organization_id      := C_est_CL (i) .poo_organization_id;
6932             l_ChLn_Assoc.poo_location_id          := C_est_CL (i) .poo_location_id;
6933             -- Create_ChLines
6934             l_debug_info                                 := 'Create_ChLines';
6935             INL_LOGGING_PVT.Log_Statement (
6936                 p_module_name => g_module_name,
6937                 p_procedure_name => l_program_name,
6938                 p_debug_info => l_debug_info
6939             ) ;
6940             Create_ChLines (
6941                 p_ChLn_Assoc => l_ChLn_Assoc,
6942                 p_include_assoc => 'N',
6943                 p_adjustment_num => p_adjustment_num,
6944                 x_new_charge_line_id => l_new_charge_line_id,
6945                 x_return_status => l_return_status
6946             ) ;
6947             IF l_return_status = L_FND_RET_STS_ERROR THEN
6948                 RAISE L_FND_EXC_ERROR;
6949             ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
6950                 RAISE L_FND_EXC_UNEXPECTED_ERROR;
6951             END IF;
6952             -- TxLines
6953             l_debug_info  := 'Amount = 0 for estimated taxes associated with estimated charge';
6954             INL_LOGGING_PVT.Log_Statement (
6955                 p_module_name => g_module_name,
6956                 p_procedure_name => l_program_name,
6957                 p_debug_info => l_debug_info
6958             ) ;
6959             Zero_EstimTaxLines (
6960                 p_ship_header_id  => NULL,
6961                 p_match_id => p_match_id,
6962                 p_comp_name => 'INL_CHARGE_LINES',
6963                 p_comp_id => C_est_CL (i) .charge_line_id,
6964                 p_tax_code => NULL,
6965                 p_adjustment_num => p_adjustment_num,
6966                 x_return_status => l_return_status
6967             ) ;
6968             IF l_return_status = L_FND_RET_STS_ERROR THEN
6969                 RAISE L_FND_EXC_ERROR;
6970             ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
6971                 RAISE L_FND_EXC_UNEXPECTED_ERROR;
6972             END IF;
6973         END LOOP;
6974     END IF;
6975     -- Standard End of Procedure/Function Logging
6976     INL_LOGGING_PVT.Log_EndProc (
6977         p_module_name => g_module_name,
6978         p_procedure_name => l_program_name
6979     ) ;
6980 EXCEPTION
6981 WHEN L_FND_EXC_ERROR THEN
6982     -- Standard Expected Error Logging
6983     INL_LOGGING_PVT.Log_ExpecError (
6984         p_module_name => g_module_name,
6985         p_procedure_name => l_program_name
6986     ) ;
6987     x_return_status := L_FND_RET_STS_ERROR;
6988 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
6989     -- Standard Unexpected Error Logging
6990     INL_LOGGING_PVT.Log_UnexpecError (
6991         p_module_name => g_module_name,
6992         p_procedure_name => l_program_name
6993     ) ;
6994     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
6995 WHEN OTHERS THEN
6996     -- Standard Unexpected Error Logging
6997     INL_LOGGING_PVT.Log_UnexpecError (
6998         p_module_name => g_module_name,
6999         p_procedure_name => l_program_name
7000     ) ;
7001     x_return_status := L_FND_RET_STS_UNEXP_ERROR ;
7002     IF FND_MSG_PUB.Check_Msg_Level (p_message_level  => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
7003         FND_MSG_PUB.Add_Exc_Msg (
7004             p_pkg_name => g_pkg_name,
7005             p_procedure_name => l_program_name
7006         ) ;
7007     END IF;
7008 END Zero_EstimChargeLinesPerMatch;
7009 
7010 -- BUG#9474491
7011 -- Utility name: Create_NewEstimChLinesPerMatch
7012 -- Type       : Private
7013 -- Function   : Create new estimated lines in case of, after creating an adjustment, a given tax (or cost factor) becomes zero,
7014 -- then the estimated tax (or cost factor) should come back as the current adjustment amount.
7015 -- This new estimated lines should have NULL value in match_id and match_amount_id but with this we'll be unable to know about the match
7016 -- that has generated this new charge lines
7017 -- Pre-reqs   : None
7018 -- Parameters :
7019 -- IN         :     p_match_id              IN NUMBER,
7020 --                  p_match_Amount_id       IN NUMBER,
7021 --                  p_charge_line_type_id   IN NUMBER,
7022 --
7023 -- OUT        : x_return_status         OUT NOCOPY VARCHAR2
7024 --
7025 -- Version    : Current version 1.0
7026 --
7027 -- Notes      :
7028 PROCEDURE Create_NewEstimChLinesPerMatch (
7029     p_match_id              IN NUMBER,
7030     p_match_Amount_id       IN NUMBER,
7031     p_charge_line_type_id   IN NUMBER,
7032     p_adjustment_num        IN NUMBER,
7033     x_return_status         OUT NOCOPY VARCHAR2
7034 ) IS
7035     l_program_name CONSTANT VARCHAR2(30) := 'Create_NewEstimChLinesPerMatch';
7036     l_return_status VARCHAR2(1);
7037     l_debug_info VARCHAR2(200);
7038 
7039     l_created_chLnId    NUMBER;
7040     l_created_chLnAmt   NUMBER;
7041     l_sum_chLnAmt       NUMBER;
7042     l_alc_zero          NUMBER; --Bug#11064618
7043 
7044     CURSOR c_affected_ship (pc_charge_line_id NUMBER)
7045     IS
7046         SELECT
7047             a.ship_header_id      ,
7048             a.to_parent_table_name,
7049             a.to_parent_table_id
7050         FROM
7051             inl_associations a
7052         WHERE
7053             a.from_parent_table_name = 'INL_CHARGE_LINES'
7054         AND a.from_parent_table_id   = pc_charge_line_id
7055     ;
7056 
7057     TYPE affected_ship_Type
7058         IS
7059         TABLE OF c_affected_ship%ROWTYPE INDEX BY BINARY_INTEGER;
7060 
7061     affected_by_alc_ship_lst affected_ship_Type;
7062     affected_by_elc_lst affected_ship_Type;
7063 
7064     CURSOR c_ELC_CLines (pc_ship_line_id NUMBER)
7065     IS
7066         SELECT
7067             cl.adjustment_num             ,
7068             cl.charge_line_id             ,
7069             cl.parent_charge_line_id      ,
7070             cl.charge_line_num            ,
7071             cl.landed_cost_flag           ,
7072             cl.update_allowed             ,
7073             cl.source_code                ,
7074             cl.charge_amt                 ,
7075             cl.currency_code              ,
7076             cl.currency_conversion_type   ,
7077             cl.currency_conversion_date   ,
7078             cl.currency_conversion_rate   ,
7079             cl.party_id                   ,
7080             cl.party_site_id              ,
7081             cl.trx_business_category      ,
7082             cl.intended_use               ,
7083             cl.product_fiscal_class       ,
7084             cl.product_category           ,
7085             cl.product_type               ,
7086             cl.user_def_fiscal_class      ,
7087             cl.tax_classification_code    ,
7088             cl.assessable_value           ,
7089             cl.tax_already_calculated_flag,
7090             cl.ship_from_party_id         ,
7091             cl.ship_from_party_site_id    ,
7092             cl.ship_to_organization_id    ,
7093             cl.ship_to_location_id        ,
7094             cl.bill_from_party_id         ,
7095             cl.bill_from_party_site_id    ,
7096             cl.bill_to_organization_id    ,
7097             cl.bill_to_location_id        ,
7098             cl.poa_party_id               ,
7099             cl.poa_party_site_id          ,
7100             cl.poo_organization_id        ,
7101             cl.poo_location_id            ,
7102             a.to_parent_table_name        ,
7103             a.to_parent_table_id
7104         FROM
7105             inl_charge_lines cl,
7106             inl_associations a,
7107             inl_ship_lines_all sl,
7108             inl_ship_line_groups slg,
7109             inl_ship_headers_all sh
7110         WHERE
7111             cl.adjustment_num        = 0
7112         AND a.from_parent_table_name = 'INL_CHARGE_LINES'
7113         AND a.from_parent_table_id   = cl.charge_line_id
7114         AND cl.charge_line_type_id    = p_charge_line_type_id
7115         AND a.ship_header_id         = sl.ship_header_id
7116         AND ((a.to_parent_table_name   = 'INL_SHIP_LINES'
7117               AND a.to_parent_table_id = sl.ship_line_id)
7118               OR
7119              (a.to_parent_table_name   = 'INL_SHIP_LINE_GROUPS'
7120               AND a.to_parent_table_id = sl.ship_line_group_id)
7121               OR
7122              (a.to_parent_table_name   = 'INL_SHIP_HEADERS'
7123               AND a.to_parent_table_id = sl.ship_header_id))
7124         AND sh.ship_header_id      = sl.ship_header_id
7125         AND slg.ship_line_group_id = sl.ship_line_group_id
7126         AND sl.ship_line_id        = pc_ship_line_id
7127         ;
7128     TYPE ELC_CLines_Type
7129         IS
7130         TABLE OF c_ELC_CLines%ROWTYPE INDEX BY BINARY_INTEGER;
7131 
7132     ELC_CLines_lst ELC_CLines_Type;
7133     l_ELC_ShouldBeCreatedFlag VARCHAR2(1);
7134     l_last_parentChargeLineID NUMBER;
7135 BEGIN
7136     -- Standard Beginning of Procedure/Function Logging
7137     INL_LOGGING_PVT.Log_BeginProc (
7138         p_module_name => g_module_name,
7139         p_procedure_name => l_program_name
7140     );
7141     --  Initialize return status to success
7142     x_return_status := L_FND_RET_STS_SUCCESS;
7143 
7144     -- - There isn't a link with the previous match_id/match_amount_id (the one that is being reverted).
7145     -- - Each match or match amount generate one charge line.
7146     -- - An action could be required when:
7147     --      - this new charge is negative
7148     --      - The sum of charge lines, with the same cost factor, in each point that it is being applyed, become 0
7149     --      - There was estimated charge line with the same cost factor applyed to the current line
7150     --      - There wasn't any actual value, with the same cost factor, in each point that it is being applyed.
7151 
7152 
7153     l_debug_info := ' Getting charge line information.';
7154     INL_LOGGING_PVT.Log_Statement (
7155         p_module_name => g_module_name,
7156         p_procedure_name => l_program_name,
7157         p_debug_info => l_debug_info
7158     ) ;
7159     INL_LOGGING_PVT.Log_Variable (
7160         p_module_name => g_module_name,
7161         p_procedure_name => l_program_name,
7162         p_var_name => 'p_match_id',
7163         p_var_value => p_match_id
7164     ) ;
7165     INL_LOGGING_PVT.Log_Variable (
7166         p_module_name => g_module_name,
7167         p_procedure_name => l_program_name,
7168         p_var_name => 'p_match_Amount_id',
7169         p_var_value => p_match_Amount_id
7170     ) ;
7171 --Bug#11064618
7172 /*
7173     IF p_match_id IS NOT NULL THEN
7174 
7175         SELECT
7176             cl.charge_line_id,
7177             cl.charge_amt
7178         INTO
7179             l_created_chLnId,
7180             l_created_chLnAmt
7181         FROM
7182             inl_charge_lines cl
7183         WHERE
7184             cl.match_id = p_match_id
7185         AND cl.charge_amt <> 0 --BUG#9804065  --discards lines to zeroes estimated
7186         ;
7187     ELSE
7188 
7189         SELECT
7190             cl.charge_line_id,
7191             cl.charge_amt
7192         INTO
7193             l_created_chLnId,
7194             l_created_chLnAmt
7195         FROM
7196             inl_charge_lines cl
7197         WHERE
7198             cl.match_Amount_id = p_match_Amount_id
7199         AND cl.charge_amt <> 0 --BUG#9804065 -- discards lines to zeroes estimated
7200         ;
7201 
7202     END IF;
7203 */
7204     SELECT
7205             cl.charge_line_id,
7206             cl.charge_amt
7207     INTO
7208             l_created_chLnId,
7209             l_created_chLnAmt
7210     FROM
7211             inl_charge_lines cl
7212     WHERE
7213         ((p_match_id IS NOT NULL
7214           AND cl.match_id = p_match_id)
7215              OR
7216          (p_match_Amount_id  IS NOT NULL
7217           AND cl.match_Amount_id = p_match_Amount_id))
7218     AND (cl.parent_charge_line_id IS NULL
7219 --         OR 0 not in
7220          OR 0 < --SCM-051
7221             (SELECT
7222                 cl1.adjustment_num
7223              FROM
7224                 inl_charge_lines cl1
7225              WHERE
7226                  CONNECT_BY_ISLEAF = 1
7227              START WITH cl1.charge_line_id = cl.charge_line_id
7228              CONNECT BY PRIOR cl1.parent_charge_line_id = cl1.charge_line_id));
7229 -- when a invoice with amt = 0 is canceled we are unable to redo the ELC
7230 --Bug#11064618
7231 
7232 
7233     INL_LOGGING_PVT.Log_Variable (
7234         p_module_name => g_module_name,
7235         p_procedure_name => l_program_name,
7236         p_var_name => 'l_created_chLnId',
7237         p_var_value => l_created_chLnId
7238     ) ;
7239 
7240     INL_LOGGING_PVT.Log_Variable (
7241         p_module_name => g_module_name,
7242         p_procedure_name => l_program_name,
7243         p_var_name => 'l_created_chLnAmt',
7244         p_var_value => l_created_chLnAmt
7245     ) ;
7246 
7247     INL_LOGGING_PVT.Log_Variable (
7248         p_module_name => g_module_name,
7249         p_procedure_name => l_program_name,
7250         p_var_name => 'p_charge_line_type_id',
7251         p_var_value => p_charge_line_type_id
7252     ) ;
7253 
7254     -- is the current charge line negative?
7255     IF l_created_chLnAmt < 0 THEN
7256 
7257         -- get all points affected by current charge line
7258         OPEN c_affected_ship(l_created_chLnId);
7259         FETCH c_affected_ship BULK COLLECT INTO affected_by_alc_ship_lst;
7260         CLOSE c_affected_ship;
7261 
7262         l_debug_info := 'affected_by_alc: '||affected_by_alc_ship_lst.LAST||' line(s) have been retrieved.';
7263         INL_LOGGING_PVT.Log_Statement (
7264             p_module_name => g_module_name,
7265             p_procedure_name => l_program_name,
7266             p_debug_info => l_debug_info
7267         ) ;
7268         IF NVL (affected_by_alc_ship_lst.LAST, 0) > 0 THEN
7269 
7270             -- Go down in all points where charge line is applied
7271             -- in case of Actuals the point is ever a ship_line
7272             FOR i IN NVL (affected_by_alc_ship_lst.FIRST, 0)..NVL (affected_by_alc_ship_lst.LAST, 0)
7273             LOOP
7274                 INL_LOGGING_PVT.Log_Variable (
7275                     p_module_name => g_module_name,
7276                     p_procedure_name => l_program_name,
7277                     p_var_name => 'affected_by_alc_ship_lst('||i||').ship_header_id',
7278                     p_var_value => affected_by_alc_ship_lst(i).ship_header_id
7279                 ) ;
7280 
7281                 INL_LOGGING_PVT.Log_Variable (
7282                     p_module_name => g_module_name,
7283                     p_procedure_name => l_program_name,
7284                     p_var_name => 'affected_by_alc_ship_lst('||i||').to_parent_table_name',
7285                     p_var_value => affected_by_alc_ship_lst(i).to_parent_table_name
7286                 ) ;
7287 
7288                 INL_LOGGING_PVT.Log_Variable (
7289                     p_module_name => g_module_name,
7290                     p_procedure_name => l_program_name,
7291                     p_var_name => 'affected_by_alc_ship_lst('||i||').to_parent_table_id',
7292                     p_var_value => affected_by_alc_ship_lst(i).to_parent_table_id
7293                 ) ;
7294 
7295 --                affected_by_alc_ship_lst.inl_Assoc.ship_header_id := affected_by_alc_ship_lst(i).ship_header_id;
7296 
7297                 -- CURRENTLY ALL ASSOCIATIONS OF ACTUALS ARE MADE AT LINE LEVEL
7298                 IF affected_by_alc_ship_lst(i).to_parent_table_name <> 'INL_SHIP_LINES' THEN
7299 
7300                     l_debug_info  := 'Problem in INL SHIPMENT PVT regarding canceled invoice applied at a level different from line';
7301                     INL_LOGGING_PVT.Log_Statement (
7302                         p_module_name => g_module_name,
7303                         p_procedure_name => l_program_name,
7304                         p_debug_info => l_debug_info
7305                     ) ;
7306                     RAISE L_FND_EXC_ERROR;
7307                 END IF;
7308 
7309                 -- sum all charge lines that come to each point
7310 
7311                 SELECT
7312                     SUM(cl.charge_amt)
7313                 INTO
7314                     l_sum_chLnAmt
7315                 FROM
7316                     inl_adj_charge_lines_v cl,
7317                     inl_adj_associations_v a, --BUG#9804065
7318                     inl_ship_lines_all sl,
7319                     inl_ship_line_groups slg,
7320                     inl_ship_headers_all sh
7321                 WHERE
7322                     a.ship_header_id         = sl.ship_header_id
7323                 AND cl.charge_line_type_id   = p_charge_line_type_id --same cost factor
7324                 AND ((a.to_parent_table_name   = 'INL_SHIP_LINES'
7325                       AND a.to_parent_table_id = sl.ship_line_id)
7326                       OR
7327                      (a.to_parent_table_name   = 'INL_SHIP_LINE_GROUPS'
7328                       AND a.to_parent_table_id = sl.ship_line_group_id)
7329                       OR
7330                      (a.to_parent_table_name   = 'INL_SHIP_HEADERS'
7331                       AND a.to_parent_table_id = sl.ship_header_id))
7332                 AND sh.ship_header_id      = sl.ship_header_id
7333                 AND slg.ship_line_group_id = sl.ship_line_group_id
7334                 AND sl.ship_line_id        = affected_by_alc_ship_lst(i).to_parent_table_id
7335                 AND a.from_parent_table_name = 'INL_CHARGE_LINES'
7336                 AND a.from_parent_table_id   = cl.charge_line_id
7337                 ;
7338 
7339                 l_debug_info  := 'Sum all charge lines that come to this point: '||l_sum_chLnAmt;
7340                 INL_LOGGING_PVT.Log_Statement (
7341                     p_module_name => g_module_name,
7342                     p_procedure_name => l_program_name,
7343                     p_debug_info => l_debug_info
7344                 ) ;
7345 
7346                 -- Verify if sum of lines with the same cost factor become 0
7347                 IF l_sum_chLnAmt = 0 THEN --without nvl
7348 
7349                     -- Verify if exist any actual with amount = 0 coming to this point
7350                     --Bug#11064618
7351 
7352                     l_debug_info  := 'Verify if exist any actual with amount = 0 coming to this point ';
7353                     INL_LOGGING_PVT.Log_Statement (
7354                         p_module_name => g_module_name,
7355                         p_procedure_name => l_program_name,
7356                         p_debug_info => l_debug_info
7357                     ) ;
7358 
7359                     SELECT
7360                             COUNT(*)
7361                     INTO
7362                             l_alc_zero
7363                     FROM
7364                             inl_charge_lines cl,
7365                             inl_associations assoc
7366                     WHERE
7367                         assoc.to_parent_table_id = affected_by_alc_ship_lst(i).to_parent_table_id
7368                     AND assoc.to_parent_table_name = 'INL_SHIP_LINES'
7369                     AND assoc.from_parent_table_name = 'INL_CHARGE_LINES'
7370                     AND assoc.from_parent_table_id = cl.charge_line_id
7371                     AND cl.charge_line_type_id   = p_charge_line_type_id --same cost factor
7372                     AND cl.charge_amt = 0
7373                     AND (cl.parent_charge_line_id IS NULL
7374                          OR 0 not in
7375                             (SELECT
7376                                 cl1.adjustment_num
7377                              FROM
7378                                 inl_charge_lines cl1
7379                              WHERE
7380                                  CONNECT_BY_ISLEAF = 1
7381                              START WITH cl1.charge_line_id = cl.charge_line_id
7382                              CONNECT BY PRIOR cl1.parent_charge_line_id = cl1.charge_line_id));
7383                     IF NVL(l_alc_zero,0) = 0 THEN
7384                     --Bug#11064618
7385 
7386                         -- Get all ELC that came to this point
7387 
7388                         OPEN c_ELC_CLines(affected_by_alc_ship_lst(i).to_parent_table_id);
7389                         FETCH c_ELC_CLines BULK COLLECT INTO ELC_CLines_lst;
7390                         CLOSE c_ELC_CLines;
7391 
7392                         l_debug_info := ELC_CLines_lst.LAST||' line(s) have been retrieved (ELC_CLines_lst).';
7393                         INL_LOGGING_PVT.Log_Statement (
7394                             p_module_name => g_module_name,
7395                             p_procedure_name => l_program_name,
7396                             p_debug_info => l_debug_info
7397                         ) ;
7398                         IF NVL (ELC_CLines_lst.LAST, 0) > 0 THEN
7399 
7400                             FOR j IN NVL (ELC_CLines_lst.FIRST, 0)..NVL (ELC_CLines_lst.LAST, 0)
7401                             LOOP
7402 
7403                                 l_ELC_ShouldBeCreatedFlag := 'Y';
7404 
7405                                 INL_LOGGING_PVT.Log_Variable (
7406                                     p_module_name => g_module_name,
7407                                     p_procedure_name => l_program_name,
7408                                     p_var_name => 'ELC_CLines_lst('||j||').to_parent_table_name',
7409                                     p_var_value => ELC_CLines_lst(j).to_parent_table_name
7410                                 ) ;
7411 
7412                                 INL_LOGGING_PVT.Log_Variable (
7413                                     p_module_name => g_module_name,
7414                                     p_procedure_name => l_program_name,
7415                                     p_var_name => 'ELC_CLines_lst('||j||').to_parent_table_id',
7416                                     p_var_value => ELC_CLines_lst(j).to_parent_table_id
7417                                 ) ;
7418 
7419                                 INL_LOGGING_PVT.Log_Variable (
7420                                     p_module_name => g_module_name,
7421                                     p_procedure_name => l_program_name,
7422                                     p_var_name => 'ELC_CLines_lst('||j||').adjustment_num',
7423                                     p_var_value => ELC_CLines_lst(j).adjustment_num
7424                                 ) ;
7425 
7426                                 INL_LOGGING_PVT.Log_Variable (
7427                                     p_module_name => g_module_name,
7428                                     p_procedure_name => l_program_name,
7429                                     p_var_name => 'ELC_CLines_lst('||j||').charge_line_num',
7430                                     p_var_value => ELC_CLines_lst(j).charge_line_num
7431                                 ) ;
7432 
7433                                 INL_LOGGING_PVT.Log_Variable (
7434                                     p_module_name => g_module_name,
7435                                     p_procedure_name => l_program_name,
7436                                     p_var_name => 'ELC_CLines_lst('||j||').charge_amt',
7437                                     p_var_value => ELC_CLines_lst(j).charge_amt
7438                                 ) ;
7439 
7440                                 -- To each ELC verify if exist any ALC
7441 
7442 
7443                                 -- get all points affected by current charge line
7444                                 OPEN c_affected_ship(ELC_CLines_lst(j).charge_line_id);
7445                                 FETCH c_affected_ship BULK COLLECT INTO affected_by_elc_lst;
7446                                 CLOSE c_affected_ship;
7447 
7448                                 l_debug_info := 'Affected_by_elc '||affected_by_elc_lst.LAST||' line(s) have been retrieved.';
7449                                 INL_LOGGING_PVT.Log_Statement (
7450                                     p_module_name => g_module_name,
7451                                     p_procedure_name => l_program_name,
7452                                     p_debug_info => l_debug_info
7453                                 ) ;
7454                                 IF NVL (affected_by_elc_lst.LAST, 0) > 0 THEN
7455 
7456                                     -- Go down in all points where charge line is applied
7457                                     FOR k IN NVL (affected_by_elc_lst.FIRST, 0)..NVL (affected_by_elc_lst.LAST, 0)
7458                                     LOOP
7459                                         INL_LOGGING_PVT.Log_Variable (
7460                                             p_module_name => g_module_name,
7461                                             p_procedure_name => l_program_name,
7462                                             p_var_name => 'affected_by_elc_lst('||k||').ship_header_id',
7463                                             p_var_value => affected_by_elc_lst(k).ship_header_id
7464                                         ) ;
7465 
7466                                         INL_LOGGING_PVT.Log_Variable (
7467                                             p_module_name => g_module_name,
7468                                             p_procedure_name => l_program_name,
7469                                             p_var_name => 'affected_by_elc_lst('||k||').to_parent_table_name',
7470                                             p_var_value => affected_by_elc_lst(k).to_parent_table_name
7471                                         ) ;
7472 
7473                                         INL_LOGGING_PVT.Log_Variable (
7474                                             p_module_name => g_module_name,
7475                                             p_procedure_name => l_program_name,
7476                                             p_var_name => 'affected_by_elc_lst('||k||').to_parent_table_id',
7477                                             p_var_value => affected_by_elc_lst(k).to_parent_table_id
7478                                         ) ;
7479 
7480                                         -- Search for an actual for this cost factor
7481                                         IF affected_by_elc_lst(k).to_parent_table_name = 'INL_SHIP_HEADERS' then
7482                                             SELECT
7483                                                 SUM(cl.charge_amt)
7484                                             INTO
7485                                                 l_sum_chLnAmt
7486                                             FROM
7487                                                 inl_adj_charge_lines_v cl,
7488                                                 inl_associations a
7489                                             WHERE
7490                                                 a.ship_header_id         = affected_by_elc_lst(k).ship_header_id
7491                                             AND cl.charge_line_type_id   = p_charge_line_type_id --same cost factor
7492                                             AND NVL(cl.match_id,cl.match_amount_id) IS NOT NULL --only ALC
7493                                             AND a.from_parent_table_name = 'INL_CHARGE_LINES'
7494                                             AND a.from_parent_table_id   = cl.charge_line_id
7495                                             ;
7496 
7497 --Bug#11064618
7498                                             l_debug_info  := 'Verify if exist any actual with amount = 0 coming to this HEADER ';
7499                                             INL_LOGGING_PVT.Log_Statement (
7500                                                 p_module_name => g_module_name,
7501                                                 p_procedure_name => l_program_name,
7502                                                 p_debug_info => l_debug_info
7503                                             ) ;
7504 
7505                                             SELECT
7506                                                     COUNT(*)
7507                                             INTO
7508                                                     l_alc_zero
7509                                             FROM
7510                                                     inl_charge_lines cl,
7511                                                     inl_associations assoc
7512                                             WHERE
7513                                                 assoc.ship_header_id         = affected_by_elc_lst(k).ship_header_id
7514                                             AND assoc.to_parent_table_name = 'INL_SHIP_LINES'
7515                                             AND assoc.from_parent_table_name = 'INL_CHARGE_LINES'
7516                                             AND assoc.from_parent_table_id = cl.charge_line_id
7517                                             AND cl.charge_amt = 0
7518                                             AND cl.charge_line_type_id = p_charge_line_type_id --same cost factor
7519                                             AND NVL(cl.match_id,cl.match_amount_id) IS NOT NULL --only ALC
7520                                             AND (cl.parent_charge_line_id IS NULL
7521                                                  OR 0 not in
7522                                                     (SELECT
7523                                                         cl1.adjustment_num
7524                                                      FROM
7525                                                         inl_charge_lines cl1
7526                                                      WHERE
7527                                                          CONNECT_BY_ISLEAF = 1
7528                                                      START WITH cl1.charge_line_id = cl.charge_line_id
7529                                                      CONNECT BY PRIOR cl1.parent_charge_line_id = cl1.charge_line_id));
7530 --Bug#11064618
7531 
7532                                         ELSIF affected_by_elc_lst(k).to_parent_table_name = 'INL_SHIP_LINE_GROUPS' then
7533                                             SELECT
7534                                                 SUM(cl.charge_amt)
7535                                             INTO
7536                                                 l_sum_chLnAmt
7537                                             FROM
7538                                                 inl_adj_charge_lines_v cl,
7539                                                 inl_associations a
7540                                             WHERE
7541                                                 a.ship_header_id         = affected_by_elc_lst(k).ship_header_id
7542                                             AND cl.charge_line_type_id   = p_charge_line_type_id --same cost factor
7543                                             AND NVL(cl.match_id,cl.match_amount_id) IS NOT NULL --only ALC
7544                                             AND  EXISTS (SELECT 1
7545                                                          FROM inl_ship_lines_all sl
7546                                                          WHERE sl.ship_line_id     = a.to_parent_table_id
7547                                                          AND sl.ship_header_id     = affected_by_elc_lst(k).ship_header_id
7548                                                          AND sl.ship_line_group_id = affected_by_elc_lst(k).to_parent_table_id
7549                                                          AND ROWNUM < 2)
7550                                             AND a.from_parent_table_name = 'INL_CHARGE_LINES'
7551                                             AND a.from_parent_table_id   = cl.charge_line_id
7552                                             ;
7553 
7554 --Bug#11064618
7555                                             l_debug_info  := 'Verify if exist any actual with amount = 0 coming to this GROUP ';
7556                                             INL_LOGGING_PVT.Log_Statement (
7557                                                 p_module_name => g_module_name,
7558                                                 p_procedure_name => l_program_name,
7559                                                 p_debug_info => l_debug_info
7560                                             ) ;
7561 
7562                                             SELECT
7563                                                     COUNT(*)
7564                                             INTO
7565                                                     l_alc_zero
7566                                             FROM
7567                                                     inl_charge_lines cl,
7568                                                     inl_associations assoc
7569                                             WHERE
7570                                                 assoc.ship_header_id         = affected_by_elc_lst(k).ship_header_id
7571                                             AND assoc.to_parent_table_name = 'INL_SHIP_LINES'
7572                                             AND assoc.from_parent_table_name = 'INL_CHARGE_LINES'
7573                                             AND assoc.from_parent_table_id = cl.charge_line_id
7574                                             AND cl.charge_amt = 0
7575                                             AND cl.charge_line_type_id = p_charge_line_type_id --same cost factor
7576                                             AND NVL(cl.match_id,cl.match_amount_id) IS NOT NULL --only ALC
7577                                             AND  EXISTS (SELECT 1
7578                                                          FROM inl_ship_lines_all sl
7579                                                          WHERE sl.ship_line_id     = assoc.to_parent_table_id
7580                                                          AND sl.ship_header_id     = affected_by_elc_lst(k).ship_header_id
7581                                                          AND sl.ship_line_group_id = affected_by_elc_lst(k).to_parent_table_id
7582                                                          AND ROWNUM < 2)
7583                                             AND (cl.parent_charge_line_id IS NULL
7584                                                  OR 0 not in
7585                                                     (SELECT
7586                                                         cl1.adjustment_num
7587                                                      FROM
7588                                                         inl_charge_lines cl1
7589                                                      WHERE
7590                                                          CONNECT_BY_ISLEAF = 1
7591                                                      START WITH cl1.charge_line_id = cl.charge_line_id
7592                                                      CONNECT BY PRIOR cl1.parent_charge_line_id = cl1.charge_line_id));
7593 --Bug#11064618
7594 
7595                                         ELSIF affected_by_elc_lst(k).to_parent_table_name = 'INL_SHIP_LINES' then
7596                                             SELECT
7597                                                 SUM(cl.charge_amt)
7598                                             INTO
7599                                                 l_sum_chLnAmt
7600                                             FROM
7601                                                 inl_adj_charge_lines_v cl,
7602                                                 inl_associations a
7603                                             WHERE
7604                                                 a.ship_header_id         = affected_by_elc_lst(k).ship_header_id
7605                                             AND cl.charge_line_type_id   = p_charge_line_type_id --same cost factor
7606                                             AND NVL(cl.match_id,cl.match_amount_id) IS NOT NULL --only ALC
7607                                             AND a.to_parent_table_id = affected_by_elc_lst(k).to_parent_table_id
7608                                             AND a.from_parent_table_name = 'INL_CHARGE_LINES'
7609                                             AND a.from_parent_table_id   = cl.charge_line_id
7610                                             ;
7611 --Bug#11064618
7612                                             l_debug_info  := 'Verify if exist any actual with amount = 0 coming to this line ';
7613                                             INL_LOGGING_PVT.Log_Statement (
7614                                                 p_module_name => g_module_name,
7615                                                 p_procedure_name => l_program_name,
7616                                                 p_debug_info => l_debug_info
7617                                             ) ;
7618 
7619                                             SELECT
7620                                                     COUNT(*)
7621                                             INTO
7622                                                     l_alc_zero
7623                                             FROM
7624                                                     inl_charge_lines cl,
7625                                                     inl_associations assoc
7626                                             WHERE
7627                                                 assoc.ship_header_id         = affected_by_elc_lst(k).ship_header_id
7628                                             AND assoc.to_parent_table_name = 'INL_SHIP_LINES'
7629                                             AND assoc.to_parent_table_id = affected_by_elc_lst(k).to_parent_table_id
7630                                             AND assoc.from_parent_table_name = 'INL_CHARGE_LINES'
7631                                             AND assoc.from_parent_table_id = cl.charge_line_id
7632                                             AND cl.charge_amt = 0
7633                                             AND cl.charge_line_type_id = p_charge_line_type_id --same cost factor
7634                                             AND NVL(cl.match_id,cl.match_amount_id) IS NOT NULL --only ALC
7635                                             AND (cl.parent_charge_line_id IS NULL
7636                                                  OR 0 not in
7637                                                     (SELECT
7638                                                         cl1.adjustment_num
7639                                                      FROM
7640                                                         inl_charge_lines cl1
7641                                                      WHERE
7642                                                          CONNECT_BY_ISLEAF = 1
7643                                                      START WITH cl1.charge_line_id = cl.charge_line_id
7644                                                      CONNECT BY PRIOR cl1.parent_charge_line_id = cl1.charge_line_id));
7645 --Bug#11064618
7646                                         ELSE
7647                                              -- CURRENTLY ALL ASSOCIATIONS OF ELC ARE MADE AT SHIPMENT, GROUP OR LINE LEVEL
7648 
7649                                             l_debug_info  := 'Problem in INL SHIPMENT PVT regarding canceled invoice: ELC applied at a level different from SHIPMENT, GROUP OR LINE';
7650                                             INL_LOGGING_PVT.Log_Statement (
7651                                                 p_module_name => g_module_name,
7652                                                 p_procedure_name => l_program_name,
7653                                                 p_debug_info => l_debug_info
7654                                             ) ;
7655                                             RAISE L_FND_EXC_ERROR;
7656 
7657                                         END IF;
7658                                         INL_LOGGING_PVT.Log_Variable (
7659                                             p_module_name => g_module_name,
7660                                             p_procedure_name => l_program_name,
7661                                             p_var_name => 'l_sum_chLnAmt',
7662                                             p_var_value => l_sum_chLnAmt
7663                                         ) ;
7664 
7665                                         IF NVL(l_sum_chLnAmt,0)>0
7666                                         OR NVL(l_alc_zero,0)>0
7667                                         THEN
7668                                             l_ELC_ShouldBeCreatedFlag := 'N';
7669                                         END IF;
7670                                         exit when l_ELC_ShouldBeCreatedFlag = 'N';
7671                                     END LOOP;
7672 
7673                                 END IF;
7674                                 IF l_ELC_ShouldBeCreatedFlag = 'Y' THEN
7675                                     l_debug_info  := 'Getting last parent charge line id ***';
7676                                     INL_LOGGING_PVT.Log_Statement (
7677                                         p_module_name => g_module_name,
7678                                         p_procedure_name => l_program_name,
7679                                         p_debug_info => l_debug_info
7680                                     ) ;
7681                                         INL_LOGGING_PVT.Log_Variable (
7682                                             p_module_name => g_module_name,
7683                                             p_procedure_name => l_program_name,
7684                                             p_var_name => 'ELC_CLines_lst('||j||').charge_line_id',
7685                                             p_var_value => ELC_CLines_lst(j).charge_line_id
7686                                         ) ;
7687 
7688                                     SELECT
7689                                         cl1.charge_line_id
7690                                     INTO
7691                                         l_last_parentChargeLineID
7692                                     FROM
7693                                         inl_charge_lines cl1
7694                                     WHERE
7695                                         CONNECT_BY_ISLEAF = 1
7696                                         START WITH cl1.charge_line_id = ELC_CLines_lst(j).charge_line_id
7697                                         CONNECT BY PRIOR cl1.charge_line_id = cl1.parent_charge_line_id
7698                                     ;
7699 
7700                                     l_debug_info  := 'Inserting a new ELC ***';
7701                                     INL_LOGGING_PVT.Log_Statement (
7702                                         p_module_name => g_module_name,
7703                                         p_procedure_name => l_program_name,
7704                                         p_debug_info => l_debug_info
7705                                     ) ;
7706                                     --Create Charge lines and associations without use of bulk
7707                                     -- record should be generated before the evaluation of the next charge line
7708                                     --
7709                                     -- ASSOCIATIONS remain the same from original ELC charge
7710                                     INSERT INTO inl_charge_lines
7711                                         (
7712                                             charge_line_id             , /* 01 */
7713                                             charge_line_num            , /* 02 */
7714                                             charge_line_type_id        , /* 03 */
7715                                             landed_cost_flag           , /* 04 */
7716                                             update_allowed             , /* 05 */
7717                                             source_code                , /* 06 */
7718                                             parent_charge_line_id      , /* 07 */
7719                                             adjustment_num             , /* 08 */
7720                                             match_id                   , /* 09 */
7721                                             match_amount_id            , /* 10 */
7722                                             charge_amt                 , /* 11 */
7723                                             currency_code              , /* 12 */
7724                                             currency_conversion_type   , /* 13 */
7725                                             currency_conversion_date   , /* 14 */
7726                                             currency_conversion_rate   , /* 15 */
7727                                             party_id                   , /* 16 */
7728                                             party_site_id              , /* 17 */
7729                                             trx_business_category      , /* 18 */
7730                                             intended_use               , /* 19 */
7731                                             product_fiscal_class       , /* 20 */
7732                                             product_category           , /* 21 */
7733                                             product_type               , /* 22 */
7734                                             user_def_fiscal_class      , /* 23 */
7735                                             tax_classification_code    , /* 24 */
7736                                             assessable_value           , /* 25 */
7737                                             tax_already_calculated_flag, /* 26 */
7738                                             ship_from_party_id         , /* 27 */
7739                                             ship_from_party_site_id    , /* 28 */
7740                                             ship_to_organization_id    , /* 29 */
7741                                             ship_to_location_id        , /* 30 */
7742                                             bill_from_party_id         , /* 31 */
7743                                             bill_from_party_site_id    , /* 32 */
7744                                             bill_to_organization_id    , /* 33 */
7745                                             bill_to_location_id        , /* 34 */
7746                                             poa_party_id               , /* 35 */
7747                                             poa_party_site_id          , /* 36 */
7748                                             poo_organization_id        , /* 37 */
7749                                             poo_location_id            , /* 38 */
7750                                             created_by                 , /* 39 */
7751                                             creation_date              , /* 40 */
7752                                             last_updated_by            , /* 41 */
7753                                             last_update_date           , /* 42 */
7754                                             last_update_login            /* 43 */
7755                                         )
7756                                     VALUES
7757                                         (
7758                                             inl_charge_lines_s.nextval                   , /* 01 */
7759                                             ELC_CLines_lst(j).charge_line_num            , /* 02 */
7760                                             p_charge_line_type_id                        , /* 03 */
7761                                             ELC_CLines_lst(j).landed_cost_flag           , /* 04 */
7762                                             ELC_CLines_lst(j).update_allowed             , /* 05 */
7763                                             ELC_CLines_lst(j).source_code                , /* 06 */
7764                                             l_last_parentChargeLineID                    , /* 07 */
7765                                             p_adjustment_num                             , /* 08 */
7766                                             NULL                                         , /* 09 */
7767                                             NULL                                         , /* 10 */
7768                                             ELC_CLines_lst(j).charge_amt                 , /* 11 */
7769                                             ELC_CLines_lst(j).currency_code              , /* 12 */
7770                                             ELC_CLines_lst(j).currency_conversion_type   , /* 13 */
7771                                             ELC_CLines_lst(j).currency_conversion_date   , /* 14 */
7772                                             ELC_CLines_lst(j).currency_conversion_rate   , /* 15 */
7773                                             ELC_CLines_lst(j).party_id                   , /* 16 */
7774                                             ELC_CLines_lst(j).party_site_id              , /* 17 */
7775                                             ELC_CLines_lst(j).trx_business_category      , /* 18 */
7776                                             ELC_CLines_lst(j).intended_use               , /* 19 */
7777                                             ELC_CLines_lst(j).product_fiscal_class       , /* 20 */
7778                                             ELC_CLines_lst(j).product_category           , /* 21 */
7779                                             ELC_CLines_lst(j).product_type               , /* 22 */
7780                                             ELC_CLines_lst(j).user_def_fiscal_class      , /* 23 */
7781                                             ELC_CLines_lst(j).tax_classification_code    , /* 24 */
7782                                             ELC_CLines_lst(j).assessable_value           , /* 25 */
7783                                             'N'                                          , /* 26 */
7784                                             ELC_CLines_lst(j).ship_from_party_id         , /* 27 */
7785                                             ELC_CLines_lst(j).ship_from_party_site_id    , /* 28 */
7786                                             ELC_CLines_lst(j).ship_to_organization_id    , /* 29 */
7787                                             ELC_CLines_lst(j).ship_to_location_id        , /* 30 */
7788                                             ELC_CLines_lst(j).bill_from_party_id         , /* 31 */
7789                                             ELC_CLines_lst(j).bill_from_party_site_id    , /* 32 */
7790                                             ELC_CLines_lst(j).bill_to_organization_id    , /* 33 */
7791                                             ELC_CLines_lst(j).bill_to_location_id        , /* 34 */
7792                                             ELC_CLines_lst(j).poa_party_id               , /* 35 */
7793                                             ELC_CLines_lst(j).poa_party_site_id          , /* 36 */
7794                                             ELC_CLines_lst(j).poo_organization_id        , /* 37 */
7795                                             ELC_CLines_lst(j).poo_location_id            , /* 38 */
7796                                             L_FND_USER_ID                                , /* 39 */
7797                                             sysdate                                      , /* 40 */
7798                                             L_FND_USER_ID                                , /* 41 */
7799                                             sysdate                                      , /* 42 */
7800                                             l_fnd_login_id --SCM-051                       /* 43 */
7801                                         );
7802                                     END IF;
7803                             END LOOP;
7804                         END IF;
7805                     END IF;
7806                 END IF;
7807             END LOOP;
7808         END IF;
7809     END IF;
7810     -- Standard End of Procedure/Function Logging
7811     INL_LOGGING_PVT.Log_EndProc (
7812         p_module_name => g_module_name,
7813         p_procedure_name => l_program_name
7814     ) ;
7815 EXCEPTION
7816 WHEN L_FND_EXC_ERROR THEN
7817     -- Standard Expected Error Logging
7818     INL_LOGGING_PVT.Log_ExpecError (
7819         p_module_name => g_module_name,
7820         p_procedure_name => l_program_name
7821     ) ;
7822     x_return_status := L_FND_RET_STS_ERROR;
7823 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
7824     -- Standard Unexpected Error Logging
7825     INL_LOGGING_PVT.Log_UnexpecError (
7826         p_module_name => g_module_name,
7827         p_procedure_name => l_program_name
7828     ) ;
7829     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
7830 WHEN OTHERS THEN
7831     -- Standard Unexpected Error Logging
7832     INL_LOGGING_PVT.Log_UnexpecError (
7833         p_module_name => g_module_name,
7834         p_procedure_name => l_program_name
7835     ) ;
7836     x_return_status := L_FND_RET_STS_UNEXP_ERROR ;
7837     IF FND_MSG_PUB.Check_Msg_Level (p_message_level  => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
7838         FND_MSG_PUB.Add_Exc_Msg (
7839             p_pkg_name => g_pkg_name,
7840             p_procedure_name => l_program_name
7841         ) ;
7842     END IF;
7843 END Create_NewEstimChLinesPerMatch;
7844 
7845 
7846 -- BUG#9474491
7847 -- Utility name: Handle_EstimChLinesPerMatch  --BUG#9474491
7848 -- Type       : Private
7849 -- Function   : Concentrate calls to bring to zero the estimated charge line or create new Estimated when required
7850 -- Pre-reqs   : None
7851 -- Parameters :
7852 -- IN         :     p_match_id              IN NUMBER,
7853 --                  p_match_Amount_id       IN NUMBER,
7854 --                  p_charge_line_type_id   IN NUMBER,
7855 --
7856 -- OUT        : x_return_status         OUT NOCOPY VARCHAR2
7857 --
7858 -- Version    : Current version 1.0
7859 --
7860 -- Notes      :
7861 PROCEDURE Handle_EstimChLinesPerMatch (  --BUG#9474491
7862     p_match_id              IN NUMBER,
7863     p_match_Amount_id       IN NUMBER,
7864     p_charge_line_type_id   IN NUMBER,
7865     p_adjustment_num        IN NUMBER,
7866     x_return_status         OUT NOCOPY VARCHAR2
7867 ) IS
7868     l_program_name CONSTANT VARCHAR2(30) := 'Handle_EstimChLinesPerMatch';
7869     l_return_status VARCHAR2(1);
7870     l_debug_info VARCHAR2(200);
7871 BEGIN
7872     -- Standard Beginning of Procedure/Function Logging
7873     INL_LOGGING_PVT.Log_BeginProc (
7874         p_module_name => g_module_name,
7875         p_procedure_name => l_program_name
7876     );
7877     --  Initialize return status to success
7878     x_return_status := L_FND_RET_STS_SUCCESS;
7879 
7880     l_debug_info  := 'Calling Zero_EstimChargeLinesPerMatch';
7881     INL_LOGGING_PVT.Log_Statement (
7882         p_module_name => g_module_name,
7883         p_procedure_name => l_program_name,
7884         p_debug_info => l_debug_info
7885     ) ;
7886     Zero_EstimChargeLinesPerMatch (
7887         p_match_id           => p_match_id,
7888         p_match_Amount_id    => p_match_Amount_id,
7889         p_charge_line_type_id=> p_charge_line_type_id,
7890         p_adjustment_num     => p_adjustment_num,
7891         x_return_status      => l_debug_info
7892     );
7893     IF l_return_status = L_FND_RET_STS_ERROR THEN
7894         RAISE L_FND_EXC_ERROR;
7895     ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
7896         RAISE L_FND_EXC_UNEXPECTED_ERROR;
7897     END IF;
7898 
7899     l_debug_info  := 'Calling Create_NewEstimChLinesPerMatch';
7900     INL_LOGGING_PVT.Log_Statement (
7901         p_module_name => g_module_name,
7902         p_procedure_name => l_program_name,
7903         p_debug_info => l_debug_info
7904     ) ;
7905 
7906     Create_NewEstimChLinesPerMatch (
7907         p_match_id           => p_match_id,
7908         p_match_Amount_id    => p_match_Amount_id,
7909         p_charge_line_type_id=> p_charge_line_type_id,
7910         p_adjustment_num     => p_adjustment_num,
7911         x_return_status      => l_return_status ----BUG#9804065
7912     );
7913 
7914     IF l_return_status = L_FND_RET_STS_ERROR THEN
7915         RAISE L_FND_EXC_ERROR;
7916     ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
7917         RAISE L_FND_EXC_UNEXPECTED_ERROR;
7918     END IF;
7919 
7920     -- Standard End of Procedure/Function Logging
7921     INL_LOGGING_PVT.Log_EndProc (
7922         p_module_name => g_module_name,
7923         p_procedure_name => l_program_name
7924     ) ;
7925 EXCEPTION
7926 WHEN L_FND_EXC_ERROR THEN
7927     -- Standard Expected Error Logging
7928     INL_LOGGING_PVT.Log_ExpecError (
7929         p_module_name => g_module_name,
7930         p_procedure_name => l_program_name
7931     ) ;
7932     x_return_status := L_FND_RET_STS_ERROR;
7933 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
7934     -- Standard Unexpected Error Logging
7935     INL_LOGGING_PVT.Log_UnexpecError (
7936         p_module_name => g_module_name,
7937         p_procedure_name => l_program_name
7938     ) ;
7939     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
7940 WHEN OTHERS THEN
7941     -- Standard Unexpected Error Logging
7942     INL_LOGGING_PVT.Log_UnexpecError (
7943         p_module_name => g_module_name,
7944         p_procedure_name => l_program_name
7945     ) ;
7946     x_return_status := L_FND_RET_STS_UNEXP_ERROR ;
7947     IF FND_MSG_PUB.Check_Msg_Level (p_message_level  => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
7948         FND_MSG_PUB.Add_Exc_Msg (
7949             p_pkg_name => g_pkg_name,
7950             p_procedure_name => l_program_name
7951         ) ;
7952     END IF;
7953 END Handle_EstimChLinesPerMatch;
7954 
7955 -- API name   : Adjust_ChargeLines
7956 -- Type       : Private
7957 -- Function   : Create Adjustment Lines for Charge Lines
7958 -- Pre-reqs   : None
7959 -- Parameters :
7960 -- IN         : p_api_version                              IN NUMBER   Required
7961 --              p_init_msg_list                            IN VARCHAR2 Optional  Default = L_FND_FALSE
7962 --              p_commit                                   IN VARCHAR2 Optional  Default = L_FND_FALSE
7963 --              p_match_id                                 IN NUMBER,
7964 --              p_adjustment_num                           IN NUMBER,
7965 --              p_func_currency_code IN        VARCHAR2 , --BUG#8468830
7966 -- OUT          x_return_status                            OUT NOCOPY VARCHAR2
7967 --              x_msg_count                                OUT NOCOPY NUMBER
7968 --              x_msg_data                                 OUT NOCOPY VARCHAR2
7969 --
7970 -- Version    : Current version 1.0
7971 --
7972 -- Notes      :
7973 PROCEDURE Adjust_ChargeLines (
7974     p_api_version           IN NUMBER,
7975     p_init_msg_list         IN VARCHAR2 := L_FND_FALSE,
7976     p_commit                IN VARCHAR2 := L_FND_FALSE,
7977     p_match_id              IN NUMBER,
7978     p_adjustment_num        IN NUMBER,
7979     p_func_currency_code    IN VARCHAR2 , --BUG#8468830
7980     x_return_status         OUT NOCOPY VARCHAR2,
7981     x_msg_count             OUT NOCOPY NUMBER,
7982     x_msg_data              OUT NOCOPY VARCHAR2
7983 ) IS
7984     l_api_name    CONSTANT VARCHAR2 (30) := 'Adjust_ChargeLines';
7985     l_api_version CONSTANT NUMBER        := 1.0;
7986     l_next_adjust_num              NUMBER;
7987     l_debug_info                   VARCHAR2 (240) ;
7988     l_parent_charge_line_id        NUMBER;
7989     l_return_status                VARCHAR2 (1) ;
7990     l_new_charge_line_id           NUMBER;
7991     l_ship_line_id                 NUMBER;
7992     l_ship_header_id               NUMBER;
7993     l_matched_uom_code             VARCHAR2 (30) ;
7994     l_matched_curr_code            VARCHAR2 (15) ;
7995     l_matched_curr_conversion_type VARCHAR2 (30) ;
7996     l_matched_curr_conversion_date DATE;
7997     l_matched_curr_conversion_rate NUMBER;
7998     l_replace_estim_qty_flag       VARCHAR2 (1) ;
7999     l_party_id                     NUMBER;
8000     l_party_site_id                NUMBER;
8001     l_matched_amt                  NUMBER;
8002     l_mat_curr_code                VARCHAR2 (15) ;
8003     l_corr_charge_line_id          NUMBER;
8004     l_corr_charge_line_num         NUMBER;
8005     l_corr_adj_num                 NUMBER;
8006     l_include_assoc                VARCHAR2 (1) := 'Y';
8007     l_existing_match_info_flag     VARCHAR2 (1) ;
8008     l_from_parent_table_name       VARCHAR2 (30) ;
8009     l_charge_line_type_id          NUMBER;
8010     l_from_parent_table_id         NUMBER;
8011     l_to_parent_table_name         VARCHAR2 (30) ;
8012     l_to_parent_table_id           NUMBER;
8013     l_prev_adjustment_num          NUMBER := NULL;
8014     l_ChLn_Assoc inl_ChLn_Assoc_tp;
8015     l_garb                         NUMBER ; --BUG#8468830
8016 
8017 BEGIN
8018     -- Standard Beginning of Procedure/Function Logging
8019     INL_LOGGING_PVT.Log_BeginProc (p_module_name => g_module_name, p_procedure_name => l_api_name) ;
8020     -- Standard Start of API savepoint
8021     SAVEPOINT Adjust_ChargeLines_PVT;
8022     -- Initialize message list if p_init_msg_list is set to TRUE.
8023     IF FND_API.to_Boolean (p_init_msg_list) THEN
8024         FND_MSG_PUB.initialize;
8025     END IF;
8026     -- Check for call compatibility.
8027     IF NOT FND_API.Compatible_API_Call (
8028         p_current_version_number => l_api_version,
8029         p_caller_version_number => p_api_version,
8030         p_api_name => l_api_name,
8031         p_pkg_name => g_pkg_name
8032     ) THEN
8033         RAISE L_FND_EXC_UNEXPECTED_ERROR;
8034     END IF;
8035     --  Initialize API return status to success
8036     x_return_status := L_FND_RET_STS_SUCCESS;
8037     -- Getting the match information
8038     l_debug_info := 'Getting the match information';
8039     INL_LOGGING_PVT.Log_Statement (
8040         p_module_name => g_module_name,
8041         p_procedure_name => l_api_name,
8042         p_debug_info => l_debug_info
8043     ) ;
8044      SELECT m.to_parent_table_id      , /* 01 */
8045         m.from_parent_table_name      , /* 02 */
8046         m.from_parent_table_id        , /* 03 */
8047         m.to_parent_table_name        , /* 04 */
8048         m.to_parent_table_id          , /* 05 */
8049         m.matched_uom_code            , /* 06 */
8050         m.matched_amt                 , /* 07 */
8051         m.replace_estim_qty_flag      , /* 08 */
8052         m.existing_match_info_flag    , /* 09 */
8053         m.party_id                    , /* 10 */
8054         m.party_site_id               , /* 11 */
8055         m.charge_line_type_id         , /* 12 */
8056         m.matched_curr_code           , /* 13 */
8057         m.matched_curr_conversion_type, /* 14 */
8058         m.matched_curr_conversion_date, /* 15 */
8059         m.matched_curr_conversion_rate  /* 16 */
8060        INTO
8061         l_ship_line_id                , /* 01 */
8062         l_from_parent_table_name      , /* 02 */
8063         l_from_parent_table_id        , /* 03 */
8064         l_to_parent_table_name        , /* 04 */
8065         l_to_parent_table_id          , /* 05 */
8066         l_matched_uom_code            , /* 06 */
8067         l_matched_amt                 , /* 07 */
8068         l_replace_estim_qty_flag      , /* 08 */
8069         l_existing_match_info_flag    , /* 09 */
8070         l_party_id                    , /* 10 */
8071         l_party_site_id               , /* 11 */
8072         l_charge_line_type_id         , /* 12 */
8073         l_matched_curr_code           , /* 13 */
8074         l_matched_curr_conversion_type, /* 14 */
8075         l_matched_curr_conversion_date, /* 15 */
8076         l_matched_curr_conversion_rate  /* 16 */
8077        FROM inl_corr_matches_v m
8078       WHERE match_id = p_match_id;
8079     -- Getting the Ship information
8080     l_debug_info                                := 'Getting the ship line information';
8081     INL_LOGGING_PVT.Log_Statement (
8082         p_module_name => g_module_name,
8083         p_procedure_name => l_api_name,
8084         p_debug_info => l_debug_info
8085     ) ;
8086      SELECT sl.ship_header_id
8087        INTO l_ship_header_id
8088        FROM inl_ship_lines sl
8089       WHERE sl.ship_line_id = l_ship_line_id;
8090 
8091     INL_LOGGING_PVT.Log_Variable (
8092         p_module_name => g_module_name,
8093         p_procedure_name => l_api_name,
8094         p_var_name => 'l_existing_match_info_flag',
8095         p_var_value => l_existing_match_info_flag
8096     ) ;
8097 
8098     INL_LOGGING_PVT.Log_Variable (
8099         p_module_name => g_module_name,
8100         p_procedure_name => l_api_name,
8101         p_var_name => 'l_from_parent_table_name',
8102         p_var_value => l_from_parent_table_name
8103     ) ;
8104 
8105     INL_LOGGING_PVT.Log_Variable (
8106         p_module_name => g_module_name,
8107         p_procedure_name => l_api_name,
8108         p_var_name => 'l_from_parent_table_id',
8109         p_var_value => l_from_parent_table_id
8110     ) ;
8111 
8112     INL_LOGGING_PVT.Log_Variable (
8113         p_module_name => g_module_name,
8114         p_procedure_name => l_api_name,
8115         p_var_name => 'l_to_parent_table_name',
8116         p_var_value => l_to_parent_table_name
8117     ) ;
8118 
8119     INL_LOGGING_PVT.Log_Variable (
8120         p_module_name => g_module_name,
8121         p_procedure_name => l_api_name,
8122         p_var_name => 'l_to_parent_table_id',
8123         p_var_value => l_to_parent_table_id
8124     ) ;
8125 
8126     -- l_existing_match_info_flag = 'Y' When a match from the same FROM_PARENT_TABLE_NAME and FROM_PARENT_TABLE_ID
8127     -- has already been processed
8128     IF (l_existing_match_info_flag = 'Y') THEN
8129         -- Charge line has been processed
8130         l_debug_info  := 'Existing match info flag';
8131         INL_LOGGING_PVT.Log_Statement (
8132             p_module_name => g_module_name,
8133             p_procedure_name => l_api_name,
8134             p_debug_info => l_debug_info
8135         ) ;
8136          SELECT p_adjustment_num,
8137             cl.charge_line_id   ,
8138             cl.charge_line_num
8139            INTO l_prev_adjustment_num         ,
8140             l_ChLn_Assoc.parent_charge_line_id,
8141             l_ChLn_Assoc.charge_line_num
8142            FROM inl_matches m,
8143             inl_adj_charge_lines_v cl
8144           WHERE cl.match_id              = m.match_id
8145             AND m.match_id              <> p_match_id
8146             AND m.from_parent_table_name = l_from_parent_table_name
8147             AND m.from_parent_table_id   = l_from_parent_table_id
8148             AND m.to_parent_table_name   = l_to_parent_table_name
8149             AND m.to_parent_table_id     = l_to_parent_table_id
8150             AND m.match_id               =
8151             (
8152                  SELECT MAX (m2.match_id)
8153                    FROM inl_matches m2
8154                   WHERE m2.from_parent_table_name = m.from_parent_table_name
8155                     AND m2.from_parent_table_id   = m.from_parent_table_id
8156                     AND m2.to_parent_table_name   = m.to_parent_table_name
8157                     AND m2.to_parent_table_id     = m.to_parent_table_id
8158                     AND m2.match_id              <> p_match_id
8159             )
8160             AND cl.charge_line_num =
8161             (
8162                  SELECT MAX (cl1.charge_line_num)
8163                    FROM inl_adj_charge_lines_v cl1
8164                   WHERE cl1.match_id = m.match_id
8165             ) ;
8166         --       GROUP BY  cl.charge_line_id, cl.adjustment_num;
8167     ELSE
8168         l_ChLn_Assoc.parent_charge_line_id := NULL;
8169         -- Getting the charge line to correction
8170         l_debug_info := 'Getting the charge line to correction';
8171         INL_LOGGING_PVT.Log_Statement (
8172             p_module_name => g_module_name,
8173             p_procedure_name => l_api_name,
8174             p_debug_info => l_debug_info
8175         ) ;
8176         BEGIN
8177              SELECT cl.charge_line_id,
8178                 cl.charge_line_num   ,
8179                 cl.adjustment_num
8180                INTO l_corr_charge_line_id,
8181                 l_corr_charge_line_num   ,
8182                 l_corr_adj_num
8183                FROM inl_adj_charge_lines_v cl
8184               WHERE cl.match_id        = p_match_id
8185                 AND cl.charge_line_num =
8186                 (
8187                      SELECT MAX (cl1.charge_line_num)
8188                        FROM inl_adj_charge_lines_v cl1
8189                       WHERE cl1.match_id = p_match_id
8190                 ) ;
8191         EXCEPTION
8192         WHEN NO_DATA_FOUND THEN
8193             NULL;
8194         END;
8195         IF (l_corr_charge_line_id              IS NOT NULL AND l_corr_charge_line_num IS NOT NULL)
8196         THEN
8197             l_ChLn_Assoc.charge_line_num       := l_corr_charge_line_num;
8198             l_ChLn_Assoc.parent_charge_line_id := l_corr_charge_line_id;
8199 
8200             INL_LOGGING_PVT.Log_Variable (
8201                 p_module_name => g_module_name,
8202                 p_procedure_name => l_api_name,
8203                 p_var_name => 'l_corr_charge_line_id',
8204                 p_var_value => l_corr_charge_line_id) ;
8205         ELSE
8206             l_ChLn_Assoc.charge_line_num := NULL;
8207         END IF;
8208     END IF;
8209     -- Handling estimated Charge Line and getting the parent_charge_line_id
8210     l_debug_info := 'Handling estimated Charge Line and getting the parent_charge_line_id';
8211     INL_LOGGING_PVT.Log_Statement (
8212         p_module_name => g_module_name,
8213         p_procedure_name => l_api_name,
8214         p_debug_info => l_debug_info
8215     ) ;
8216     -- For now:
8217     -- 1) Create a new charge line ADJ x with the new actual value with no ADJ 0
8218     -- 2) For the estimated charge line create a new charge line ADJ 1 with amount = 0
8219     -- Getting information for the new charge line
8220     l_debug_info                                := 'All Matched Amounts :'||l_matched_amt;
8221     INL_LOGGING_PVT.Log_Statement (
8222         p_module_name => g_module_name,
8223         p_procedure_name => l_api_name,
8224         p_debug_info => l_debug_info
8225     ) ;
8226     l_ChLn_Assoc.inl_Assoc.ship_header_id       := l_ship_header_id;
8227     l_ChLn_Assoc.inl_Assoc.allocation_uom_code  := NULL;
8228     l_ChLn_Assoc.inl_Assoc.to_parent_table_name := 'INL_SHIP_LINES';
8229     l_ChLn_Assoc.inl_Assoc.to_parent_table_id   := l_to_parent_table_id;
8230     l_ChLn_Assoc.charge_line_type_id            := l_charge_line_type_id;
8231     l_ChLn_Assoc.landed_cost_flag               := 'Y';
8232     l_ChLn_Assoc.adjustment_num                 := l_prev_adjustment_num;
8233     l_ChLn_Assoc.match_id                       := p_match_id;
8234     l_ChLn_Assoc.charge_amt                     := l_matched_amt;
8235 
8236 
8237     --BUG#8468830
8238     IF p_func_currency_code <> l_matched_curr_code THEN
8239         IF l_matched_curr_conversion_type <> 'User' THEN -- Bug #10102991
8240         l_garb := inl_landedcost_pvt.Converted_Amt (
8241                                         1,
8242                                         l_matched_curr_code,
8243                                         p_func_currency_code,
8244                                             l_matched_curr_conversion_type,
8245                                             l_matched_curr_conversion_date,
8246                                             l_matched_curr_conversion_rate);
8247 
8248     END IF;
8249     ELSE
8250         l_matched_curr_conversion_type:= NULL;
8251         l_matched_curr_conversion_rate:= NULL;
8252     END IF;
8253     --BUG#8468830
8254 
8255     l_ChLn_Assoc.currency_code                  := l_matched_curr_code;
8256     l_ChLn_Assoc.currency_conversion_type       := l_matched_curr_conversion_type;
8257     l_ChLn_Assoc.currency_conversion_date       := l_matched_curr_conversion_date;
8258     l_ChLn_Assoc.currency_conversion_rate       := l_matched_curr_conversion_rate;
8259     l_ChLn_Assoc.party_id                       := l_party_id;
8260     l_ChLn_Assoc.party_site_id                  := l_party_site_id;
8261     l_ChLn_Assoc.trx_business_category          := NULL;
8262     l_ChLn_Assoc.intended_use                   := NULL;
8263     l_ChLn_Assoc.product_fiscal_class           := NULL;
8264     l_ChLn_Assoc.product_category               := NULL;
8265     l_ChLn_Assoc.product_type                   := NULL;
8266     l_ChLn_Assoc.user_def_fiscal_class          := NULL;
8267     l_ChLn_Assoc.tax_classification_code        := NULL;
8268     l_ChLn_Assoc.assessable_value               := NULL;
8269     l_ChLn_Assoc.tax_already_calculated_flag    := 'N';
8270     l_ChLn_Assoc.ship_from_party_id             := NULL;
8271     l_ChLn_Assoc.ship_from_party_site_id        := NULL;
8272     l_ChLn_Assoc.ship_to_organization_id        := NULL;
8273     l_ChLn_Assoc.ship_to_location_id            := NULL;
8274     l_ChLn_Assoc.bill_from_party_id             := NULL;
8275     l_ChLn_Assoc.bill_from_party_site_id        := NULL;
8276     l_ChLn_Assoc.bill_to_organization_id        := NULL;
8277     l_ChLn_Assoc.bill_to_location_id            := NULL;
8278     l_ChLn_Assoc.poa_party_id                   := NULL;
8279     l_ChLn_Assoc.poa_party_site_id              := NULL;
8280     l_ChLn_Assoc.poo_organization_id            := NULL;
8281     l_ChLn_Assoc.poo_location_id                := NULL;
8282     -- Create_ChLines
8283     l_debug_info := 'Create_ChLines';
8284     INL_LOGGING_PVT.Log_Statement (
8285         p_module_name => g_module_name,
8286         p_procedure_name => l_api_name,
8287         p_debug_info => l_debug_info
8288     ) ;
8289     -- It does not create associations for corrections
8290     IF (l_ChLn_Assoc.parent_charge_line_id IS NOT NULL) THEN
8291         l_include_assoc := 'N';
8292     ELSE
8293         l_include_assoc := 'Y';
8294 
8295 --Bug#12313822
8296 
8297         l_debug_info := 'Getting the allocation basis';
8298         INL_LOGGING_PVT.Log_Statement (
8299             p_module_name => g_module_name,
8300             p_procedure_name => l_api_name,
8301             p_debug_info => l_debug_info
8302         ) ;
8303         SELECT
8304             NVL(clt.allocation_basis,'VALUE'),
8305             abv.base_uom_code
8306         INTO
8307             l_ChLn_Assoc.inl_Assoc.allocation_basis,
8308             l_ChLn_Assoc.inl_Assoc.allocation_uom_code
8309         FROM
8310             inl_charge_line_types_vl clt   ,
8311             inl_allocation_basis_vl abv
8312         WHERE abv.allocation_basis_code = clt.allocation_basis
8313         AND   clt.charge_line_type_id   = l_ChLn_Assoc.charge_line_type_id;
8314 
8315         INL_LOGGING_PVT.Log_Variable (
8316             p_module_name => g_module_name,
8317             p_procedure_name => l_api_name,
8318             p_var_name => 'l_ChLn_Assoc.inl_Assoc.allocation_basis',
8319             p_var_value => l_ChLn_Assoc.inl_Assoc.allocation_basis
8320         ) ;
8321         INL_LOGGING_PVT.Log_Variable (
8322             p_module_name => g_module_name,
8323             p_procedure_name => l_api_name,
8324             p_var_name => 'l_ChLn_Assoc.inl_Assoc.allocation_uom_code',
8325             p_var_value => l_ChLn_Assoc.inl_Assoc.allocation_uom_code
8326         ) ;
8327 
8328 --Bug#12313822
8329     END IF;
8330     -- Create_ChLines
8331     Create_ChLines (
8332         p_ChLn_Assoc => l_ChLn_Assoc,
8333         p_include_assoc => l_include_assoc,
8334         p_adjustment_num => p_adjustment_num,
8335         x_new_charge_line_id => l_new_charge_line_id,
8336         x_return_status => l_return_status) ;
8337     IF l_return_status           = L_FND_RET_STS_ERROR THEN
8338         RAISE L_FND_EXC_ERROR;
8339     ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
8340         RAISE L_FND_EXC_UNEXPECTED_ERROR;
8341     END IF;
8342     Handle_EstimChLinesPerMatch ( --BUG#9474491
8343         p_match_id           => p_match_id,
8344         p_match_Amount_id    => null,
8345         p_charge_line_type_id=> l_charge_line_type_id,
8346         p_adjustment_num     => p_adjustment_num,
8347         x_return_status      => l_debug_info
8348     );
8349     IF l_return_status = L_FND_RET_STS_ERROR THEN
8350         RAISE L_FND_EXC_ERROR;
8351     ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
8352         RAISE L_FND_EXC_UNEXPECTED_ERROR;
8353     END IF;
8354     -- Standard check of p_commit.
8355     IF FND_API.To_Boolean (p_commit) THEN
8356         COMMIT WORK;
8357     END IF;
8358     -- Standard call to get message count and if count is 1, get message info.
8359     FND_MSG_PUB.Count_And_Get ( p_encoded => L_FND_FALSE, p_count => x_msg_count, p_data => x_msg_data) ;
8360     -- Standard End of Procedure/Function Logging
8361     INL_LOGGING_PVT.Log_EndProc ( p_module_name => g_module_name, p_procedure_name => l_api_name) ;
8362 EXCEPTION
8363 WHEN L_FND_EXC_ERROR THEN
8364     -- Standard Expected Error Logging
8365     INL_LOGGING_PVT.Log_ExpecError ( p_module_name => g_module_name, p_procedure_name => l_api_name) ;
8366     ROLLBACK TO Adjust_ChargeLines_PVT;
8367     x_return_status                      := L_FND_RET_STS_ERROR;
8368     FND_MSG_PUB.Count_And_Get ( p_encoded => L_FND_FALSE, p_count => x_msg_count, p_data => x_msg_data) ;
8369 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
8370     -- Standard Unexpected Error Logging
8371     INL_LOGGING_PVT.Log_UnexpecError ( p_module_name => g_module_name, p_procedure_name => l_api_name) ;
8372     ROLLBACK TO Adjust_ChargeLines_PVT;
8373     x_return_status                      := L_FND_RET_STS_UNEXP_ERROR;
8374     FND_MSG_PUB.Count_And_Get ( p_encoded => L_FND_FALSE, p_count => x_msg_count, p_data => x_msg_data) ;
8375 WHEN OTHERS THEN
8376     -- Standard Unexpected Error Logging
8377     INL_LOGGING_PVT.Log_UnexpecError ( p_module_name => g_module_name, p_procedure_name => l_api_name) ;
8378     ROLLBACK TO Adjust_ChargeLines_PVT;
8379     x_return_status                                := L_FND_RET_STS_UNEXP_ERROR ;
8380     IF FND_MSG_PUB.Check_Msg_Level (p_message_level => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
8381         FND_MSG_PUB.Add_Exc_Msg ( p_pkg_name        => g_pkg_name, p_procedure_name => l_api_name) ;
8382     END IF;
8383     FND_MSG_PUB.Count_And_Get ( p_encoded => L_FND_FALSE, p_count => x_msg_count, p_data => x_msg_data) ;
8384 END Adjust_ChargeLines;
8385 -- API name   : Adjust_ChargeLines
8386 -- Type       : Private
8387 -- Function   : Create Adjustmens Charge Lines and their associations
8388 -- Pre-reqs   : None
8389 -- Parameters :
8390 -- IN         : p_api_version      IN NUMBER   Required
8391 --              p_init_msg_list    IN VARCHAR2 Optional  Default = L_FND_FALSE
8392 --              p_commit           IN VARCHAR2 Optional  Default = L_FND_FALSE
8393 --              p_match_amount_id  IN NUMBER,
8394 --              p_adjustment_num   IN NUMBER,
8395 --              p_func_currency_code IN        VARCHAR2 , --BUG#8468830
8396 -- OUT          x_return_status    OUT NOCOPY VARCHAR2
8397 --              x_msg_count        OUT NOCOPY NUMBER
8398 --              x_msg_data         OUT NOCOPY VARCHAR2
8399 --
8400 -- Version    : Current version 1.0
8401 --
8402 -- Notes      :
8403 PROCEDURE Adjust_ChargeLines (
8404         p_api_version     IN NUMBER,
8405         p_init_msg_list   IN VARCHAR2 := L_FND_FALSE,
8406         p_commit          IN VARCHAR2 := L_FND_FALSE,
8407         p_match_amount_id IN NUMBER,
8408         p_adjustment_num  IN NUMBER,
8409         p_func_currency_code IN        VARCHAR2 , --BUG#8468830
8410         x_return_status  OUT NOCOPY VARCHAR2,
8411         x_msg_count      OUT NOCOPY NUMBER,
8412         x_msg_data       OUT NOCOPY VARCHAR2
8413 ) IS
8414     l_api_name    CONSTANT VARCHAR2 (30) := 'Adjust_ChargeLines-2';
8415     l_api_version CONSTANT NUMBER        := 1.0;
8416     CURSOR c_matches_cl (p_match_amount_id NUMBER)
8417     IS
8418          SELECT
8419             m.match_id          ,
8420             m.ship_header_id        ,
8421             m.from_parent_table_name,
8422             m.from_parent_table_id  ,
8423             m.to_parent_table_name  ,
8424             m.to_parent_table_id
8425            FROM inl_corr_matches_v m
8426           WHERE m.match_amount_id = p_match_amount_id
8427        ORDER BY m.match_id;
8428     TYPE c_matches_type
8429     IS
8430     TABLE OF c_matches_cl%ROWTYPE;
8431     c_matches c_matches_type;
8432     l_next_adjust_num              NUMBER;
8433     l_debug_info                   VARCHAR2 (240) ;
8434     l_parent_charge_line_id        NUMBER;
8435     l_return_status                VARCHAR2 (1) ;
8436     l_new_charge_line_id           NUMBER;
8437     l_ship_line_id                 NUMBER;
8438     l_ship_header_id               NUMBER;
8439     l_matched_curr_code            VARCHAR2 (15) ;
8440     l_matched_curr_conversion_type VARCHAR2 (30) ;
8441     l_matched_curr_conversion_date DATE;
8442     l_matched_curr_conversion_rate NUMBER;
8443     l_charge_line_type_id          NUMBER;
8444     l_party_id                     NUMBER;
8445     l_party_site_id                NUMBER;
8446     l_matched_amt                  NUMBER;
8447     l_mat_curr_code                VARCHAR2 (15) ;
8448     l_allocation_basis             VARCHAR2 (30) ;
8449     l_allocation_uom_code          VARCHAR2 (30) ;
8450     l_corr_charge_line_id          NUMBER;
8451     l_corr_charge_line_num         NUMBER;
8452     l_corr_adj_num                 NUMBER;
8453     l_existing_match_info_flag     VARCHAR2 (1) ;
8454     l_from_parent_table_name       VARCHAR2 (30) ;
8455     l_from_parent_table_id         NUMBER;
8456     l_to_parent_table_name         VARCHAR2 (30) ;
8457     l_tax_code                     VARCHAR2 (30) ;
8458     l_to_parent_table_id           NUMBER;
8459     l_prev_match_amount_id         NUMBER;
8460     l_count_new_matches            NUMBER;
8461     l_ChLn_Assoc inl_ChLn_Assoc_tp;
8462     l_AssocLn inl_Assoc_tp;
8463     l_garb                         NUMBER ; --BUG#8468830
8464     l_prev_match_id                NUMBER;
8465 BEGIN
8466     -- Standard Beginning of Procedure/Function Logging
8467     INL_LOGGING_PVT.Log_BeginProc (p_module_name => g_module_name, p_procedure_name => l_api_name) ;
8468     -- Standard Start of API savepoint
8469     SAVEPOINT Adjust_ChargeLines_PVT;
8470     -- Initialize message list if p_init_msg_list is set to TRUE.
8471     IF FND_API.to_Boolean (p_init_msg_list) THEN
8472         FND_MSG_PUB.initialize;
8473     END IF;
8474     -- Check for call compatibility.
8475     IF NOT FND_API.Compatible_API_Call (
8476         p_current_version_number => l_api_version,
8477         p_caller_version_number => p_api_version,
8478         p_api_name => l_api_name,
8479         p_pkg_name => g_pkg_name
8480     ) THEN
8481         RAISE L_FND_EXC_UNEXPECTED_ERROR;
8482     END IF;
8483     --  Initialize API return status to success
8484     x_return_status := L_FND_RET_STS_SUCCESS;
8485     -- Getting the match information
8486     l_debug_info := 'Getting the match information';
8487     INL_LOGGING_PVT.Log_Statement (
8488         p_module_name => g_module_name,
8489         p_procedure_name => l_api_name,
8490         p_debug_info => l_debug_info
8491     ) ;
8492 
8493     INL_LOGGING_PVT.Log_Variable (
8494         p_module_name => g_module_name,
8495         p_procedure_name => l_api_name,
8496         p_var_name => 'p_match_amount_id',
8497         p_var_value => p_match_amount_id
8498     ) ;
8499     SELECT
8500         -- m.ship_header_id            ,     --BUG#8198498
8501         m.from_parent_table_name       ,
8502         -- the min is one of the lines that alread exists in prior calculation
8503         m.from_parent_table_id         ,
8504         m.to_parent_table_name         ,
8505         m.to_parent_table_id           ,
8506         (SELECT SUM(INL_LANDEDCOST_PVT.Converted_Amt( NVL(a.matched_amt,0),
8507                                                      a.matched_curr_code,
8508                                                      ma.matched_curr_code,
8509                                                      ma.matched_curr_conversion_type,
8510                                                      ma.matched_curr_conversion_date))
8511           FROM inl_corr_matches_v a
8512          WHERE a.match_amount_id = ma.match_amount_id ) matched_amt,
8513         m.party_id                     ,
8514         m.party_site_id                ,
8515         ma.charge_line_type_id         ,
8516         ma.tax_code                    ,
8517         m.existing_match_info_flag     ,
8518         ma.matched_curr_code           ,
8519         ma.matched_curr_conversion_type,
8520         ma.matched_curr_conversion_date,
8521         ma.matched_curr_conversion_rate,
8522         clt.allocation_basis           ,
8523         abv.base_uom_code
8524        INTO
8525         -- l_ship_header_id          ,--BUG#8198498
8526         l_from_parent_table_name      ,
8527         l_from_parent_table_id        ,
8528         l_to_parent_table_name        ,
8529         l_to_parent_table_id          ,
8530         l_matched_amt                 ,
8531         l_party_id                    ,
8532         l_party_site_id               ,
8533         l_charge_line_type_id         ,
8534         l_tax_code                    ,
8535         l_existing_match_info_flag    ,
8536         l_matched_curr_code           ,
8537         l_matched_curr_conversion_type,
8538         l_matched_curr_conversion_date,
8539         l_matched_curr_conversion_rate,
8540         l_allocation_basis            ,
8541         l_allocation_uom_code
8542        FROM inl_match_amounts ma, -- Bug #9179775
8543         inl_corr_matches_v m           ,
8544         inl_charge_line_types_vl clt   ,
8545         inl_allocation_basis_vl abv
8546       WHERE abv.allocation_basis_code = clt.allocation_basis
8547         AND clt.charge_line_type_id   = m.charge_line_type_id
8548         AND m.match_amount_id         = ma.match_amount_id
8549         AND ma.match_amount_id        = p_match_amount_id
8550         AND m.match_id in (select min(match_id) -- BUG#8411594
8551                             FROM inl_corr_matches_v m
8552                           WHERE m.match_amount_id = p_match_amount_id);
8553 
8554     INL_LOGGING_PVT.Log_Variable (
8555         p_module_name => g_module_name,
8556         p_procedure_name => l_api_name,
8557         p_var_name => 'l_existing_match_info_flag',
8558         p_var_value => l_existing_match_info_flag
8559     ) ;
8560 
8561     INL_LOGGING_PVT.Log_Variable (
8562         p_module_name => g_module_name,
8563         p_procedure_name => l_api_name,
8564         p_var_name => 'l_from_parent_table_name',
8565         p_var_value => l_from_parent_table_name
8566     ) ;
8567 
8568     INL_LOGGING_PVT.Log_Variable (
8569         p_module_name => g_module_name,
8570         p_procedure_name => l_api_name,
8571         p_var_name => 'l_from_parent_table_id',
8572         p_var_value => l_from_parent_table_id
8573     ) ;
8574 
8575     INL_LOGGING_PVT.Log_Variable (
8576         p_module_name => g_module_name,
8577         p_procedure_name => l_api_name,
8578         p_var_name => 'l_to_parent_table_name',
8579         p_var_value => l_to_parent_table_name
8580     ) ;
8581 
8582     INL_LOGGING_PVT.Log_Variable (
8583         p_module_name => g_module_name,
8584         p_procedure_name => l_api_name,
8585         p_var_name => 'l_to_parent_table_id',
8586         p_var_value => l_to_parent_table_id
8587     ) ;
8588 
8589     l_ChLn_Assoc.adjustment_num := p_adjustment_num;
8590 -- BUG#8411594
8591 
8592     -- l_existing_match_info_flag = 'Y' When a match from the same FROM_PARENT_TABLE_NAME and FROM_PARENT_TABLE_ID
8593     -- has already been processed
8594     IF (l_existing_match_info_flag = 'Y') THEN
8595         -- a)Verify if exists any new match in this match amount
8596         -- a.1) Get the last match_amount_id
8597         SELECT max(match_amount_id)
8598         INTO l_prev_match_amount_id
8599         FROM inl_matches m
8600         WHERE m.charge_line_type_id = l_charge_line_type_id
8601         AND  nvl(m.tax_code,'-9') = nvl(l_tax_code,'-9')
8602         AND  m.match_amount_id <> p_match_amount_id
8603         AND adj_already_generated_flag = 'Y'
8604         AND (m.from_parent_table_name, m.from_parent_table_id)
8605         IN (SELECT m2.from_parent_table_name, m2.from_parent_table_id
8606             FROM inl_matches m2
8607             WHERE m2.match_amount_id = p_match_amount_id)
8608         ;
8609 
8610         INL_LOGGING_PVT.Log_Variable (
8611             p_module_name => g_module_name,
8612             p_procedure_name => l_api_name,
8613             p_var_name => 'l_prev_match_amount_id',
8614             p_var_value => l_prev_match_amount_id
8615         ) ;
8616 
8617         IF l_prev_match_amount_id IS NOT NULL THEN
8618             -- a.2) Count the new matches
8619             SELECT nvl(count(*),0)
8620             INTO l_count_new_matches
8621             FROM inl_matches m
8622             WHERE m.match_amount_id = p_match_amount_id
8623             AND not exists (SELECT 1
8624                             FROM inl_matches m2
8625                             WHERE m2.match_amount_id          = l_prev_match_amount_id
8626                             AND m2.from_parent_table_name     = m.from_parent_table_name
8627                             AND m2.from_parent_table_id       = m.from_parent_table_id
8628                             AND m2.to_parent_table_name       = m.to_parent_table_name
8629                             AND m2.to_parent_table_id         = m.to_parent_table_id
8630                             )
8631             ;
8632             -- b)Verify if any old match has been deleted
8633             IF l_count_new_matches = 0 THEN
8634                 -- b.1) Count old matches
8635                 SELECT nvl(count(*),0)
8636                 INTO l_count_new_matches
8637                 FROM inl_matches m
8638                 WHERE m.match_amount_id = l_prev_match_amount_id
8639                 AND not exists (SELECT 1
8640                                 FROM inl_matches m2
8641                                 WHERE m2.match_amount_id          = p_match_amount_id
8642                                 AND m2.from_parent_table_name     = m.from_parent_table_name
8643                                 AND m2.from_parent_table_id       = m.from_parent_table_id
8644                                 AND m2.to_parent_table_name       = m.to_parent_table_name
8645                                 AND m2.to_parent_table_id         = m.to_parent_table_id
8646                                 )
8647                 ;
8648             END IF;
8649             -- c) if exists any new match zeroes the previous charge line
8650             IF l_count_new_matches > 0 THEN
8651                 Zero_ChLnFromPrevMatchAmt (
8652                     p_prev_match_amount_id  => l_prev_match_amount_id, --Bug#9474491
8653                     p_prev_match_id         => NULL, --Bug#9804065
8654                     p_adjustment_num        => p_adjustment_num,
8655                     x_return_status         => l_debug_info
8656                 );
8657             END IF;
8658         ELSE  --BUG#9804065 -- The previous could be a match and not a match amount
8659 
8660             INL_LOGGING_PVT.Log_Statement (
8661                 p_module_name => g_module_name,
8662                 p_procedure_name => l_api_name,
8663                 p_debug_info => 'Get previous match id.'
8664             ) ;
8665             SELECT m.parent_match_id
8666             INTO l_prev_match_id
8667             FROM inl_matches m
8668             WHERE m.match_amount_id = p_match_amount_id
8669             AND m.existing_match_info_flag = 'Y';
8670 
8671             INL_LOGGING_PVT.Log_Variable (
8672                 p_module_name => g_module_name,
8673                 p_procedure_name => l_api_name,
8674                 p_var_name => 'l_prev_match_id',
8675                 p_var_value => l_prev_match_id
8676             ) ;
8677             Zero_ChLnFromPrevMatchAmt (
8678                 p_prev_match_amount_id  => NULL,
8679                 p_prev_match_id         => l_prev_match_id,
8680                 p_adjustment_num        => p_adjustment_num,
8681                 x_return_status         => l_debug_info
8682             );
8683 
8684         END IF;  --BUG#9804065
8685         IF l_return_status = L_FND_RET_STS_ERROR THEN
8686             RAISE L_FND_EXC_ERROR;
8687         ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
8688             RAISE L_FND_EXC_UNEXPECTED_ERROR;
8689         END IF;
8690     END IF;
8691 -- BUG#8411594
8692 
8693     INL_LOGGING_PVT.Log_Variable (
8694         p_module_name => g_module_name,
8695         p_procedure_name => l_api_name,
8696         p_var_name => 'l_count_new_matches',
8697         p_var_value => l_count_new_matches
8698     ) ;
8699     IF (l_existing_match_info_flag = 'Y')
8700         AND l_count_new_matches = 0 THEN  -- BUG#8411594
8701         -- Charge has been already processed
8702         l_debug_info := 'Existing match info flag';
8703         INL_LOGGING_PVT.Log_Statement (
8704             p_module_name => g_module_name,
8705             p_procedure_name => l_api_name,
8706             p_debug_info => l_debug_info
8707         ) ;
8708         SELECT cl.charge_line_id   ,
8709             cl.charge_line_num
8710         INTO l_ChLn_Assoc.parent_charge_line_id,
8711             l_ChLn_Assoc.charge_line_num
8712         FROM inl_matches m,
8713             inl_adj_charge_lines_v cl
8714         WHERE cl.match_amount_id         = m.match_amount_id
8715         AND m.from_parent_table_name     = l_from_parent_table_name
8716         AND m.from_parent_table_id       = l_from_parent_table_id
8717         AND m.to_parent_table_name       = l_to_parent_table_name
8718         AND m.to_parent_table_id         = l_to_parent_table_id
8719         AND m.adj_already_generated_flag = 'Y'
8720         AND m.match_id                   =
8721         (
8722             SELECT MAX (m2.match_id)
8723             FROM inl_matches m2
8724             WHERE m2.from_parent_table_name   = m.from_parent_table_name
8725             AND m2.from_parent_table_id       = m.from_parent_table_id
8726             AND m2.to_parent_table_name       = m.to_parent_table_name
8727             AND m2.to_parent_table_id         = m.to_parent_table_id
8728             AND m2.adj_already_generated_flag = 'Y'
8729         )
8730         AND cl.charge_line_num =
8731         (
8732             SELECT MAX (cl1.charge_line_num)
8733             FROM inl_adj_charge_lines_v cl1
8734             WHERE cl1.match_amount_id = m.match_amount_id
8735         ) ;
8736         --        GROUP BY  cl.charge_line_id, cl.adjustment_num;
8737     ELSE
8738         l_ChLn_Assoc.parent_charge_line_id := NULL;
8739         -- Getting the charge line to correction
8740         l_debug_info                                := 'Getting the charge line to correction';
8741         INL_LOGGING_PVT.Log_Statement (
8742             p_module_name => g_module_name,
8743             p_procedure_name => l_api_name,
8744             p_debug_info => l_debug_info
8745         ) ;
8746         BEGIN
8747             SELECT
8748                 cl.charge_line_id ,
8749                 cl.charge_line_num,
8750                 cl.adjustment_num
8751             INTO
8752                 l_corr_charge_line_id ,
8753                 l_corr_charge_line_num,
8754                 l_corr_adj_num
8755             FROM inl_adj_charge_lines_v cl
8756             WHERE cl.match_amount_id = p_match_amount_id
8757             AND cl.charge_line_num =
8758                 (
8759                      SELECT MAX (cl1.charge_line_num)
8760                        FROM inl_adj_charge_lines_v cl1
8761                       WHERE cl1.match_amount_id = p_match_amount_id
8762                 ) ;
8763         EXCEPTION
8764             WHEN NO_DATA_FOUND THEN
8765                 NULL;
8766         END;
8767         -- Is a correction, necessary to create an adjustment
8768         IF l_corr_charge_line_id IS NOT NULL
8769            AND l_corr_charge_line_num IS NOT NULL
8770         THEN
8771             l_ChLn_Assoc.charge_line_num       := l_corr_charge_line_num;
8772             l_ChLn_Assoc.parent_charge_line_id := l_corr_charge_line_id;
8773 
8774             INL_LOGGING_PVT.Log_Variable (
8775                 p_module_name => g_module_name,
8776                 p_procedure_name => l_api_name,
8777                 p_var_name => 'l_corr_charge_line_id',
8778                 p_var_value => l_corr_charge_line_id
8779             );
8780         ELSE
8781             l_ChLn_Assoc.charge_line_num := NULL;
8782         END IF;
8783     END IF;
8784     -- Handling estimated Charge Line and getting the parent_charge_line_id
8785     l_debug_info := 'Handling estimated Charge Line and getting the parent_charge_line_id';
8786     INL_LOGGING_PVT.Log_Statement (
8787         p_module_name => g_module_name,
8788         p_procedure_name => l_api_name,
8789         p_debug_info => l_debug_info
8790     ) ;
8791     -- For now:
8792     -- 1) Create a new charge line ADJ x with the new actual value with no ADJ 0
8793     -- 2) For the estimated charge line create a new charge line ADJ 1 with amount = 0
8794     -- Getting information for the new charge line
8795     l_debug_info := 'All Matched Amounts :'||l_matched_amt;
8796     INL_LOGGING_PVT.Log_Statement (
8797         p_module_name => g_module_name,
8798         p_procedure_name => l_api_name,
8799         p_debug_info => l_debug_info
8800     ) ;
8801     -- Creating a charge line
8802     l_ChLn_Assoc.charge_line_type_id         := l_charge_line_type_id;
8803     l_ChLn_Assoc.landed_cost_flag            := 'Y';
8804     l_ChLn_Assoc.match_amount_id             := p_match_amount_id;
8805     l_ChLn_Assoc.charge_amt                  := l_matched_amt;
8806 
8807     --BUG#8468830
8808     IF p_func_currency_code <> l_matched_curr_code THEN
8809         IF l_matched_curr_conversion_type <> 'User' THEN -- Bug #10102991
8810         l_garb := inl_landedcost_pvt.Converted_Amt (
8811                                         1,
8812                                         l_matched_curr_code,
8813                                         p_func_currency_code,
8814                                             l_matched_curr_conversion_type,
8815                                             l_matched_curr_conversion_date,
8816                                             l_matched_curr_conversion_rate);
8817         END IF;
8818     ELSE
8819         l_matched_curr_conversion_type:= NULL;
8820         l_matched_curr_conversion_rate:= NULL;
8821     END IF;
8822     --BUG#8468830
8823 
8824     l_ChLn_Assoc.currency_code               := l_matched_curr_code;
8825     l_ChLn_Assoc.currency_conversion_type    := l_matched_curr_conversion_type;
8826     l_ChLn_Assoc.currency_conversion_date    := l_matched_curr_conversion_date;
8827     l_ChLn_Assoc.currency_conversion_rate    := l_matched_curr_conversion_rate;
8828     l_ChLn_Assoc.party_id                    := l_party_id;
8829     l_ChLn_Assoc.party_site_id               := l_party_site_id;
8830     l_ChLn_Assoc.trx_business_category       := NULL;
8831     l_ChLn_Assoc.intended_use                := NULL;
8832     l_ChLn_Assoc.product_fiscal_class        := NULL;
8833     l_ChLn_Assoc.product_category            := NULL;
8834     l_ChLn_Assoc.product_type                := NULL;
8835     l_ChLn_Assoc.user_def_fiscal_class       := NULL;
8836     l_ChLn_Assoc.tax_classification_code     := NULL;
8837     l_ChLn_Assoc.assessable_value            := NULL;
8838     l_ChLn_Assoc.tax_already_calculated_flag := 'N';
8839     l_ChLn_Assoc.ship_from_party_id          := NULL;
8840     l_ChLn_Assoc.ship_from_party_site_id     := NULL;
8841     l_ChLn_Assoc.ship_to_organization_id     := NULL;
8842     l_ChLn_Assoc.ship_to_location_id         := NULL;
8843     l_ChLn_Assoc.bill_from_party_id          := NULL;
8844     l_ChLn_Assoc.bill_from_party_site_id     := NULL;
8845     l_ChLn_Assoc.bill_to_organization_id     := NULL;
8846     l_ChLn_Assoc.bill_to_location_id         := NULL;
8847     l_ChLn_Assoc.poa_party_id                := NULL;
8848     l_ChLn_Assoc.poa_party_site_id           := NULL;
8849     l_ChLn_Assoc.poo_organization_id         := NULL;
8850     l_ChLn_Assoc.poo_location_id             := NULL;
8851     -- Create Charge Line
8852     l_debug_info := 'Create_ChLines from a match_amount_id';
8853     INL_LOGGING_PVT.Log_Statement (
8854         p_module_name       => g_module_name,
8855         p_procedure_name    => l_api_name,
8856         p_debug_info        => l_debug_info
8857     ) ;
8858     Create_ChLines (
8859         p_ChLn_Assoc => l_ChLn_Assoc,
8860         p_include_assoc => 'N',
8861         p_adjustment_num => l_ChLn_Assoc.adjustment_num,
8862         x_new_charge_line_id => l_new_charge_line_id,
8863         x_return_status => l_return_status
8864     ) ;
8865     IF l_return_status = L_FND_RET_STS_ERROR THEN
8866         RAISE L_FND_EXC_ERROR;
8867     ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
8868         RAISE L_FND_EXC_UNEXPECTED_ERROR;
8869     END IF;
8870     -- It does not create associations for corrections
8871     IF (l_corr_charge_line_id IS NULL
8872         AND l_ChLn_Assoc.parent_charge_line_id IS NULL) THEN
8873         -- Create_associations for the match amount id
8874         l_debug_info := 'Create association lines to a match_amount_id';
8875         INL_LOGGING_PVT.Log_Statement (
8876             p_module_name => g_module_name,
8877             p_procedure_name => l_api_name,
8878             p_debug_info => l_debug_info
8879         ) ;
8880         OPEN c_matches_cl (p_match_amount_id) ;
8881         FETCH c_matches_cl BULK COLLECT INTO c_matches;
8882         CLOSE c_matches_cl;
8883         l_debug_info := c_matches.LAST||' match lines have been retrieved.';
8884         INL_LOGGING_PVT.Log_Statement (
8885             p_module_name => g_module_name,
8886             p_procedure_name => l_api_name,
8887             p_debug_info => l_debug_info
8888         ) ;
8889         IF NVL (c_matches.LAST, 0) > 0 THEN
8890             FOR i IN NVL (c_matches.FIRST, 0) ..NVL (c_matches.LAST, 0)
8891             LOOP
8892                 l_AssocLn.ship_header_id       := c_matches(i).ship_header_id;
8893                 l_AssocLn.allocation_basis     := l_allocation_basis;
8894                 l_AssocLn.allocation_uom_code  := l_allocation_uom_code;
8895                 l_AssocLn.to_parent_table_name := c_matches(i).to_parent_table_name;
8896                 l_AssocLn.to_parent_table_id   := c_matches(i).to_parent_table_id;
8897                 --Verifying if association already exists
8898                 --BUG#8198498
8899                 l_debug_info := ' Verifying if association already exists ('||i||'): '||c_matches(i).to_parent_table_name||' - '||c_matches(i).to_parent_table_id;
8900                 INL_LOGGING_PVT.Log_Statement (
8901                     p_module_name => g_module_name,
8902                     p_procedure_name => l_api_name,
8903                     p_debug_info => l_debug_info
8904                 ) ;
8905                 SELECT MAX(association_id)  --Bug#9907327
8906                 INTO l_AssocLn.association_id
8907                 FROM inl_associations
8908                 WHERE from_parent_table_name = 'INL_CHARGE_LINES'
8909                 AND from_parent_table_id     = l_new_charge_line_id
8910                 AND to_parent_table_name     = c_matches(i).to_parent_table_name
8911                 AND to_parent_table_id       = c_matches(i).to_parent_table_id
8912                 ;
8913                 INL_LOGGING_PVT.Log_Variable (
8914                     p_module_name  => g_module_name,
8915                     p_procedure_name => l_api_name,
8916                     p_var_name => 'l_AssocLn.association_id',
8917                     p_var_value => l_AssocLn.association_id) ;
8918                 -- Create Association Line
8919                 l_debug_info := 'Create association line for the charge';
8920                 INL_LOGGING_PVT.Log_Statement (
8921                     p_module_name => g_module_name,
8922                     p_procedure_name => l_api_name,
8923                     p_debug_info => l_debug_info
8924                 ) ;
8925                 INL_LOGGING_PVT.Log_Variable (
8926                     p_module_name  => g_module_name,
8927                     p_procedure_name => l_api_name,
8928                     p_var_name => 'c_matches('||i||').to_parent_table_id',
8929                     p_var_value => c_matches(i).to_parent_table_id) ;
8930                 Create_Assoc (
8931                     p_Assoc => l_AssocLn,
8932                     p_from_parent_table_name => 'INL_CHARGE_LINES',
8933                     p_new_line_id => l_new_charge_line_id,
8934                     x_return_status => l_return_status
8935                 );
8936             END LOOP;
8937         END IF;
8938     END IF;
8939     Handle_EstimChLinesPerMatch ( --BUG#9474491
8940         p_match_id           => null,
8941         p_match_Amount_id    => p_match_amount_id,
8942         p_charge_line_type_id=> l_charge_line_type_id,
8943         p_adjustment_num     => l_ChLn_Assoc.adjustment_num,
8944         x_return_status      => l_debug_info
8945     );
8946     IF l_return_status = L_FND_RET_STS_ERROR THEN
8947         RAISE L_FND_EXC_ERROR;
8948     ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
8949         RAISE L_FND_EXC_UNEXPECTED_ERROR;
8950     END IF;
8951     -- Standard check of p_commit.
8952     IF FND_API.To_Boolean (p_commit) THEN
8953         COMMIT WORK;
8954     END IF;
8955     -- Standard call to get message count and if count is 1, get message info.
8956     FND_MSG_PUB.Count_And_Get (p_encoded => L_FND_FALSE, p_count => x_msg_count, p_data => x_msg_data) ;
8957     -- Standard End of Procedure/Function Logging
8958     INL_LOGGING_PVT.Log_EndProc (p_module_name => g_module_name, p_procedure_name => l_api_name) ;
8959 EXCEPTION
8960 WHEN L_FND_EXC_ERROR THEN
8961     -- Standard Expected Error Logging
8962     INL_LOGGING_PVT.Log_ExpecError (
8963         p_module_name => g_module_name,
8964         p_procedure_name => l_api_name) ;
8965     ROLLBACK TO Adjust_ChargeLines_PVT;
8966     x_return_status                     := L_FND_RET_STS_ERROR;
8967     FND_MSG_PUB.Count_And_Get (
8968         p_encoded => L_FND_FALSE,
8969         p_count => x_msg_count, p_data => x_msg_data) ;
8970 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
8971     -- Standard Unexpected Error Logging
8972     INL_LOGGING_PVT.Log_UnexpecError (
8973         p_module_name => g_module_name,
8974         p_procedure_name => l_api_name) ;
8975     ROLLBACK TO Adjust_ChargeLines_PVT;
8976     x_return_status                     := L_FND_RET_STS_UNEXP_ERROR;
8977     FND_MSG_PUB.Count_And_Get (
8978         p_encoded => L_FND_FALSE,
8979         p_count => x_msg_count,
8980         p_data => x_msg_data) ;
8981 WHEN OTHERS THEN
8982     -- Standard Unexpected Error Logging
8983     INL_LOGGING_PVT.Log_UnexpecError (p_module_name => g_module_name, p_procedure_name => l_api_name) ;
8984     ROLLBACK TO Adjust_ChargeLines_PVT;
8985     x_return_status := L_FND_RET_STS_UNEXP_ERROR ;
8986     IF FND_MSG_PUB.Check_Msg_Level (p_message_level => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
8987         FND_MSG_PUB.Add_Exc_Msg (
8988             p_pkg_name         => g_pkg_name,
8989             p_procedure_name => l_api_name) ;
8990     END IF;
8991     FND_MSG_PUB.Count_And_Get (
8992         p_encoded => L_FND_FALSE,
8993         p_count => x_msg_count,
8994         p_data => x_msg_data) ;
8995 END Adjust_ChargeLines;
8996 
8997 -- API name   : Adjust_TaxLines
8998 -- Type       : Private
8999 -- Function   : Create Adjustment Lines for Charge Lines
9000 -- Pre-reqs   : None
9001 -- Parameters :
9002 -- IN         : p_api_version                              IN NUMBER   Required
9003 --              p_init_msg_list                            IN VARCHAR2 Optional  Default = L_FND_FALSE
9004 --              p_commit                                   IN VARCHAR2 Optional  Default = L_FND_FALSE
9005 --              p_match_id                                 IN NUMBER,
9006 --              p_adjustment_num                           IN NUMBER,
9007 --              p_func_currency_code                       IN VARCHAR2 , --BUG#8468830
9008 -- OUT          x_return_status                            OUT NOCOPY VARCHAR2
9009 --              x_msg_count                                OUT NOCOPY NUMBER
9010 --              x_msg_data                                 OUT NOCOPY VARCHAR2
9011 --
9012 -- Version    : Current version 1.0
9013 --
9014 -- Notes      :
9015 PROCEDURE Adjust_TaxLines    (
9016         p_api_version        IN        NUMBER   ,
9017         p_init_msg_list      IN        VARCHAR2 := L_FND_FALSE,
9018         p_commit             IN        VARCHAR2 := L_FND_FALSE,
9019         p_match_id           IN        NUMBER   ,
9020         p_adjustment_num     IN        NUMBER   ,
9021         p_func_currency_code IN        VARCHAR2 , --BUG#8468830
9022         x_return_status     OUT NOCOPY VARCHAR2 ,
9023         x_msg_count         OUT NOCOPY NUMBER   ,
9024         x_msg_data          OUT NOCOPY VARCHAR2
9025 ) IS
9026     l_api_name                     CONSTANT VARCHAR2 (30) := 'Adjust_TaxLines';
9027     l_api_version                  CONSTANT NUMBER        := 1.0;
9028     l_next_adjust_num              NUMBER;
9029     l_debug_info                   VARCHAR2 (240) ;
9030     l_parent_tax_line_id           NUMBER;
9031     l_return_status                VARCHAR2 (1) ;
9032     l_table_id                     NUMBER;
9033     l_table_name                   VARCHAR2 (30) ;
9034     l_ship_header_id               NUMBER;
9035     l_matched_curr_code            VARCHAR2 (15) ;
9036     l_matched_curr_conversion_type VARCHAR2 (30) ;
9037     l_matched_curr_conversion_date DATE;
9038     l_matched_curr_conversion_rate NUMBER;
9039     l_mat_curr_code                VARCHAR2 (15) ;
9040     l_TxLn_Assoc inl_TxLn_Assoc_tp;
9041     l_tax_code               VARCHAR2 (30) ;
9042     l_matched_amt            NUMBER;
9043     l_nrec_tax_amt           NUMBER;
9044     l_include_assoc_flag     VARCHAR2 (1) ;
9045     l_tax_amt_included_flag  VARCHAR2 (1) ;
9046     l_from_parent_table_name VARCHAR2 (30) ;
9047     l_from_parent_table_id   NUMBER;
9048     l_ship_line_id           NUMBER;
9049     l_new_tax_line_id        NUMBER;
9050     l_garb                   NUMBER ; --BUG#8468830
9051 BEGIN
9052     -- Standard Beginning of Procedure/Function Logging
9053     INL_LOGGING_PVT.Log_BeginProc (
9054         p_module_name => g_module_name,
9055         p_procedure_name => l_api_name) ;
9056     -- Standard Start of API savepoint
9057     SAVEPOINT Adjust_TaxLines_PVT;
9058     -- Initialize message list if p_init_msg_list is set to TRUE.
9059     IF FND_API.to_Boolean (p_init_msg_list) THEN
9060         FND_MSG_PUB.initialize;
9061     END IF;
9062     -- Check for call compatibility.
9063     IF NOT FND_API.Compatible_API_Call (
9064                         p_current_version_number => l_api_version,
9065                         p_caller_version_number => p_api_version,
9066                         p_api_name => l_api_name,
9067                         p_pkg_name => g_pkg_name
9068     ) THEN
9069         RAISE L_FND_EXC_UNEXPECTED_ERROR;
9070     END IF;
9071     --  Initialize API return status to success
9072     x_return_status := L_FND_RET_STS_SUCCESS;
9073     -- Getting the match information
9074     l_debug_info := 'Getting the match information';
9075     INL_LOGGING_PVT.Log_Statement (
9076         p_module_name => g_module_name,
9077         p_procedure_name => l_api_name,
9078         p_debug_info => l_debug_info
9079     ) ;
9080 
9081     INL_LOGGING_PVT.Log_Variable (
9082         p_module_name => g_module_name,
9083         p_procedure_name => l_api_name,
9084         p_var_name => 'p_match_id',
9085         p_var_value => p_match_id
9086     ) ;
9087      SELECT
9088         m.to_parent_table_name        ,
9089         m.to_parent_table_id          ,
9090         m.tax_code                    ,
9091         m.matched_amt                 ,
9092         m.nrec_tax_amt                ,
9093         m.tax_amt_included_flag       ,
9094         m.from_parent_table_name      ,
9095         m.from_parent_table_id        ,
9096         m.matched_curr_code           ,
9097         m.matched_curr_conversion_type,
9098         m.matched_curr_conversion_date,
9099         m.matched_curr_conversion_rate,
9100         m.ship_header_id
9101        INTO
9102         l_table_name                  ,
9103         l_table_id                    ,
9104         l_tax_code                    ,
9105         l_matched_amt                 ,
9106         l_nrec_tax_amt                ,
9107         l_tax_amt_included_flag       ,
9108         l_from_parent_table_name      ,
9109         l_from_parent_table_id        ,
9110         l_matched_curr_code           ,
9111         l_matched_curr_conversion_type,
9112         l_matched_curr_conversion_date,
9113         l_matched_curr_conversion_rate,
9114         l_ship_header_id
9115        FROM inl_corr_matches_v m
9116       WHERE match_id = p_match_id;
9117     -- Handling estimated tax Line and getting the parent_tax_line_id
9118     l_debug_info := 'Handling estimated tax Line and getting the parent_tax_line_id';
9119     INL_LOGGING_PVT.Log_Statement (
9120         p_module_name    => g_module_name,
9121         p_procedure_name => l_api_name,
9122         p_debug_info     => l_debug_info
9123     ) ;
9124     -- For now:
9125     -- 1) Create a new tax line ADJ 1 with the new actual value with no ADJ 0
9126     -- 2) For the estimated tax line create a new tax line ADJ 1 with amount = 0
9127     -- Getting information for the new tax line
9128     l_debug_info := 'All Amounts :'||l_matched_amt;
9129     INL_LOGGING_PVT.Log_Statement (
9130         p_module_name    => g_module_name,
9131         p_procedure_name => l_api_name,
9132         p_debug_info     => l_debug_info
9133     ) ;
9134     l_TxLn_Assoc.inl_Assoc.to_parent_table_name := l_table_name;
9135     IF l_table_name = 'INL_SHIP_LINES' THEN
9136         l_TxLn_Assoc.inl_Assoc.to_parent_table_id := l_table_id;
9137     END IF;
9138 --    l_TxLn_Assoc.adjustment_num                 := p_adjustment_num;
9139      SELECT NVL (MAX (adjustment_num), 0) + 1
9140        INTO l_TxLn_Assoc.adjustment_num
9141        FROM inl_tax_lines tx
9142       WHERE tx.source_parent_table_name = l_from_parent_table_name
9143         AND tx.source_parent_table_id   = l_from_parent_table_id
9144         AND tx.ship_header_id = l_ship_header_id;
9145     IF l_TxLn_Assoc.adjustment_num      > 1 THEN
9146          SELECT tax_line_num, tax_line_id
9147            INTO l_TxLn_Assoc.tax_line_num, l_TxLn_Assoc.parent_tax_line_id
9148            FROM inl_tax_lines tx
9149           WHERE tx.source_parent_table_name = l_from_parent_table_name
9150             AND tx.source_parent_table_id   = l_from_parent_table_id
9151             AND tx.ship_header_id = l_ship_header_id
9152             AND adjustment_num              =
9153             (
9154                  SELECT MAX (tx1.adjustment_num)
9155                    FROM inl_tax_lines tx1
9156                   WHERE tx1.source_parent_table_name = tx.source_parent_table_name
9157                     AND tx1.source_parent_table_id   = tx.source_parent_table_id
9158                     AND tx1.ship_header_id           = l_ship_header_id
9159             ) ;
9160     ELSE
9161         l_TxLn_Assoc.tax_line_num := NULL;
9162         l_TxLn_Assoc.parent_tax_line_id := NULL;
9163     END IF;
9164     l_TxLn_Assoc.inl_Assoc.ship_header_id       := l_ship_header_id;
9165     l_TxLn_Assoc.inl_Assoc.allocation_basis     := 'VALUE';
9166     l_TxLn_Assoc.inl_Assoc.allocation_uom_code  := NULL;
9167     l_TxLn_Assoc.tax_code                       := l_tax_code;
9168     l_TxLn_Assoc.match_id                       := p_match_id;
9169     l_TxLn_Assoc.matched_amt                    := l_matched_amt;
9170     l_TxLn_Assoc.nrec_tax_amt                   := l_nrec_tax_amt;
9171     l_TxLn_Assoc.source_parent_table_name       := l_from_parent_table_name;
9172     l_TxLn_Assoc.source_parent_table_id         := l_from_parent_table_id;
9173 
9174     --BUG#8468830
9175     IF p_func_currency_code <> l_matched_curr_code THEN
9176     IF l_matched_curr_conversion_type <> 'User' THEN -- Bug #10102991
9177             l_garb := inl_landedcost_pvt.Converted_Amt (
9178                                         1,
9179                                         l_matched_curr_code,
9180                                         p_func_currency_code,
9181                                         l_matched_curr_conversion_type,
9182                                         l_matched_curr_conversion_date,
9183                                         l_matched_curr_conversion_rate);
9184     END IF;
9185     ELSE
9186         l_matched_curr_conversion_type:= NULL;
9187         l_matched_curr_conversion_rate:= NULL;
9188     END IF;
9189     --BUG#8468830
9190 
9191     l_TxLn_Assoc.currency_code                  := l_matched_curr_code;
9192     l_TxLn_Assoc.currency_conversion_type       := l_matched_curr_conversion_type;
9193     l_TxLn_Assoc.currency_conversion_date       := l_matched_curr_conversion_date;
9194     l_TxLn_Assoc.currency_conversion_rate       := l_matched_curr_conversion_rate;
9195     l_TxLn_Assoc.tax_amt_included_flag          := l_tax_amt_included_flag;
9196     IF l_TxLn_Assoc.parent_tax_line_id IS NULL THEN
9197         l_include_assoc_flag:= 'Y';
9198     ELSE
9199         l_include_assoc_flag:= 'N';
9200     END IF;
9201     -- Create_TxLines
9202     l_debug_info := 'Create_TxLines';
9203     INL_LOGGING_PVT.Log_Statement (
9204         p_module_name => g_module_name,
9205         p_procedure_name => l_api_name,
9206         p_debug_info => l_debug_info
9207     ) ;
9208     Create_TxLines (
9209         p_TxLn_Assoc        => l_TxLn_Assoc,
9210         p_include_assoc     => l_include_assoc_flag,
9211         p_adjustment_num    => p_adjustment_num,
9212         x_new_tax_line_id   => l_new_tax_line_id,
9213         x_return_status     => l_return_status) ;
9214     IF l_return_status                           = L_FND_RET_STS_ERROR THEN
9215         RAISE L_FND_EXC_ERROR;
9216     ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
9217         RAISE L_FND_EXC_UNEXPECTED_ERROR;
9218     END IF;
9219     -- The estimated tax lines will made = 0 when as actual arrived on associated line
9220     -- i.e. when a charge became and actual value the estimated taxes will made 0 too
9221     -- Standard check of p_commit.
9222     IF FND_API.To_Boolean (p_commit) THEN
9223         COMMIT WORK;
9224     END IF;
9225     -- Standard call to get message count and if count is 1, get message info.
9226     FND_MSG_PUB.Count_And_Get ( p_encoded => L_FND_FALSE, p_count => x_msg_count, p_data => x_msg_data) ;
9227     -- Standard End of Procedure/Function Logging
9228     INL_LOGGING_PVT.Log_EndProc (
9229         p_module_name => g_module_name,
9230         p_procedure_name => l_api_name) ;
9231 EXCEPTION
9232 WHEN L_FND_EXC_ERROR THEN
9233     -- Standard Expected Error Logging
9234     INL_LOGGING_PVT.Log_ExpecError (
9235         p_module_name => g_module_name,
9236         p_procedure_name => l_api_name) ;
9237     ROLLBACK TO Adjust_TaxLines_PVT;
9238     x_return_status                      := L_FND_RET_STS_ERROR;
9239     FND_MSG_PUB.Count_And_Get (
9240         p_encoded => L_FND_FALSE,
9241         p_count => x_msg_count, p_data => x_msg_data) ;
9242 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
9243     -- Standard Unexpected Error Logging
9244     INL_LOGGING_PVT.Log_UnexpecError (
9245         p_module_name => g_module_name,
9246         p_procedure_name => l_api_name) ;
9247     ROLLBACK TO Adjust_TaxLines_PVT;
9248     x_return_status                      := L_FND_RET_STS_UNEXP_ERROR;
9249     FND_MSG_PUB.Count_And_Get (
9250         p_encoded => L_FND_FALSE,
9251         p_count => x_msg_count,
9252         p_data => x_msg_data) ;
9253 WHEN OTHERS THEN
9254     -- Standard Unexpected Error Logging
9255     INL_LOGGING_PVT.Log_UnexpecError (
9256         p_module_name => g_module_name,
9257         p_procedure_name => l_api_name) ;
9258     ROLLBACK TO Adjust_TaxLines_PVT;
9259     x_return_status := L_FND_RET_STS_UNEXP_ERROR ;
9260     IF FND_MSG_PUB.Check_Msg_Level (p_message_level => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
9261         FND_MSG_PUB.Add_Exc_Msg (
9262             p_pkg_name        => g_pkg_name,
9263             p_procedure_name => l_api_name) ;
9264     END IF;
9265     FND_MSG_PUB.Count_And_Get (
9266         p_encoded => L_FND_FALSE,
9267         p_count => x_msg_count,
9268         p_data => x_msg_data) ;
9269 END Adjust_TaxLines;
9270 
9271 -- API name   : Adjust_TaxLines
9272 -- Type       : Private
9273 -- Function   : Create Adjustment Lines for Charge Lines
9274 -- Pre-reqs   : None
9275 -- Parameters :
9276 -- IN         : p_api_version                              IN NUMBER   Required
9277 --              p_init_msg_list                            IN VARCHAR2 Optional  Default = L_FND_FALSE
9278 --              p_commit                                   IN VARCHAR2 Optional  Default = L_FND_FALSE
9279 --              p_match_amount_id                          IN NUMBER,
9280 --              p_adjustment_num                           IN NUMBER,
9281 --              p_func_currency_code IN        VARCHAR2 , --BUG#8468830
9282 -- OUT          x_return_status                            OUT NOCOPY VARCHAR2
9283 --              x_msg_count                                OUT NOCOPY NUMBER
9284 --              x_msg_data                                 OUT NOCOPY VARCHAR2
9285 --
9286 -- Version    : Current version 1.0
9287 --
9288 -- Notes      :
9289 PROCEDURE Adjust_TaxLines(
9290     p_api_version     IN NUMBER,
9291     p_init_msg_list   IN VARCHAR2 := L_FND_FALSE,
9292     p_commit          IN VARCHAR2 := L_FND_FALSE,
9293     p_match_amount_id IN NUMBER,
9294     p_adjustment_num  IN NUMBER,
9295     p_func_currency_code IN        VARCHAR2 , --BUG#8468830
9296     x_return_status   OUT NOCOPY VARCHAR2,
9297     x_msg_count       OUT NOCOPY NUMBER,
9298     x_msg_data        OUT NOCOPY VARCHAR2
9299 ) IS
9300     l_api_name                     CONSTANT VARCHAR2 (30) := 'Adjust_TaxLines-2';
9301     l_api_version                  CONSTANT NUMBER        := 1.0;
9302     l_debug_info                   VARCHAR2 (240) ;
9303     l_return_status                VARCHAR2 (1) ;
9304 --
9305     CURSOR c_matches_tl (p_match_amount_id NUMBER)
9306     IS
9307          SELECT distinct
9308             m.ship_header_id      , --BUG#8198498
9309             m.to_parent_table_name,
9310             m.to_parent_table_id
9311            FROM inl_corr_matches_v m
9312           WHERE m.match_amount_id = p_match_amount_id;
9313     TYPE c_matches_type
9314         IS
9315         TABLE OF c_matches_tl%ROWTYPE;
9316     c_matches c_matches_type;
9317     l_TxLn_Assoc                inl_TxLn_Assoc_tp;
9318     l_existing_match_info_flag  VARCHAR2(1);
9319     l_charge_line_type_id       NUMBER;
9320     l_new_tax_line_id           NUMBER;
9321     l_prev_match_amount_id      NUMBER;
9322     l_count_new_matches         NUMBER;
9323     l_garb                      NUMBER ; --BUG#8468830
9324 BEGIN
9325     -- Standard Beginning of Procedure/Function Logging
9326     INL_LOGGING_PVT.Log_BeginProc ( p_module_name => g_module_name, p_procedure_name => l_api_name) ;
9327     -- Standard Start of API savepoint
9328     SAVEPOINT Adjust_TaxLines_2_PVT;
9329     -- Initialize message list if p_init_msg_list is set to TRUE.
9330     IF FND_API.to_Boolean (p_init_msg_list) THEN
9331         FND_MSG_PUB.initialize;
9332     END IF;
9333     -- Check for call compatibility.
9334     IF NOT FND_API.Compatible_API_Call (p_current_version_number => l_api_version, p_caller_version_number => p_api_version, p_api_name => l_api_name, p_pkg_name => g_pkg_name) THEN
9335         RAISE L_FND_EXC_UNEXPECTED_ERROR;
9336     END IF;
9337     --  Initialize API return status to success
9338     x_return_status := L_FND_RET_STS_SUCCESS;
9339     -- Getting the matchAmount information
9340     l_debug_info := 'Getting the matchAmount information';
9341     INL_LOGGING_PVT.Log_Statement (
9342         p_module_name       => g_module_name,
9343         p_procedure_name    => l_api_name,
9344         p_debug_info        => l_debug_info
9345     ) ;
9346     SELECT
9347         (SELECT SUM(INL_LANDEDCOST_PVT.Converted_Amt( NVL(a.matched_amt,0),
9348                                                      a.matched_curr_code,
9349                                                      ma.matched_curr_code,
9350                                                      ma.matched_curr_conversion_type,
9351                                                      ma.matched_curr_conversion_date))
9352           FROM inl_corr_matches_v a
9353          WHERE a.match_amount_id = ma.match_amount_id ) tax_amt,
9354         ma.matched_curr_code                currency_code,
9355         ma.matched_curr_conversion_type     currency_conversion_type,
9356         ma.matched_curr_conversion_date     currency_conversion_date,
9357         ma.matched_curr_conversion_rate     currency_conversion_rate,
9358 --
9359         ma.tax_code                          tax_code,
9360 --        m.ship_header_id                    ship_header_id          , --BUG#8198498
9361         m.from_parent_table_name            source_parent_table_name,
9362         m.from_parent_table_id              source_parent_table_id,
9363         ma.nrec_tax_amt                     nrec_tax_amt,
9364         m.tax_amt_included_flag             tax_amt_included_flag,
9365         ma.charge_line_type_id              charge_line_type_id,
9366 --
9367         clt.allocation_basis                allocation_basis,
9368         abv.base_uom_code                   base_uom_code,
9369         m.existing_match_info_flag          existing_match_info_flag
9370    INTO
9371         l_TxLn_Assoc.matched_amt               ,
9372         l_TxLn_Assoc.currency_code             ,
9373         l_TxLn_Assoc.currency_conversion_type  ,
9374         l_TxLn_Assoc.currency_conversion_date  ,
9375         l_TxLn_Assoc.currency_conversion_rate  ,
9376 --
9377         l_TxLn_Assoc.tax_code                  ,
9378 --        l_TxLn_Assoc.inl_Assoc.ship_header_id  ,--BUG#8198498
9379         l_TxLn_Assoc.source_parent_table_name  ,
9380         l_TxLn_Assoc.source_parent_table_id    ,
9381         l_TxLn_Assoc.nrec_tax_amt              ,
9382         l_TxLn_Assoc.tax_amt_included_flag     ,
9383         l_charge_line_type_id                  ,
9384 --
9385         l_TxLn_Assoc.inl_Assoc.allocation_basis,
9386         l_TxLn_Assoc.inl_Assoc.allocation_uom_code,
9387         l_existing_match_info_flag
9388     FROM
9389         inl_match_amounts ma , -- Bug #9179775
9390         inl_matches m               ,
9391         inl_charge_line_types_vl clt,
9392         inl_allocation_basis_vl  abv
9393     WHERE
9394         abv.allocation_basis_code     = clt.allocation_basis
9395         AND clt.charge_line_type_id   = m.charge_line_type_id
9396         AND m.match_amount_id         = ma.match_amount_id
9397         AND ma.match_amount_id        = p_match_amount_id
9398         AND m.match_id in (select min(match_id) -- BUG#8411594
9399                             FROM inl_corr_matches_v m
9400                            WHERE m.match_amount_id = p_match_amount_id);
9401 
9402     INL_LOGGING_PVT.Log_Variable (
9403         p_module_name     => g_module_name,
9404         p_procedure_name  => l_api_name,
9405         p_var_name        => 'l_existing_match_info_flag',
9406         p_var_value       => l_existing_match_info_flag) ;
9407 
9408 
9409     INL_LOGGING_PVT.Log_Variable (
9410         p_module_name => g_module_name,
9411         p_procedure_name => l_api_name,
9412         p_var_name => 'l_TxLn_Assoc.source_parent_table_name',
9413         p_var_value => l_TxLn_Assoc.source_parent_table_name
9414     ) ;
9415 
9416     INL_LOGGING_PVT.Log_Variable (
9417         p_module_name => g_module_name,
9418         p_procedure_name => l_api_name,
9419         p_var_name => 'l_TxLn_Assoc.source_parent_table_id',
9420         p_var_value => l_TxLn_Assoc.source_parent_table_id
9421     ) ;
9422 
9423     IF (l_existing_match_info_flag = 'Y') THEN
9424 
9425         -- Tax has been already processed
9426         l_debug_info := 'Existing match info flag';
9427         INL_LOGGING_PVT.Log_Statement (
9428             p_module_name => g_module_name,
9429             p_procedure_name => l_api_name,
9430             p_debug_info => l_debug_info
9431         ) ;
9432 -- BUG#8411594
9433         -- a)Verify if exists any new match in this match amount
9434         -- a.1) Get the last match_amount_id
9435         SELECT max(match_amount_id)
9436         INTO l_prev_match_amount_id
9437         FROM inl_matches m
9438         WHERE m.charge_line_type_id = l_charge_line_type_id
9439         AND  nvl(m.tax_code,'-9') = nvl(l_TxLn_Assoc.tax_code,'-9')
9440         AND  m.match_amount_id <> p_match_amount_id
9441         AND adj_already_generated_flag = 'Y'
9442         AND (m.from_parent_table_name, m.from_parent_table_id)
9443         IN (SELECT m2.from_parent_table_name, m2.from_parent_table_id
9444             FROM inl_matches m2
9445             WHERE m2.match_amount_id = p_match_amount_id)
9446         ;
9447 
9448         INL_LOGGING_PVT.Log_Variable (
9449             p_module_name => g_module_name,
9450             p_procedure_name => l_api_name,
9451             p_var_name => 'l_prev_match_amount_id',
9452             p_var_value => l_prev_match_amount_id
9453         ) ;
9454 
9455         -- a.2) Count the new matches
9456         SELECT nvl(count(*),0)
9457         INTO l_count_new_matches
9458         FROM inl_matches m
9459         WHERE m.match_amount_id = p_match_amount_id
9460         AND not exists (SELECT 1
9461                         FROM inl_matches m2
9462                         WHERE m2.match_amount_id          = l_prev_match_amount_id
9463                         AND m2.from_parent_table_name     = m.from_parent_table_name
9464                         AND m2.from_parent_table_id       = m.from_parent_table_id
9465                         AND m2.to_parent_table_name       = m.to_parent_table_name
9466                         AND m2.to_parent_table_id         = m.to_parent_table_id
9467                         )
9468         ;
9469         -- b)Verify if any old match has been deleted
9470         IF l_count_new_matches = 0 THEN
9471             -- b.1) Count old matches
9472             SELECT nvl(count(*),0)
9473             INTO l_count_new_matches
9474             FROM inl_matches m
9475             WHERE m.match_amount_id = l_prev_match_amount_id
9476             AND not exists (SELECT 1
9477                             FROM inl_matches m2
9478                             WHERE m2.match_amount_id          = p_match_amount_id
9479                             AND m2.from_parent_table_name     = m.from_parent_table_name
9480                             AND m2.from_parent_table_id       = m.from_parent_table_id
9481                             AND m2.to_parent_table_name       = m.to_parent_table_name
9482                             AND m2.to_parent_table_id         = m.to_parent_table_id
9483                             )
9484             ;
9485         END IF;
9486         -- c) if exists any new match zeroes the previous charge line
9487         IF l_count_new_matches > 0 THEN
9488 
9489             l_debug_info := 'Calling Zero_TaxLinesPerMatchAmt';
9490             INL_LOGGING_PVT.Log_Statement (
9491                 p_module_name => g_module_name,
9492                 p_procedure_name => l_api_name,
9493                 p_debug_info => l_debug_info
9494             ) ;
9495             Zero_TaxLinesPerMatchAmt (
9496                 p_match_Amount_id    => l_prev_match_amount_id,
9497                 p_adjustment_num     => p_adjustment_num,
9498                 x_return_status      => l_debug_info
9499             );
9500         END IF;
9501         IF l_return_status = L_FND_RET_STS_ERROR THEN
9502             RAISE L_FND_EXC_ERROR;
9503         ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
9504             RAISE L_FND_EXC_UNEXPECTED_ERROR;
9505         END IF;
9506 -- BUG#8411594
9507     END IF;
9508 
9509     INL_LOGGING_PVT.Log_Variable (
9510         p_module_name => g_module_name,
9511         p_procedure_name => l_api_name,
9512         p_var_name => 'l_count_new_matches',
9513         p_var_value => l_count_new_matches
9514     ) ;
9515 -- ====================
9516     IF (l_existing_match_info_flag = 'Y')
9517         AND l_count_new_matches = 0 THEN  -- BUG#8411594
9518         -- Charge has been already processed
9519         l_debug_info := 'Existing match info flag';
9520         INL_LOGGING_PVT.Log_Statement (
9521             p_module_name => g_module_name,
9522             p_procedure_name => l_api_name,
9523             p_debug_info => l_debug_info
9524         ) ;
9525         SELECT tl.tax_line_id, tl.tax_line_num
9526         INTO   l_TxLn_Assoc.parent_tax_line_id, l_TxLn_Assoc.tax_line_num
9527         FROM inl_matches m,
9528              inl_adj_tax_lines_v tl
9529         WHERE m.from_parent_table_name = l_TxLn_Assoc.source_parent_table_name
9530         AND   m.from_parent_table_id   = l_TxLn_Assoc.source_parent_table_id
9531         AND   m.match_id = (select max(m2.match_id)
9532                             FROM inl_matches m2
9533                             WHERE m2.from_parent_table_name = l_TxLn_Assoc.source_parent_table_name
9534                             AND   m2.from_parent_table_id   = l_TxLn_Assoc.source_parent_table_id
9535                             AND   m2.adj_already_generated_flag = 'Y'   -- BUG#8411723 => MURALI
9536                             )
9537         AND   tl.match_amount_id       = m.match_amount_id;
9538     ELSE
9539         l_TxLn_Assoc.parent_tax_line_id := NULL;
9540         l_TxLn_Assoc.tax_line_num       := NULL;
9541     END IF;
9542     l_TxLn_Assoc.match_id := NULL;
9543     l_TxLn_Assoc.match_amount_id := p_match_amount_id;
9544     -- Create_TxLines
9545     l_debug_info := 'Create_TxLines';
9546     INL_LOGGING_PVT.Log_Statement (
9547         p_module_name => g_module_name,
9548         p_procedure_name => l_api_name,
9549         p_debug_info => l_debug_info
9550     ) ;
9551 
9552     --BUG#8468830
9553     IF p_func_currency_code <> l_TxLn_Assoc.currency_code THEN
9554         l_garb := inl_landedcost_pvt.Converted_Amt (
9555                                     1,
9556                                     l_TxLn_Assoc.currency_code,
9557                                     p_func_currency_code,
9558                                     l_TxLn_Assoc.currency_conversion_type,
9559                                     l_TxLn_Assoc.currency_conversion_date,
9560                                     l_TxLn_Assoc.currency_conversion_rate);
9561     ELSE
9562         l_TxLn_Assoc.currency_conversion_type:= NULL;
9563         l_TxLn_Assoc.currency_conversion_rate:= NULL;
9564     END IF;
9565     --BUG#8468830
9566 
9567     Create_TxLines (
9568         p_TxLn_Assoc        => l_TxLn_Assoc,
9569         p_include_assoc     => 'N',
9570         p_adjustment_num    => p_adjustment_num,
9571         x_new_tax_line_id   => l_new_tax_line_id,
9572         x_return_status     => l_return_status) ;
9573     IF l_return_status                           = L_FND_RET_STS_ERROR THEN
9574         RAISE L_FND_EXC_ERROR;
9575     ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
9576         RAISE L_FND_EXC_UNEXPECTED_ERROR;
9577     END IF;
9578     -- It does not create associations for corrections neither to updates
9579     IF l_existing_match_info_flag = 'N'
9580        OR l_count_new_matches > 0   -- BUG#8411594
9581     THEN
9582         -- Create_associations for the match amount id
9583         l_debug_info := 'Create association lines to a match_amount_id';
9584         INL_LOGGING_PVT.Log_Statement (
9585             p_module_name => g_module_name,
9586             p_procedure_name => l_api_name,
9587             p_debug_info => l_debug_info
9588         ) ;
9589         OPEN c_matches_tl (p_match_amount_id) ;
9590         FETCH c_matches_tl BULK COLLECT INTO c_matches;
9591         CLOSE c_matches_tl;
9592         l_debug_info := c_matches.LAST||' match lines have been retrieved.';
9593         INL_LOGGING_PVT.Log_Statement (
9594             p_module_name => g_module_name,
9595             p_procedure_name => l_api_name,
9596             p_debug_info => l_debug_info
9597         ) ;
9598         IF NVL (c_matches.LAST, 0) > 0 THEN
9599             FOR i IN NVL (c_matches.FIRST, 0) ..NVL (c_matches.LAST, 0)
9600             LOOP
9601                 l_TxLn_Assoc.inl_Assoc.ship_header_id       := c_matches(i).ship_header_id;   --BUG#8198498
9602                 l_TxLn_Assoc.inl_Assoc.to_parent_table_name := c_matches(i).to_parent_table_name;
9603                 l_TxLn_Assoc.inl_Assoc.to_parent_table_id   := c_matches(i).to_parent_table_id;
9604                 -- Create Association Line
9605                 l_debug_info := 'Create association line for the charge';
9606                 INL_LOGGING_PVT.Log_Statement (
9607                     p_module_name => g_module_name,
9608                     p_procedure_name => l_api_name,
9609                     p_debug_info => l_debug_info
9610                 ) ;
9611                 l_debug_info := 'Creating association for Charge Id: '|| c_matches (i) .to_parent_table_id;
9612                 INL_LOGGING_PVT.Log_Variable (
9613                     p_module_name     => g_module_name,
9614                     p_procedure_name  => l_api_name,
9615                     p_var_name        => l_debug_info,
9616                     p_var_value       => c_matches (i) .to_parent_table_id) ;
9617                 Create_Assoc (
9618                     p_Assoc                   => l_TxLn_Assoc.inl_Assoc,
9619                     p_from_parent_table_name  => 'INL_TAX_LINES',
9620                     p_new_line_id             => l_new_tax_line_id,
9621                     x_return_status           => l_return_status) ;
9622             END LOOP;
9623         END IF;
9624     END IF;
9625     -- The estimated tax lines will made = 0 when as actual arrived on associated line
9626     -- i.e. when a charge became and actual value the estimated taxes will made 0 too
9627     -- Standard check of p_commit.
9628     IF FND_API.To_Boolean (p_commit) THEN
9629         COMMIT WORK;
9630     END IF;
9631     -- Standard call to get message count and if count is 1, get message info.
9632     FND_MSG_PUB.Count_And_Get (
9633         p_encoded => L_FND_FALSE,
9634         p_count => x_msg_count,
9635         p_data => x_msg_data) ;
9636     -- Standard End of Procedure/Function Logging
9637     INL_LOGGING_PVT.Log_EndProc (
9638         p_module_name => g_module_name,
9639         p_procedure_name => l_api_name) ;
9640 EXCEPTION
9641 WHEN L_FND_EXC_ERROR THEN
9642     -- Standard Expected Error Logging
9643     INL_LOGGING_PVT.Log_ExpecError (
9644         p_module_name => g_module_name,
9645         p_procedure_name => l_api_name) ;
9646     ROLLBACK TO Adjust_TaxLines_2_PVT;
9647     x_return_status                      := L_FND_RET_STS_ERROR;
9648     FND_MSG_PUB.Count_And_Get (
9649         p_encoded => L_FND_FALSE,
9650         p_count => x_msg_count,
9651         p_data => x_msg_data) ;
9652 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
9653     -- Standard Unexpected Error Logging
9654     INL_LOGGING_PVT.Log_UnexpecError ( p_module_name => g_module_name, p_procedure_name => l_api_name) ;
9655     ROLLBACK TO Adjust_TaxLines_2_PVT;
9656     x_return_status                      := L_FND_RET_STS_UNEXP_ERROR;
9657     FND_MSG_PUB.Count_And_Get (
9658         p_encoded => L_FND_FALSE,
9659         p_count => x_msg_count,
9660         p_data => x_msg_data) ;
9661 WHEN OTHERS THEN
9662     -- Standard Unexpected Error Logging
9663     INL_LOGGING_PVT.Log_UnexpecError (
9664         p_module_name => g_module_name,
9665         p_procedure_name => l_api_name) ;
9666     ROLLBACK TO Adjust_TaxLines_2_PVT;
9667     x_return_status                                := L_FND_RET_STS_UNEXP_ERROR ;
9668     IF FND_MSG_PUB.Check_Msg_Level (
9669         p_message_level => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
9670     ) THEN
9671         FND_MSG_PUB.Add_Exc_Msg (
9672             p_pkg_name        => g_pkg_name,
9673             p_procedure_name => l_api_name) ;
9674     END IF;
9675     FND_MSG_PUB.Count_And_Get (
9676         p_encoded => L_FND_FALSE,
9677         p_count => x_msg_count,
9678         p_data => x_msg_data) ;
9679 END Adjust_TaxLines;
9680 
9681 -- API name   : Adjust_Lines
9682 -- Type       : Private
9683 -- Function   : Manages the Creation of Adjustment Lines for Shipment Lines and Charge Lines
9684 -- Pre-reqs   : None
9685 -- Parameters :
9686 -- IN         : p_api_version                              IN NUMBER   Required
9687 --              p_init_msg_list                            IN VARCHAR2 Optional  Default = L_FND_FALSE
9688 --              p_commit                                   IN VARCHAR2 Optional  Default = L_FND_FALSE
9689 --              p_ship_header_id                           IN  NUMBER,
9690 -- OUT          x_return_status                            OUT NOCOPY VARCHAR2
9691 --              x_msg_count                                OUT NOCOPY NUMBER
9692 --              x_msg_data                                 OUT NOCOPY VARCHAR2
9693 --
9694 -- Version    : Current version 1.0
9695 --
9696 -- Notes      :
9697 PROCEDURE Adjust_Lines(
9698     p_api_version    IN NUMBER,
9699     p_init_msg_list  IN VARCHAR2 := L_FND_FALSE,
9700     p_commit         IN VARCHAR2 := L_FND_FALSE,
9701     p_ship_header_id IN NUMBER,
9702     x_return_status OUT NOCOPY VARCHAR2,
9703     x_msg_count     OUT NOCOPY NUMBER,
9704     x_msg_data      OUT NOCOPY VARCHAR2
9705 ) IS
9706     l_api_name         CONSTANT VARCHAR2 (30) := 'Adjust_Lines';
9707     l_api_version      CONSTANT NUMBER        := 1.0;
9708     l_return_status    VARCHAR2 (1) ;
9709     l_msg_count        NUMBER;
9710     l_msg_data         VARCHAR2 (2000) ;
9711     l_debug_info       VARCHAR2 (200) ;
9712 
9713     l_initial_sysdate date:= TRUNC(SYSDATE);
9714 
9715     CURSOR c_match
9716     IS
9717         SELECT
9718             'B' Ttype,                --BUG#8198498
9719             m.match_id            ,
9720             m.correction_match_id ,
9721             NULL match_amount_id  ,  --BUG#8198498
9722             NVL(m.adj_group_date,l_initial_sysdate) adj_group_date,  --OPM Integration / dependence
9723             m.match_type_code     ,
9724             m.charge_line_type_id ,
9725             m.tax_code            ,
9726             m.to_parent_table_name,
9727             m.to_parent_table_id  ,
9728             sh.organization_id  --Bug#14044298
9729 --Bug#14044298            gsb.currency_code func_currency_code  --BUG#8468830
9730         FROM
9731 --Bug#14044298            inl_charge_lines cl ,
9732 --Bug#14044298            inl_ship_lines sl   ,
9733             inl_ship_headers sh ,
9734             inl_corr_matches_v m
9735 --Bug#14044298            org_organization_definitions ood,   --BUG#8468830
9736 --Bug#14044298            gl_sets_of_books gsb                --BUG#8468830
9737         WHERE
9738             sh.ship_header_id                        = p_ship_header_id
9739 --Bug#14044298            cl.charge_line_id (+)                   = DECODE (m.to_parent_table_name, 'INL_CHARGE_LINES', m.to_parent_table_id, NULL)
9740 --Bug#14044298        AND sl.ship_line_id (+)                     = DECODE (m.to_parent_table_name, 'INL_SHIP_LINES', m.to_parent_table_id, NULL)
9741         AND sh.ship_header_id                       = m.ship_header_id
9742         AND m.ship_header_id                        = p_ship_header_id
9743         AND m.match_amount_id                      IS NULL
9744         AND m.match_type_code                      <> 'CORRECTION'
9745         AND NVL (m.adj_already_generated_flag, 'N') = 'N'
9746 --Bug#14044298        AND gsb.set_of_books_id                     = ood.set_of_books_id
9747 --Bug#14044298        AND ood.organization_id                     = sh.organization_id
9748       UNION
9749         SELECT DISTINCT
9750             'A' Ttype,                                       --BUG#8198498
9751             NULL               AS match_id            ,
9752             NULL               AS correction_match_id ,
9753             ma.match_amount_id AS match_amount_id     ,
9754             ma.adj_group_date  AS adj_group_date      ,  --OPM Integration
9755             m.match_type_code  AS match_type_code     ,
9756             NULL               AS charge_line_type_id ,
9757             NULL               AS tax_code            ,
9758             NULL               AS to_parent_table_name,
9759             NULL               AS to_parent_table_id  ,
9760             sh.organization_id  --Bug#14044298
9761 --Bug#14044298            gsb.currency_code  AS func_currency_code  --BUG#8468830
9762         FROM
9763             inl_ship_headers sh,
9764             inl_match_amounts ma,
9765             inl_corr_matches_v m
9766 --Bug#14044298            org_organization_definitions ood,   --BUG#8468830
9767 --Bug#14044298            gl_sets_of_books gsb                --BUG#8468830
9768         WHERE
9769             sh.ship_header_id   = p_ship_header_id
9770         AND ma.match_amount_id  = m.match_amount_id
9771         AND m.ship_header_id    = p_ship_header_id
9772         AND m.match_type_code     <> 'CORRECTION'
9773         AND NVL (m.adj_already_generated_flag, 'N') = 'N'
9774 --Bug#14044298        AND gsb.set_of_books_id        = ood.set_of_books_id
9775 --Bug#14044298        AND ood.organization_id        = sh.organization_id
9776     ORDER BY Ttype,
9777              adj_group_date,          --OPM Integration
9778              match_id,
9779              match_amount_id;         --BUG#8198498, -- BUG#8411723 => MURALI
9780     TYPE c_match_type
9781     IS
9782     TABLE OF c_match%ROWTYPE;
9783     r_match c_match_type;
9784 
9785     TYPE match_ship_header_id_type
9786         IS RECORD (
9787             ship_header_id NUMBER,
9788             adjustment_num NUMBER
9789         )
9790     ;
9791     TYPE match_ship_header_id_tbl
9792     IS
9793     TABLE OF match_ship_header_id_type INDEX BY BINARY_INTEGER;
9794     match_ship_header_id_lst match_ship_header_id_tbl;
9795     --
9796     -- Create Adjustments for Shipment Lines and Charge Lines
9797     --
9798      l_func_currency_code VARCHAR2(5); --Bug#14044298
9799     l_adjust_updt_flag      VARCHAR2(1) := 'N';
9800     l_adjustment_num        NUMBER;
9801     l_adjustment_num_tmp    NUMBER;
9802     l_has_match_amt         VARCHAR2(1) := 'N';
9803     l_match_amt_proc_same_adj_num VARCHAR2(1) := 'N';
9804     l_match_ship_header_id_ind NUMBER :=0 ;
9805     l_adj_group_date_ant    DATE;     --OPM Integration
9806     l_adj_group_date        DATE;     --dependence
9807 BEGIN
9808     -- Standard Beginning of Procedure/Function Logging
9809     INL_LOGGING_PVT.Log_BeginProc ( p_module_name => g_module_name, p_procedure_name => l_api_name) ;
9810     -- Standard Start of API savepoint
9811     SAVEPOINT Adjust_Lines_PVT;
9812     -- Initialize message list if p_init_msg_list is set to TRUE.
9813     IF FND_API.to_Boolean (p_init_msg_list) THEN
9814         FND_MSG_PUB.initialize;
9815     END IF;
9816     -- Check for call compatibility.
9817     IF NOT FND_API.Compatible_API_Call (p_current_version_number => l_api_version, p_caller_version_number => p_api_version, p_api_name => l_api_name, p_pkg_name => g_pkg_name) THEN
9818         RAISE L_FND_EXC_UNEXPECTED_ERROR;
9819     END IF;
9820     --  Initialize API return status to success
9821     x_return_status := L_FND_RET_STS_SUCCESS;
9822     -- API Body
9823     BEGIN
9824         l_debug_info := 'Create Adjustments for Shipment Lines and Charge Lines';
9825         INL_LOGGING_PVT.Log_Statement (
9826             p_module_name => g_module_name,
9827             p_procedure_name => l_api_name,
9828             p_debug_info => l_debug_info
9829         ) ;
9830 --
9831 --BUG#8198498
9832 --
9833         OPEN c_match;
9834         FETCH c_match BULK COLLECT INTO r_match;
9835         CLOSE c_match;
9836         l_debug_info := 'p_ship_header_id';
9837         INL_LOGGING_PVT.Log_Variable (
9838             p_module_name    => g_module_name,
9839             p_procedure_name => l_api_name,
9840             p_var_name       => l_debug_info,
9841             p_var_value      => p_ship_header_id
9842         );
9843         l_debug_info := r_match.LAST||' match lines have been retrieved.';
9844         INL_LOGGING_PVT.Log_Statement (
9845             p_module_name => g_module_name,
9846             p_procedure_name => l_api_name,
9847             p_debug_info => l_debug_info
9848         ) ;
9849         IF NVL (r_match.LAST, 0) > 0 THEN
9850             IF r_match(1).ttype = 'B' THEN -- no match_amounts to process
9851                 l_has_match_amt := 'N';
9852             ELSE
9853                 l_has_match_amt := 'Y';
9854                 -- Verify if all match_amounts could be processed with the same adjustment number
9855                 -- they will, if all matches have the same adj_group_date
9856                 SELECT  -- dependence
9857                     DECODE(COUNT(DISTINCT(NVL(mFromMA.adj_group_date,l_initial_sysdate))),1,'Y','N')
9858                 INTO
9859                     l_match_amt_proc_same_adj_num
9860                 FROM
9861                     inl_match_amounts ma,
9862                     inl_corr_matches_v m,
9863                     inl_corr_matches_v mFromMA
9864                 WHERE m.ship_header_id   = p_ship_header_id
9865                 AND m.match_amount_id    = ma.match_amount_id
9866                 AND m.match_type_code    <> 'CORRECTION'
9867                 AND NVL (m.adj_already_generated_flag, 'N') = 'N'
9868                 AND mFromMA.match_amount_id = ma.match_amount_id
9869                 AND NVL (mFromMA.adj_already_generated_flag, 'N') = 'N'
9870                 ;
9871                 l_debug_info := 'l_match_amt_proc_same_adj_num';
9872                 INL_LOGGING_PVT.Log_Variable (
9873                     p_module_name    => g_module_name,
9874                     p_procedure_name => l_api_name,
9875                     p_var_name       => l_debug_info,
9876                     p_var_value      => l_match_amt_proc_same_adj_num
9877                 );
9878             END IF;
9879 
9880             l_debug_info := 'l_has_match_amt';
9881             INL_LOGGING_PVT.Log_Variable (
9882                 p_module_name    => g_module_name,
9883                 p_procedure_name => l_api_name,
9884                 p_var_name       => l_debug_info,
9885                 p_var_value      => l_has_match_amt
9886             );
9887             FOR i IN NVL (r_match.FIRST, 0) ..NVL (r_match.LAST, 0)
9888             LOOP
9889                 l_debug_info := ' Begin the loop.';
9890                 INL_LOGGING_PVT.Log_Statement (
9891                     p_module_name => g_module_name,
9892                     p_procedure_name => l_api_name,
9893                     p_debug_info => l_debug_info
9894                 ) ;
9895                 IF r_match(i).ttype = 'B' THEN -- isn't match_amt
9896                     IF NVL(l_adjustment_num,0) = 0 THEN
9897                         l_adj_group_date_ant := r_match(i).adj_group_date;   --OPM Integration
9898                         SELECT NVL(adjustment_num,0) + 1
9899                         INTO l_adjustment_num
9900                         FROM inl_ship_headers
9901                         WHERE ship_header_id = p_ship_header_id FOR UPDATE;
9902                         l_debug_info := 'l_adjustment_num';
9903                         INL_LOGGING_PVT.Log_Variable (
9904                             p_module_name    => g_module_name,
9905                             p_procedure_name => l_api_name,
9906                             p_var_name       => l_debug_info,
9907                             p_var_value      => l_adjustment_num
9908                         );
9909                     -- VERIFY IF adj_group_date IS DIFFERENT
9910                     ELSIF l_adj_group_date_ant IS NULL
9911                           OR l_adj_group_date_ant <> r_match(i).adj_group_date THEN   --OPM Integration
9912                         l_adj_group_date_ant := r_match(i).adj_group_date;
9913                         l_adjustment_num := l_adjustment_num + 1;
9914                         l_debug_info := ' New adjustment_num';
9915                         INL_LOGGING_PVT.Log_Statement (
9916                             p_module_name => g_module_name,
9917                             p_procedure_name => l_api_name,
9918                             p_debug_info => l_debug_info
9919                         ) ;
9920                         l_debug_info := 'l_adjustment_num';
9921                         INL_LOGGING_PVT.Log_Variable (
9922                             p_module_name    => g_module_name,
9923                             p_procedure_name => l_api_name,
9924                             p_var_name       => l_debug_info,
9925                             p_var_value      => l_adjustment_num
9926                         );
9927                     END IF;
9928                     IF l_has_match_amt = 'Y' THEN
9929                         l_match_ship_header_id_ind:=l_match_ship_header_id_ind+1;
9930                         match_ship_header_id_lst(l_match_ship_header_id_ind).ship_header_id:= p_ship_header_id;
9931                         match_ship_header_id_lst(l_match_ship_header_id_ind).adjustment_num:= l_adjustment_num;
9932 
9933                         l_debug_info := 'match_ship_header_id_lst(l_match_ship_header_id_ind).ship_header_id';
9934                         INL_LOGGING_PVT.Log_Variable (
9935                             p_module_name    => g_module_name,
9936                             p_procedure_name => l_api_name,
9937                             p_var_name       => l_debug_info,
9938                             p_var_value      => match_ship_header_id_lst(l_match_ship_header_id_ind).ship_header_id
9939                         );
9940                     END IF;
9941                 ELSE  -- is a match_amt
9942                     IF l_match_amt_proc_same_adj_num = 'Y' THEN -- FETCH ONCE
9943                         IF NVL(l_adjustment_num,0) = 0 THEN -- no adjustment_num catched yet
9944                             l_adj_group_date_ant := r_match(i).adj_group_date;  --Bug#9141681
9945                         -- 1 Verify the next adjustment num
9946                             l_debug_info := ' Getting adjustment_num (match_amounts)';
9947                             INL_LOGGING_PVT.Log_Statement (
9948                                 p_module_name => g_module_name,
9949                                 p_procedure_name => l_api_name,
9950                                 p_debug_info => l_debug_info
9951                             ) ;
9952                             SELECT NVL(MAX(sh.adjustment_num),0)+1
9953                             INTO l_adjustment_num
9954                             FROM inl_ship_headers sh
9955                             WHERE sh.ship_header_id
9956                                     IN (select m1.ship_header_id
9957                                         from inl_corr_matches_v m1
9958                                         where m1.match_amount_id
9959                                             IN (select DISTINCT(ma.match_amount_id)
9960                                                 from inl_match_amounts ma, -- Bug #9179775
9961                                                     inl_corr_matches_v m2
9962                                                 WHERE m2.match_amount_id = ma.match_amount_id
9963                                                 AND m2.ship_header_id = p_SHIP_HEADER_ID
9964                                                 AND m2.match_type_code    <> 'CORRECTION'
9965                                                 AND NVL(m2.adj_already_generated_flag, 'N') = 'N')
9966                                             AND m1.match_type_code    <> 'CORRECTION')
9967                             ;
9968 
9969                             l_debug_info := 'l_adjustment_num';
9970                             INL_LOGGING_PVT.Log_Variable (
9971                                 p_module_name    => g_module_name,
9972                                 p_procedure_name => l_api_name,
9973                                 p_var_name       => l_debug_info,
9974                                 p_var_value      => l_adjustment_num
9975                             );
9976                             -- Getting the ship_header_ids that will be impacted for this matches in order to record the new adjustment_num
9977                              -- The main problem in Bug#14226493 refers to the query below;
9978                             -- the inner select ensure that the match amount in analysis is not a CORRECTION
9979                             -- then, in the outer select, we don't need verify the type and we can use the table
9980                             -- rather than the view
9981                              /*--Bug#14044298 BEGIN
9982                             FOR C_CUR_HEAD IN (select m1.ship_header_id
9983                                         from inl_corr_matches_v m1
9984                                         where m1.match_amount_id
9985                                             IN (select DISTINCT(ma.match_amount_id)
9986                                                 from inl_match_amounts ma, -- Bug #9188553
9987                                                     inl_corr_matches_v m2
9988                                                 WHERE m2.match_amount_id = ma.match_amount_id
9989                                                 AND m2.ship_header_id = p_SHIP_HEADER_ID
9990                                                 AND m2.match_type_code    <> 'CORRECTION'
9991                                                 AND NVL(m2.adj_already_generated_flag, 'N') = 'N')
9992                                             AND m1.match_type_code    <> 'CORRECTION') LOOP
9993                                */
9994                                 FOR C_CUR_HEAD IN (select m1.ship_header_id
9995                                         from inl_matches m1
9996                                         where m1.match_amount_id
9997                                             IN (select DISTINCT(ma.match_amount_id)
9998                                                 from inl_match_amounts ma, -- Bug #9188553
9999                                                     inl_corr_matches_v m2
10000                                                 WHERE m2.match_amount_id = ma.match_amount_id
10001                                                 AND m2.ship_header_id = p_SHIP_HEADER_ID
10002                                                 AND m2.match_type_code    <> 'CORRECTION'
10003                                                 AND NVL(m2.adj_already_generated_flag, 'N') = 'N')) LOOP
10004                             --Bug#14044298 END
10005 
10006                                 l_match_ship_header_id_ind:=l_match_ship_header_id_ind+1;
10007                                 match_ship_header_id_lst(l_match_ship_header_id_ind).ship_header_id:= C_CUR_HEAD.ship_header_id;
10008                                 match_ship_header_id_lst(l_match_ship_header_id_ind).adjustment_num:= l_adjustment_num;
10009 
10010                                 l_debug_info := 'C_CUR_HEAD.ship_header_id';
10011                                 INL_LOGGING_PVT.Log_Variable (
10012                                     p_module_name    => g_module_name,
10013                                     p_procedure_name => l_api_name,
10014                                     p_var_name       => l_debug_info,
10015                                     p_var_value      => C_CUR_HEAD.ship_header_id
10016                                 );
10017                             END LOOP;
10018                         END IF;
10019                     ELSE  -- IF l_match_amt_proc_same_adj_num = 'N' THEN
10020                     -- fetch every time, because the group of matches from this match_amount
10021                     -- could be different from the previous one
10022                         l_debug_info := ' Getting the MAX adjustment_num for this group (match_amounts)';
10023                         INL_LOGGING_PVT.Log_Statement (
10024                             p_module_name => g_module_name,
10025                             p_procedure_name => l_api_name,
10026                             p_debug_info => l_debug_info
10027                         ) ;
10028                         l_debug_info := 'r_match(i).match_amount_id';
10029                         INL_LOGGING_PVT.Log_Variable (
10030                             p_module_name    => g_module_name,
10031                             p_procedure_name => l_api_name,
10032                             p_var_name       => l_debug_info,
10033                             p_var_value      => r_match(i).match_amount_id
10034                         );
10035                         SELECT NVL(MAX(sh.adjustment_num),0)
10036                         INTO l_adjustment_num_tmp
10037                         FROM inl_ship_headers sh
10038                         WHERE sh.ship_header_id
10039                                 IN (SELECT m1.ship_header_id
10040                                     FROM inl_corr_matches_v m1
10041                                     WHERE m1.match_type_code    <> 'CORRECTION'
10042                                     AND m1.match_amount_id = r_match(i).match_amount_id)
10043                         ;
10044 
10045                         l_debug_info := 'l_adjustment_num_tmp';
10046                         INL_LOGGING_PVT.Log_Variable (
10047                             p_module_name    => g_module_name,
10048                             p_procedure_name => l_api_name,
10049                             p_var_name       => l_debug_info,
10050                             p_var_value      => l_adjustment_num_tmp
10051                         );
10052                         l_adj_group_date := r_match(i).adj_group_date;
10053                         IF r_match(i).adj_group_date IS NULL THEN  -- dependence
10054                             BEGIN
10055                                 SELECT
10056                                     DISTINCT(m.adj_group_date)
10057                                 INTO
10058                                     l_adj_group_date
10059                                 FROM
10060                                     inl_corr_matches_v m
10061                                 WHERE m.match_amount_id    = r_match(i).match_amount_id
10062                                 AND m.match_type_code    <> 'CORRECTION'
10063                                 AND NVL (m.adj_already_generated_flag, 'N') = 'N';
10064                             EXCEPTION
10065                                 WHEN OTHERS THEN
10066                                     l_adj_group_date := NULL;
10067                             END;
10068                         END IF;
10069                         IF l_adjustment_num_tmp >= NVL(l_adjustment_num,0) THEN
10070                             l_adjustment_num := l_adjustment_num_tmp + 1;
10071                         ELSIF l_adj_group_date IS NULL
10072                             OR l_adj_group_date_ant IS NULL
10073                             OR r_match(i).adj_group_date <> l_adj_group_date_ant
10074                         THEN
10075                             l_adjustment_num := l_adjustment_num + 1;
10076                         END IF;
10077                         l_adj_group_date_ant := r_match(i).adj_group_date;
10078                         l_debug_info := 'l_adjustment_num';
10079                         INL_LOGGING_PVT.Log_Variable (
10080                             p_module_name    => g_module_name,
10081                             p_procedure_name => l_api_name,
10082                             p_var_name       => l_debug_info,
10083                             p_var_value      => l_adjustment_num
10084                         );
10085                         l_debug_info := 'l_adj_group_date_ant';
10086                         INL_LOGGING_PVT.Log_Variable (
10087                             p_module_name    => g_module_name,
10088                             p_procedure_name => l_api_name,
10089                             p_var_name       => l_debug_info,
10090                             p_var_value      => l_adj_group_date_ant
10091                         );
10092 
10093                         -- Getting the ship_header_ids that will be impact for this matches in order to record the new adjustment_num
10094                         FOR C_CUR_HEAD IN (select m1.ship_header_id
10095                                             from inl_corr_matches_v m1
10096                                             where m1.match_amount_id
10097                                             IN (SELECT m2.match_amount_id
10098                                                 FROM inl_corr_matches_v m2
10099                                                 WHERE m2.match_type_code    <> 'CORRECTION'
10100                                                 AND m2.match_amount_id = r_match(i).match_amount_id)) LOOP
10101 
10102                             l_match_ship_header_id_ind:=l_match_ship_header_id_ind+1;
10103                             match_ship_header_id_lst(l_match_ship_header_id_ind).ship_header_id:= C_CUR_HEAD.ship_header_id;
10104                             match_ship_header_id_lst(l_match_ship_header_id_ind).adjustment_num:= l_adjustment_num;
10105                             l_debug_info := 'match_ship_header_id_lst(l_match_ship_header_id_ind).ship_header_id';
10106                             INL_LOGGING_PVT.Log_Variable (
10107                                 p_module_name    => g_module_name,
10108                                 p_procedure_name => l_api_name,
10109                                 p_var_name       => l_debug_info,
10110                                 p_var_value      => match_ship_header_id_lst(l_match_ship_header_id_ind).ship_header_id
10111                             );
10112 
10113 
10114                         END LOOP;
10115                     END IF;
10116                 END IF;
10117 --
10118 --BUG#8198498
10119 --
10120 
10121                 INL_LOGGING_PVT.Log_Variable (
10122                     p_module_name => g_module_name,
10123                     p_procedure_name => l_api_name,
10124                     p_var_name => 'r_match('||i||').match_amount_id',
10125                     p_var_value => r_match(i).match_amount_id
10126                 );
10127 
10128                 INL_LOGGING_PVT.Log_Variable (
10129                     p_module_name           => g_module_name,
10130                     p_procedure_name        => l_api_name,
10131                     p_var_name             => 'r_match('||i||').to_parent_table_id',
10132                     p_var_value             => TO_CHAR (r_match(i).to_parent_table_id)
10133                 ) ;
10134 
10135 --Bug#14044298 BEG
10136                 IF l_func_currency_code IS NULL
10137                 THEN
10138                     INL_LOGGING_PVT.Log_Variable (
10139                         p_module_name           => g_module_name,
10140                         p_procedure_name        => l_api_name,
10141                         p_var_name             => 'r_match('||i||').organization_id',
10142                         p_var_value             => r_match(i).organization_id
10143                     ) ;
10144                     SELECT gsb.currency_code
10145                     INTO l_func_currency_code
10146                     FROM
10147                         org_organization_definitions ood,
10148                         gl_sets_of_books gsb
10149                     WHERE
10150                         gsb.set_of_books_id = ood.set_of_books_id
10151                     AND ood.organization_id = r_match(i).organization_id;
10152                     INL_LOGGING_PVT.Log_Variable (
10153                         p_module_name           => g_module_name,
10154                         p_procedure_name        => l_api_name,
10155                         p_var_name             => 'l_func_currency_code',
10156                         p_var_value             => l_func_currency_code
10157                     ) ;
10158                 END IF;
10159 --Bug#14044298 END
10160 
10161                 IF r_match(i).match_type_code = 'ITEM' THEN
10162                     l_adjust_updt_flag      := 'Y';
10163                     Adjust_ShipLines (
10164                         p_api_version       => 1.0,
10165                         p_init_msg_list     => L_FND_FALSE,
10166                         p_commit            => L_FND_FALSE,
10167                         p_match_id          => r_match(i).match_id,
10168                         p_adjustment_num    => l_adjustment_num,
10169                         p_func_currency_code=> l_func_currency_code, --Bug#14044298 r_match(i).func_currency_code, --BUG#8468830
10170                         x_return_status     => l_return_status,
10171                         x_msg_count         => l_msg_count,
10172                         x_msg_data          => l_msg_data
10173                     ) ;
10174                 ELSIF r_match(i).match_type_code = 'CHARGE' AND r_match(i).match_amount_id IS NULL THEN
10175                     l_adjust_updt_flag  := 'Y';
10176                     Adjust_ChargeLines (
10177                         p_api_version       => 1.0,
10178                         p_init_msg_list     => L_FND_FALSE,
10179                         p_commit            => L_FND_FALSE,
10180                         p_match_id          => r_match(i).match_id,
10181                         p_adjustment_num    => l_adjustment_num,
10182                         p_func_currency_code=> l_func_currency_code, --Bug#14044298 r_match(i).func_currency_code, --BUG#8468830
10183                         x_return_status     => l_return_status,
10184                         x_msg_count         => l_msg_count,
10185                         x_msg_data          => l_msg_data
10186                     ) ;
10187                 ELSIF r_match(i).match_type_code = 'CHARGE' AND r_match(i).match_amount_id IS NOT NULL THEN
10188                     l_adjust_updt_flag := 'Y';
10189                     Adjust_ChargeLines (
10190                         p_api_version       => 1.0,
10191                         p_init_msg_list     => L_FND_FALSE,
10192                         p_commit            => L_FND_FALSE,
10193                         p_match_amount_id   => r_match(i).match_amount_id,
10194                         p_adjustment_num    => l_adjustment_num,
10195                         p_func_currency_code=> l_func_currency_code, --Bug#14044298  r_match(i).func_currency_code, --BUG#8468830
10196                         x_return_status     => l_return_status,
10197                         x_msg_count         => l_msg_count,
10198                         x_msg_data          => l_msg_data
10199                     ) ;
10200                 ELSIF r_match(i).match_type_code = 'TAX' AND r_match(i).match_amount_id IS NOT NULL THEN
10201                     l_adjust_updt_flag  := 'Y';
10202                     Adjust_TaxLines (
10203                         p_api_version       => 1.0,
10204                         p_init_msg_list     => L_FND_FALSE,
10205                         p_commit            => L_FND_FALSE,
10206                         p_match_amount_id   => r_match(i).match_amount_id,
10207                         p_adjustment_num    => l_adjustment_num,
10208                         p_func_currency_code=> l_func_currency_code, --Bug#14044298  r_match(i).func_currency_code, --BUG#8468830
10209                         x_return_status     => l_return_status,
10210                         x_msg_count         => l_msg_count,
10211                         x_msg_data          => l_msg_data
10212                     ) ;
10213                 ELSIF r_match(i).match_type_code = 'TAX' THEN
10214                     l_adjust_updt_flag  := 'Y';
10215                     Adjust_TaxLines (
10216                         p_api_version       => 1.0,
10217                         p_init_msg_list     => L_FND_FALSE,
10218                         p_commit            => L_FND_FALSE,
10219                         p_match_id          => r_match(i).match_id,
10220                         p_adjustment_num    => l_adjustment_num,
10221                          p_func_currency_code=> l_func_currency_code, --Bug#14044298  r_match(i).func_currency_code, --BUG#8468830
10222                         x_return_status     => l_return_status,
10223                         x_msg_count         => l_msg_count,
10224                         x_msg_data          => l_msg_data
10225                     ) ;
10226                 END IF;
10227 
10228                 -- If any errors happen abort API.
10229                 IF l_return_status = L_FND_RET_STS_ERROR THEN
10230                     RAISE L_FND_EXC_ERROR;
10231                 ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
10232                     RAISE L_FND_EXC_UNEXPECTED_ERROR;
10233                 END IF;
10234                 -- Flag the matches that already generated ajustments
10235                 UPDATE inl_matches m
10236                 SET m.adj_already_generated_flag = 'Y'             ,
10237                     m.adjustment_num             = l_adjustment_num, --lcm/opm integration
10238                     m.last_updated_by            = L_FND_USER_ID,
10239                     m.last_update_date           = SYSDATE
10240                   WHERE m.match_id               = NVL (r_match(i).correction_match_id, r_match(i).match_id)
10241                     OR NVL(m.match_amount_id,-1) = NVL(r_match(i).match_amount_id,-2);
10242             END LOOP;
10243             l_debug_info := 'Update Shipment Header Adjustment Number';
10244             INL_LOGGING_PVT.Log_Statement (
10245                 p_module_name => g_module_name,
10246                 p_procedure_name => l_api_name,
10247                 p_debug_info => l_debug_info
10248             ) ;
10249             -- Update Shipment Header Adjustment Number
10250             IF l_adjust_updt_flag = 'Y' THEN
10251                 IF l_has_match_amt = 'Y' THEN
10252                     IF NVL (match_ship_header_id_lst.LAST, 0) > 0 THEN
10253                         FOR i IN NVL (match_ship_header_id_lst.FIRST, 0) ..NVL (match_ship_header_id_lst.LAST, 0)
10254                         LOOP
10255                             UPDATE inl_ship_headers
10256                             SET adjustment_num     = match_ship_header_id_lst(i).adjustment_num
10257                             WHERE ship_header_id = match_ship_header_id_lst(i).ship_header_id;
10258 
10259                             INL_LOGGING_PVT.Log_Variable (
10260                                 p_module_name => g_module_name,
10261                                 p_procedure_name => l_api_name,
10262                                 p_var_name => 'match_ship_header_id_lst('||i||').adjustment_num',
10263                                 p_var_value => match_ship_header_id_lst(i).adjustment_num
10264                             );
10265 
10266                             INL_LOGGING_PVT.Log_Variable (
10267                                 p_module_name => g_module_name,
10268                                 p_procedure_name => l_api_name,
10269                                 p_var_name => 'match_ship_header_id_lst('||i||').ship_header_id',
10270                                 p_var_value => match_ship_header_id_lst(i).ship_header_id
10271                             );
10272 
10273                         END LOOP;
10274                     END IF;
10275                 ELSE
10276                     UPDATE inl_ship_headers
10277                     SET adjustment_num     = l_adjustment_num
10278                     WHERE ship_header_id = p_ship_header_id;
10279                 END IF;
10280             END IF;
10281         END IF;
10282     END;
10283     -- End of API Body
10284     -- Standard check of p_commit.
10285     IF FND_API.To_Boolean (p_commit) THEN
10286         COMMIT WORK;
10287     END IF;
10288     -- Standard call to get message count and if count is 1, get message info.
10289     FND_MSG_PUB.Count_And_Get ( p_encoded => L_FND_FALSE, p_count => x_msg_count, p_data => x_msg_data) ;
10290     -- Standard End of Procedure/Function Logging
10291     INL_LOGGING_PVT.Log_EndProc ( p_module_name => g_module_name, p_procedure_name => l_api_name) ;
10292 EXCEPTION
10293 WHEN L_FND_EXC_ERROR THEN
10294     -- Standard Expected Error Logging
10295     INL_LOGGING_PVT.Log_ExpecError (
10296         p_module_name => g_module_name,
10297         p_procedure_name => l_api_name) ;
10298     ROLLBACK TO Adjust_Lines_PVT;
10299     x_return_status := L_FND_RET_STS_ERROR;
10300     FND_MSG_PUB.Count_And_Get (
10301         p_encoded => L_FND_FALSE,
10302         p_count => x_msg_count,
10303         p_data => x_msg_data) ;
10304 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
10305     -- Standard Unexpected Error Logging
10306     INL_LOGGING_PVT.Log_UnexpecError ( p_module_name => g_module_name, p_procedure_name => l_api_name) ;
10307     ROLLBACK TO Adjust_Lines_PVT;
10308     x_return_status                      := L_FND_RET_STS_UNEXP_ERROR;
10309     FND_MSG_PUB.Count_And_Get ( p_encoded => L_FND_FALSE, p_count => x_msg_count, p_data => x_msg_data) ;
10310 WHEN OTHERS THEN
10311     -- Standard Unexpected Error Logging
10312     INL_LOGGING_PVT.Log_UnexpecError ( p_module_name => g_module_name, p_procedure_name => l_api_name) ;
10313     ROLLBACK TO Adjust_Lines_PVT;
10314     x_return_status := L_FND_RET_STS_UNEXP_ERROR ;
10315     IF FND_MSG_PUB.Check_Msg_Level (
10316                 p_message_level => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
10317     ) THEN
10318         FND_MSG_PUB.Add_Exc_Msg (
10319             p_pkg_name        => g_pkg_name,
10320             p_procedure_name => l_api_name) ;
10321     END IF;
10322     FND_MSG_PUB.Count_And_Get ( p_encoded => L_FND_FALSE, p_count => x_msg_count, p_data => x_msg_data) ;
10323 END Adjust_Lines;
10324 
10325 -- START Bug 13914863
10326 -- API name: Get_1aryQty
10327 -- Type       : Public
10328 -- Function   : Convert the Primary based on Transaction Qty and UOM
10329 -- Pre-reqs   : None
10330 -- Parameters :
10331 -- IN         : p_api_version       IN NUMBER,
10332 --              p_init_msg_list     IN VARCHAR2 := L_FND_FALSE,
10333 --              p_commit            IN VARCHAR2 := L_FND_FALSE,
10334 --              p_inventory_item_id IN NUMBER,
10335 --              p_organization_id   IN NUMBER,
10336 --              p_uom_code          IN VARCHAR2,
10337 --              p_qty               IN NUMBER,
10338 --              x_1ary_uom_code     OUT NOCOPY VARCHAR2,
10339 --              x_1ary_qty          OUT NOCOPY NUMBER,
10340 --              x_return_status     OUT NOCOPY VARCHAR2,
10341 --              x_msg_count         OUT NOCOPY NUMBER,
10342 --              x_msg_data          OUT NOCOPY VARCHAR2
10343 --
10344 -- Version    : Current version 1.0
10345 --
10346 -- Notes      :
10347 PROCEDURE Get_1aryQty(p_api_version       IN NUMBER,
10348                       p_init_msg_list     IN VARCHAR2 := L_FND_FALSE,
10349                       p_commit            IN VARCHAR2 := L_FND_FALSE,
10350                       p_inventory_item_id IN NUMBER,
10351                       p_organization_id   IN NUMBER,
10352                       p_uom_code          IN VARCHAR2,
10353                       p_qty               IN NUMBER,
10354                       x_1ary_uom_code     OUT NOCOPY VARCHAR2,
10355                       x_1ary_qty          OUT NOCOPY NUMBER,
10356                       x_return_status     OUT NOCOPY VARCHAR2,
10357                       x_msg_count         OUT NOCOPY NUMBER,
10358                       x_msg_data          OUT NOCOPY VARCHAR2)
10359 IS
10360 l_debug_info VARCHAR2(240);
10361 l_api_name CONSTANT VARCHAR2(30) := 'Get_1aryQty';
10362 l_api_version CONSTANT NUMBER := 1.0;
10363 
10364 BEGIN
10365     INL_LOGGING_PVT.Log_BeginProc (p_module_name => g_module_name,
10366                                    p_procedure_name => l_api_name);
10367     -- Standard Start of API savepoint
10368     SAVEPOINT Get_1aryQty_PVT;
10369     -- Initialize message list if p_init_msg_list is set to TRUE.
10370     IF FND_API.to_Boolean (p_init_msg_list) THEN
10371         FND_MSG_PUB.initialize;
10372     END IF;
10373     -- Check for call compatibility.
10374     IF NOT FND_API.Compatible_API_Call (p_current_version_number => l_api_version,
10375                                         p_caller_version_number => p_api_version,
10376                                         p_api_name => l_api_name,
10377                                         p_pkg_name => g_pkg_name) THEN
10378         RAISE L_FND_EXC_UNEXPECTED_ERROR;
10379     END IF;
10380     -- Initialize return status to SUCCESS
10381     x_return_status:= L_FND_RET_STS_SUCCESS;
10382 
10383     INL_LOGGING_PVT.Log_Variable (
10384         p_module_name => g_module_name,
10385         p_procedure_name => l_api_name,
10386         p_var_name => 'p_inventory_item_id',
10387         p_var_value => p_inventory_item_id) ;
10388     INL_LOGGING_PVT.Log_Variable (
10389         p_module_name => g_module_name,
10390         p_procedure_name => l_api_name,
10391         p_var_name => 'p_organization_id',
10392         p_var_value => p_organization_id) ;
10393     INL_LOGGING_PVT.Log_Variable (
10394         p_module_name => g_module_name,
10395         p_procedure_name => l_api_name,
10396         p_var_name => 'p_uom_code',
10397         p_var_value => p_uom_code) ;
10398     INL_LOGGING_PVT.Log_Variable (
10399         p_module_name => g_module_name,
10400         p_procedure_name => l_api_name,
10401         p_var_name => 'p_qty',
10402         p_var_value => p_qty) ;
10403 
10404     l_debug_info  := 'Get Primary UOM Code from MTL_SYSTEM_ITEMS_VL';
10405     INL_LOGGING_PVT.Log_Statement(p_module_name => g_module_name,
10406                                   p_procedure_name => l_api_name,
10407                                   p_debug_info => l_debug_info);
10408     SELECT msi.primary_uom_code
10409       INTO x_1ary_uom_code
10410       FROM mtl_system_items_vl msi
10411       WHERE msi.inventory_item_id = p_inventory_item_id
10412         AND msi.organization_id = p_organization_id;
10413 
10414     INL_LOGGING_PVT.Log_Variable (
10415         p_module_name      => g_module_name,
10416         p_procedure_name => l_api_name,
10417         p_var_name => 'x_1ary_uom_code',
10418         p_var_value => x_1ary_uom_code) ;
10419 
10420     IF x_1ary_uom_code IS NOT NULL THEN
10421         l_debug_info := 'Before executing the Primary UOM convertion';
10422         INL_LOGGING_PVT.Log_Statement (
10423             p_module_name => g_module_name,
10424             p_procedure_name => l_api_name,
10425             p_debug_info => l_debug_info);
10426 
10427         INL_LOGGING_PVT.Log_APICallIn (
10428             p_module_name => g_module_name,
10429             p_procedure_name => l_api_name,
10430             p_call_api_name => 'INL_LANDEDCOST_PVT.Converted_Qty',
10431             p_in_param_name1 => 'p_organization_id',
10432             p_in_param_value1 => p_organization_id,
10433             p_in_param_name2 => 'p_inventory_item_id',
10434             p_in_param_value2 => p_inventory_item_id,
10435             p_in_param_name3 => 'p_qty',
10436             p_in_param_value3 => p_qty,
10437             p_in_param_name4 => 'p_uom_code',
10438             p_in_param_value4 => p_uom_code,
10439             p_in_param_name5 => 'x_1ary_uom_code',
10440             p_in_param_value5 => x_1ary_uom_code,
10441             p_in_param_name6 => NULL,
10442             p_in_param_value6 => NULL,
10443             p_in_param_name7 => NULL,
10444             p_in_param_value7 => NULL,
10445             p_in_param_name8 => NULL,
10446             p_in_param_value8 => NULL,
10447             p_in_param_name9 => NULL,
10448             p_in_param_value9 => NULL,
10449             p_in_param_name10 => NULL,
10450             p_in_param_value10 => NULL) ;
10451 
10452         x_1ary_qty := INL_LANDEDCOST_PVT.Converted_Qty (
10453                             p_organization_id => p_organization_id,
10454                             p_inventory_item_id => p_inventory_item_id,
10455                             p_qty => p_qty,
10456                             p_from_uom_code => p_uom_code,
10457                             P_to_uom_code => x_1ary_uom_code);
10458 
10459         INL_LOGGING_PVT.Log_Variable (p_module_name  => g_module_name,
10460                                       p_procedure_name => l_api_name,
10461                                       p_var_name => 'x_1ary_qty',
10462                                       p_var_value => x_1ary_qty) ;
10463     END IF;
10464 
10465     -- Standard check of p_commit.
10466     IF FND_API.To_Boolean (p_commit) THEN
10467         COMMIT WORK;
10468     END IF;
10469     -- Standard call to get message count and if count is 1, get message info.
10470     FND_MSG_PUB.Count_And_Get(p_encoded => L_FND_FALSE,
10471                               p_count => x_msg_count,
10472                               p_data => x_msg_data) ;
10473     INL_LOGGING_PVT.Log_EndProc(p_module_name => g_module_name,
10474                                 p_procedure_name => l_api_name) ;
10475 EXCEPTION
10476 WHEN L_FND_EXC_ERROR THEN
10477     INL_LOGGING_PVT.Log_ExpecError (
10478         p_module_name => g_module_name,
10479         p_procedure_name => l_api_name) ;
10480     x_return_status := L_FND_RET_STS_ERROR;
10481     ROLLBACK TO Get_1aryQty_PVT;
10482 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
10483     INL_LOGGING_PVT.Log_UnexpecError (
10484         p_module_name => g_module_name,
10485         p_procedure_name => l_api_name) ;
10486     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
10487     ROLLBACK TO Get_1aryQty_PVT;
10488 WHEN OTHERS THEN
10489     INL_LOGGING_PVT.Log_UnexpecError (
10490         p_module_name => g_module_name,
10491         p_procedure_name => l_api_name) ;
10492     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
10493     ROLLBACK TO Get_1aryQty_PVT;
10494     IF FND_MSG_PUB.Check_Msg_Level (
10495         p_message_level => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
10496     ) THEN
10497         FND_MSG_PUB.Add_Exc_Msg (
10498             p_pkg_name        => g_pkg_name,
10499             p_procedure_name => l_api_name) ;
10500     END IF;
10501 END Get_1aryQty;
10502 
10503 -- API name: Get_2aryQty
10504 -- Type       : Public
10505 -- Function   : Convert the Secondary based on Transaction Qty and UOM
10506 -- Pre-reqs   : None
10507 -- Parameters :
10508 -- IN         : p_api_version       IN NUMBER,
10509 --              p_init_msg_list     IN VARCHAR2 := L_FND_FALSE,
10510 --              p_commit            IN VARCHAR2 := L_FND_FALSE,
10511 --              p_inventory_item_id IN NUMBER,
10512 --              p_organization_id   IN NUMBER,
10513 --              p_uom_code          IN VARCHAR2,
10514 --              p_qty               IN NUMBER,
10515 --              x_1ary_uom_code     OUT NOCOPY VARCHAR2,
10516 --              x_1ary_qty          OUT NOCOPY NUMBER,
10517 --              x_return_status     OUT NOCOPY VARCHAR2,
10518 --              x_msg_count         OUT NOCOPY NUMBER,
10519 --              x_msg_data          OUT NOCOPY VARCHAR2
10520 --
10521 -- Version    : Current version 1.0
10522 --
10523 -- Notes      :
10524 PROCEDURE Get_2aryQty(p_api_version       IN NUMBER,
10525                       p_init_msg_list     IN VARCHAR2 := L_FND_FALSE,
10526                       p_commit            IN VARCHAR2 := L_FND_FALSE,
10527                       p_inventory_item_id IN NUMBER,
10528                       p_organization_id   IN NUMBER,
10529                       p_uom_code          IN VARCHAR2,
10530                       p_qty               IN NUMBER,
10531                       x_2ary_uom_code     OUT NOCOPY VARCHAR2,
10532                       x_2ary_qty          OUT NOCOPY NUMBER,
10533                       x_return_status     OUT NOCOPY VARCHAR2,
10534                       x_msg_count         OUT NOCOPY NUMBER,
10535                       x_msg_data          OUT NOCOPY VARCHAR2)
10536 IS
10537 l_debug_info VARCHAR2(240);
10538 l_api_name CONSTANT VARCHAR2(30) := 'Get_2aryQty';
10539 l_api_version CONSTANT NUMBER := 1.0;
10540 
10541 BEGIN
10542     INL_LOGGING_PVT.Log_BeginProc (p_module_name => g_module_name,
10543                                    p_procedure_name => l_api_name);
10544     -- Standard Start of API savepoint
10545     SAVEPOINT Get_2aryQty_PVT;
10546     -- Initialize message list if p_init_msg_list is set to TRUE.
10547     IF FND_API.to_Boolean (p_init_msg_list) THEN
10548         FND_MSG_PUB.initialize;
10549     END IF;
10550     -- Check for call compatibility.
10551     IF NOT FND_API.Compatible_API_Call (p_current_version_number => l_api_version,
10552                                         p_caller_version_number => p_api_version,
10553                                         p_api_name => l_api_name,
10554                                         p_pkg_name => g_pkg_name) THEN
10555         RAISE L_FND_EXC_UNEXPECTED_ERROR;
10556     END IF;
10557     -- Initialize return status to SUCCESS
10558     x_return_status:= L_FND_RET_STS_SUCCESS;
10559 
10560     INL_LOGGING_PVT.Log_Variable (
10561         p_module_name => g_module_name,
10562         p_procedure_name => l_api_name,
10563         p_var_name => 'p_inventory_item_id',
10564         p_var_value => p_inventory_item_id) ;
10565     INL_LOGGING_PVT.Log_Variable (
10566         p_module_name => g_module_name,
10567         p_procedure_name => l_api_name,
10568         p_var_name => 'p_organization_id',
10569         p_var_value => p_organization_id) ;
10570     INL_LOGGING_PVT.Log_Variable (
10571         p_module_name => g_module_name,
10572         p_procedure_name => l_api_name,
10573         p_var_name => 'p_uom_code',
10574         p_var_value => p_uom_code) ;
10575     INL_LOGGING_PVT.Log_Variable (
10576         p_module_name => g_module_name,
10577         p_procedure_name => l_api_name,
10578         p_var_name => 'p_qty',
10579         p_var_value => p_qty) ;
10580 
10581        l_debug_info  := 'Get Secondary UOM Code from MTL_SYSTEM_ITEMS_VL';
10582     INL_LOGGING_PVT.Log_Statement (
10583         p_module_name => g_module_name,
10584         p_procedure_name => l_api_name,
10585         p_debug_info => l_debug_info
10586     ) ;
10587 
10588     SELECT msi.secondary_uom_code
10589        INTO x_2ary_uom_code
10590        FROM mtl_system_items_vl msi
10591       WHERE msi.inventory_item_id = p_inventory_item_id
10592         AND msi.organization_id = p_organization_id;
10593 
10594     INL_LOGGING_PVT.Log_Variable (
10595         p_module_name      => g_module_name,
10596         p_procedure_name => l_api_name,
10597         p_var_name => 'x_2ary_uom_code',
10598         p_var_value => x_2ary_uom_code) ;
10599 
10600     IF x_2ary_uom_code IS NOT NULL THEN
10601         l_debug_info := 'Before executing the Secondary UOM convertion';
10602         INL_LOGGING_PVT.Log_Statement (
10603             p_module_name => g_module_name,
10604             p_procedure_name => l_api_name,
10605             p_debug_info => l_debug_info
10606         ) ;
10607         INL_LOGGING_PVT.Log_APICallIn (
10608             p_module_name => g_module_name,
10609             p_procedure_name => l_api_name,
10610             p_call_api_name => 'INL_LANDEDCOST_PVT.Converted_Qty',
10611             p_in_param_name1 => 'p_organization_id',
10612             p_in_param_value1 => p_organization_id,
10613             p_in_param_name2 => 'p_inventory_item_id',
10614             p_in_param_value2 => p_inventory_item_id,
10615             p_in_param_name3 => 'p_qty',
10616             p_in_param_value3 => p_qty,
10617             p_in_param_name4 => 'p_uom_code',
10618             p_in_param_value4 => p_uom_code,
10619             p_in_param_name5 => 'x_2ary_uom_code',
10620             p_in_param_value5 => x_2ary_uom_code,
10621             p_in_param_name6 => NULL,
10622             p_in_param_value6 => NULL,
10623             p_in_param_name7 => NULL,
10624             p_in_param_value7 => NULL,
10625             p_in_param_name8 => NULL,
10626             p_in_param_value8 => NULL,
10627             p_in_param_name9 => NULL,
10628             p_in_param_value9 => NULL,
10629             p_in_param_name10 => NULL,
10630             p_in_param_value10 => NULL) ;
10631         x_2ary_qty := INL_LANDEDCOST_PVT.Converted_Qty (
10632             p_organization_id => p_organization_id,
10633             p_inventory_item_id => p_inventory_item_id,
10634             p_qty => p_qty,
10635             p_from_uom_code => p_uom_code,
10636             P_to_uom_code => x_2ary_uom_code) ;
10637 
10638         INL_LOGGING_PVT.Log_Variable (
10639             p_module_name  => g_module_name,
10640             p_procedure_name => l_api_name,
10641             p_var_name => 'x_2ary_qty',
10642             p_var_value => x_2ary_qty) ;
10643     END IF;
10644 
10645     -- Standard check of p_commit.
10646     IF FND_API.To_Boolean (p_commit) THEN
10647         COMMIT WORK;
10648     END IF;
10649     -- Standard call to get message count and if count is 1, get message info.
10650     FND_MSG_PUB.Count_And_Get(p_encoded => L_FND_FALSE,
10651                               p_count => x_msg_count,
10652                               p_data => x_msg_data) ;
10653     INL_LOGGING_PVT.Log_EndProc(p_module_name => g_module_name,
10654                                 p_procedure_name => l_api_name) ;
10655 EXCEPTION
10656 WHEN L_FND_EXC_ERROR THEN
10657     INL_LOGGING_PVT.Log_ExpecError (
10658         p_module_name => g_module_name,
10659         p_procedure_name => l_api_name) ;
10660     x_return_status := L_FND_RET_STS_ERROR;
10661     ROLLBACK TO Get_2aryQty_PVT;
10662 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
10663     INL_LOGGING_PVT.Log_UnexpecError (
10664         p_module_name => g_module_name,
10665         p_procedure_name => l_api_name) ;
10666     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
10667     ROLLBACK TO Get_2aryQty_PVT;
10668 WHEN OTHERS THEN
10669     INL_LOGGING_PVT.Log_UnexpecError (
10670         p_module_name => g_module_name,
10671         p_procedure_name => l_api_name) ;
10672     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
10673     ROLLBACK TO Get_2aryQty_PVT;
10674     IF FND_MSG_PUB.Check_Msg_Level (
10675         p_message_level => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
10676     ) THEN
10677         FND_MSG_PUB.Add_Exc_Msg (
10678             p_pkg_name        => g_pkg_name,
10679             p_procedure_name => l_api_name) ;
10680     END IF;
10681 END Get_2aryQty;
10682 -- END Bug 13914863
10683 
10684 
10685 -- API name   : Get_1ary2aryQty
10686 -- Type       : Private
10687 -- Function   : Get    uom_class, uom_code, qty for 1ary and 2ary UOM
10688 --
10689 -- Pre-reqs   : None
10690 -- Parameters :
10691 -- IN         : p_api_version            IN NUMBER   Required
10692 --              p_init_msg_list          IN VARCHAR2 Optional  Default = L_FND_FALSE
10693 --              p_commit                 IN VARCHAR2 Optional  Default = L_FND_FALSE
10694 --              p_inventory_item_id      IN NUMBER
10695 --              p_organization_id        IN NUMBER
10696 --              p_uom_code               IN VARCHAR2
10697 --              p_qty                    IN NUMBER
10698 -- OUT        :
10699 --              x_1ary_uom_code         OUT NOCOPY VARCHAR2
10700 --              x_1ary_qty              OUT NOCOPY NUMBER,
10701 --              x_2ary_uom_code         OUT NOCOPY VARCHAR2
10702 --              x_2ary_qty              OUT NOCOPY NUMBER,
10703 --              x_return_status         OUT NOCOPY VARCHAR2
10704 --              x_msg_count             OUT NOCOPY NUMBER
10705 --              x_msg_data              OUT NOCOPY VARCHAR2
10706 --
10707 --
10708 -- Version    : Current version 1.0
10709 --
10710 -- Notes      :
10711 PROCEDURE Get_1ary2aryQty (
10712         p_api_version       IN NUMBER,
10713         p_init_msg_list     IN VARCHAR2 := L_FND_FALSE,
10714         p_commit            IN VARCHAR2 := L_FND_FALSE,
10715         p_inventory_item_id IN NUMBER,
10716         p_organization_id   IN NUMBER,
10717         p_uom_code          IN VARCHAR2,
10718         p_qty               IN NUMBER,
10719         x_1ary_uom_code OUT NOCOPY VARCHAR2,
10720         x_1ary_qty OUT NOCOPY      NUMBER,
10721         x_2ary_uom_code OUT NOCOPY VARCHAR2,
10722         x_2ary_qty OUT NOCOPY      NUMBER,
10723         x_return_status OUT NOCOPY VARCHAR2,
10724         x_msg_count OUT NOCOPY     NUMBER,
10725         x_msg_data OUT NOCOPY      VARCHAR2
10726 ) IS
10727     l_debug_info  VARCHAR2 (240) ;
10728     l_api_name    CONSTANT VARCHAR2 (30) := 'Get_1ary2aryQty';
10729     l_api_version CONSTANT NUMBER := 1.0;
10730     l_msg_data VARCHAR2 (200);
10731     l_msg_count NUMBER;
10732     l_return_status VARCHAR2 (1);
10733     l_1ary_uom_code VARCHAR2(3);
10734     l_1ary_qty NUMBER;
10735     l_2ary_uom_code VARCHAR2(3);
10736     l_2ary_qty NUMBER;
10737 BEGIN
10738     INL_LOGGING_PVT.Log_BeginProc (
10739         p_module_name => g_module_name,
10740         p_procedure_name => l_api_name) ;
10741     -- Standard Start of API savepoint
10742     SAVEPOINT Get_1ary2aryQty_PVT;
10743     -- Initialize message list if p_init_msg_list is set to TRUE.
10744     IF FND_API.to_Boolean (p_init_msg_list) THEN
10745         FND_MSG_PUB.initialize;
10746     END IF;
10747     -- Check for call compatibility.
10748     IF NOT FND_API.Compatible_API_Call (
10749             p_current_version_number => l_api_version,
10750             p_caller_version_number => p_api_version,
10751             p_api_name => l_api_name,
10752             p_pkg_name => g_pkg_name
10753     ) THEN
10754         RAISE L_FND_EXC_UNEXPECTED_ERROR;
10755     END IF;
10756 
10757     -- Initialize return status to SUCCESS
10758     x_return_status:= L_FND_RET_STS_SUCCESS;
10759 
10760     -- START Bug 13914863
10761     l_debug_info  := 'Call to Get_1aryQty API';
10762     INL_LOGGING_PVT.Log_Statement(p_module_name => g_module_name,
10763                                   p_procedure_name => l_api_name,
10764                                   p_debug_info => l_debug_info);
10765     Get_1aryQty(p_api_version       => 1.0,
10766                 p_init_msg_list     => L_FND_FALSE,
10767                 p_commit            => L_FND_FALSE,
10768                 p_inventory_item_id => p_inventory_item_id,
10769                 p_organization_id   => p_organization_id,
10770                 p_uom_code          => p_uom_code,
10771                 p_qty               => p_qty,
10772                 x_1ary_uom_code     => l_1ary_uom_code,
10773                 x_1ary_qty          => l_1ary_qty,
10774                 x_return_status     => l_return_status,
10775                 x_msg_count         => l_msg_count,
10776                 x_msg_data          => l_msg_data);
10777 
10778     IF l_return_status = L_FND_RET_STS_ERROR THEN
10779         RAISE L_FND_EXC_ERROR;
10780     ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
10781         RAISE L_FND_EXC_UNEXPECTED_ERROR;
10782     END IF;
10783 
10784     x_1ary_uom_code := l_1ary_uom_code;
10785     x_1ary_qty := l_1ary_qty;
10786 
10787     INL_LOGGING_PVT.Log_Variable (
10788         p_module_name => g_module_name,
10789         p_procedure_name => l_api_name,
10790         p_var_name => 'x_1ary_uom_code',
10791         p_var_value => x_1ary_uom_code) ;
10792     INL_LOGGING_PVT.Log_Variable (
10793         p_module_name => g_module_name,
10794         p_procedure_name => l_api_name,
10795         p_var_name => 'x_1ary_qty',
10796         p_var_value => x_1ary_qty) ;
10797 
10798     l_debug_info  := 'Call to Get_2aryQty API';
10799     INL_LOGGING_PVT.Log_Statement(p_module_name => g_module_name,
10800                                   p_procedure_name => l_api_name,
10801                                   p_debug_info => l_debug_info);
10802 
10803     Get_2aryQty(p_api_version       => 1.0,
10804                 p_init_msg_list     => L_FND_FALSE,
10805                 p_commit            => L_FND_FALSE,
10806                 p_inventory_item_id => p_inventory_item_id,
10807                 p_organization_id   => p_organization_id,
10808                 p_uom_code          => p_uom_code,
10809                 p_qty               => p_qty,
10810                 x_2ary_uom_code     => l_2ary_uom_code,
10811                 x_2ary_qty          => l_2ary_qty,
10812                 x_return_status     => l_return_status,
10813                 x_msg_count         => l_msg_count,
10814                 x_msg_data          => l_msg_data);
10815 
10816     IF l_return_status = L_FND_RET_STS_ERROR THEN
10817         RAISE L_FND_EXC_ERROR;
10818     ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
10819         RAISE L_FND_EXC_UNEXPECTED_ERROR;
10820     END IF;
10821 
10822     x_2ary_uom_code := l_2ary_uom_code;
10823     x_2ary_qty := l_2ary_qty;
10824 
10825     INL_LOGGING_PVT.Log_Variable (
10826         p_module_name => g_module_name,
10827         p_procedure_name => l_api_name,
10828         p_var_name => 'x_2ary_uom_code',
10829         p_var_value => x_2ary_uom_code) ;
10830     INL_LOGGING_PVT.Log_Variable (
10831         p_module_name => g_module_name,
10832         p_procedure_name => l_api_name,
10833         p_var_name => 'x_2ary_qty',
10834         p_var_value => x_2ary_qty) ;
10835 
10836     -- END Bug 13914863
10837 
10838     /*
10839     --
10840     -- Initialize return status to SUCCESS
10841     --
10842     x_return_status:= L_FND_RET_STS_SUCCESS;
10843     l_debug_info  := 'Getting 1ary and 2ary UOM Code from MTL tables';
10844     INL_LOGGING_PVT.Log_Statement (
10845         p_module_name => g_module_name,
10846         p_procedure_name => l_api_name,
10847         p_debug_info => l_debug_info
10848     ) ;
10849      SELECT msi.primary_uom_code,
10850         msi.secondary_uom_code
10851        INTO x_1ary_uom_code,
10852         x_2ary_uom_code
10853        FROM mtl_system_items_vl msi
10854       WHERE msi.inventory_item_id = p_inventory_item_id
10855         AND msi.organization_id   = p_organization_id;
10856     l_debug_info                                    := 'Have gotten from mtl_system_items_vl:';
10857     INL_LOGGING_PVT.Log_Statement (
10858         p_module_name => g_module_name,
10859         p_procedure_name => l_api_name,
10860         p_debug_info => l_debug_info
10861     ) ;
10862 
10863     INL_LOGGING_PVT.Log_Variable (
10864         p_module_name      => g_module_name,
10865         p_procedure_name => l_api_name,
10866         p_var_name => 'x_1ary_uom_code',
10867         p_var_value => x_1ary_uom_code) ;
10868 
10869     INL_LOGGING_PVT.Log_Variable (
10870         p_module_name      => g_module_name,
10871         p_procedure_name => l_api_name,
10872         p_var_name => 'x_2ary_uom_code',
10873         p_var_value => x_2ary_uom_code) ;
10874     IF x_1ary_uom_code                              IS NOT NULL THEN
10875         l_debug_info                                := 'Doing the 1ary UOM convertion';
10876         INL_LOGGING_PVT.Log_Statement (
10877             p_module_name => g_module_name,
10878             p_procedure_name => l_api_name,
10879             p_debug_info => l_debug_info
10880         ) ;
10881         INL_LOGGING_PVT.Log_APICallIn (
10882             p_module_name => g_module_name,
10883             p_procedure_name => l_api_name,
10884             p_call_api_name => 'INL_LANDEDCOST_PVT.Converted_Qty',
10885             p_in_param_name1 => 'p_organization_id',
10886             p_in_param_value1 => p_organization_id,
10887             p_in_param_name2 => 'p_inventory_item_id',
10888             p_in_param_value2 => p_inventory_item_id,
10889             p_in_param_name3 => 'p_qty',
10890             p_in_param_value3 => p_qty,
10891             p_in_param_name4 => 'p_uom_code',
10892             p_in_param_value4 => p_uom_code,
10893             p_in_param_name5 => 'x_1ary_uom_code',
10894             p_in_param_value5 => x_1ary_uom_code,
10895             p_in_param_name6 => NULL,
10896             p_in_param_value6 => NULL,
10897             p_in_param_name7 => NULL,
10898             p_in_param_value7 => NULL,
10899             p_in_param_name8 => NULL,
10900             p_in_param_value8 => NULL,
10901             p_in_param_name9 => NULL,
10902             p_in_param_value9 => NULL,
10903             p_in_param_name10 => NULL,
10904             p_in_param_value10 => NULL) ;
10905         x_1ary_qty := INL_LANDEDCOST_PVT.Converted_Qty (
10906                             p_organization_id => p_organization_id,
10907                             p_inventory_item_id => p_inventory_item_id,
10908                             p_qty => p_qty,
10909                             p_from_uom_code => p_uom_code,
10910                             P_to_uom_code => x_1ary_uom_code
10911                         ) ;
10912         l_debug_info  := 'x_1ary_qty';
10913         INL_LOGGING_PVT.Log_Variable (
10914             p_module_name  => g_module_name,
10915             p_procedure_name => l_api_name,
10916             p_var_name => 'x_1ary_qty',
10917             p_var_value => x_1ary_qty) ;
10918     END IF;
10919     --==========
10920     IF x_2ary_uom_code IS NOT NULL THEN
10921         l_debug_info := 'Doing the 2ary UOM convertion';
10922         INL_LOGGING_PVT.Log_Statement (
10923             p_module_name => g_module_name,
10924             p_procedure_name => l_api_name,
10925             p_debug_info => l_debug_info
10926         ) ;
10927         INL_LOGGING_PVT.Log_APICallIn (
10928             p_module_name => g_module_name,
10929             p_procedure_name => l_api_name,
10930             p_call_api_name => 'INL_LANDEDCOST_PVT.Converted_Qty',
10931             p_in_param_name1 => 'p_organization_id',
10932             p_in_param_value1 => p_organization_id,
10933             p_in_param_name2 => 'p_inventory_item_id',
10934             p_in_param_value2 => p_inventory_item_id,
10935             p_in_param_name3 => 'p_qty',
10936             p_in_param_value3 => p_qty,
10937             p_in_param_name4 => 'p_uom_code',
10938             p_in_param_value4 => p_uom_code,
10939             p_in_param_name5 => 'x_2ary_uom_code',
10940             p_in_param_value5 => x_2ary_uom_code,
10941             p_in_param_name6 => NULL,
10942             p_in_param_value6 => NULL,
10943             p_in_param_name7 => NULL,
10944             p_in_param_value7 => NULL,
10945             p_in_param_name8 => NULL,
10946             p_in_param_value8 => NULL,
10947             p_in_param_name9 => NULL,
10948             p_in_param_value9 => NULL,
10949             p_in_param_name10 => NULL,
10950             p_in_param_value10 => NULL) ;
10951         x_2ary_qty := INL_LANDEDCOST_PVT.Converted_Qty (
10952             p_organization_id => p_organization_id,
10953             p_inventory_item_id => p_inventory_item_id,
10954             p_qty => p_qty,
10955             p_from_uom_code => p_uom_code,
10956             P_to_uom_code => x_2ary_uom_code) ;
10957 
10958         INL_LOGGING_PVT.Log_Variable (
10959             p_module_name  => g_module_name,
10960             p_procedure_name => l_api_name,
10961             p_var_name => 'x_2ary_qty',
10962             p_var_value => x_2ary_qty) ;
10963     END IF;
10964     --==========
10965     */
10966     -- Standard check of p_commit.
10967     IF FND_API.To_Boolean (p_commit) THEN
10968         COMMIT WORK;
10969     END IF;
10970     -- Standard call to get message count and if count is 1, get message info.
10971     FND_MSG_PUB.Count_And_Get (
10972         p_encoded        => L_FND_FALSE,
10973         p_count => x_msg_count,
10974         p_data => x_msg_data) ;
10975     INL_LOGGING_PVT.Log_EndProc (
10976         p_module_name => g_module_name,
10977         p_procedure_name => l_api_name) ;
10978 EXCEPTION
10979 WHEN L_FND_EXC_ERROR THEN
10980     INL_LOGGING_PVT.Log_ExpecError (
10981         p_module_name => g_module_name,
10982         p_procedure_name => l_api_name) ;
10983     x_return_status := L_FND_RET_STS_ERROR;
10984     ROLLBACK TO Get_1ary2aryQty_PVT;
10985 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
10986     INL_LOGGING_PVT.Log_UnexpecError (
10987         p_module_name => g_module_name,
10988         p_procedure_name => l_api_name) ;
10989     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
10990     ROLLBACK TO Get_1ary2aryQty_PVT;
10991 WHEN OTHERS THEN
10992     INL_LOGGING_PVT.Log_UnexpecError (
10993         p_module_name => g_module_name,
10994         p_procedure_name => l_api_name) ;
10995     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
10996     ROLLBACK TO Get_1ary2aryQty_PVT;
10997     IF FND_MSG_PUB.Check_Msg_Level (
10998         p_message_level => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
10999     ) THEN
11000         FND_MSG_PUB.Add_Exc_Msg (
11001             p_pkg_name        => g_pkg_name,
11002             p_procedure_name => l_api_name) ;
11003     END IF;
11004 END Get_1ary2aryQty;
11005 -- Utility name   : Get_SrcAvailableQty
11006 -- Type       : Public
11007 -- Function   : Returns the available quantity for a given PLL
11008 -- Pre-reqs   : None
11009 -- Parameters :
11010 -- IN         : p_ship_line_src_type_code IN VARCHAR2
11011 --              p_parent_id               IN NUMBER
11012 --
11013 -- Version    : Current version 1.0
11014 --
11015 -- Notes      :
11016 FUNCTION Get_SrcAvailableQty(
11017     p_ship_line_src_type_code IN VARCHAR2,
11018     p_parent_id               IN NUMBER
11019 )  RETURN NUMBER IS
11020     l_program_name CONSTANT VARCHAR2(30) := 'Get_SrcAvailableQty';
11021     l_debug_info VARCHAR2(200);
11022     l_return_status VARCHAR2(1);
11023     l_msg_count NUMBER;
11024     l_msg_data VARCHAR2(2000);
11025     l_available_qty NUMBER;
11026     l_tolerable_quantity NUMBER;
11027     l_unit_of_measure VARCHAR2(30);
11028 BEGIN
11029     -- Standard Beginning of Procedure/Function Logging
11030     INL_LOGGING_PVT.Log_BeginProc (
11031         p_module_name => g_module_name,
11032         p_procedure_name => l_program_name) ;
11033     -- Logging variables
11034     INL_LOGGING_PVT.Log_Variable (
11035         p_module_name => g_module_name,
11036         p_procedure_name => l_program_name,
11037         p_var_name => 'p_ship_line_src_type_code',
11038         p_var_value => p_ship_line_src_type_code
11039     ) ;
11040     INL_LOGGING_PVT.Log_Variable (
11041         p_module_name => g_module_name,
11042         p_procedure_name => l_program_name,
11043         p_var_name => 'p_parent_id',
11044         p_var_value => p_parent_id) ;
11045     l_debug_info := 'Call INL_SHIPMENT_PVT.Get_AvailableQty';
11046     INL_LOGGING_PVT.Log_Statement (
11047         p_module_name => g_module_name,
11048         p_procedure_name => l_program_name,
11049         p_debug_info => l_debug_info) ;
11050     INL_SHIPMENT_PVT.Get_AvailableQty(
11051         p_api_version        => 1.0,
11052         p_init_msg_list      => L_FND_FALSE,
11053         p_commit             => L_FND_FALSE,
11054         p_ship_line_src_code => p_ship_line_src_type_code,
11055         p_parent_id          => p_parent_id,
11056         p_available_quantity => l_available_qty,
11057         p_tolerable_quantity => l_tolerable_quantity,
11058         p_unit_of_measure    => l_unit_of_measure,
11059         x_return_status      => l_return_status,
11060         x_msg_count          => l_msg_count,
11061         x_msg_data           => l_msg_data);
11062     INL_LOGGING_PVT.Log_Variable (
11063         p_module_name => g_module_name,
11064         p_procedure_name => l_program_name,
11065         p_var_name => 'l_available_qty',
11066         p_var_value => l_available_qty) ;
11067     INL_LOGGING_PVT.Log_Variable (
11068         p_module_name => g_module_name,
11069         p_procedure_name => l_program_name,
11070         p_var_name => 'l_tolerable_quantity',
11071         p_var_value => l_tolerable_quantity) ;
11072     INL_LOGGING_PVT.Log_Variable (
11073         p_module_name => g_module_name,
11074         p_procedure_name => l_program_name,
11075         p_var_name => 'l_unit_of_measure',
11076         p_var_value => l_unit_of_measure) ;
11077     -- Standard End of Procedure/Function Logging
11078     INL_LOGGING_PVT.Log_EndProc (
11079         p_module_name => g_module_name,
11080         p_procedure_name => l_program_name) ;
11081     RETURN NVL(l_available_qty,0);
11082 END Get_SrcAvailableQty;
11083 
11084 -- SCM-051
11085 -- API name   : Adjust_ELCLines
11086 -- Type       : Private
11087 -- Function   : Manages the Creation of Adjustment Lines for Shipment Lines and Charge Lines
11088 -- Pre-reqs   : None
11089 -- Parameters :
11090 -- IN         : p_api_version IN NUMBER   Required
11091 --              p_init_msg_list IN VARCHAR2 Optional  Default = L_FND_FALSE
11092 --              p_commit IN VARCHAR2 Optional  Default = L_FND_FALSE
11093 --              p_ship_header_id IN  NUMBER,
11094 -- OUT          x_return_status OUT NOCOPY VARCHAR2
11095 --              x_msg_count OUT NOCOPY NUMBER
11096 --              x_msg_data OUT NOCOPY VARCHAR2
11097 --
11098 -- Version    : Current version 1.0
11099 --
11100 -- Notes      :
11101 PROCEDURE Adjust_ELCLines(p_api_version IN NUMBER,
11102                           p_init_msg_list IN VARCHAR2 := L_FND_FALSE,
11103                           p_commit IN VARCHAR2 := L_FND_FALSE,
11104                           p_ship_header_id IN NUMBER,
11105                           x_return_status OUT NOCOPY VARCHAR2,
11106                           x_msg_count OUT NOCOPY NUMBER,
11107                           x_msg_data OUT NOCOPY VARCHAR2
11108 ) IS
11109     l_program_name     CONSTANT VARCHAR2(30) := 'Adjust_ELCLines';
11110     l_api_version      CONSTANT NUMBER        := 1.0;
11111     l_return_status    VARCHAR2(1) ;
11112     l_msg_count        NUMBER;
11113     l_msg_data         VARCHAR2(2000);
11114     l_debug_info       VARCHAR2(200);
11115 
11116     l_count_assoc_changed NUMBER;
11117     l_count_charge_changed NUMBER;
11118     l_exist_associations NUMBER;
11119     l_adjustment_num NUMBER;
11120     l_charge_line_id NUMBER;
11121     l_association_id NUMBER;
11122     l_charge_line_num NUMBER;
11123     l_primary_unit_price NUMBER;
11124     l_secondary_unit_price NUMBER;
11125 
11126     -- Get ELC Adjustments for Shipment Lines
11127     CURSOR c_elc_adj_shiplines IS
11128       SELECT sl.ship_line_id, sl.new_txn_unit_price,
11129              sl.primary_qty, sl.secondary_qty, sl.txn_qty,
11130              sl.primary_uom_code, sl.secondary_uom_code
11131       FROM inl_ship_headers_all sh,
11132            inl_adj_ship_lines_v sl
11133       WHERE(sl.new_txn_unit_price IS NOT NULL
11134       OR sl.new_currency_conversion_type IS NOT NULL
11135       OR sl.new_currency_conversion_date IS NOT NULL
11136       OR sl.new_currency_conversion_rate IS NOT NULL)
11137       AND sl.ship_header_id = sh.ship_header_id
11138       AND sh.pending_update_flag = 'Y'
11139       AND sh.ship_header_id = p_ship_header_id;
11140 
11141     TYPE elc_adj_shiplines IS TABLE OF c_elc_adj_shiplines%ROWTYPE;
11142     l_elc_adj_shiplines elc_adj_shiplines;
11143 
11144     -- Get ELC Adjustments for Charge Lines
11145     CURSOR c_elc_adj_chlines IS
11146       SELECT DISTINCT charge_line_id
11147       FROM inl_ship_headers_all sh,
11148            inl_adj_charge_lines_v cl,
11149            inl_adj_associations_v a
11150       WHERE sh.ship_header_id = a.ship_header_id
11151       AND  a.from_parent_table_id = cl.charge_line_id
11152       AND sh.pending_update_flag = 'Y'
11153       AND a.from_parent_table_name = 'INL_CHARGE_LINES'
11154       AND a.ship_header_id = p_ship_header_id
11155       AND (cl.adjustment_type_flag IS NULL
11156       OR   cl.adjustment_type_flag <> 'Z')
11157       ORDER BY charge_line_id;
11158 
11159     TYPE elc_adj_chlines IS TABLE OF c_elc_adj_chlines%ROWTYPE;
11160     l_elc_adj_chlines elc_adj_chlines;
11161 
11162   -- ORA-00054 is the resource busy exception, which is raised when trying
11163   -- to lock a row that is already locked by another session.
11164   RESOURCE_BUSY EXCEPTION;
11165   PRAGMA EXCEPTION_INIT(RESOURCE_BUSY, -00054);
11166 
11167 BEGIN
11168 
11169     -- Standard Beginning of Procedure/Function Logging
11170     INL_LOGGING_PVT.Log_BeginProc(p_module_name => g_module_name,
11171                                   p_procedure_name => l_program_name) ;
11172     -- Standard Start of API savepoint
11173     SAVEPOINT Adjust_ELCLines_PVT;
11174     -- Initialize message list if p_init_msg_list is set to TRUE.
11175     IF FND_API.to_Boolean (p_init_msg_list) THEN
11176         FND_MSG_PUB.initialize;
11177     END IF;
11178     -- Check for call compatibility.
11179     IF NOT FND_API.Compatible_API_Call(p_current_version_number => l_api_version,
11180                                        p_caller_version_number => p_api_version,
11181                                        p_api_name => l_program_name,
11182                                        p_pkg_name => g_pkg_name) THEN
11183         RAISE L_FND_EXC_UNEXPECTED_ERROR;
11184     END IF;
11185     --  Initialize API return status to success
11186     x_return_status := L_FND_RET_STS_SUCCESS;
11187 
11188     INL_LOGGING_PVT.Log_Variable(p_module_name => g_module_name,
11189                                  p_procedure_name => l_program_name,
11190                                  p_var_name => 'p_ship_header_id',
11191                                  p_var_value => p_ship_header_id);
11192 
11193     l_debug_info := 'Get next adjustment number';
11194     INL_LOGGING_PVT.Log_Statement (p_module_name => g_module_name,
11195                                    p_procedure_name => l_program_name,
11196                                    p_debug_info => l_debug_info);
11197 
11198     SELECT (ABS(adjustment_num) +1) *-1
11199     INTO l_adjustment_num
11200     FROM inl_ship_headers_all sh
11201     WHERE sh.ship_header_id = p_ship_header_id FOR UPDATE NOWAIT;
11202 
11203     INL_LOGGING_PVT.Log_Variable(p_module_name => g_module_name,
11204                                  p_procedure_name => l_program_name,
11205                                  p_var_name => 'l_adjustment_num',
11206                                  p_var_value => l_adjustment_num);
11207 
11208     -- Fetch ELC Adjusted Shipment Lines
11209     OPEN c_elc_adj_shiplines;
11210     FETCH c_elc_adj_shiplines BULK COLLECT INTO l_elc_adj_shiplines;
11211     CLOSE c_elc_adj_shiplines;
11212 
11213     -- Exist ship lines to be ELC adjusted
11214     IF NVL (l_elc_adj_shiplines.LAST, 0) > 0 THEN
11215         FOR i IN NVL(l_elc_adj_shiplines.FIRST, 0)..NVL(l_elc_adj_shiplines.LAST, 0)
11216         LOOP
11217             l_primary_unit_price := NULL;
11218             l_secondary_unit_price := NULL;
11219             IF l_elc_adj_shiplines(i).new_txn_unit_price IS NOT NULL THEN -- Price changed
11220                 IF l_elc_adj_shiplines(i).primary_uom_code IS NOT NULL THEN
11221                    l_primary_unit_price := (l_elc_adj_shiplines(i).txn_qty * l_elc_adj_shiplines(i).new_txn_unit_price) / l_elc_adj_shiplines(i).primary_qty;
11222                 END IF;
11223 
11224                 IF l_elc_adj_shiplines(i).secondary_uom_code IS NOT NULL THEN
11225                    l_secondary_unit_price := (l_elc_adj_shiplines(i).txn_qty * l_elc_adj_shiplines(i).new_txn_unit_price) / l_elc_adj_shiplines(i).secondary_qty;
11226                 END IF;
11227             END IF;
11228 
11229             INSERT INTO inl_ship_lines(
11230                                ship_header_id, -- 01
11231                                ship_line_group_id, -- 02
11232                                ship_line_id, -- 03
11233                                ship_line_num,  -- 04
11234                                ship_line_type_id,  -- 05
11235                                ship_line_src_type_code, -- 06
11236                                ship_line_source_id, -- 07
11237                                parent_ship_line_id, -- 08
11238                                adjustment_num, -- 09
11239                                match_id, -- 10
11240                                currency_code, -- 11
11241                                currency_conversion_type, -- 12
11242                                currency_conversion_date, -- 13
11243                                currency_conversion_rate, -- 14
11244                                inventory_item_id, -- 15
11245                                txn_qty, -- 16
11246                                txn_uom_code, -- 17
11247                                txn_unit_price, -- 18
11248                                primary_qty, -- 19
11249                                primary_uom_code, -- 20
11250                                primary_unit_price, -- 21
11251                                secondary_qty, -- 22
11252                                secondary_uom_code, -- 23
11253                                secondary_unit_price, -- 24
11254                                landed_cost_flag, -- 25
11255                                allocation_enabled_flag, -- 26
11256                                trx_business_category, -- 27
11257                                intended_use, -- 28
11258                                product_fiscal_class, -- 29
11259                                product_category, -- 30
11260                                product_type, -- 31
11261                                user_def_fiscal_class, -- 32
11262                                tax_classification_code, -- 33
11263                                assessable_value, -- 34
11264                                tax_already_calculated_flag, -- 35
11265                                ship_from_party_id, -- 36
11266                                ship_from_party_site_id, -- 37
11267                                ship_to_organization_id, -- 38
11268                                ship_to_location_id, -- 39
11269                                bill_from_party_id, -- 40
11270                                bill_from_party_site_id, -- 41
11271                                bill_to_organization_id, -- 42
11272                                bill_to_location_id, -- 43
11273                                poa_party_id, -- 44
11274                                poa_party_site_id, -- 45
11275                                poo_organization_id, -- 46
11276                                poo_location_id, -- 47
11277                                org_id,-- 48
11278                                ship_line_int_id, -- 49
11279                                interface_source_table, -- 50
11280                                interface_source_line_id, -- 51
11281                                created_by, -- 52
11282                                creation_date, -- 53
11283                                last_updated_by, -- 54
11284                                last_update_date, -- 55
11285                                last_update_login, -- 56
11286                                program_id, -- 57
11287                                program_update_date, -- 58
11288                                program_application_id, -- 59
11289                                request_id, -- 60
11290                                attribute_category, -- 61
11291                                attribute1, -- 62
11292                                attribute2, -- 63
11293                                attribute3, -- 64
11294                                attribute4, -- 65
11295                                attribute5, -- 66
11296                                attribute6, -- 67
11297                                attribute7, -- 68
11298                                attribute8, -- 69
11299                                attribute9, -- 70
11300                                attribute10, -- 71
11301                                attribute11, -- 72
11302                                attribute12, -- 73
11303                                attribute13, -- 74
11304                                attribute14, -- 75
11305                                attribute15, -- 76
11306                                nrq_zero_exception_flag, -- 77
11307                                new_txn_unit_price, -- 78
11308                                new_currency_conversion_type, -- 79
11309                                new_currency_conversion_date, -- 80
11310                                new_currency_conversion_rate -- 81
11311                              )
11312                        (SELECT p_ship_header_id, -- 01
11313                                sl.ship_line_group_id, -- 02
11314                                inl_ship_lines_all_s.nextval, -- 03
11315                                sl.ship_line_num, -- 04
11316                                sl.ship_line_type_id, -- 05
11317                                sl.ship_line_src_type_code, -- 06
11318                                sl.ship_line_source_id, -- 07
11319                                NVL(parent_ship_line_id, sl.ship_line_id), -- 08
11320                                l_adjustment_num, -- 09
11321                                sl.match_id, -- 10
11322                                sl.currency_code, -- 11
11323                                NVL(sl.new_currency_conversion_type, sl.currency_conversion_type), -- 12
11324                                NVL(sl.new_currency_conversion_date, sl.currency_conversion_date), -- 13
11325                                NVL(sl.new_currency_conversion_rate, sl.currency_conversion_rate), -- 14
11326                                sl.inventory_item_id, -- 15
11327                                sl.txn_qty, -- 16
11328                                sl.txn_uom_code, -- 17
11329                                NVL(sl.new_txn_unit_price, sl.txn_unit_price), -- 18
11330                                sl.primary_qty, -- 19
11331                                sl.primary_uom_code, -- 20
11332                                NVL(l_primary_unit_price,sl.primary_unit_price), -- 21
11333                                sl.secondary_qty, -- 22
11334                                sl.secondary_uom_code, -- 23
11335                                NVL(l_secondary_unit_price,sl.secondary_unit_price), -- 24
11336                                sl.landed_cost_flag, -- 25
11337                                sl.allocation_enabled_flag, -- 26
11338                                sl.trx_business_category, -- 27
11339                                sl.intended_use, -- 28
11340                                sl.product_fiscal_class, -- 29
11341                                sl.product_category, -- 30
11342                                sl.product_type, -- 31
11343                                sl.user_def_fiscal_class, -- 32
11344                                sl.tax_classification_code, -- 33
11345                                sl.assessable_value, -- 34
11346                                sl.tax_already_calculated_flag, -- 35
11347                                sl.ship_from_party_id, -- 36
11348                                sl.ship_from_party_site_id, -- 37
11349                                sl.ship_to_organization_id, -- 38
11350                                sl.ship_to_location_id, -- 39
11351                                sl.bill_from_party_id, -- 40
11352                                sl.bill_from_party_site_id, -- 41
11353                                sl.bill_to_organization_id, -- 42
11354                                sl.bill_to_location_id, -- 43
11355                                sl.poa_party_id, -- 44
11356                                sl.poa_party_site_id, -- 45
11357                                sl.poo_organization_id, -- 46
11358                                sl.poo_location_id, -- 47
11359                                sl.org_id, -- 48
11360                                sl.ship_line_int_id, -- 49
11361                                sl.interface_source_table, -- 50
11362                                sl.interface_source_line_id, -- 51
11363                                l_fnd_user_id, -- 52
11364                                SYSDATE, -- 53
11365                                l_fnd_user_id, -- 54
11366                                SYSDATE, -- 55
11367                                l_fnd_login_id, -- 56
11368                                sl.program_id, -- 57
11369                                sl.program_update_date, -- 58
11370                                sl.program_application_id, -- 59
11371                                sl.request_id, -- 60
11372                                sl.attribute_category, -- 61
11373                                sl.attribute1, -- 62
11374                                sl.attribute2, -- 63
11375                                sl.attribute3, -- 64
11376                                sl.attribute4, -- 65
11377                                sl.attribute5, -- 66
11378                                sl.attribute6, -- 67
11379                                sl.attribute7, -- 68
11380                                sl.attribute8, -- 69
11381                                sl.attribute9, -- 70
11382                                sl.attribute10, -- 71
11383                                sl.attribute11, -- 72
11384                                sl.attribute12, -- 73
11385                                sl.attribute13, -- 74
11386                                sl.attribute14, -- 75
11387                                sl.attribute15, -- 76
11388                                sl.nrq_zero_exception_flag, -- 77
11389                                NULL, -- 78
11390                                NULL, -- 80
11391                                NULL, -- 81
11392                                NULL
11393                         FROM inl_adj_ship_lines_v sl
11394                         WHERE sl.ship_line_id = l_elc_adj_shiplines(i).ship_line_id);
11395         END LOOP;
11396     END IF;
11397 
11398     -- Fetch ELC Adjusted Charge Lines
11399     OPEN c_elc_adj_chlines;
11400     FETCH c_elc_adj_chlines BULK COLLECT INTO l_elc_adj_chlines;
11401     CLOSE c_elc_adj_chlines;
11402 
11403     -- Exist charge lines to be ELC adjusted
11404     IF NVL (l_elc_adj_chlines.LAST, 0) > 0 THEN
11405         FOR i IN NVL(l_elc_adj_chlines.FIRST, 0)..NVL(l_elc_adj_chlines.LAST, 0)
11406         LOOP
11407             -- Check if associations changed
11408             SELECT COUNT(1)
11409             INTO l_count_assoc_changed
11410             FROM inl_adj_associations_v a
11411             WHERE a.from_parent_table_name = 'INL_CHARGE_LINES'
11412             AND a.from_parent_table_id = l_elc_adj_chlines(i).charge_line_id
11413             AND a.adjustment_type_flag IS NOT NULL
11414             AND a.ship_header_id = p_ship_header_id;
11415 
11416             INL_LOGGING_PVT.Log_Variable(p_module_name => g_module_name,
11417                                          p_procedure_name => l_program_name,
11418                                          p_var_name => 'l_count_assoc_changed',
11419                                          p_var_value => l_count_assoc_changed);
11420 
11421             IF NVL(l_count_assoc_changed,0) > 0 THEN -- associations changed
11422                 -- Check if charge contains associations
11423                 SELECT COUNT(1)
11424                 INTO l_exist_associations
11425                 FROM inl_adj_associations_v a
11426                 WHERE a.from_parent_table_name = 'INL_CHARGE_LINES'
11427                 AND a.from_parent_table_id = l_elc_adj_chlines(i).charge_line_id
11428                 AND (a.adjustment_type_flag IS NULL
11429                 OR   a.adjustment_type_flag = 'A')
11430                 AND a.ship_header_id = p_ship_header_id;
11431 
11432                 INL_LOGGING_PVT.Log_Variable(p_module_name => g_module_name,
11433                                              p_procedure_name => l_program_name,
11434                                              p_var_name => 'l_exist_associations',
11435                                              p_var_value => l_exist_associations);
11436 
11437                 IF NVL(l_exist_associations, 0) > 0 THEN  -- Exist associations for charge
11438 
11439                     SELECT inl_charge_lines_s.nextval
11440                     INTO l_charge_line_id
11441                     FROM DUAL;
11442 
11443                     l_debug_info := 'Get next charge line number';
11444                     INL_LOGGING_PVT.Log_Statement(p_module_name => g_module_name,
11445                                                   p_procedure_name => l_program_name,
11446                                                   p_debug_info => l_debug_info);
11447 
11448                     SELECT NVL (MAX (cl.charge_line_num), 0) + 1
11449                     INTO l_charge_line_num
11450                     FROM inl_charge_lines cl
11451                     WHERE NVL (cl.parent_charge_line_id, cl.charge_line_id) IN(
11452                                               SELECT assoc.from_parent_table_id
11453                                               FROM inl_associations assoc
11454                                               WHERE assoc.from_parent_table_name = 'INL_CHARGE_LINES'
11455                                               AND assoc.ship_header_id = p_ship_header_id);
11456 
11457                     INL_LOGGING_PVT.Log_Variable(p_module_name => g_module_name,
11458                                                  p_procedure_name => l_program_name,
11459                                                  p_var_name => 'l_charge_line_num',
11460                                                  p_var_value => l_charge_line_num);
11461 
11462                     l_debug_info := 'Create new charge line';
11463                     INL_LOGGING_PVT.Log_Statement(p_module_name => g_module_name,
11464                                                   p_procedure_name => l_program_name,
11465                                                   p_debug_info => l_debug_info);
11466 
11467                     -- Create new charge line
11468                     INSERT INTO inl_charge_lines(charge_line_id, -- 01
11469                                                 charge_line_num, -- 02
11470                                                 charge_line_type_id, -- 03
11471                                                 landed_cost_flag, -- 04
11472                                                 update_allowed, -- 05
11473                                                 source_code, -- 06
11474                                                 parent_charge_line_id, -- 07
11475                                                 adjustment_num, -- 08
11476                                                 match_id, -- 09
11477                                                 match_amount_id, -- 10
11478                                                 charge_amt, -- 11
11479                                                 currency_code, -- 12
11480                                                 currency_conversion_type, -- 13
11481                                                 currency_conversion_date, -- 14
11482                                                 currency_conversion_rate, -- 15
11483                                                 party_id, -- 16
11484                                                 party_site_id, -- 17
11485                                                 trx_business_category, -- 18
11486                                                 intended_use, -- 19
11487                                                 product_fiscal_class, -- 20
11488                                                 product_category, -- 21
11489                                                 product_type, -- 22
11490                                                 user_def_fiscal_class, -- 23
11491                                                 tax_classification_code, -- 24
11492                                                 assessable_value, -- 25
11493                                                 tax_already_calculated_flag, -- 26
11494                                                 ship_from_party_id, -- 27
11495                                                 ship_from_party_site_id, -- 278
11496                                                 ship_to_organization_id, -- 29
11497                                                 ship_to_location_id, -- 30
11498                                                 bill_from_party_id, -- 31
11499                                                 bill_from_party_site_id, -- 32
11500                                                 bill_to_organization_id, -- 33
11501                                                 bill_to_location_id, -- 34
11502                                                 poa_party_id, -- 35
11503                                                 poa_party_site_id, -- 36
11504                                                 poo_organization_id, -- 37
11505                                                 poo_location_id, -- 38
11506                                                 created_by, -- 39
11507                                                 creation_date, -- 40
11508                                                 last_updated_by, -- 41
11509                                                 last_update_date, -- 42
11510                                                 last_update_login, -- 43
11511                                                 new_charge_amt, -- 44
11512                                                 new_currency_conversion_type, -- 45
11513                                                 new_currency_conversion_date, -- 46
11514                                                 new_currency_conversion_rate -- 47
11515                                                )
11516                                         (SELECT l_charge_line_id, -- 01
11517                                                 l_charge_line_num, -- 02
11518                                                 cl.charge_line_type_id, -- 03
11519                                                 cl.landed_cost_flag, -- 04
11520                                                 cl.update_allowed, -- 05
11521                                                 cl.source_code, -- 06
11522                                                 NULL, -- 07
11523                                                 l_adjustment_num, -- 08
11524                                                 cl.match_id, -- 09
11525                                                 cl.match_amount_id, -- 10
11526                                                 NVL(cl.new_charge_amt, cl.charge_amt), -- 11
11527                                                 cl.currency_code, -- 12
11528                                                 NVL(cl.new_currency_conversion_type, cl.currency_conversion_type), -- 13
11529                                                 NVL(cl.new_currency_conversion_date, cl.currency_conversion_date), -- 14
11530                                                 NVL(cl.new_currency_conversion_rate, cl.currency_conversion_rate), -- 15
11531                                                 cl.party_id, -- 16
11532                                                 cl.party_site_id, -- 17
11533                                                 cl.trx_business_category, -- 18
11534                                                 cl.intended_use, -- 19
11535                                                 cl.product_fiscal_class, -- 20
11536                                                 cl.product_category,-- 21
11537                                                 cl.product_type,-- 22
11538                                                 cl.user_def_fiscal_class,-- 23
11539                                                 cl.tax_classification_code,-- 24
11540                                                 cl.assessable_value,-- 25
11541                                                 cl.tax_already_calculated_flag,-- 26
11542                                                 cl.ship_from_party_id,-- 27
11543                                                 cl.ship_from_party_site_id,-- 28
11544                                                 cl.ship_to_organization_id,-- 29
11545                                                 cl.ship_to_location_id,-- 30
11546                                                 cl.bill_from_party_id, -- 31
11547                                                 cl.bill_from_party_site_id, -- 32
11548                                                 cl.bill_to_organization_id, -- 33
11549                                                 cl.bill_to_location_id, -- 34
11550                                                 cl.poa_party_id, -- 35
11551                                                 cl.poa_party_site_id, -- 36
11552                                                 cl.poo_organization_id, -- 37
11553                                                 cl.poo_location_id, -- 38
11554                                                 l_fnd_user_id, -- 39
11555                                                 SYSDATE, -- 40
11556                                                 l_fnd_user_id, -- 41
11557                                                 SYSDATE, -- 42
11558                                                 l_fnd_login_id, -- 43
11559                                                 NULL, -- 44
11560                                                 NULL, -- 45
11561                                                 NULL, -- 46
11562                                                 NULL -- 47
11563                     FROM inl_adj_charge_lines_v cl
11564                     WHERE cl.charge_line_id = l_elc_adj_chlines(i).charge_line_id);
11565 
11566                     l_debug_info := 'Create associations for charge line ID: ' || l_charge_line_id;
11567                     INL_LOGGING_PVT.Log_Statement(p_module_name => g_module_name,
11568                                                   p_procedure_name => l_program_name,
11569                                                   p_debug_info => l_debug_info);
11570 
11571                     -- Create associations according to adjustment_flag
11572                     INSERT INTO inl_associations(association_id, -- 01
11573                                                  ship_header_id, -- 02
11574                                                  from_parent_table_name, -- 03
11575                                                  from_parent_table_id, -- 04
11576                                                  to_parent_table_name, -- 05
11577                                                  to_parent_table_id, -- 06
11578                                                  allocation_basis, -- 07
11579                                                  allocation_uom_code, -- 08
11580                                                  created_by, -- 09
11581                                                  creation_date, -- 10
11582                                                  last_updated_by, -- 11
11583                                                  last_update_date, -- 12
11584                                                  last_update_login, -- 13
11585                                                  adjustment_type_flag) -- 14
11586                                          (SELECT INL_ASSOCIATIONS_S.NEXTVAL, -- 01
11587                                                  a.ship_header_id, -- 02
11588                                                  a.from_parent_table_name, -- 03
11589                                                  l_charge_line_id, -- 04
11590                                                  a.to_parent_table_name, -- 05
11591                                                  a.to_parent_table_id, -- 06
11592                                                  a.allocation_basis, -- 07
11593                                                  a.allocation_uom_code, -- 08
11594                                                  l_fnd_user_id, -- 09
11595                                                  SYSDATE, -- 10
11596                                                  l_fnd_user_id, -- 11
11597                                                  SYSDATE, -- 12
11598                                                  L_FND_LOGIN_ID, -- 13
11599                                                  NULL -- 14
11600                                           FROM inl_adj_associations_v a
11601                                           WHERE a.ship_header_id = p_ship_header_id
11602                                           AND a.from_parent_table_name = 'INL_CHARGE_LINES'
11603                                           AND a.from_parent_table_id = l_elc_adj_chlines(i).charge_line_id
11604                                           AND (a.adjustment_type_flag IS NULL
11605                                           OR   a.adjustment_type_flag = 'A'));
11606                 END IF; -- END Exist associations
11607 
11608                 l_debug_info := 'Create an adjustment with amount 0 for charge line ID: ' || l_elc_adj_chlines(i).charge_line_id;
11609                 INL_LOGGING_PVT.Log_Statement(p_module_name => g_module_name,
11610                                               p_procedure_name => l_program_name,
11611                                               p_debug_info => l_debug_info);
11612 
11613                 -- Charge_amt = 0 for current charge
11614                 INSERT INTO inl_charge_lines(charge_line_id, -- 01
11615                                              charge_line_num, -- 02
11616                                              charge_line_type_id, -- 03
11617                                              landed_cost_flag, -- 04
11618                                              update_allowed, -- 05
11619                                              source_code, -- 06
11620                                              parent_charge_line_id, -- 07
11621                                              adjustment_num, -- 08
11622                                              match_id, -- 09
11623                                              match_amount_id, -- 10
11624                                              charge_amt, -- 11
11625                                              currency_code, -- 12
11626                                              currency_conversion_type, -- 13
11627                                              currency_conversion_date, -- 14
11628                                              currency_conversion_rate, -- 15
11629                                              party_id, -- 16
11630                                              party_site_id, -- 17
11631                                              trx_business_category, -- 18
11632                                              intended_use, -- 19
11633                                              product_fiscal_class, -- 20
11634                                              product_category,-- 21
11635                                              product_type,-- 22
11636                                              user_def_fiscal_class, -- 23
11637                                              tax_classification_code, -- 24
11638                                              assessable_value,-- 25
11639                                              tax_already_calculated_flag, -- 26
11640                                              ship_from_party_id, -- 27
11641                                              ship_from_party_site_id, -- 28
11642                                              ship_to_organization_id, -- 29
11643                                              ship_to_location_id, -- 30
11644                                              bill_from_party_id, -- 31
11645                                              bill_from_party_site_id, -- 32
11646                                              bill_to_organization_id, -- 33
11647                                              bill_to_location_id, -- 34
11648                                              poa_party_id, -- 35
11649                                              poa_party_site_id, -- 36
11650                                              poo_organization_id, -- 37
11651                                              poo_location_id, -- 38
11652                                              created_by, -- 39
11653                                              creation_date, -- 40
11654                                              last_updated_by, -- 41
11655                                              last_update_date, -- 42
11656                                              last_update_login, -- 43
11657                                              new_charge_amt, -- 44
11658                                              new_currency_conversion_type, -- 45
11659                                              new_currency_conversion_date, -- 46
11660                                              new_currency_conversion_rate, -- 47
11661                                              adjustment_type_flag) -- 48
11662                                     (SELECT INL_CHARGE_LINES_S.NEXTVAL, -- 01
11663                                             cl.charge_line_num, -- 02
11664                                             cl.charge_line_type_id, -- 03
11665                                             cl.landed_cost_flag, -- 04
11666                                             cl.update_allowed, -- 05
11667                                             cl.source_code, -- 06
11668                                             l_elc_adj_chlines(i).charge_line_id, -- 07
11669                                             l_adjustment_num, -- 08
11670                                             cl.match_id, -- 09
11671                                             cl.match_amount_id, -- 10
11672                                             0, -- 11
11673                                             cl.currency_code, -- 12
11674                                             cl.currency_conversion_type, -- 13
11675                                             cl.currency_conversion_date, -- 14
11676                                             cl.currency_conversion_rate, -- 15
11677                                             cl.party_id, -- 16
11678                                             cl.party_site_id, -- 17
11679                                             cl.trx_business_category, -- 18
11680                                             cl.intended_use, -- 19
11681                                             cl.product_fiscal_class, -- 20
11682                                             cl.product_category, -- 21
11683                                             cl.product_type, -- 22
11684                                             cl.user_def_fiscal_class, -- 23
11685                                             cl.tax_classification_code, -- 24
11686                                             cl.assessable_value, -- 25
11687                                             cl.tax_already_calculated_flag, -- 26
11688                                             cl.ship_from_party_id, -- 27
11689                                             cl.ship_from_party_site_id, -- 28
11690                                             cl.ship_to_organization_id, -- 29
11691                                             cl.ship_to_location_id, -- 30
11692                                             cl.bill_from_party_id, -- 31
11693                                             cl.bill_from_party_site_id, -- 32
11694                                             cl.bill_to_organization_id, -- 33
11695                                             cl.bill_to_location_id, -- 34
11696                                             cl.poa_party_id, -- 35
11697                                             cl.poa_party_site_id, -- 36
11698                                             cl.poo_organization_id, -- 37
11699                                             cl.poo_location_id, -- 38
11700                                             l_fnd_user_id, -- 39
11701                                             SYSDATE, -- 40
11702                                             l_fnd_user_id, -- 41
11703                                             SYSDATE, -- 42
11704                                             l_fnd_login_id, -- 43
11705                                             NULL, -- 44
11706                                             NULL, -- 45
11707                                             NULL, -- 46
11708                                             NULL, -- 47
11709                                             'Z' -- 48
11710                                      FROM inl_adj_charge_lines_v cl
11711                                      WHERE cl.charge_line_id = l_elc_adj_chlines(i).charge_line_id);
11712             ELSE   -- associations were not changed
11713                 l_debug_info := 'Associations were not changed. Charge line ID: ' || l_elc_adj_chlines(i).charge_line_id;
11714                 INL_LOGGING_PVT.Log_Statement(p_module_name => g_module_name,
11715                                               p_procedure_name => l_program_name,
11716                                               p_debug_info => l_debug_info);
11717 
11718                 -- Check if charge was changed
11719                 SELECT COUNT(1)
11720                 INTO l_count_charge_changed
11721                 FROM inl_adj_charge_lines_v c
11722                 WHERE (c.new_charge_amt IS NOT NULL
11723                 OR     c.new_currency_conversion_type IS NOT NULL
11724                 OR     c.new_currency_conversion_date IS NOT NULL
11725                 OR     c.new_currency_conversion_rate IS NOT NULL)
11726                 AND charge_line_id = l_elc_adj_chlines(i).charge_line_id;
11727 
11728                 INL_LOGGING_PVT.Log_Variable(p_module_name => g_module_name,
11729                                              p_procedure_name => l_program_name,
11730                                              p_var_name => 'l_count_charge_changed',
11731                                              p_var_value => l_count_charge_changed);
11732 
11733                 IF NVL(l_count_charge_changed,0) > 0 THEN
11734                     -- Create new charge line
11735                     INSERT INTO inl_charge_lines(charge_line_id, -- 01
11736                                                  charge_line_num, -- 02
11737                                                  charge_line_type_id, -- 03
11738                                                  landed_cost_flag, -- 04
11739                                                  update_allowed, -- 05
11740                                                  source_code, -- 06
11741                                                  parent_charge_line_id, -- 07
11742                                                  adjustment_num, -- 08
11743                                                  match_id, -- 09
11744                                                  match_amount_id, -- 10
11745                                                  charge_amt, -- 11
11746                                                  currency_code, -- 12
11747                                                  currency_conversion_type, -- 13
11748                                                  currency_conversion_date, -- 14
11749                                                  currency_conversion_rate, -- 15
11750                                                  party_id, -- 16
11751                                                  party_site_id, -- 17
11752                                                  trx_business_category, -- 18
11753                                                  intended_use, -- 19
11754                                                  product_fiscal_class, -- 20
11755                                                  product_category, -- 21
11756                                                  product_type, -- 22
11757                                                  user_def_fiscal_class, -- 23
11758                                                  tax_classification_code, -- 24
11759                                                  assessable_value, -- 25
11760                                                  tax_already_calculated_flag, -- 26
11761                                                  ship_from_party_id, -- 27
11762                                                  ship_from_party_site_id, -- 28
11763                                                  ship_to_organization_id, -- 29
11764                                                  ship_to_location_id, -- 30
11765                                                  bill_from_party_id, -- 31
11766                                                  bill_from_party_site_id, -- 32
11767                                                  bill_to_organization_id, -- 33
11768                                                  bill_to_location_id, -- 34
11769                                                  poa_party_id, -- 35
11770                                                  poa_party_site_id, -- 36
11771                                                  poo_organization_id, -- 37
11772                                                  poo_location_id, -- 38
11773                                                  created_by, -- 39
11774                                                  creation_date, -- 40
11775                                                  last_updated_by, -- 41
11776                                                  last_update_date, -- 42
11777                                                  last_update_login, -- 43
11778                                                  new_charge_amt, -- 44
11779                                                  new_currency_conversion_type, -- 45
11780                                                  new_currency_conversion_date, -- 46
11781                                                  new_currency_conversion_rate -- 47
11782                                               )
11783                                          (SELECT INL_CHARGE_LINES_S.NEXTVAL, -- 01
11784                                                  cl.charge_line_num, -- 02
11785                                                  cl.charge_line_type_id, -- 03
11786                                                  cl.landed_cost_flag, -- 04
11787                                                  cl.update_allowed, -- 05
11788                                                  cl.source_code, -- 06
11789                                                  cl.charge_line_id, -- 07
11790                                                  l_adjustment_num, -- 08
11791                                                  cl.match_id, -- 09
11792                                                  cl.match_amount_id, -- 10
11793                                                  NVL(cl.new_charge_amt, cl.charge_amt), -- 11
11794                                                  cl.currency_code, -- 12
11795                                                  NVL(cl.new_currency_conversion_type,cl.currency_conversion_type), -- 13
11796                                                  NVL(cl.new_currency_conversion_date,cl.currency_conversion_date), -- 14
11797                                                  NVL(cl.new_currency_conversion_rate,cl.currency_conversion_rate), -- 15
11798                                                  cl.party_id, -- 16
11799                                                  cl.party_site_id, -- 17
11800                                                  cl.trx_business_category, -- 18
11801                                                  cl.intended_use, -- 19
11802                                                  cl.product_fiscal_class, -- 20
11803                                                  cl.product_category, -- 21
11804                                                  cl.product_type, -- 22
11805                                                  cl.user_def_fiscal_class, -- 23
11806                                                  cl.tax_classification_code, -- 24
11807                                                  cl.assessable_value, -- 25
11808                                                  cl.tax_already_calculated_flag, -- 26
11809                                                  cl.ship_from_party_id, -- 27
11810                                                  cl.ship_from_party_site_id, -- 28
11811                                                  cl.ship_to_organization_id, -- 29
11812                                                  cl.ship_to_location_id, -- 30
11813                                                  cl.bill_from_party_id, -- 31
11814                                                  cl.bill_from_party_site_id, -- 32
11815                                                  cl.bill_to_organization_id, -- 33
11816                                                  cl.bill_to_location_id, -- 34
11817                                                  cl.poa_party_id, -- 35
11818                                                  cl.poa_party_site_id, -- 36
11819                                                  cl.poo_organization_id, -- 37
11820                                                  cl.poo_location_id, -- 38
11821                                                  l_fnd_user_id, -- 39
11822                                                  SYSDATE, -- 40
11823                                                  l_fnd_user_id, -- 41
11824                                                  SYSDATE, -- 42
11825                                                  l_fnd_login_id, -- 43
11826                                                  NULL, -- 44
11827                                                  NULL, -- 45
11828                                                  NULL, -- 46
11829                                                  NULL -- 47
11830                                           FROM inl_adj_charge_lines_v cl
11831                                           WHERE cl.charge_line_id = l_elc_adj_chlines(i).charge_line_id);
11832                 END IF;
11833             END IF;
11834         END LOOP;
11835     END IF;
11836 
11837     l_debug_info := 'Set pending_update_flag to N for Shipment';
11838     INL_LOGGING_PVT.Log_Statement(p_module_name => g_module_name,
11839                                   p_procedure_name => l_program_name,
11840                                   p_debug_info => l_debug_info);
11841 
11842     UPDATE inl_ship_headers_all sh
11843     SET sh.adjustment_num = ABS(l_adjustment_num),
11844         sh.pending_update_flag = 'N',
11845         sh.last_update_login    = l_fnd_login_id,
11846         sh.last_update_date     = SYSDATE,
11847         sh.last_updated_by      = l_fnd_user_id
11848     WHERE sh.ship_header_id = p_ship_header_id;
11849 
11850     l_debug_info := 'Call INL_INTERFACE_PVT.Reset_MatchInt';
11851     INL_LOGGING_PVT.Log_Statement(p_module_name => g_module_name,
11852                                   p_procedure_name => l_program_name,
11853                                   p_debug_info => l_debug_info);
11854 
11855     INL_INTERFACE_PVT.Reset_MatchInt(p_ship_header_id => p_ship_header_id,
11856                                      x_return_status => l_return_status);
11857 
11858     -- If unexpected errors happen abort API
11859     IF l_return_status   = L_FND_RET_STS_ERROR THEN
11860         x_return_status := l_return_status;
11861         RAISE L_FND_EXC_ERROR;
11862     ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
11863         x_return_status  := l_return_status;
11864         RAISE L_FND_EXC_UNEXPECTED_ERROR;
11865     END IF;
11866 
11867     IF FND_API.To_Boolean (p_commit) THEN
11868         COMMIT WORK;
11869     END IF;
11870     -- Standard call to get message count and if count is 1, get message info.
11871     FND_MSG_PUB.Count_And_Get(p_encoded => L_FND_FALSE,
11872                               p_count => x_msg_count,
11873                               p_data => x_msg_data) ;
11874     -- Standard End of Procedure/Function Logging
11875     INL_LOGGING_PVT.Log_EndProc (
11876         p_module_name => g_module_name,
11877         p_procedure_name => l_program_name);
11878 
11879 EXCEPTION
11880 --Handling deadlock with proper error message
11881 WHEN RESOURCE_BUSY THEN
11882     x_return_status := FND_API.g_ret_sts_error;
11883     FND_MESSAGE.set_name('INL','INL_CANNOT_EXEC_ELC_SUBMIT_LCK');
11884     FND_MSG_PUB.ADD;
11885     -- Standard Expected Error Logging
11886     INL_LOGGING_PVT.Log_ExpecError(p_module_name => g_module_name,
11887                                    p_procedure_name => l_program_name);
11888     ROLLBACK TO Adjust_ELCLines_PVT;
11889     x_return_status := L_FND_RET_STS_ERROR;
11890     FND_MSG_PUB.Count_And_Get(p_encoded => L_FND_FALSE,
11891                               p_count => x_msg_count,
11892                               p_data => x_msg_data);
11893 WHEN L_FND_EXC_ERROR THEN
11894     -- Standard Expected Error Logging
11895     INL_LOGGING_PVT.Log_ExpecError(p_module_name => g_module_name,
11896                                    p_procedure_name => l_program_name) ;
11897     ROLLBACK TO Adjust_ELCLines_PVT;
11898     x_return_status := L_FND_RET_STS_ERROR;
11899     FND_MSG_PUB.Count_And_Get(p_encoded => L_FND_FALSE,
11900                               p_count => x_msg_count,
11901                               p_data => x_msg_data) ;
11902 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
11903     -- Standard Unexpected Error Logging
11904     INL_LOGGING_PVT.Log_UnexpecError(p_module_name => g_module_name,
11905                                      p_procedure_name => l_program_name) ;
11906     ROLLBACK TO Adjust_ELCLines_PVT;
11907     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
11908     FND_MSG_PUB.Count_And_Get(p_encoded => L_FND_FALSE,
11909                               p_count => x_msg_count,
11910                               p_data => x_msg_data) ;
11911 WHEN OTHERS THEN
11912     -- Standard Unexpected Error Logging
11913     INL_LOGGING_PVT.Log_UnexpecError(p_module_name => g_module_name,
11914                                      p_procedure_name => l_program_name) ;
11915     ROLLBACK TO Adjust_ELCLines_PVT;
11916     x_return_status := L_FND_RET_STS_UNEXP_ERROR ;
11917     IF FND_MSG_PUB.Check_Msg_Level (p_message_level => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
11918         FND_MSG_PUB.Add_Exc_Msg(p_pkg_name => g_pkg_name,
11919                                 p_procedure_name => l_program_name) ;
11920     END IF;
11921     FND_MSG_PUB.Count_And_Get(p_encoded => L_FND_FALSE,
11922                               p_count => x_msg_count,
11923                               p_data => x_msg_data) ;
11924 END Adjust_ELCLines;
11925 -- /SCM-051
11926 
11927 -- API name   : ProcessAction
11928 -- Type       : Private
11929 -- Function   : Run all required steps to Complete a given LCM Shipment.
11930 -- Pre-reqs   : None
11931 -- Parameters :
11932 -- IN         : p_api_version       IN NUMBER              Required
11933 --              p_init_msg_list     IN VARCHAR2            Optional  Default = L_FND_FALSE
11934 --              p_commit            IN VARCHAR2            Optional  Default = L_FND_FALSE
11935 --              p_ship_header_id    IN NUMBER
11936 --              p_task_code         IN VARCHAR2
11937 --              p_caller            IN VARCHAR2 From UI (U) or Concurrent (C)
11938 -- OUT          x_return_status     OUT NOCOPY VARCHAR2
11939 --              x_msg_count         OUT NOCOPY   NUMBER
11940 --              x_msg_data          OUT NOCOPY VARCHAR2
11941 --
11942 -- Version    : Current version 1.0
11943 --
11944 -- Notes      :
11945 PROCEDURE ProcessAction(
11946     p_api_version    IN NUMBER,
11947     p_init_msg_list  IN VARCHAR2 := L_FND_FALSE,
11948     p_commit         IN VARCHAR2 := L_FND_FALSE,
11949     p_ship_header_id IN NUMBER,
11950     p_task_code      IN VARCHAR2,
11951     p_caller         IN VARCHAR2, -- SCM-051 - From UI (U) or Concurrent (C)
11952     x_return_status  OUT NOCOPY VARCHAR2,
11953     x_msg_count      OUT NOCOPY NUMBER,
11954     x_msg_data       OUT NOCOPY VARCHAR2)
11955 IS
11956     l_api_name    CONSTANT VARCHAR2 (30) := 'ProcessAction';
11957     l_api_version CONSTANT NUMBER := 1.0;
11958     l_return_status VARCHAR2 (1) ;
11959     l_msg_count NUMBER;
11960     l_msg_data VARCHAR2 (2000);
11961     l_debug_info VARCHAR2 (200);
11962     l_pending_matching_flag VARCHAR2 (1) ;
11963     l_ship_status VARCHAR2 (30);
11964     l_msg_count_validate NUMBER;
11965     l_organization_id NUMBER;
11966     l_rcv_enabled_flag VARCHAR2(1);
11967     l_max_allocation_id NUMBER; --Bug#10032820
11968     l_pending_update_flag VARCHAR2(1) ; -- SCM-051
11969     l_ship_num VARCHAR2(25); -- SCM-051
11970     l_rcv_running NUMBER; -- SCM-051
11971 BEGIN
11972     -- Standard Beginning of Procedure/Function Logging
11973     INL_LOGGING_PVT.Log_BeginProc (
11974         p_module_name => g_module_name,
11975         p_procedure_name => l_api_name) ;
11976     -- Standard Start of API savepoint
11977     SAVEPOINT Run_Submit_PVT;
11978     -- Initialize message list if p_init_msg_list is set to TRUE.
11979     IF FND_API.to_Boolean (p_init_msg_list) THEN
11980         FND_MSG_PUB.initialize;
11981     END IF;
11982     -- Check for call compatibility.
11983     IF NOT FND_API.Compatible_API_Call (
11984             l_api_version,
11985             p_api_version,
11986             l_api_name,
11987             G_PKG_NAME
11988     ) THEN
11989         RAISE L_FND_EXC_UNEXPECTED_ERROR;
11990     END IF;
11991     --  Initialize API return status to success
11992     x_return_status := L_FND_RET_STS_SUCCESS;
11993 
11994     INL_LOGGING_PVT.Log_Variable (
11995         p_module_name => g_module_name,
11996         p_procedure_name => l_api_name,
11997         p_var_name => 'p_ship_header_id',
11998         p_var_value => p_ship_header_id) ;
11999 
12000     -- Get the Pending Match Flag and Organization Id
12001     l_debug_info := 'Get the Pending Match Flag, Pending Update Flag and Organization Id';
12002     INL_LOGGING_PVT.Log_Statement (
12003         p_module_name => g_module_name,
12004         p_procedure_name => l_api_name,
12005         p_debug_info => l_debug_info
12006     ) ;
12007     SELECT pending_matching_flag,
12008            pending_update_flag, -- SCM-051
12009            organization_id,
12010            NVL(rcv_enabled_flag,'Y') rcv_enabled_flag, -- dependence,
12011            ship_num -- SCM-051
12012     INTO l_pending_matching_flag,
12013          l_pending_update_flag, -- SCM-051
12014          l_organization_id,
12015          l_rcv_enabled_flag,
12016          l_ship_num
12017     FROM inl_ship_headers
12018     WHERE ship_header_id = p_ship_header_id;
12019 
12020     INL_LOGGING_PVT.Log_Variable (
12021         p_module_name => g_module_name,
12022         p_procedure_name => l_api_name,
12023         p_var_name => 'l_pending_matching_flag',
12024         p_var_value => l_pending_matching_flag) ;
12025     -- SCM-051
12026     INL_LOGGING_PVT.Log_Variable (
12027         p_module_name => g_module_name,
12028         p_procedure_name => l_api_name,
12029         p_var_name => 'l_pending_update_flag',
12030         p_var_value => l_pending_update_flag) ;
12031     INL_LOGGING_PVT.Log_Variable (
12032         p_module_name => g_module_name,
12033         p_procedure_name => l_api_name,
12034         p_var_name => 'p_caller',
12035         p_var_value => p_caller) ;
12036     -- /SCM-051
12037     INL_LOGGING_PVT.Log_Variable (
12038         p_module_name => g_module_name,
12039         p_procedure_name => l_api_name,
12040         p_var_name => 'l_organization_id',
12041         p_var_value => l_organization_id) ;
12042     INL_LOGGING_PVT.Log_Variable (
12043         p_module_name => g_module_name,
12044         p_procedure_name => l_api_name,
12045         p_var_name => 'l_rcv_enabled_flag',
12046         p_var_value => l_rcv_enabled_flag) ;
12047 
12048      -- SCM-051
12049      IF NVL(l_pending_update_flag, 'N') = 'Y' AND p_caller = 'U' THEN
12050 
12051         SELECT COUNT(1)
12052         INTO l_rcv_running
12053         FROM rcv_transactions_interface rti,
12054              inl_ship_lines_all sl
12055         WHERE rti.transaction_type = 'RECEIVE'
12056         AND rti.processing_status_code = 'RUNNING'
12057         AND rti.lcm_shipment_line_id = sl.ship_line_id
12058         AND sl.ship_header_id = p_ship_header_id;
12059 
12060         INL_LOGGING_PVT.Log_Variable (
12061             p_module_name => g_module_name,
12062             p_procedure_name => l_api_name,
12063             p_var_name => 'l_rcv_running',
12064             p_var_value => l_rcv_running) ;
12065 
12066         IF NVL(l_rcv_running,0) > 0 THEN
12067             FND_MESSAGE.SET_NAME('INL','INL_CANNOT_EXEC_ELC_SUBMIT');
12068             FND_MSG_PUB.ADD;
12069             RAISE L_FND_EXC_ERROR;
12070         END IF;
12071 
12072         Adjust_ELCLines (
12073             p_api_version => 1.0,
12074             p_init_msg_list => L_FND_FALSE,
12075             p_commit => L_FND_FALSE,
12076             p_ship_header_id => p_ship_header_id,
12077             x_return_status => l_return_status,
12078             x_msg_count => l_msg_count,
12079             x_msg_data => l_msg_data);
12080     END IF;
12081     -- /SCM-051
12082 
12083     -- SCM-051 Shipment with ELC Pending will not be processed
12084     IF NVL(l_pending_update_flag, 'N') = 'Y' AND p_caller = 'C' THEN
12085         l_debug_info := 'Shipment with ELC Pending';
12086         INL_LOGGING_PVT.Log_Statement (
12087                 p_module_name   => g_module_name,
12088                 p_procedure_name=> l_api_name,
12089                 p_debug_info    => l_debug_info) ;
12090 
12091         FND_MESSAGE.SET_NAME('INL','INL_ERR_CHK_ELC_UPDATE');
12092         FND_MESSAGE.SET_TOKEN('SHIP_NUM',l_ship_num);
12093         FND_MSG_PUB.ADD;
12094         RAISE L_FND_EXC_ERROR;
12095     ELSE
12096     -- /SCM-051
12097         -- Run Adjust Lines for Pending Shipments
12098         IF l_pending_matching_flag = 'Y' AND NVL(l_rcv_running,0) = 0 THEN   -- SCM-051
12099             /* transfered to INL_INTERFACE_PVT      --BUG#8198498
12100             l_debug_info := 'Run INL_SHIPMENT_PVT.Adjust_Lines';
12101             INL_LOGGING_PVT.Log_Statement (
12102                 p_module_name => g_module_name,
12103                 p_procedure_name => l_api_name,
12104                 p_debug_info => l_debug_info
12105             ) ;
12106             Adjust_Lines (
12107                 p_api_version => 1.0,
12108                 p_init_msg_list => L_FND_FALSE,
12109                 p_commit => L_FND_FALSE,
12110                 p_ship_header_id => p_ship_header_id,
12111                 x_return_status => l_return_status,
12112                 x_msg_count => l_msg_count,
12113                 x_msg_data => l_msg_data
12114             ) ;
12115             -- If any errors happen abort the process.
12116             IF l_return_status = L_FND_RET_STS_ERROR THEN
12117                 RAISE L_FND_EXC_ERROR;
12118             ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
12119                 RAISE L_FND_EXC_UNEXPECTED_ERROR;
12120             END IF;
12121         */
12122             -- Update Pending Matching Flag
12123             l_debug_info := 'Update PendingMatchingFlag';
12124             INL_LOGGING_PVT.Log_Statement (
12125                 p_module_name => g_module_name,
12126                 p_procedure_name => l_api_name,
12127                 p_debug_info => l_debug_info
12128             ) ;
12129             -- Set Shipment Header's pending_matching_flag to 'Y'
12130             INL_SHIPMENT_PVT.Update_PendingMatchingFlag(  --BUG#8198498
12131                 p_ship_header_id        => p_ship_header_id,
12132                 p_pending_matching_flag => 'N',
12133                 x_return_status     => l_return_status
12134             );
12135             -- If any errors happen abort API.
12136             IF l_return_status = L_FND_RET_STS_ERROR THEN
12137                 RAISE L_FND_EXC_ERROR;
12138             ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
12139                 RAISE L_FND_EXC_UNEXPECTED_ERROR;
12140             END IF;
12141         END IF;
12142         -- Run Generate Taxes Only for NOT Pending Shipments
12143         IF p_task_code >= '30' AND NVL(l_pending_matching_flag, 'N') = 'N' AND
12144            NVL(l_pending_update_flag, 'N') = 'N' THEN -- SCM-051
12145             l_debug_info := 'Run INL_TAX_PVT.Generate_Taxes';
12146             INL_LOGGING_PVT.Log_Statement (
12147                 p_module_name => g_module_name,
12148                 p_procedure_name => l_api_name,
12149                 p_debug_info => l_debug_info
12150             ) ;
12151             INL_TAX_PVT.Generate_Taxes (
12152                 p_api_version    => 1.0,
12153                 p_init_msg_list => L_FND_FALSE,
12154                 p_commit => L_FND_FALSE,
12155                 p_ship_header_id => p_ship_header_id,
12156                 x_return_status => l_return_status,
12157                 x_msg_count => l_msg_count,
12158                 x_msg_data => l_msg_data
12159             ) ;
12160             -- If any errors happen abort the process.
12161             IF l_return_status = L_FND_RET_STS_ERROR THEN
12162                 RAISE L_FND_EXC_ERROR;
12163             ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
12164                 RAISE L_FND_EXC_UNEXPECTED_ERROR;
12165             END IF;
12166         END IF;
12167         -- Run Validation only for NOT Pending Shipments
12168         IF p_task_code >= '40' AND NVL (l_pending_matching_flag, 'N') = 'N' AND
12169            NVL(l_pending_update_flag, 'N') = 'N' THEN -- SCM-051
12170             l_debug_info := 'Run INL_SHIPMENT_PVT.Validate_Shipment';
12171             INL_LOGGING_PVT.Log_Statement (
12172                 p_module_name => g_module_name,
12173                 p_procedure_name => l_api_name,
12174                 p_debug_info => l_debug_info
12175             ) ;
12176             l_msg_count_validate := NVL (fnd_msg_pub.Count_Msg (), 0) ;
12177             Validate_Shipment (
12178                 p_api_version => 1.0,
12179                 p_init_msg_list => L_FND_FALSE,
12180                 p_commit => L_FND_FALSE,
12181                 p_validation_level => L_FND_VALID_LEVEL_FULL,
12182                 p_ship_header_id => p_ship_header_id,
12183                 p_task_code => p_task_code,--Bug#9836174
12184                 x_return_status => l_return_status,
12185                 x_msg_count => l_msg_count,
12186                 x_msg_data => l_msg_data
12187             ) ;
12188             -- If any errors happen abort the process.
12189             IF l_return_status = L_FND_RET_STS_ERROR THEN
12190                 RAISE L_FND_EXC_ERROR;
12191             ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
12192                 RAISE L_FND_EXC_UNEXPECTED_ERROR;
12193             END IF;
12194             l_msg_count_validate := NVL (l_msg_count, 0) - l_msg_count_validate;
12195         END IF;
12196         ----------------------------------------------------------------------
12197         -- Actions for both Pending Shipments and Not Pending Shipments
12198         ----------------------------------------------------------------------
12199         -- Run Landed Cost Calculation
12200         IF p_task_code >= '50' AND NVL (l_msg_count_validate, 0) = 0 AND
12201            NVL(l_rcv_running,0) = 0 THEN
12202 --Bug#10032820
12203             l_debug_info := 'Getting the l_max_allocation_id';
12204             INL_LOGGING_PVT.Log_Statement (
12205                 p_module_name => g_module_name,
12206                 p_procedure_name => l_api_name,
12207                 p_debug_info => l_debug_info
12208             ) ;
12209             SELECT  MAX(allocation_id)
12210             INTO    l_max_allocation_id
12211             FROM    inl_allocations;
12212 
12213             INL_LOGGING_PVT.Log_Variable (
12214                 p_module_name => g_module_name,
12215                 p_procedure_name => l_api_name,
12216                 p_var_name => 'l_max_allocation_id',
12217                 p_var_value => l_max_allocation_id);
12218 
12219 --Bug#10032820
12220 
12221             l_debug_info := 'Run INL_LANDEDCOST_PVT.Run_Calculation';
12222             INL_LOGGING_PVT.Log_Statement (
12223                 p_module_name => g_module_name,
12224                 p_procedure_name => l_api_name,
12225                 p_debug_info => l_debug_info) ;
12226 
12227             INL_LANDEDCOST_PVT.Run_Calculation (
12228                 p_api_version => 1.0,
12229                 p_init_msg_list => L_FND_FALSE,
12230                 p_commit => L_FND_FALSE,
12231                 p_validation_level => L_FND_VALID_LEVEL_FULL,
12232                 p_ship_header_id => p_ship_header_id,
12233                 p_calc_scope_code => 0,
12234                 x_return_status => l_return_status,
12235                 x_msg_count => l_msg_count,
12236                 x_msg_data => l_msg_data
12237             ) ;
12238             -- If any errors happen abort the process.
12239             IF l_return_status = L_FND_RET_STS_ERROR THEN
12240                 RAISE L_FND_EXC_ERROR;
12241             ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
12242                 RAISE L_FND_EXC_UNEXPECTED_ERROR;
12243             END IF;
12244         END IF;
12245         -- Submit Shipment and call final integrations
12246         IF p_task_code >= '60' AND NVL (l_msg_count_validate, 0) = 0 AND
12247            NVL(l_rcv_running,0) = 0 THEN
12248             l_debug_info := 'Run INL_SHIPMENT_PVT.Complete_Shipment';
12249             INL_LOGGING_PVT.Log_Statement (
12250                 p_module_name => g_module_name,
12251                 p_procedure_name => l_api_name,
12252                 p_debug_info => l_debug_info) ;
12253 
12254             Complete_Shipment (
12255                 p_api_version => 1.0,
12256                 p_init_msg_list => L_FND_FALSE,
12257                 p_commit => L_FND_FALSE,
12258                 p_ship_header_id => p_ship_header_id,
12259                 p_rcv_enabled_flag => l_rcv_enabled_flag,
12260                 p_pending_matching_flag => l_pending_matching_flag,
12261                 p_pending_elc_flag => l_pending_update_flag, -- SCM-051
12262                 p_organization_id => l_organization_id,
12263                 p_max_allocation_id => l_max_allocation_id, --Bug#10032820
12264                 x_return_status => l_return_status,
12265                 x_msg_count => l_msg_count,
12266                 x_msg_data => l_msg_data) ;
12267 
12268             -- If any errors happen abort the process.
12269             IF l_return_status = L_FND_RET_STS_ERROR THEN
12270                 RAISE L_FND_EXC_ERROR;
12271             ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
12272                 RAISE L_FND_EXC_UNEXPECTED_ERROR;
12273             END IF;
12274         END IF;
12275     END IF;
12276 
12277     -- If any errors happen abort the process.
12278     IF l_return_status = L_FND_RET_STS_ERROR THEN
12279         RAISE L_FND_EXC_ERROR;
12280     ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
12281         RAISE L_FND_EXC_UNEXPECTED_ERROR;
12282     END IF;
12283     -- Standard check of p_commit.
12284     IF FND_API.To_Boolean (p_commit) THEN
12285         COMMIT WORK;
12286     END IF;
12287     -- Standard call to get message count and if count is 1, get message info.
12288     FND_MSG_PUB.Count_And_Get (
12289         p_encoded => L_FND_FALSE,
12290         p_count => x_msg_count,
12291         p_data => x_msg_data
12292     ) ;
12293     -- Standard End of Procedure/Function Logging
12294     INL_LOGGING_PVT.Log_EndProc (
12295         p_module_name => g_module_name,
12296         p_procedure_name => l_api_name
12297     ) ;
12298 EXCEPTION
12299     WHEN L_FND_EXC_ERROR THEN
12300         -- Standard Expected Error Logging
12301         INL_LOGGING_PVT.Log_ExpecError (
12302             p_module_name => g_module_name,
12303             p_procedure_name => l_api_name
12304         ) ;
12305         ROLLBACK TO Run_Submit_PVT;
12306         x_return_status := L_FND_RET_STS_ERROR;
12307         FND_MSG_PUB.Count_And_Get (
12308             p_encoded => L_FND_FALSE,
12309             p_count => x_msg_count,
12310             p_data => x_msg_data
12311         ) ;
12312     WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
12313         -- Standard Unexpected Error Logging
12314         INL_LOGGING_PVT.Log_UnexpecError (
12315             p_module_name => g_module_name,
12316             p_procedure_name => l_api_name
12317         ) ;
12318         ROLLBACK TO Run_Submit_PVT;
12319         x_return_status := L_FND_RET_STS_UNEXP_ERROR;
12320         FND_MSG_PUB.Count_And_Get (
12321             p_encoded => L_FND_FALSE,
12322             p_count => x_msg_count,
12323             p_data => x_msg_data
12324         ) ;
12325     WHEN OTHERS THEN
12326         -- Standard Unexpected Error Logging
12327         INL_LOGGING_PVT.Log_UnexpecError (
12328             p_module_name => g_module_name,
12329             p_procedure_name => l_api_name
12330         ) ;
12331         ROLLBACK TO Run_Submit_PVT;
12332         x_return_status := L_FND_RET_STS_UNEXP_ERROR ;
12333         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
12334             FND_MSG_PUB.Add_Exc_Msg (
12335                 p_pkg_name => g_pkg_name,
12336                 p_procedure_name => l_api_name
12337             ) ;
12338         END IF;
12339         FND_MSG_PUB.Count_And_Get (
12340             p_encoded => L_FND_FALSE,
12341             p_count => x_msg_count,
12342             p_data => x_msg_data
12343         ) ;
12344 END ProcessAction;
12345 
12346 
12347 -- Utility name   : Complete_PendingShipments
12348 -- Type       : Private
12349 -- Function   : This utility is called by an LCM Concurrent to process
12350 --              either a specific Pending Matching/Correction Shipment
12351 --              or ALL Pending Shipments.
12352 -- Pre-reqs   : None
12353 -- Parameters :
12354 -- OUT           errbuf            OUT VARCHAR2
12355 --               retcode           OUT VARCHAR2
12356 --
12357 -- IN            p_organization_id IN NUMBER
12358 --               p_ship_header_id  IN NUMBER
12359 --
12360 --
12361 -- Version    : Current version 1.0
12362 --
12363 -- Notes      : THIS PROCEDURE IS GOING TO COMMIT ALL PREVIOUS TRANSACTIONS --Bug#10359221
12364 
12365 PROCEDURE Complete_PendingShipment (
12366     errbuf            OUT NOCOPY  VARCHAR2,
12367     retcode           OUT NOCOPY VARCHAR2,
12368     p_organization_id IN NUMBER,
12369     p_ship_header_id  IN NUMBER)
12370 IS
12371     l_program_name CONSTANT VARCHAR2 (30) := 'Complete_PendingShipment';
12372     l_return_status VARCHAR2 (1)        := L_FND_RET_STS_SUCCESS;
12373     l_msg_count NUMBER;
12374     l_msg_data VARCHAR2 (2000);
12375     l_debug_info VARCHAR2 (200);
12376     l_records_processed NUMBER:=0;
12377 
12378     -- Cursor to get all Pending Shipments
12379     CURSOR c_pending_shipments  IS
12380          SELECT ship_header_id, org_id --Bug#10381495
12381            FROM inl_ship_headers_all  --Bug#10381495
12382           WHERE ship_status_code = 'COMPLETED'
12383             AND pending_matching_flag = 'Y'
12384             AND (p_organization_id IS NULL
12385                  OR organization_id = p_organization_id);
12386 --Bug#10359221
12387     TYPE pending_shipments_lst_type
12388         IS TABLE OF c_pending_shipments%ROWTYPE INDEX BY BINARY_INTEGER;
12389     l_pending_shipments_lst pending_shipments_lst_type;
12390     l_records_err NUMBER:=0;
12391     l_records_read NUMBER:=0;
12392     l_ac_proc NUMBER:=0;
12393     l_partial_commit_at NUMBER:=500;
12394 --Bug#10359221
12395 
12396 
12397     --Bug#10381495
12398     l_previous_access_mode  VARCHAR2(1) :=mo_global.get_access_mode();
12399     l_previous_org_id       NUMBER(15)  :=mo_global.get_current_org_id();
12400     l_current_org_id        NUMBER(15);
12401     l_org_id                NUMBER(15);
12402     --Bug#10381495
12403 
12404 BEGIN
12405     -- Init conc. parameters
12406     errbuf  := NULL;
12407     retcode := 0;
12408 
12409     -- Standard Beginning of Procedure/Function Logging
12410     INL_LOGGING_PVT.Log_BeginProc (
12411         p_module_name => g_module_name,
12412         p_procedure_name => l_program_name) ;
12413 
12414 --Bug#10381495
12415     l_current_org_id := NVL(l_previous_org_id,-999);
12416     INL_LOGGING_PVT.Log_Variable(
12417         p_module_name    => g_module_name,
12418         p_procedure_name => l_program_name,
12419         p_var_name       => 'l_current_org_id',
12420         p_var_value      => l_current_org_id
12421     ) ;
12422 --Bug#10381495
12423 
12424 
12425     -- Submit only the given Shipment
12426     IF p_ship_header_id IS NOT NULL THEN
12427 
12428 
12429 --Bug#10381495
12430         SELECT org_id
12431           INTO l_org_id
12432           FROM inl_ship_headers_all
12433          WHERE ship_header_id = p_ship_header_id;
12434 
12435         IF (l_org_id <> l_current_org_id) THEN
12436             INL_LOGGING_PVT.Log_Statement(
12437                 p_module_name => g_module_name,
12438                 p_procedure_name => l_program_name,
12439                 p_debug_info => 'Seting a new context from '||l_current_org_id||' to '||l_org_id
12440             );
12441             l_current_org_id:=l_org_id;
12442             mo_global.set_policy_context( 'S', l_current_org_id);
12443             INL_LOGGING_PVT.Log_Statement(
12444                 p_module_name => g_module_name,
12445                 p_procedure_name => l_program_name,
12446                 p_debug_info => 'l_current_org_id: '||l_current_org_id
12447             );
12448         END IF;
12449 --Bug#10381495
12450 
12451         l_debug_info := 'Before runnig Submit process for the only Shipment Id: ' || p_ship_header_id;
12452         INL_LOGGING_PVT.Log_Statement (
12453             p_module_name => g_module_name,
12454             p_procedure_name => l_program_name,
12455             p_debug_info => l_debug_info
12456         ) ;
12457         l_records_read := 1;
12458         ProcessAction (
12459             p_api_version => 1.0,
12460             p_init_msg_list => L_FND_FALSE,
12461             p_commit => L_FND_FALSE,
12462             p_ship_header_id => p_ship_header_id,
12463             p_task_code => '60', -- Process until Submit task
12464             p_caller => 'C',  -- SCM-051
12465             x_return_status => l_return_status,
12466             x_msg_count => l_msg_count,
12467             x_msg_data => l_msg_data) ;
12468         l_records_read := 1;
12469         -- If any errors happen change concurrent status. --Bug#10359221
12470         IF l_return_status = L_FND_RET_STS_ERROR OR l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
12471             INL_LOGGING_PVT.Log_Statement (
12472                 p_module_name => g_module_name,
12473                 p_procedure_name => l_program_name,
12474                 p_debug_info => 'Rollback '
12475             ) ;
12476             retcode := 1;
12477             ROLLBACK;
12478             l_records_err := 1;
12479         ELSE
12480             INL_LOGGING_PVT.Log_Statement (
12481                 p_module_name => g_module_name,
12482                 p_procedure_name => l_program_name,
12483                 p_debug_info => 'Commit '
12484             ) ;
12485             l_records_processed := 1;
12486             COMMIT;
12487         END IF;
12488         INL_LOGGING_PVT.Log_Statement (
12489             p_module_name => g_module_name,
12490             p_procedure_name => l_program_name,
12491             p_debug_info => 'retcode: '||retcode||' l_records_processed: '||l_records_processed
12492         ) ;
12493     -- Submit ALL Pending Shipments
12494     ELSE
12495 
12496 --Bug#10359221
12497         --Opening the cursor of pending shipments
12498         INL_LOGGING_PVT.Log_Statement (
12499             p_module_name => g_module_name,
12500             p_procedure_name => l_program_name,
12501             p_debug_info => 'Opening the cursor of pending shipments'
12502         ) ;
12503 
12504         OPEN c_pending_shipments;
12505         FETCH c_pending_shipments BULK COLLECT INTO l_pending_shipments_lst;
12506         CLOSE c_pending_shipments;
12507 --Bug#10359221
12508         l_debug_info := l_pending_shipments_lst.LAST||' lines have been retrieved.';
12509         INL_LOGGING_PVT.Log_Statement (
12510             p_module_name => g_module_name,
12511             p_procedure_name => l_program_name,
12512             p_debug_info => l_debug_info
12513         ) ;
12514         IF NVL(l_pending_shipments_lst.LAST, 0) > 0 THEN
12515             FOR i IN NVL(l_pending_shipments_lst.FIRST, 0)..NVL(l_pending_shipments_lst.LAST, 0)
12516             LOOP
12517 --Bug#10381495
12518                 IF (l_pending_shipments_lst(i).org_id <> l_current_org_id) THEN
12519                     INL_LOGGING_PVT.Log_Statement(
12520                         p_module_name => g_module_name,
12521                         p_procedure_name => l_program_name,
12522                         p_debug_info => 'Seting a new context from '||l_current_org_id||' to '||l_pending_shipments_lst(i).org_id
12523                     );
12524                     l_current_org_id:=l_pending_shipments_lst(i).org_id;
12525                     mo_global.set_policy_context( 'S', l_current_org_id);
12526                     INL_LOGGING_PVT.Log_Statement(
12527                         p_module_name => g_module_name,
12528                         p_procedure_name => l_program_name,
12529                         p_debug_info => 'l_current_org_id: '||l_current_org_id
12530                     );
12531                 END IF;
12532 --Bug#10381495
12533                 l_records_read := l_records_read + 1;
12534                 SAVEPOINT Complete_PendingShipment_int;
12535                 l_debug_info := 'Before runnig Submit process for the Shipment Id: ' || l_pending_shipments_lst(i).ship_header_id;
12536                 INL_LOGGING_PVT.Log_Statement (
12537                     p_module_name => g_module_name,
12538                     p_procedure_name => l_program_name,
12539                     p_debug_info => l_debug_info
12540                 ) ;
12541                 ProcessAction (
12542                     p_api_version => 1.0,
12543                     p_init_msg_list => L_FND_FALSE,
12544                     p_commit => L_FND_FALSE,
12545                     p_ship_header_id => l_pending_shipments_lst(i).ship_header_id,
12546                     p_task_code => '60', -- Process until Submit task
12547                     p_caller => 'C',  -- SCM-051
12548                     x_return_status => l_return_status,
12549                     x_msg_count => l_msg_count,
12550                     x_msg_data => l_msg_data) ;
12551 
12552                 -- If any errors happen change concurrent status. --Bug#10359221
12553                 IF l_return_status = L_FND_RET_STS_ERROR
12554                     OR l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
12555                     --Problem with ProcessAction
12556                     INL_LOGGING_PVT.Log_Statement (
12557                         p_module_name => g_module_name,
12558                         p_procedure_name => l_program_name,
12559                         p_debug_info => 'Problem with ProcessAction: Rollback'
12560                     ) ;
12561 
12562                     retcode := 1;
12563     --Bug#10359221
12564                     ROLLBACK TO Complete_PendingShipment_int;
12565                     INL_LOGGING_PVT.Log_Statement (
12566                         p_module_name => g_module_name,
12567                         p_procedure_name => l_program_name,
12568                         p_debug_info => 'Error found. '
12569                     ) ;
12570                     l_records_err   := l_records_err + 1;
12571                 ELSE
12572                     l_records_processed := l_records_processed + 1;
12573                     l_ac_proc := l_ac_proc + 1;
12574                 END IF;
12575                 IF l_ac_proc >= l_partial_commit_at THEN
12576                     -- Partial commit limit reached
12577                     INL_LOGGING_PVT.Log_Statement (
12578                         p_module_name => g_module_name,
12579                         p_procedure_name => l_program_name,
12580                         p_debug_info => 'Partial commit limit reached. '
12581                     ) ;
12582                     COMMIT;
12583                     l_ac_proc := 0;
12584                 END IF;
12585             END LOOP;
12586             COMMIT;
12587         END IF;
12588 --Bug#10359221
12589     END IF;
12590     -- Setting error bufer and return code
12591     IF l_msg_count = 1 THEN
12592         FND_FILE.PUT_LINE(FND_FILE.LOG, l_msg_data);
12593         retcode := 1;
12594     ELSIF l_msg_count > 1 THEN
12595         FND_FILE.PUT_LINE(FND_FILE.LOG, l_msg_count|| ' warnings found.' );
12596         FOR i IN 1 ..l_msg_count
12597         LOOP
12598             FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.get (i, L_FND_FALSE) );
12599         END LOOP;
12600         retcode := 1;
12601     END IF;
12602     INL_LOGGING_PVT.Log_Statement (
12603         p_module_name => g_module_name,
12604         p_procedure_name => l_program_name,
12605         p_debug_info => '< ***** ' || 'Records Read        : ' || l_records_read
12606     ) ;
12607     INL_LOGGING_PVT.Log_Statement (
12608         p_module_name => g_module_name,
12609         p_procedure_name => l_program_name,
12610         p_debug_info => '< ***** ' || 'Records Processed   : ' || l_records_processed
12611     ) ;
12612     INL_LOGGING_PVT.Log_Statement (
12613         p_module_name => g_module_name,
12614         p_procedure_name => l_program_name,
12615         p_debug_info => '< ***** ' || 'Records Errored     : ' || l_records_err
12616     ) ;
12617     -- Write the number of records processed and inserted by this concurrent process
12618     FND_FILE.put_line( FND_FILE.log, '< **************************************>');
12619     FND_FILE.put_line( FND_FILE.log, '< ***** ' || 'Records Read     : ' || l_records_read); -- Bug#10359221
12620     FND_FILE.put_line( FND_FILE.log, '< ***** ' || 'Records Processed: ' || l_records_processed); -- Bug #9258936
12621     FND_FILE.put_line( FND_FILE.log, '< ***** ' || 'Records Errored  : ' || l_records_err); -- Bug#10359221
12622     FND_FILE.put_line( FND_FILE.log, '< **************************************>');
12623 --Bug#10359221
12624     --Bug#10381495
12625     IF (l_current_org_id <> NVL(l_previous_org_id,-999)) THEN
12626         INL_LOGGING_PVT.Log_Statement(
12627             p_module_name => g_module_name,
12628             p_procedure_name => l_program_name,
12629             p_debug_info => 'Restore previous context: from '||l_current_org_id||' to '||l_previous_org_id
12630         );
12631         mo_global.set_policy_context( l_previous_access_mode, l_previous_org_id);
12632     END IF;
12633     --Bug#10381495
12634 
12635     -- Standard End of Procedure/Function Logging
12636     INL_LOGGING_PVT.Log_EndProc (
12637         p_module_name => g_module_name,
12638         p_procedure_name => l_program_name) ;
12639 EXCEPTION
12640 WHEN L_FND_EXC_ERROR THEN
12641     -- Standard Expected Error Logging
12642     INL_LOGGING_PVT.Log_ExpecError (
12643         p_module_name => g_module_name,
12644         p_procedure_name => l_program_name) ;
12645     --Bug#10381495
12646     IF (l_current_org_id <> NVL(l_previous_org_id,-999)) THEN
12647         INL_LOGGING_PVT.Log_Statement(
12648             p_module_name => g_module_name,
12649             p_procedure_name => l_program_name,
12650             p_debug_info => 'Restore previous context: from '||l_current_org_id||' to '||l_previous_org_id
12651         );
12652         mo_global.set_policy_context( l_previous_access_mode, l_previous_org_id);
12653     END IF;
12654     --Bug#10381495
12655     retcode := 1;
12656     errbuf := errbuf ||' G_EXC_ERROR '||SQLERRM;
12657 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
12658     -- Standard Unexpected Error Logging
12659     INL_LOGGING_PVT.Log_UnexpecError (
12660         p_module_name => g_module_name,
12661         p_procedure_name => l_program_name) ;
12662     --Bug#10381495
12663     IF (l_current_org_id <> NVL(l_previous_org_id,-999)) THEN
12664         INL_LOGGING_PVT.Log_Statement(
12665             p_module_name => g_module_name,
12666             p_procedure_name => l_program_name,
12667             p_debug_info => 'Restore previous context: from '||l_current_org_id||' to '||l_previous_org_id
12668         );
12669         mo_global.set_policy_context( l_previous_access_mode, l_previous_org_id);
12670     END IF;
12671     --Bug#10381495
12672     retcode := 2;
12673     errbuf := errbuf ||' G_EXC_UNEXPECTED_ERROR '||SQLERRM;
12674 WHEN OTHERS THEN
12675     -- Standard Unexpected Error Logging
12676     INL_LOGGING_PVT.Log_UnexpecError (
12677         p_module_name => g_module_name,
12678         p_procedure_name => l_program_name) ;
12679     --Bug#10381495
12680     IF (l_current_org_id <> NVL(l_previous_org_id,-999)) THEN
12681         INL_LOGGING_PVT.Log_Statement(
12682             p_module_name => g_module_name,
12683             p_procedure_name => l_program_name,
12684             p_debug_info => 'Restore previous context: from '||l_current_org_id||' to '||l_previous_org_id
12685         );
12686         mo_global.set_policy_context( l_previous_access_mode, l_previous_org_id);
12687     END IF;
12688     --Bug#10381495
12689     retcode := 2;
12690     errbuf := errbuf ||' OTHERS '||SQLERRM;
12691 END Complete_PendingShipment;
12692 -- Utility name   : Update_PendingMatchingFlag
12693 -- Type       : Private
12694 -- Function   : This is the Table Handler to be used for updating
12695 --              the Pending Matching Flag for given Shipment Header.
12696 -- Pre-reqs   : None
12697 -- Parameters :
12698 -- IN         : p_ship_header_id IN NUMBER
12699 --              p_pending_matching_flag IN VARCHAR
12700 -- OUT          x_return_status      OUT NOCOPY VARCHAR2
12701 --
12702 -- Version    : Current version 1.0
12703 --
12704 -- Notes      :
12705 PROCEDURE Update_PendingMatchingFlag(
12706     p_ship_header_id        IN NUMBER,
12707     p_pending_matching_flag IN VARCHAR,
12708     x_return_status OUT NOCOPY VARCHAR2
12709 ) IS
12710     l_program_name CONSTANT VARCHAR2 (100) := 'Update_PendingMatchingFlag';
12711 BEGIN
12712     INL_LOGGING_PVT.Log_BeginProc ( p_module_name => g_module_name, p_procedure_name => l_program_name) ;
12713     --  Initialize API return status to success
12714     x_return_status := L_FND_RET_STS_SUCCESS;
12715     UPDATE inl_ship_headers_all sh --Bug#10381495
12716     SET sH.pending_matching_flag    = p_pending_matching_flag   ,
12717 --        created_by                = L_FND_USER_ID             ,
12718 --        creation_date             = SYSDATE                   ,
12719         sH.last_updated_by          = L_FND_USER_ID             ,
12720         sH.last_update_date         = SYSDATE                   ,
12721         sH.last_update_login        = L_FND_LOGIN_ID            ,
12722         sH.request_id               = L_FND_CONC_REQUEST_ID     ,
12723         sH.program_id               = L_FND_CONC_PROGRAM_ID     ,
12724         sH.program_update_date      = SYSDATE                   ,
12725         sH.program_application_id   = L_FND_PROG_APPL_ID
12726       WHERE sH.ship_header_id       = p_ship_header_id;
12727     INL_LOGGING_PVT.Log_EndProc (
12728         p_module_name => g_module_name,
12729         p_procedure_name => l_program_name
12730     ) ;
12731 EXCEPTION
12732 WHEN L_FND_EXC_ERROR THEN
12733     -- Standard Expected Error Logging
12734     INL_LOGGING_PVT.Log_ExpecError (
12735         p_module_name => g_module_name,
12736         p_procedure_name => l_program_name
12737     ) ;
12738     x_return_status := L_FND_RET_STS_ERROR;
12739 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
12740     -- Standard Unexpected Error Logging
12741     INL_LOGGING_PVT.Log_UnexpecError (
12742         p_module_name => g_module_name,
12743         p_procedure_name => l_program_name
12744     ) ;
12745     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
12746 WHEN OTHERS THEN
12747     -- Standard Unexpected Error Logging
12748     INL_LOGGING_PVT.Log_UnexpecError (
12749         p_module_name => g_module_name,
12750         p_procedure_name => l_program_name
12751     ) ;
12752     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
12753     IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
12754         FND_MSG_PUB.Add_Exc_Msg (
12755             p_pkg_name => g_pkg_name,
12756             p_procedure_name => l_program_name
12757         ) ;
12758     END IF;
12759 END Update_PendingMatchingFlag;
12760 -- API name   : Delete_ChargeAssoc
12761 -- Type       : Private
12762 -- Function   : Check shipments affected by a charge deletion
12763 --              or an association of charge deletion
12764 --
12765 -- Pre-reqs   : None
12766 -- Parameters :
12767 -- IN         :
12768 --              p_api_version            IN NUMBER   Required
12769 --              p_init_msg_list          IN VARCHAR2 Optional  Default = L_FND_FALSE
12770 --              p_commit                 IN VARCHAR2 Optional  Default = L_FND_FALSE
12771 --              p_ship_header_id         IN NUMBER
12772 --              p_charge_line_id         IN NUMBER
12773 -- OUT        :
12774 --              x_return_status         OUT NOCOPY VARCHAR2
12775 --              x_msg_count             OUT NOCOPY NUMBER
12776 --              x_msg_data              OUT NOCOPY VARCHAR2
12777 --
12778 --
12779 -- Version    : Current version 1.0
12780 --
12781 -- Notes      :
12782 PROCEDURE Delete_ChargeAssoc(
12783         p_api_version    IN NUMBER,
12784         p_init_msg_list  IN VARCHAR2 := L_FND_FALSE,
12785         p_commit         IN VARCHAR2 := L_FND_FALSE,
12786         p_ship_header_id IN NUMBER,
12787         p_charge_line_id IN NUMBER,
12788         x_return_status OUT NOCOPY VARCHAR2,
12789         x_msg_count OUT NOCOPY     NUMBER,
12790         x_msg_data OUT NOCOPY      VARCHAR2
12791 ) IS
12792     l_api_name      CONSTANT VARCHAR2 (30) := 'Delete_ChargeAssoc';
12793     l_api_version   CONSTANT NUMBER        := 1.0;
12794     l_debug_info    VARCHAR2 (200) ;
12795     l_return_status VARCHAR2 (1) ;
12796     l_msg_count     NUMBER;
12797     l_msg_data      VARCHAR2 (2000) ;
12798     CURSOR c_affected_ship
12799     IS
12800          SELECT a.ship_header_id           ,
12801             sh.ship_status_code ship_status,
12802             sh.pending_matching_flag
12803            FROM inl_associations a,
12804             inl_ship_headers sh
12805           WHERE sh.ship_header_id        = a.ship_header_id
12806             AND a.from_parent_table_name = 'INL_CHARGE_LINES'
12807             AND a.from_parent_table_id   = p_charge_line_id
12808             AND a.ship_header_id        <> p_ship_header_id;
12809     r_affected_ship c_affected_ship%ROWTYPE;
12810 BEGIN
12811     -- Standard Beginning of Procedure/Function Logging
12812     INL_LOGGING_PVT.Log_BeginProc ( p_module_name => g_module_name, p_procedure_name => l_api_name) ;
12813     -- Standard Start of API savepoint
12814     SAVEPOINT Delete_ChargeAssoc_PVT;
12815     -- Initialize message list if p_init_msg_list is set to TRUE.
12816     IF FND_API.to_Boolean (p_init_msg_list) THEN
12817         FND_MSG_PUB.initialize;
12818     END IF;
12819     -- Check for call compatibility.
12820     IF NOT FND_API.Compatible_API_Call (p_current_version_number => l_api_version, p_caller_version_number => p_api_version, p_api_name => l_api_name, p_pkg_name => g_pkg_name) THEN
12821         RAISE L_FND_EXC_UNEXPECTED_ERROR;
12822     END IF;
12823     --  Initialize API return status to success
12824     x_return_status := L_FND_RET_STS_SUCCESS;
12825     -- API Body
12826     BEGIN
12827         OPEN c_affected_ship;
12828         LOOP
12829             FETCH c_affected_ship INTO r_affected_ship;
12830             EXIT
12831         WHEN c_affected_ship%NOTFOUND;
12832             INL_LOGGING_PVT.Log_Variable (p_module_name => g_module_name, p_procedure_name => l_api_name, p_var_name => 'ship_status', p_var_value => r_affected_ship.ship_status) ;
12833             IF (r_affected_ship.ship_status             = 'VALIDATED') THEN
12834                 Set_ToRevalidate (1.0, L_FND_FALSE, L_FND_FALSE, r_affected_ship.ship_header_id, l_msg_count, l_msg_data, l_return_status) ;
12835                 -- If any errors happen abort the process.
12836                 IF l_return_status = L_FND_RET_STS_ERROR THEN
12837                     RAISE L_FND_EXC_ERROR;
12838                 ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
12839                     RAISE L_FND_EXC_UNEXPECTED_ERROR;
12840                 END IF;
12841             ELSIF (r_affected_ship.ship_status = 'COMPLETED') THEN
12842                 Update_PendingMatchingFlag (r_affected_ship.ship_header_id, 'Y', l_return_status) ;
12843                 IF l_return_status <> L_FND_RET_STS_SUCCESS THEN
12844                     FND_MESSAGE.SET_NAME ('INL', 'INL_UNEXPECTED_ERR') ;
12845                     FND_MSG_PUB.ADD;
12846                     IF l_return_status = L_FND_RET_STS_ERROR THEN
12847                         RAISE L_FND_EXC_ERROR;
12848                     ELSE
12849                         RAISE L_FND_EXC_UNEXPECTED_ERROR;
12850                     END IF;
12851                 END IF;
12852             END IF;
12853         END LOOP;
12854         CLOSE c_affected_ship;
12855     END;
12856     -- Standard check of p_commit.
12857     IF FND_API.To_Boolean (p_commit) THEN
12858         COMMIT WORK;
12859     END IF;
12860     -- Standard call to get message count and if count is 1, get message info.
12861     FND_MSG_PUB.Count_And_Get (
12862         p_encoded => L_FND_FALSE,
12863         p_count => x_msg_count,
12864         p_data => x_msg_data) ;
12865     -- Standard End of Procedure/Function Logging
12866     INL_LOGGING_PVT.Log_EndProc (
12867         p_module_name => g_module_name,
12868         p_procedure_name => l_api_name) ;
12869 EXCEPTION
12870 WHEN L_FND_EXC_ERROR THEN
12871     -- Standard Expected Error Logging
12872     INL_LOGGING_PVT.Log_ExpecError (
12873         p_module_name => g_module_name,
12874         p_procedure_name => l_api_name) ;
12875     ROLLBACK TO Delete_ChargeAssoc_PVT;
12876     x_return_status                      := L_FND_RET_STS_ERROR;
12877     FND_MSG_PUB.Count_And_Get (
12878         p_encoded => L_FND_FALSE,
12879         p_count => x_msg_count,
12880         p_data => x_msg_data) ;
12881 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
12882     -- Standard Unexpected Error Logging
12883     INL_LOGGING_PVT.Log_UnexpecError (
12884         p_module_name => g_module_name,
12885         p_procedure_name => l_api_name) ;
12886     ROLLBACK TO Delete_ChargeAssoc_PVT;
12887     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
12888     FND_MSG_PUB.Count_And_Get (
12889         p_encoded => L_FND_FALSE,
12890         p_count => x_msg_count,
12891         p_data => x_msg_data) ;
12892 WHEN OTHERS THEN
12893     -- Standard Unexpected Error Logging
12894     INL_LOGGING_PVT.Log_UnexpecError (
12895         p_module_name => g_module_name,
12896         p_procedure_name => l_api_name) ;
12897     ROLLBACK TO Delete_ChargeAssoc_PVT;
12898     x_return_status                                := L_FND_RET_STS_UNEXP_ERROR ;
12899     IF FND_MSG_PUB.Check_Msg_Level (
12900             p_message_level => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
12901     ) THEN
12902         FND_MSG_PUB.Add_Exc_Msg (
12903             p_pkg_name        => g_pkg_name,
12904             p_procedure_name => l_api_name) ;
12905     END IF;
12906     FND_MSG_PUB.Count_And_Get ( p_encoded => L_FND_FALSE, p_count => x_msg_count, p_data => x_msg_data) ;
12907 END Delete_ChargeAssoc;
12908 
12909 -- Utility name   : Get_MatchedTaxNRecAmt
12910 -- Type       : Public
12911 -- Function   : Get the sum of Non-Recoverable Tax
12912 --              amounts for a particular Tax Line on LCM.
12913 --              This function can also return Taxes on a particular Cost Factor.
12914 --
12915 -- Pre-reqs   : None
12916 -- Parameters :
12917 -- IN         : p_ship_header_id       IN NUMBER
12918 --              p_ship_line_id         IN NUMBER
12919 --              p_charge_line_type_id  IN NUMBER
12920 --              p_tax_code             IN VARCHAR2
12921 --              p_functional_curr_code IN VARCHAR2
12922 --
12923 -- Version    : Current version 1.0
12924 --
12925 -- Notes      :
12926 FUNCTION Get_MatchedTaxNRecAmt(
12927     p_ship_header_id       IN NUMBER,
12928     p_ship_line_id         IN NUMBER,
12929     p_charge_line_type_id  IN NUMBER,
12930     p_tax_code             IN VARCHAR2
12931 --  p_functional_curr_code IN VARCHAR2  SCM-051
12932 
12933 ) RETURN NUMBER IS
12934 
12935     l_program_name CONSTANT VARCHAR2(30) := 'Get_MatchedTaxNRecAmt';
12936     l_debug_info VARCHAR2(200);
12937     l_nrec_tax_amt NUMBER;
12938 
12939 BEGIN
12940 
12941     -- Standard Beginning of Procedure/Function Logging
12942     INL_LOGGING_PVT.Log_BeginProc (
12943         p_module_name => g_module_name,
12944         p_procedure_name => l_program_name) ;
12945     -- Logging variables
12946     INL_LOGGING_PVT.Log_Variable (
12947         p_module_name => g_module_name,
12948         p_procedure_name => l_program_name,
12949         p_var_name => 'p_ship_header_id',
12950         p_var_value => p_ship_header_id);
12951     INL_LOGGING_PVT.Log_Variable (
12952         p_module_name => g_module_name,
12953         p_procedure_name => l_program_name,
12954         p_var_name => 'p_ship_line_id',
12955         p_var_value => p_ship_line_id) ;
12956     INL_LOGGING_PVT.Log_Variable (
12957         p_module_name => g_module_name,
12958         p_procedure_name => l_program_name,
12959         p_var_name => 'p_charge_line_type_id',
12960         p_var_value => p_charge_line_type_id) ;
12961     INL_LOGGING_PVT.Log_Variable (
12962         p_module_name => g_module_name,
12963         p_procedure_name => l_program_name,
12964         p_var_name => 'p_tax_code',
12965         p_var_value => p_tax_code) ;
12966 /* SCM-051
12967     INL_LOGGING_PVT.Log_Variable (
12968         p_module_name => g_module_name,
12969         p_procedure_name => l_program_name,
12970         p_var_name => 'p_functional_curr_code',
12971         p_var_value => p_functional_curr_code) ;
12972 */
12973 --SCM-051
12974         SELECT SUM(NVL(a.nrec_tax_amt,0) * NVL(a.matched_curr_conversion_rate,1)) -- Bug #10102991 --Bug#1405859
12975          INTO l_nrec_tax_amt
12976          FROM inl_matches a
12977         WHERE a.ship_header_id = p_ship_header_id
12978           AND a.to_parent_table_name  = 'INL_SHIP_LINES'
12979           AND a.to_parent_table_id = (SELECT NVL(MAX(b.parent_ship_line_id), p_ship_line_id)
12980                                       FROM inl_ship_lines_all b
12981                                       WHERE b.ship_line_id = p_ship_line_id)
12982 
12983           AND a.match_type_code = 'TAX'
12984           AND (p_charge_line_type_id IS NULL OR a.charge_line_type_id = p_charge_line_type_id)
12985           AND (p_tax_code IS NULL OR a.tax_code = p_tax_code)
12986           -- Bug 8879575
12987           AND a.adjustment_num =     (SELECT NVL(MAX(c.adjustment_num), a.adjustment_num)
12988                                       FROM inl_matches c
12989                                       WHERE c.ship_header_id = a.ship_header_id
12990                                       AND c.from_parent_table_name = a.from_parent_table_name
12991                                       AND c.from_parent_table_id = a.from_parent_table_id
12992                                       AND c.to_parent_table_name = a.to_parent_table_name
12993                                       AND c.to_parent_table_id = a.to_parent_table_id
12994                                       AND c.match_type_code = a.match_type_code
12995                                       AND c.tax_code = a.tax_code
12996                                       AND c.existing_match_info_flag = 'Y')
12997           AND NOT EXISTS (SELECT 1
12998                           FROM inl_matches d
12999                           WHERE d.ship_header_id = a.ship_header_id
13000                           AND d.from_parent_table_name = a.from_parent_table_name
13001                           AND d.from_parent_table_id = a.from_parent_table_id
13002                           AND d.to_parent_table_name = a.to_parent_table_name
13003                           AND d.to_parent_table_id = a.to_parent_table_id
13004                           AND d.existing_match_info_flag = 'Y'
13005                           AND d.parent_match_id = a.match_id)
13006           -- Bug 8879575
13007 --Bug#14058596      GROUP BY a.matched_curr_code, a.matched_curr_conversion_rate
13008       ;
13009 
13010     INL_LOGGING_PVT.Log_Variable (
13011         p_module_name => g_module_name,
13012         p_procedure_name => l_program_name,
13013         p_var_name => 'l_nrec_tax_amt',
13014         p_var_value => l_nrec_tax_amt) ;
13015 
13016     -- Standard End of Procedure/Function Logging
13017     INL_LOGGING_PVT.Log_EndProc (
13018         p_module_name => g_module_name,
13019         p_procedure_name => l_program_name) ;
13020     RETURN l_nrec_tax_amt;
13021 EXCEPTION
13022 WHEN OTHERS THEN
13023     -- Standard Unexpected Error Logging
13024     INL_LOGGING_PVT.Log_UnexpecError (
13025         p_module_name => g_module_name,
13026         p_procedure_name => l_program_name) ;
13027     IF FND_MSG_PUB.Check_Msg_Level (
13028             p_message_level  => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
13029     ) THEN
13030         FND_MSG_PUB.Add_Exc_Msg (
13031             p_pkg_name => g_pkg_name,
13032             p_procedure_name => l_program_name) ;
13033     END IF;
13034     RETURN null;
13035 END Get_MatchedTaxNRecAmt;
13036 
13037 -- Utility name   : Get_MatchedChargeAmt
13038 -- Type       : Public
13039 -- Function   : Get the sum of Matched Amounts
13040 --              for a particular Cost Factor.
13041 --
13042 --
13043 -- Pre-reqs   : None
13044 -- Parameters :
13045 -- IN         : p_ship_header_id       IN NUMBER
13046 --              p_ship_line_id         IN NUMBER
13047 --              p_charge_line_type_id  IN NUMBER
13048 --              p_functional_curr_code IN VARCHAR2
13049 --
13050 -- Version    : Current version 1.0
13051 --
13052 -- Notes      :
13053 FUNCTION Get_MatchedChargeAmt(
13054     p_ship_header_id       IN NUMBER,
13055     p_ship_line_id         IN NUMBER,
13056     p_charge_line_type_id  IN NUMBER
13057 --  p_functional_curr_code IN VARCHAR2  SCM-051
13058 ) RETURN NUMBER IS
13059 
13060     l_program_name CONSTANT VARCHAR2(30) := 'Get_MatchedChargeAmt';
13061     l_debug_info VARCHAR2(200);
13062     l_matched_charge_amt NUMBER;
13063 
13064 BEGIN
13065 
13066     -- Standard Beginning of Procedure/Function Logging
13067     INL_LOGGING_PVT.Log_BeginProc (
13068         p_module_name => g_module_name,
13069         p_procedure_name => l_program_name) ;
13070     -- Logging variables
13071     INL_LOGGING_PVT.Log_Variable (
13072         p_module_name => g_module_name,
13073         p_procedure_name => l_program_name,
13074         p_var_name => 'p_ship_header_id',
13075         p_var_value => p_ship_header_id);
13076     INL_LOGGING_PVT.Log_Variable (
13077         p_module_name => g_module_name,
13078         p_procedure_name => l_program_name,
13079         p_var_name => 'p_ship_line_id',
13080         p_var_value => p_ship_line_id) ;
13081     INL_LOGGING_PVT.Log_Variable (
13082         p_module_name => g_module_name,
13083         p_procedure_name => l_program_name,
13084         p_var_name => 'p_charge_line_type_id',
13085         p_var_value => p_charge_line_type_id) ;
13086 /* SCM-051
13087     INL_LOGGING_PVT.Log_Variable (
13088         p_module_name => g_module_name,
13089         p_procedure_name => l_program_name,
13090         p_var_name => 'p_functional_curr_code',
13091         p_var_value => p_functional_curr_code) ;
13092 */
13093     --SCM-051
13094        SELECT SUM(NVL(a.matched_amt,0) * NVL(a.matched_curr_conversion_rate,1)) -- Bug #10102991--Bug#14058596
13095           INTO l_matched_charge_amt
13096           FROM inl_matches a
13097          WHERE a.ship_header_id = p_ship_header_id
13098            AND a.to_parent_table_name  = 'INL_SHIP_LINES'
13099            AND a.to_parent_table_id = (select NVL(MAX(b.parent_ship_line_id), p_ship_line_id)
13100                                             from inl_ship_lines_all b
13101                                            where b.ship_line_id = p_ship_line_id)
13102            AND a.match_type_code = 'CHARGE'
13103            AND a.charge_line_type_id = p_charge_line_type_id
13104            -- Bug 8879575
13105            AND a.adjustment_num = (select NVL(MAX(c.adjustment_num), a.adjustment_num)
13106                                         from inl_matches c
13107                                        where c.ship_header_id = a.ship_header_id
13108                                          and c.from_parent_table_name = a.from_parent_table_name
13109                                          and c.from_parent_table_id = a.from_parent_table_id
13110                                          and c.to_parent_table_name = a.to_parent_table_name
13111                                          and c.to_parent_table_id = a.to_parent_table_id
13112                                          and c.match_type_code = a.match_type_code
13113                                          and c.charge_line_type_id = a.charge_line_type_id
13114                                          and c.existing_match_info_flag = 'Y')
13115            AND NOT EXISTS (select 1
13116                              from inl_matches d
13117                             where d.ship_header_id = a.ship_header_id
13118                               and d.from_parent_table_name = a.from_parent_table_name
13119                               and d.from_parent_table_id = a.from_parent_table_id
13120                               and d.to_parent_table_name = a.to_parent_table_name
13121                               and d.to_parent_table_id = a.to_parent_table_id
13122                               and d.existing_match_info_flag = 'Y'
13123                               and d.parent_match_id = a.match_id)
13124            -- Bug 8879575
13125 --        GROUP BY a.matched_curr_code, a.matched_curr_conversion_rate SCM-051
13126     ;
13127     --SCM-051
13128 
13129     INL_LOGGING_PVT.Log_Variable ( --Bug#14058596
13130         p_module_name => g_module_name,
13131         p_procedure_name => l_program_name,
13132         p_var_name => 'l_matched_charge_amt',
13133         p_var_value => l_matched_charge_amt) ;
13134 
13135     -- Standard End of Procedure/Function Logging
13136     INL_LOGGING_PVT.Log_EndProc ( p_module_name => g_module_name,
13137                                   p_procedure_name => l_program_name) ;
13138     RETURN l_matched_charge_amt;
13139 EXCEPTION
13140 WHEN OTHERS THEN
13141     -- Standard Unexpected Error Logging
13142     INL_LOGGING_PVT.Log_UnexpecError (
13143         p_module_name => g_module_name,
13144         p_procedure_name => l_program_name) ;
13145     IF FND_MSG_PUB.Check_Msg_Level (p_message_level  => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
13146         FND_MSG_PUB.Add_Exc_Msg (
13147             p_pkg_name => g_pkg_name,
13148             p_procedure_name => l_program_name) ;
13149     END IF;
13150     RETURN null;
13151 END Get_MatchedChargeAmt;
13152 
13153 -- Utility name   : Get_MatchedItemAmt
13154 -- Type       : Public
13155 -- Function   : Get the sum of match amounts for a particular Item or
13156 --              depending on the p_summarized_matched_amt, it can also
13157 --              return matched amount summarized for the LCM Ship. Line
13158 --
13159 --
13160 -- Pre-reqs   : None
13161 -- Parameters :
13162 -- IN         : p_ship_header_id       IN NUMBER
13163 --              p_ship_line_id         IN NUMBER
13164 --              p_functional_curr_code IN VARCHAR2
13165 --
13166 -- Version    : Current version 1.0
13167 --
13168 -- Notes      :
13169 FUNCTION Get_MatchedItemAmt(
13170     p_ship_header_id         IN NUMBER,
13171     p_ship_line_id           IN NUMBER,
13172     p_summarized_matched_amt IN VARCHAR2
13173 --  p_functional_curr_code IN VARCHAR2  SCM-051
13174 ) RETURN NUMBER IS
13175 
13176     l_program_name CONSTANT VARCHAR2(30) := 'Get_MatchedItemAmt';
13177     l_debug_info VARCHAR2(200);
13178     l_matched_item_amt NUMBER;
13179 
13180 BEGIN
13181 
13182     -- Standard Beginning of Procedure/Function Logging
13183     INL_LOGGING_PVT.Log_BeginProc (
13184         p_module_name => g_module_name,
13185         p_procedure_name => l_program_name) ;
13186     -- Logging variables
13187     INL_LOGGING_PVT.Log_Variable (
13188         p_module_name => g_module_name,
13189         p_procedure_name => l_program_name,
13190         p_var_name => 'p_ship_header_id',
13191         p_var_value => p_ship_header_id);
13192 
13193     INL_LOGGING_PVT.Log_Variable (
13194         p_module_name => g_module_name,
13195         p_procedure_name => l_program_name,
13196         p_var_name => 'p_ship_line_id',
13197         p_var_value => p_ship_line_id) ;
13198 /* SCM-051
13199     INL_LOGGING_PVT.Log_Variable (
13200         p_module_name => g_module_name,
13201         p_procedure_name => l_program_name,
13202         p_var_name => 'p_functional_curr_code',
13203         p_var_value => p_functional_curr_code) ;
13204 */
13205 --SCM-051
13206         SELECT SUM(NVL(a.matched_amt,0) * NVL(a.matched_curr_conversion_rate,1)) -- Bug #10102991--Bug#14058596
13207          INTO l_matched_item_amt
13208          FROM inl_matches a
13209         WHERE a.ship_header_id = p_ship_header_id
13210           AND a.to_parent_table_name  = 'INL_SHIP_LINES'
13211           AND a.to_parent_table_id = (SELECT NVL(MAX(b.parent_ship_line_id), p_ship_line_id)
13212                                       FROM inl_ship_lines_all b
13213                                       WHERE b.ship_line_id = p_ship_line_id)
13214           AND ((p_summarized_matched_amt = 'Y' AND a.match_type_code <> 'TAX')
13215                OR (p_summarized_matched_amt = 'N'
13216                AND a.match_type_code = 'ITEM'))
13217           -- Bug 8879575
13218           AND a.adjustment_num = (SELECT NVL(MAX(c.adjustment_num), a.adjustment_num)
13219                                   FROM inl_matches c
13220                                   WHERE c.ship_header_id = a.ship_header_id
13221                                   AND c.from_parent_table_name = a.from_parent_table_name
13222                                   AND c.from_parent_table_id = a.from_parent_table_id
13223                                   AND c.to_parent_table_name = a.to_parent_table_name
13224                                   AND c.to_parent_table_id = a.to_parent_table_id
13225                                   AND c.match_type_code = a.match_type_code
13226                                   AND c.existing_match_info_flag = 'Y')
13227           AND NOT EXISTS (SELECT 1
13228                           FROM inl_matches d
13229                           WHERE d.ship_header_id = a.ship_header_id
13230                           AND d.from_parent_table_name = a.from_parent_table_name
13231                           AND d.from_parent_table_id = a.from_parent_table_id
13232                           AND d.to_parent_table_name = a.to_parent_table_name
13233                           AND d.to_parent_table_id = a.to_parent_table_id
13234                           AND d.existing_match_info_flag = 'Y'
13235                           AND d.parent_match_id = a.match_id)
13236         --GROUP BY matched_curr_code, a.matched_curr_conversion_rate
13237         ;
13238 
13239     INL_LOGGING_PVT.Log_Variable ( --Bug#14058596
13240         p_module_name => g_module_name,
13241         p_procedure_name => l_program_name,
13242         p_var_name => 'l_matched_item_amt',
13243         p_var_value => l_matched_item_amt) ;
13244 
13245     -- Standard End of Procedure/Function Logging
13246     INL_LOGGING_PVT.Log_EndProc (
13247         p_module_name => g_module_name,
13248         p_procedure_name => l_program_name) ;
13249     RETURN l_matched_item_amt;
13250 EXCEPTION
13251 WHEN OTHERS THEN
13252     -- Standard Unexpected Error Logging
13253     INL_LOGGING_PVT.Log_UnexpecError (
13254         p_module_name => g_module_name,
13255         p_procedure_name => l_program_name) ;
13256     IF FND_MSG_PUB.Check_Msg_Level (
13257             p_message_level  => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
13258     ) THEN
13259         FND_MSG_PUB.Add_Exc_Msg (
13260             p_pkg_name => g_pkg_name,
13261             p_procedure_name => l_program_name) ;
13262     END IF;
13263     RETURN null;
13264 END Get_MatchedItemAmt;
13265 
13266 -- Utility name   : Get_MatchedAmt
13267 -- Type       : Public
13268 -- Function   : Get the sum of matched amounts for a given
13269 --              Item, Charge or Tax and return it converted
13270 --              into the Functional Currency Code. By using the
13271 --              p_summarized_matched_amt parameter, it is also
13272 --              possible to calculate the matched amount summarized
13273 --              for a particular LCM Shipment Line.
13274 -- Pre-reqs   : None
13275 -- Parameters :
13276 -- IN         : p_ship_header_id      IN NUMBER
13277 --              p_ship_line_id        IN NUMBER
13278 --              p_charge_line_type_id IN NUMBER
13279 --              p_tax_code            IN VARCHAR2
13280 --              p_match_table_name    IN VARCHAR2
13281 --              p_summarized_matched_amt IN VARCHAR2
13282 --
13283 -- Version    : Current version 1.0
13284 --
13285 -- Notes      :
13286 FUNCTION Get_MatchedAmt(
13287     p_ship_header_id         IN NUMBER,
13288     p_ship_line_id           IN NUMBER,
13289     p_charge_line_type_id    IN NUMBER,
13290     p_tax_code               IN VARCHAR2,
13291                         p_match_table_name       IN VARCHAR2,
13292                         p_summarized_matched_amt IN VARCHAR2) RETURN NUMBER
13293 IS
13294 
13295     l_program_name CONSTANT VARCHAR2(30) := 'Get_MatchedAmt';
13296     l_debug_info VARCHAR2(200);
13297 --    l_func_currency_code VARCHAR2(5); SCM-051
13298     l_matched_amt NUMBER:=0;
13299     l_match_type_code VARCHAR2(15);
13300 
13301 BEGIN
13302 
13303     -- Standard Beginning of Procedure/Function Logging
13304     INL_LOGGING_PVT.Log_BeginProc (
13305         p_module_name    => g_module_name,
13306         p_procedure_name => l_program_name) ;
13307     -- Logging variables
13308     INL_LOGGING_PVT.Log_Variable (
13309         p_module_name    => g_module_name,
13310         p_procedure_name => l_program_name,
13311         p_var_name       => 'p_ship_header_id',
13312         p_var_value      => p_ship_header_id);
13313     INL_LOGGING_PVT.Log_Variable (
13314         p_module_name    => g_module_name,
13315         p_procedure_name => l_program_name,
13316         p_var_name       => 'p_ship_line_id',
13317         p_var_value      => p_ship_line_id) ;
13318     INL_LOGGING_PVT.Log_Variable (
13319         p_module_name    => g_module_name,
13320         p_procedure_name => l_program_name,
13321         p_var_name       => 'p_charge_line_type_id',
13322         p_var_value      => p_charge_line_type_id) ;
13323     INL_LOGGING_PVT.Log_Variable (
13324         p_module_name    => g_module_name,
13325         p_procedure_name => l_program_name,
13326         p_var_name       => 'p_tax_code',
13327         p_var_value      => p_tax_code) ;
13328     INL_LOGGING_PVT.Log_Variable (
13329         p_module_name    => g_module_name,
13330         p_procedure_name => l_program_name,
13331         p_var_name       => 'p_match_table_name',
13332         p_var_value      => p_match_table_name) ;
13333     INL_LOGGING_PVT.Log_Variable (
13334         p_module_name    => g_module_name,
13335         p_procedure_name => l_program_name,
13336         p_var_name       => 'p_summarized_matched_amt',
13337         p_var_value      => p_summarized_matched_amt) ;
13338 
13339     -- Handle Match Type Code
13340     IF(p_match_table_name = 'INL_SHIP_LINES' OR p_match_table_name IS NULL) THEN
13341         l_match_type_code := 'ITEM';
13342     ELSIF (p_match_table_name = 'INL_CHARGE_LINES') THEN
13343         l_match_type_code := 'CHARGE';
13344     ELSIF (p_match_table_name = 'INL_TAX_LINES') THEN
13345         l_match_type_code := 'TAX';
13346     END IF;
13347 /* --SCM-051
13348     -- Get the functional currency code
13349     SELECT gsb.currency_code
13350       INTO l_func_currency_code
13351       FROM inl_ship_headers_all ish,
13352            gl_sets_of_books gsb,
13353            org_organization_definitions ood
13354      WHERE ish.organization_id = ood.organization_id
13355        AND gsb.set_of_books_id = ood.set_of_books_id
13356        AND ish.ship_header_id = p_ship_header_id;
13357     INL_LOGGING_PVT.Log_Variable (
13358         p_module_name    => g_module_name,
13359         p_procedure_name => l_program_name,
13360         p_var_name       => 'l_func_currency_code',
13361         p_var_value      => l_func_currency_code) ;
13362 */
13363     IF l_match_type_code = 'ITEM' THEN
13364         l_matched_amt:= Get_MatchedItemAmt(
13365                             p_ship_header_id => p_ship_header_id,
13366                             p_ship_line_id => p_ship_line_id,
13367                             p_summarized_matched_amt => p_summarized_matched_amt
13368 --                            p_functional_curr_code => l_func_currency_code SCM-051
13369                             );
13370 
13371         -- In case of summarized match amount,
13372         -- we must add the non recoverable tax
13373         IF(p_summarized_matched_amt = 'Y') THEN
13374             INL_LOGGING_PVT.Log_Variable (
13375                 p_module_name    => g_module_name,
13376                 p_procedure_name => l_program_name,
13377                 p_var_name       => '1-l_matched_amt',
13378                 p_var_value      => l_matched_amt) ;
13379             l_matched_amt :=
13380                 l_matched_amt + NVL(Get_MatchedTaxNRecAmt(p_ship_header_id => p_ship_header_id,
13381                                                       p_ship_line_id => p_ship_line_id,
13382                                                       p_charge_line_type_id => p_charge_line_type_id,
13383                                                       p_tax_code => p_tax_code
13384 --                                                    p_functional_curr_code => l_func_currency_code SCM-051
13385                                                       ),0);
13386         END IF;
13387     ELSIF l_match_type_code = 'CHARGE' THEN
13388         l_matched_amt := Get_MatchedChargeAmt(p_ship_header_id => p_ship_header_id,
13389                                               p_ship_line_id => p_ship_line_id,
13390                                               p_charge_line_type_id => p_charge_line_type_id
13391 --                                            p_functional_curr_code => l_func_currency_code SCM-051
13392                                               );
13393     ELSIF l_match_type_code = 'TAX' THEN
13394         l_matched_amt := Get_MatchedTaxNRecAmt(p_ship_header_id => p_ship_header_id,
13395                                                p_ship_line_id => p_ship_line_id,
13396                                                p_charge_line_type_id => p_charge_line_type_id,
13397                                                p_tax_code => p_tax_code
13398 --                                            p_functional_curr_code => l_func_currency_code SCM-051
13399                                               );
13400     END IF;
13401     INL_LOGGING_PVT.Log_Variable (
13402         p_module_name    => g_module_name,
13403         p_procedure_name => l_program_name,
13404         p_var_name       => 'l_matched_amt',
13405         p_var_value      => l_matched_amt) ;
13406 
13407     -- Standard End of Procedure/Function Logging
13408     INL_LOGGING_PVT.Log_EndProc ( p_module_name => g_module_name,
13409                                   p_procedure_name => l_program_name) ;
13410     RETURN l_matched_amt;
13411 EXCEPTION
13412 WHEN OTHERS THEN
13413     -- Standard Unexpected Error Logging
13414     INL_LOGGING_PVT.Log_UnexpecError ( p_module_name => g_module_name,
13415                                        p_procedure_name => l_program_name) ;
13416     IF FND_MSG_PUB.Check_Msg_Level (p_message_level  => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
13417         FND_MSG_PUB.Add_Exc_Msg ( p_pkg_name => g_pkg_name,
13418                                   p_procedure_name => l_program_name) ;
13419     END IF;
13420     RETURN null;
13421 END Get_MatchedAmt;
13422 
13423 
13424 -- Bug #9098758
13425 -- Utility name   : Get_LastUpdateDateForShip
13426 -- Type       : Public
13427 -- Function   : Get the higher last update date of all LCM Shipment tables
13428 --              and return it.
13429 --
13430 -- Pre-reqs   : None
13431 -- Parameters :
13432 -- IN         : p_ship_header_id      IN NUMBER
13433 -- Version    : Current version 1.0
13434 --
13435 -- Notes      :
13436 FUNCTION Get_LastUpdateDateForShip(p_ship_header_id IN NUMBER) RETURN DATE
13437 IS
13438     l_header_last_update_date DATE;
13439     l_group_last_update_date DATE;
13440     l_line_last_update_date DATE;
13441     l_charge_last_update_date DATE;
13442     l_tax_last_update_date DATE;
13443     l_assoc_last_update_date DATE;
13444 
13445     --Lowest date supported by database as we need to handle null dates
13446     min_date DATE := TO_DATE('01/01/-4712','DD/MM/SYYYY');
13447 
13448     ship_last_update_date DATE;
13449     l_program_name CONSTANT VARCHAR2(30) := 'Get_LastUpdateDateForShip';
13450     l_debug_info VARCHAR2(200);
13451 
13452 BEGIN
13453     -- Standard Beginning of Procedure/Function Logging
13454     INL_LOGGING_PVT.Log_BeginProc ( p_module_name => g_module_name,
13455                                     p_procedure_name => l_program_name) ;
13456     -- Logging variables
13457     INL_LOGGING_PVT.Log_Variable ( p_module_name => g_module_name,
13458                                    p_procedure_name => l_program_name,
13459                                    p_var_name => 'p_ship_header_id',
13460                                    p_var_value => p_ship_header_id);
13461 
13462     SELECT NVL(MAX(last_update_date), min_date)
13463     INTO l_header_last_update_date
13464     FROM inl_ship_headers_all
13465     WHERE ship_header_id = p_ship_header_id;
13466 
13467     SELECT NVL(MAX(last_update_date), min_date)
13468     INTO l_group_last_update_date
13469     FROM inl_ship_line_groups
13470     WHERE ship_header_id = p_ship_header_id;
13471 
13472     SELECT NVL(MAX(last_update_date), min_date)
13473     INTO l_line_last_update_date
13474     FROM inl_ship_lines_all
13475     WHERE ship_header_id = p_ship_header_id;
13476 
13477     SELECT NVL(MAX(last_update_date), min_date)
13478     INTO l_assoc_last_update_date
13479     FROM inl_associations
13480     WHERE ship_header_id = p_ship_header_id;
13481 
13482     SELECT NVL(MAX(last_update_date), min_date)
13483     INTO l_tax_last_update_date
13484     FROM inl_tax_lines
13485     WHERE ship_header_id = p_ship_header_id;
13486 
13487     ship_last_update_date := greatest(l_header_last_update_date,
13488                                      l_group_last_update_date,
13489                                      l_line_last_update_date,
13490                                      l_assoc_last_update_date,
13491                                      l_tax_last_update_date);
13492 
13493     -- Logging variables
13494     INL_LOGGING_PVT.Log_Variable ( p_module_name => g_module_name,
13495                                    p_procedure_name => l_program_name,
13496                                    p_var_name => 'ship_last_update_date',
13497                                    p_var_value => ship_last_update_date);
13498 
13499     RETURN(ship_last_update_date);
13500 
13501 EXCEPTION
13502 WHEN OTHERS THEN
13503     -- Standard Unexpected Error Logging
13504     INL_LOGGING_PVT.Log_UnexpecError ( p_module_name => g_module_name,
13505                                        p_procedure_name => l_program_name) ;
13506     IF FND_MSG_PUB.Check_Msg_Level (p_message_level  => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
13507         FND_MSG_PUB.Add_Exc_Msg ( p_pkg_name => g_pkg_name,
13508                                   p_procedure_name => l_program_name) ;
13509     END IF;
13510     RETURN null;
13511 END Get_LastUpdateDateForShip;
13512 -- Bug /#9098758
13513 
13514 -- START Bug #13914863
13515 -- API name   : Validate_DualQuantities
13516 -- Type       : Private
13517 -- Function   : Validates Primary/Secondary quantity deviation
13518 --              when processing Dual UOM controlled items.
13519 -- Pre-reqs   : None
13520 -- Parameters :
13521 -- IN         : p_api_version         IN NUMBER
13522 --              p_init_msg_list       IN VARCHAR2 := L_FND_FALSE
13523 --              p_commit              IN VARCHAR2 := L_FND_FALSE
13524 --              p_organization_id     IN NUMBER
13525 --              p_inventory_item_id   IN NUMBER
13526 --              p_primary_qty         IN NUMBER
13527 --              p_primary_uom_code    IN VARCHAR2
13528 --              p_secondary_qty       IN NUMBER
13529 --              p_secondary_uom_code  IN VARCHAR2
13530 -- OUT
13531 --              x_return_status      OUT NOCOPY VARCHAR2
13532 --              x_msg_count          OUT NOCOPY NUMBER
13533 --              x_msg_data           OUT NOCOPY VARCHAR2
13534 --
13535 -- Version    : Current version 1.0
13536 --
13537 -- Notes      :
13538 PROCEDURE Validate_DualQuantities( p_api_version         IN NUMBER,
13539                                    p_init_msg_list       IN VARCHAR2 := L_FND_FALSE,
13540                                    p_commit              IN VARCHAR2 := L_FND_FALSE,
13541                                    p_organization_id     IN NUMBER,
13542                                    p_inventory_item_id   IN NUMBER,
13543                                    p_primary_qty         IN NUMBER,
13544                                    p_primary_uom_code    IN VARCHAR2,
13545                                    p_secondary_qty       IN NUMBER,
13546                                    p_secondary_uom_code  IN VARCHAR2,
13547                                    x_return_status      OUT NOCOPY VARCHAR2,
13548                                    x_msg_count          OUT NOCOPY NUMBER,
13549                                    x_msg_data           OUT NOCOPY VARCHAR2) IS -- Bug #13914863
13550 
13551 l_api_name CONSTANT VARCHAR2(30) := 'Validate_DualQuantities';
13552 l_debug_info VARCHAR2(200);
13553 l_api_version CONSTANT NUMBER := 1.0;
13554 l_lot_number VARCHAR2(30);
13555 l_primary_qty NUMBER;
13556 l_secondary_qty NUMBER;
13557 l_error_message VARCHAR2(2000);
13558 l_item  VARCHAR2(40);                  -- Bug #15927464
13559 
13560 BEGIN
13561     -- Standard Beginning of Procedure/Function Logging
13562     INL_LOGGING_PVT.Log_BeginProc (p_module_name => g_module_name,
13563                                    p_procedure_name => l_api_name);
13564     -- Initialize message list if p_init_msg_list is set to TRUE.
13565     IF FND_API.to_Boolean (p_init_msg_list) THEN
13566         FND_MSG_PUB.initialize;
13567     END IF;
13568     -- Check for call compatibility.
13569     IF NOT
13570         FND_API.Compatible_API_Call (
13571             l_api_version,
13572             p_api_version,
13573             l_api_name,
13574             G_PKG_NAME)
13575     THEN
13576         RAISE L_FND_EXC_UNEXPECTED_ERROR;
13577     END IF;
13578     --  Initialize API return status to success
13579     x_return_status := L_FND_RET_STS_SUCCESS;
13580 
13581     -- Assign Primary and Secondary Qty
13582     l_primary_qty := p_primary_qty;
13583     l_secondary_qty := p_secondary_qty;
13584 
13585     -- Get Lot Number for the item
13586     BEGIN
13587         SELECT start_auto_lot_number, segment1 -- Bug #15927464
13588           INTO l_lot_number, l_item  -- Bug #15927464
13589           FROM mtl_system_items
13590          WHERE organization_id = p_organization_id
13591            AND inventory_item_id = p_inventory_item_id;
13592     EXCEPTION WHEN NO_DATA_FOUND THEN
13593         l_lot_number := NULL;
13594     END;
13595 
13596     -- Bug #15927464
13597     IF p_secondary_uom_code IS NOT NULL AND l_secondary_qty IS NULL THEN
13598         l_debug_info := 'Secondary Qty should not be NULL for item: ' || l_item;
13599         INL_LOGGING_PVT.Log_Statement(p_module_name => g_module_name,
13600                                       p_procedure_name => l_api_name,
13601                                       p_debug_info => l_debug_info);
13602 
13603         FND_MESSAGE.SET_NAME('INL','INL_ERR_SECONDARY_QTY_NULL');
13604         FND_MESSAGE.SET_TOKEN ('ITEM', l_item) ;
13605         FND_MSG_PUB.ADD;
13606     END IF;
13607     -- Bug #15927464
13608 
13609     -- Quantities must be both positive or both negative
13610     IF (l_primary_qty < 0 AND l_secondary_qty > 0) OR
13611        (l_primary_qty > 0 AND l_secondary_qty < 0) THEN
13612         FND_MESSAGE.SET_NAME('INV','INV_QTYOUTOFBALANCE');
13613         FND_MSG_PUB.ADD;
13614     END IF;
13615 
13616     -- If necessary, convert to positive numbers for the deviation check
13617     IF (l_primary_qty < 0) THEN
13618         l_primary_qty := (l_primary_qty * -1);
13619         l_secondary_qty := (l_secondary_qty * -1);
13620     END IF;
13621 
13622     -- Check if quantities are in deviation
13623     l_debug_info := 'Call INV_CONVERT.within_deviation for validating deviation.';
13624     INL_LOGGING_PVT.Log_Statement (p_module_name => g_module_name,
13625                                    p_procedure_name => l_api_name,
13626                                    p_debug_info => l_debug_info);
13627     -- Bug 15827165
13628     IF(l_secondary_qty IS NOT NULL AND p_secondary_uom_code IS NOT NULL) THEN
13629         IF (INV_CONVERT.within_deviation (p_organization_id,
13630                                           p_inventory_item_id,
13631                                           l_lot_number,
13632                                           NULL,
13633                                           l_primary_qty,
13634                                           p_primary_uom_code,
13635                                           l_secondary_qty,
13636                                           p_secondary_uom_code,
13637                                           NULL,
13638                                           NULL) = 0) THEN
13639             RAISE L_FND_EXC_ERROR;
13640         END IF;
13641     END IF;
13642     -- Bug 15827165
13643 
13644     -- Standard check of p_commit.
13645     IF FND_API.To_Boolean (p_commit) THEN
13646         COMMIT WORK;
13647     END IF;
13648     -- Standard call to get message count and if count is 1, get message info.
13649     FND_MSG_PUB.Count_And_Get (
13650         p_encoded => L_FND_FALSE,
13651         p_count => x_msg_count,
13652         p_data => x_msg_data) ;
13653     -- Standard End of Procedure/Function Logging
13654     INL_LOGGING_PVT.Log_EndProc (
13655         p_module_name => g_module_name,
13656         p_procedure_name => l_api_name) ;
13657 EXCEPTION
13658 WHEN L_FND_EXC_ERROR THEN
13659     -- Standard Expected Error Logging
13660     INL_LOGGING_PVT.Log_ExpecError (
13661         p_module_name => g_module_name,
13662         p_procedure_name => l_api_name) ;
13663     x_return_status := L_FND_RET_STS_ERROR;
13664     FND_MSG_PUB.Count_And_Get (
13665         p_encoded => L_FND_FALSE,
13666         p_count => x_msg_count,
13667         p_data => x_msg_data) ;
13668 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
13669     -- Standard Unexpected Error Logging
13670     INL_LOGGING_PVT.Log_UnexpecError (
13671         p_module_name => g_module_name,
13672         p_procedure_name => l_api_name) ;
13673     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
13674     FND_MSG_PUB.Count_And_Get (
13675         p_encoded => L_FND_FALSE,
13676         p_count => x_msg_count,
13677         p_data => x_msg_data) ;
13678 WHEN OTHERS THEN
13679     -- Standard Unexpected Error Logging
13680     INL_LOGGING_PVT.Log_UnexpecError (
13681         p_module_name => g_module_name,
13682         p_procedure_name => l_api_name) ;
13683     x_return_status := L_FND_RET_STS_UNEXP_ERROR ;
13684     IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
13685         FND_MSG_PUB.Add_Exc_Msg (
13686             p_pkg_name => g_pkg_name,
13687             p_procedure_name => l_api_name) ;
13688     END IF;
13689     FND_MSG_PUB.Count_And_Get (
13690         p_encoded => L_FND_FALSE,
13691         p_count => x_msg_count,
13692         p_data => x_msg_data) ;
13693 END Validate_DualQuantities;
13694 
13695 -- Utility name: Derive_DualQuantities
13696 -- Type       : Public
13697 -- Function   : Derive Primary/Secondary Qty when processing
13698 --              Dual Uom controlled items
13699 -- Pre-reqs   : None
13700 -- Parameters :
13701 -- IN         : p_organization_id     IN NUMBER
13702 --              p_inventory_item_id   IN NUMBER
13703 --              p_calling_field       IN VARCHAR2
13704 --              p_txn_qty             IN NUMBER
13705 --              p_txn_uom_code        IN VARCHAR2
13706 --              p_secondary_qty       IN NUMBER
13707 --              p_secondary_uom_code  IN VARCHAR2
13708 --
13709 -- Notes      :
13710 FUNCTION Derive_DualQuantities(p_organization_id     IN NUMBER,
13711                                p_inventory_item_id   IN NUMBER,
13712                                p_calling_field       IN VARCHAR2,
13713                                p_txn_qty             IN NUMBER,
13714                                p_txn_uom_code        IN VARCHAR2,
13715                                p_secondary_qty       IN NUMBER,
13716                                p_secondary_uom_code  IN VARCHAR2) RETURN NUMBER IS -- Bug #13914863
13717 
13718 l_func_name CONSTANT VARCHAR2(30) := 'Derive_DualQuantities';
13719 l_debug_info VARCHAR2(200);
13720 
13721 l_tracking_quantity_ind VARCHAR2(30);
13722 l_secondary_default_ind VARCHAR2(30);
13723 l_ont_pricing_qty_source VARCHAR2(30);
13724 l_lot_number VARCHAR2(30);
13725 l_converted_qty NUMBER;
13726 
13727 BEGIN
13728     -- Standard Beginning of Procedure/Function Logging
13729     INL_LOGGING_PVT.Log_BeginProc (
13730         p_module_name => g_module_name,
13731         p_procedure_name => l_func_name) ;
13732     -- Logging variables
13733     INL_LOGGING_PVT.Log_Variable (
13734         p_module_name => g_module_name,
13735         p_procedure_name => l_func_name,
13736         p_var_name => 'p_organization_id',
13737         p_var_value => p_organization_id);
13738     INL_LOGGING_PVT.Log_Variable (
13739         p_module_name => g_module_name,
13740         p_procedure_name => l_func_name,
13741         p_var_name => 'p_inventory_item_id',
13742         p_var_value => p_inventory_item_id) ;
13743     INL_LOGGING_PVT.Log_Variable (
13744         p_module_name => g_module_name,
13745         p_procedure_name => l_func_name,
13746         p_var_name => 'p_calling_field',
13747         p_var_value => p_calling_field) ;
13748     INL_LOGGING_PVT.Log_Variable (
13749         p_module_name => g_module_name,
13750         p_procedure_name => l_func_name,
13751         p_var_name => 'p_txn_qty',
13752         p_var_value => p_txn_qty) ;
13753     INL_LOGGING_PVT.Log_Variable (
13754         p_module_name => g_module_name,
13755         p_procedure_name => l_func_name,
13756         p_var_name => 'p_txn_uom_code',
13757         p_var_value => p_txn_uom_code) ;
13758     INL_LOGGING_PVT.Log_Variable (
13759         p_module_name => g_module_name,
13760         p_procedure_name => l_func_name,
13761         p_var_name => 'p_secondary_qty',
13762         p_var_value => p_secondary_qty) ;
13763     INL_LOGGING_PVT.Log_Variable (
13764         p_module_name => g_module_name,
13765         p_procedure_name => l_func_name,
13766         p_var_name => 'p_secondary_uom_code',
13767         p_var_value => p_secondary_uom_code) ;
13768 
13769     -- Get the Item Attributes
13770     SELECT tracking_quantity_ind,
13771            secondary_default_ind,
13772            ont_pricing_qty_source,
13773            start_auto_lot_number
13774       INTO l_tracking_quantity_ind,
13775            l_secondary_default_ind,
13776            l_ont_pricing_qty_source,
13777            l_lot_number
13778       FROM mtl_system_items
13779      WHERE organization_id = p_organization_id
13780        AND inventory_item_id = p_inventory_item_id;
13781 
13782     -- If Defaulting method is 'Fixed', 'Default' or 'No Default'
13783     IF (l_secondary_default_ind = 'D' OR l_secondary_default_ind = 'F') OR
13784          ((l_secondary_default_ind = 'N') AND (p_txn_uom_code = p_secondary_uom_code)) THEN
13785 
13786         -- Branch depending on calling field. 'T' Transaction Qty, 'S' Secondary Qty.
13787         IF (p_calling_field = 'T') THEN
13788             l_debug_info := 'Call INV_CONVERT.inv_um_convert for deriving Secondary Qty based on Transaction Qty.';
13789             INL_LOGGING_PVT.Log_Statement (p_module_name => g_module_name,
13790                                            p_procedure_name => l_func_name,
13791                                            p_debug_info => l_debug_info);
13792 
13793             -- In this case we will use Primary Qty data as base to retrieve Secondary Qty
13794             l_converted_qty := INV_CONVERT.inv_um_convert(p_inventory_item_id,
13795                                                           l_lot_number,
13796                                                           p_organization_id,
13797                                                           NULL,
13798                                                           p_txn_qty,
13799                                                           p_txn_uom_code,
13800                                                           p_secondary_uom_code,
13801                                                           NULL, NULL);
13802             INL_LOGGING_PVT.Log_Variable (
13803             p_module_name => g_module_name,
13804             p_procedure_name => l_func_name,
13805             p_var_name => 'l_converted_qty',
13806             p_var_value => l_converted_qty) ;
13807 
13808             IF (l_converted_qty = -99999) THEN
13809                 FND_MESSAGE.SET_NAME('INV','INV_NO_CONVERSION_ERR');
13810                 FND_MSG_PUB.ADD;
13811             END IF;
13812         ELSIF (p_calling_field = 'S') THEN
13813             l_debug_info := 'Call INV_CONVERT.inv_um_convert for deriving Transaction Qty based on Secondary Qty.';
13814             INL_LOGGING_PVT.Log_Statement (p_module_name => g_module_name,
13815                                            p_procedure_name => l_func_name,
13816                                            p_debug_info => l_debug_info) ;
13817 
13818             -- In this case we will use Secondary Qty data as base to retrieve Transaction Qty
13819             l_converted_qty := INV_CONVERT.inv_um_convert(p_inventory_item_id,
13820                                                           l_lot_number,
13821                                                           p_organization_id,
13822                                                           NULL,
13823                                                           p_secondary_qty,
13824                                                           p_secondary_uom_code,
13825                                                           p_txn_uom_code,
13826                                                           NULL, NULL);
13827             INL_LOGGING_PVT.Log_Variable (
13828             p_module_name => g_module_name,
13829             p_procedure_name => l_func_name,
13830             p_var_name => 'l_converted_qty',
13831             p_var_value => l_converted_qty) ;
13832 
13833             IF (l_converted_qty = -99999) THEN
13834                 FND_MESSAGE.SET_NAME('INV','INV_NO_CONVERSION_ERR');
13835                 FND_MSG_PUB.ADD;
13836             END IF;
13837         END IF;
13838     END IF;
13839  RETURN l_converted_qty;
13840 EXCEPTION
13841 WHEN OTHERS THEN
13842     -- Standard Unexpected Error Logging
13843     INL_LOGGING_PVT.Log_UnexpecError (
13844         p_module_name => g_module_name,
13845         p_procedure_name => l_func_name) ;
13846     IF FND_MSG_PUB.Check_Msg_Level (
13847             p_message_level  => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
13848     ) THEN
13849         FND_MSG_PUB.Add_Exc_Msg (
13850             p_pkg_name => g_pkg_name,
13851             p_procedure_name => l_func_name) ;
13852     END IF;
13853     RETURN 0;
13854 END Derive_DualQuantities;
13855 
13856 -- END  Bug #13914863
13857 
13858 
13859 -- SCM-051
13860 -- API name   : Discard_Updates
13861 -- Type       : Private
13862 -- Function   : Discard ELC changes
13863 -- Pre-reqs   : None
13864 -- Parameters :
13865 -- IN         : p_api_version IN NUMBER   Required
13866 --              p_init_msg_list IN VARCHAR2 Optional  Default = L_FND_FALSE
13867 --              p_commit IN VARCHAR2 Optional  Default = L_FND_FALSE
13868 --              p_ship_header_id IN  NUMBER,
13869 -- OUT          x_return_status OUT NOCOPY VARCHAR2
13870 --              x_msg_count OUT NOCOPY NUMBER
13871 --              x_msg_data OUT NOCOPY VARCHAR2
13872 --
13873 -- Version    : Current version 1.0
13874 --
13875 -- Notes      :
13876 PROCEDURE Discard_Updates(p_api_version    IN NUMBER,
13877                           p_init_msg_list  IN VARCHAR2 := L_FND_FALSE,
13878                           p_commit         IN VARCHAR2 := L_FND_FALSE,
13879                           p_ship_header_id IN NUMBER,
13880                           x_return_status  OUT NOCOPY VARCHAR2,
13881                           x_msg_count      OUT NOCOPY NUMBER,
13882                           x_msg_data       OUT NOCOPY VARCHAR2)
13883 IS
13884 
13885     l_program_name CONSTANT VARCHAR2(30) := 'Discard_Updates';
13886     l_api_version CONSTANT NUMBER := 1.0;
13887     l_debug_info VARCHAR2(200);
13888     l_return_status VARCHAR2(1);
13889     l_msg_count NUMBER;
13890     l_msg_data VARCHAR2(2000);
13891 
13892     -- charge lines to be deleted
13893     CURSOR c_delete_cl IS
13894         SELECT cl.charge_line_id
13895         FROM inl_charge_lines cl
13896         WHERE cl.adjustment_type_flag = 'A'
13897         AND cl.parent_charge_line_id IS NULL
13898         AND EXISTS (SELECT 1
13899                     FROM inl_associations a
13900                     WHERE a.from_parent_table_name = 'INL_CHARGE_LINES'
13901                     AND a.from_parent_table_id =  cl.charge_line_id
13902                     AND a.adjustment_type_flag = 'A'
13903                     AND a.ship_header_id = p_ship_header_id
13904                     AND ROWNUM < 2
13905                     )
13906         AND NOT EXISTS (SELECT 1
13907                     FROM inl_associations a
13908                     WHERE a.from_parent_table_name = 'INL_CHARGE_LINES'
13909                     AND a.from_parent_table_id =  cl.charge_line_id
13910                     AND a.adjustment_type_flag IS NOT NULL
13911                     AND a.adjustment_type_flag <> 'A'
13912                     AND a.ship_header_id = p_ship_header_id
13913                     AND ROWNUM < 2
13914                     )
13915         AND NOT EXISTS (SELECT 1
13916                     FROM inl_charge_lines cl0
13917                     WHERE cl0.parent_charge_line_id = cl.charge_line_id
13918                     AND ROWNUM < 2
13919                     );
13920 
13921     TYPE l_delete_cl_lst_tp IS
13922     TABLE OF c_delete_cl%ROWTYPE INDEX BY BINARY_INTEGER;
13923     l_delete_cl_lst l_delete_cl_lst_tp;
13924 
13925 BEGIN
13926      INL_LOGGING_PVT.Log_BeginProc (p_module_name => g_module_name,
13927                                     p_procedure_name => l_program_name) ;
13928 
13929     -- Standard Start of API savepoint
13930     SAVEPOINT Discard_Updates_PVT;
13931 
13932     -- Initialize message list if p_init_msg_list is set to TRUE.
13933     IF FND_API.to_Boolean (p_init_msg_list) THEN
13934         FND_MSG_PUB.initialize;
13935     END IF;
13936 
13937     -- Check for call compatibility.
13938     IF NOT FND_API.Compatible_API_Call (p_current_version_number => l_api_version,
13939                                         p_caller_version_number => p_api_version,
13940                                         p_api_name => l_program_name,
13941                                         p_pkg_name => G_PKG_NAME) THEN
13942         RAISE L_FND_EXC_UNEXPECTED_ERROR;
13943     END IF;
13944 
13945     --  Initialize API return status to success
13946     x_return_status := L_FND_RET_STS_SUCCESS;
13947 
13948     l_debug_info := 'Discard Shipment Line changes';
13949     INL_LOGGING_PVT.Log_Statement (p_module_name => g_module_name,
13950                                    p_procedure_name => l_program_name,
13951                                    p_debug_info => l_debug_info);
13952 
13953      UPDATE inl_ship_lines_all isl
13954        SET isl.last_update_login            = l_fnd_login_id,
13955            isl.last_update_date             = SYSDATE,
13956            isl.last_updated_by              = l_fnd_user_id,
13957            isl.new_txn_unit_price           = NULL,
13958            isl.new_currency_conversion_type = NULL,
13959            isl.new_currency_conversion_date = NULL,
13960            isl.new_currency_conversion_rate = NULL
13961      WHERE isl.ship_header_id = p_ship_header_id
13962        AND isl.adjustment_num = (SELECT MIN(a.adjustment_num)
13963                                    FROM inl_ship_lines_all a
13964                                   WHERE a.ship_header_id = p_ship_header_id)
13965     AND (   isl.new_txn_unit_price           IS NOT NULL
13966          OR isl.new_currency_conversion_type IS NOT NULL
13967          OR isl.new_currency_conversion_date IS NOT NULL
13968          OR isl.new_currency_conversion_rate IS NOT NULL)
13969 
13970      ;
13971 
13972     l_debug_info := 'Revert Charge Line adjustment values';
13973     INL_LOGGING_PVT.Log_Statement (p_module_name => g_module_name,
13974                                    p_procedure_name => l_program_name,
13975                                    p_debug_info => l_debug_info);
13976     UPDATE inl_charge_lines icl
13977        SET icl.last_update_login            = l_fnd_login_id,
13978            icl.last_update_date             = SYSDATE,
13979            icl.last_updated_by              = l_fnd_user_id,
13980            icl.new_charge_amt               = NULL,
13981            icl.new_currency_conversion_type = NULL,
13982            icl.new_currency_conversion_date = NULL,
13983            icl.new_currency_conversion_rate = NULL,
13984            icl.adjustment_type_flag         = NULL -- Bug #13643479
13985      WHERE icl.charge_line_id = (
13986                                  SELECT
13987                                      cl1.charge_line_id
13988                                   FROM
13989                                      inl_charge_lines cl1
13990                                  WHERE
13991                                  CONNECT_BY_ISLEAF = 1
13992                                   START WITH cl1.charge_line_id = icl.charge_line_id
13993                                   CONNECT BY PRIOR cl1.charge_line_id = cl1.parent_charge_line_id
13994                                 )
13995     AND EXISTS (
13996                 SELECT 1
13997                 FROM inl_associations a
13998                 WHERE a.from_parent_table_name  = 'INL_CHARGE_LINES'
13999                 AND a.ship_header_id            = p_ship_header_id
14000                 AND a.from_parent_table_id      = (
14001                                                 SELECT
14002                                                     cl1.charge_line_id
14003                                                 FROM
14004                                                     inl_charge_lines cl1
14005                                                 WHERE
14006                                                 CONNECT_BY_ISLEAF = 1
14007                                                 START WITH cl1.charge_line_id = icl.charge_line_id
14008                                                 CONNECT BY PRIOR cl1.parent_charge_line_id = cl1.charge_line_id
14009                                                 )
14010                 )
14011     AND (   icl.new_charge_amt               IS NOT NULL
14012          OR icl.new_currency_conversion_type IS NOT NULL
14013          OR icl.new_currency_conversion_date IS NOT NULL
14014          OR icl.new_currency_conversion_rate IS NOT NULL
14015          OR icl.adjustment_type_flag         IS NOT NULL)
14016     AND  NVL(icl.adjustment_type_flag, 'X') NOT IN ('Z', 'A')
14017  ;
14018 --
14019     -- populate cursor with clines to be deleted
14020     OPEN c_delete_cl;
14021     FETCH c_delete_cl BULK COLLECT INTO l_delete_cl_lst;
14022     CLOSE c_delete_cl;
14023 
14024 --
14025     l_debug_info := 'Delete new associations ADDED as part of the adjustment';
14026     INL_LOGGING_PVT.Log_Statement (p_module_name => g_module_name,
14027                                    p_procedure_name => l_program_name,
14028                                    p_debug_info => l_debug_info);
14029 
14030     DELETE FROM inl_associations a
14031     WHERE a.adjustment_type_flag = 'A'
14032     AND a.ship_header_id = p_ship_header_id
14033     AND a.from_parent_table_name = 'INL_CHARGE_LINES'
14034     AND a.from_parent_table_id = ( --Charge Line should be the top of charge lines
14035                                 SELECT
14036                                     cl1.charge_line_id
14037                                 FROM
14038                                     inl_charge_lines cl1
14039                                 WHERE
14040                                 CONNECT_BY_ISLEAF = 1
14041                                 START WITH cl1.charge_line_id = a.from_parent_table_id
14042                                 CONNECT BY PRIOR cl1.charge_line_id = cl1.parent_charge_line_id
14043                                 );
14044 
14045 --
14046     l_debug_info := 'Delete new charge lines ADDED as part of the adjustment';
14047     INL_LOGGING_PVT.Log_Statement (p_module_name => g_module_name,
14048                                    p_procedure_name => l_program_name,
14049                                    p_debug_info => l_debug_info);
14050 
14051     IF NVL (l_delete_cl_lst.LAST, 0) > 0 THEN
14052         FOR i IN NVL (l_delete_cl_lst.FIRST, 0) ..NVL (l_delete_cl_lst.LAST, 0)
14053         LOOP
14054             DELETE FROM inl_charge_lines
14055             WHERE charge_line_id = l_delete_cl_lst(i).charge_line_id;
14056         END LOOP;
14057     END IF;
14058 --
14059     l_debug_info := 'Revert Association that were flagged to be removed';
14060     INL_LOGGING_PVT.Log_Statement (p_module_name => g_module_name,
14061                                    p_procedure_name => l_program_name,
14062                                    p_debug_info => l_debug_info);
14063 
14064     UPDATE inl_associations a
14065     SET a.adjustment_type_flag = NULL,
14066         a.last_update_login    = l_fnd_login_id,
14067         a.last_update_date     = SYSDATE,
14068         a.last_updated_by      = l_fnd_user_id
14069     WHERE a.adjustment_type_flag = 'R'
14070     AND a.ship_header_id = p_ship_header_id
14071     AND a.from_parent_table_name = 'INL_CHARGE_LINES'
14072     AND a.from_parent_table_id = ( --Charge Line should be the top of charge lines
14073                                 SELECT
14074                                     cl1.charge_line_id
14075                                 FROM
14076                                     inl_charge_lines cl1
14077                                 WHERE
14078                                 CONNECT_BY_ISLEAF = 1
14079                                 START WITH cl1.charge_line_id = a.from_parent_table_id
14080                                 CONNECT BY PRIOR cl1.parent_charge_line_id = cl1.charge_line_id
14081                                 );
14082 
14083     l_debug_info := 'Set to N the ELC flag on Shipment Headers';
14084     INL_LOGGING_PVT.Log_Statement (p_module_name => g_module_name,
14085                                    p_procedure_name => l_program_name,
14086                                    p_debug_info => l_debug_info);
14087     UPDATE inl_ship_headers_all a
14088        SET a.pending_update_flag = 'N',
14089        a.last_update_login    = l_fnd_login_id,
14090        a.last_update_date     = SYSDATE,
14091        a.last_updated_by      = l_fnd_user_id
14092      WHERE a.ship_header_id = p_ship_header_id
14093      AND a.pending_update_flag IS NOT NULL
14094      ;
14095 
14096     l_debug_info := 'Call INL_INTERFACE_PVT.Reset_MatchInt';
14097     INL_LOGGING_PVT.Log_Statement(p_module_name => g_module_name,
14098                                   p_procedure_name => l_program_name,
14099                                   p_debug_info => l_debug_info);
14100 
14101     INL_INTERFACE_PVT.Reset_MatchInt(p_ship_header_id => p_ship_header_id,
14102                    x_return_status => l_return_status);
14103 
14104     -- If unexpected errors happen abort API
14105     IF l_return_status   = L_FND_RET_STS_ERROR THEN
14106         x_return_status := l_return_status;
14107         RAISE L_FND_EXC_ERROR;
14108     ELSIF l_return_status = L_FND_RET_STS_UNEXP_ERROR THEN
14109         x_return_status  := l_return_status;
14110         RAISE L_FND_EXC_UNEXPECTED_ERROR;
14111     END IF;
14112 
14113     -- Standard check of p_commit.
14114     IF FND_API.To_Boolean (p_commit) THEN
14115         COMMIT WORK;
14116     END IF;
14117 
14118     -- Standard call to get message count and if count is 1, get message info.
14119     FND_MSG_PUB.Count_And_Get (p_encoded => L_FND_FALSE,
14120                                p_count => x_msg_count,
14121                                p_data => x_msg_data);
14122 
14123     INL_LOGGING_PVT.Log_EndProc (p_module_name => g_module_name,
14124                                  p_procedure_name => l_program_name);
14125 EXCEPTION
14126 WHEN L_FND_EXC_ERROR THEN
14127     INL_LOGGING_PVT.Log_ExpecError (p_module_name => g_module_name,
14128                                     p_procedure_name => l_program_name);
14129     ROLLBACK TO Discard_Updates_PVT;
14130     x_return_status := L_FND_RET_STS_ERROR;
14131     FND_MSG_PUB.Count_And_Get (p_encoded => L_FND_FALSE,
14132                                p_count => x_msg_count,
14133                                p_data => x_msg_data);
14134 WHEN L_FND_EXC_UNEXPECTED_ERROR THEN
14135     INL_LOGGING_PVT.Log_UnexpecError (p_module_name => g_module_name,
14136                                       p_procedure_name => l_program_name);
14137     ROLLBACK TO Discard_Updates_PVT;
14138     x_return_status := L_FND_RET_STS_UNEXP_ERROR;
14139     FND_MSG_PUB.Count_And_Get (p_encoded => L_FND_FALSE,
14140                                p_count => x_msg_count,
14141                                p_data => x_msg_data);
14142 WHEN OTHERS THEN
14143     INL_LOGGING_PVT.Log_UnexpecError (p_module_name => g_module_name,
14144                                       p_procedure_name => l_program_name);
14145     ROLLBACK TO Discard_Updates_PVT;
14146     x_return_status := L_FND_RET_STS_UNEXP_ERROR ;
14147     IF FND_MSG_PUB.Check_Msg_Level (p_message_level => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
14148         FND_MSG_PUB.Add_Exc_Msg (p_pkg_name => g_pkg_name,
14149                                  p_procedure_name => l_program_name);
14150     END IF;
14151     FND_MSG_PUB.Count_And_Get (p_encoded => L_FND_FALSE,
14152                                p_count => x_msg_count,
14153                                p_data => x_msg_data);
14154 END Discard_Updates;
14155 
14156 END INL_SHIPMENT_PVT;