DBA Data[Home] [Help]

PACKAGE BODY: APPS.INL_INTERFACE_PVT

Source


1 PACKAGE BODY INL_INTERFACE_PVT AS
2 /* $Header: INLVINTB.pls 120.9.12010000.20 2009/02/02 16:46:25 acferrei ship $ */
3 
4     -- Utility name : Handle_InterfError
5     -- Type         : Private
6     -- Function     : Handle LCM open interface errors
7     -- Pre-reqs     : None
8     -- Parameters   :
9     -- IN         : p_parent_table_name  IN  VARCHAR2, Identify the point of the error: table_name and
10     --              p_parent_table_id    IN  NUMBER,                                    table_ID
11     --              p_column_name        IN VARCHAR2   Conditionally Error column name
12     --              p_column_value       IN VARCHAR2   Conditionally Error column value
13     --              p_error_message_name IN VARCHAR2   Optional Message name(if exists)
14     --              p_token1_name        IN VARCHAR2   Optional Message tokens names and values from 1 to 6
15     --              p_token1_value       IN VARCHAR2   Optional
16     --              p_token2_name        IN VARCHAR2   Optional
17     --              p_token2_value       IN VARCHAR2   Optional
18     --              p_token3_name        IN VARCHAR2   Optional
19     --              p_token3_value       IN VARCHAR2   Optional
20     --              p_token4_name        IN VARCHAR2   Optional
21     --              p_token4_value       IN VARCHAR2   Optional
22     --              p_token5_name        IN VARCHAR2   Optional
23     --              p_token5_value       IN VARCHAR2   Optional
24     --              p_token6_name        IN VARCHAR2   Optional
25     --              p_token6_value       IN VARCHAR2   Optional
26     --
27     -- OUT          x_return_status      OUT NOCOPY VARCHAR2
28     --
29     -- Version    : Current version 1.0
30     --
31     -- Notes      :
32 PROCEDURE Handle_InterfError
33     (
34         p_parent_table_name  IN VARCHAR2,
35         p_parent_table_id    IN NUMBER,
36         p_column_name        IN VARCHAR2,
37         p_column_value       IN VARCHAR2,
38         p_error_message_name IN VARCHAR2,
39         p_token1_name        IN VARCHAR2 DEFAULT NULL,
40         p_token1_value       IN VARCHAR2 DEFAULT NULL,
41         p_token2_name        IN VARCHAR2 DEFAULT NULL,
42         p_token2_value       IN VARCHAR2 DEFAULT NULL,
43         p_token3_name        IN VARCHAR2 DEFAULT NULL,
44         p_token3_value       IN VARCHAR2 DEFAULT NULL,
45         p_token4_name        IN VARCHAR2 DEFAULT NULL,
46         p_token4_value       IN VARCHAR2 DEFAULT NULL,
47         p_token5_name        IN VARCHAR2 DEFAULT NULL,
48         p_token5_value       IN VARCHAR2 DEFAULT NULL,
49         p_token6_name        IN VARCHAR2 DEFAULT NULL,
50         p_token6_value       IN VARCHAR2 DEFAULT NULL,
51         x_return_status      OUT NOCOPY VARCHAR2
52     ) IS
53     l_proc_name          CONSTANT VARCHAR2(30) := 'Handle_InterfError';
54     l_return_status      VARCHAR2(1) ;
55     l_debug_info         VARCHAR2(200) ;
56     l_ship_header_int_id NUMBER;
57     l_error_message      VARCHAR2(2000) ;
58 BEGIN
59     -- Standard Beginning of Procedure/Function Logging
60     INL_LOGGING_PVT.Log_BeginProc(
61         p_module_name    => g_module_name,
62         p_procedure_name => l_proc_name
63     ) ;
64     --  Initialize API return status to success
65     x_return_status := FND_API.G_RET_STS_SUCCESS;
66     -- Creation of Messages
67     IF p_error_message_name IS NOT NULL THEN
68         FND_MESSAGE.SET_NAME('INL', p_error_message_name) ;
69         IF p_token1_name IS NOT NULL THEN
70             FND_MESSAGE.SET_TOKEN(p_token1_name, p_token1_value) ;
71             IF p_token2_name IS NOT NULL THEN
72                 FND_MESSAGE.SET_TOKEN(p_token2_name, p_token2_value) ;
73                 IF p_token3_name IS NOT NULL THEN
74                     FND_MESSAGE.SET_TOKEN(p_token3_name, p_token3_value) ;
75                     IF p_token4_name IS NOT NULL THEN
76                         FND_MESSAGE.SET_TOKEN(p_token4_name, p_token4_value) ;
77                         IF p_token5_name IS NOT NULL THEN
78                             FND_MESSAGE.SET_TOKEN(p_token5_name, p_token5_value) ;
79                             IF p_token6_name IS NOT NULL THEN
80                                 FND_MESSAGE.SET_TOKEN(p_token6_name, p_token6_value) ;
81                             END IF;
82                         END IF;
83                     END IF;
84                 END IF;
85             END IF;
86         END IF;
87         FND_MSG_PUB.ADD;
88         l_error_message := SUBSTR(FND_MSG_PUB.get(FND_MSG_PUB.Count_Msg(), FND_API.g_false), 1, 2000) ;
89     END IF;
90     l_debug_info := 'Error Mesage: '||l_error_message;
91     INL_LOGGING_PVT.Log_Statement(
92         p_module_name      => g_module_name,
93         p_procedure_name   => l_proc_name,
94         p_debug_info       => l_debug_info
95     ) ;
96     -- In case of error during Shipment Line import process
97     IF p_parent_table_name = 'INL_SHIP_LINES_INT' THEN
98         l_debug_info := 'Set Shipment Line Interface status to ERROR.';
99         INL_LOGGING_PVT.LOG_STATEMENT(
100            P_MODULE_NAME      => G_MODULE_NAME,
101            P_PROCEDURE_NAME   => L_PROC_NAME,
102            P_DEBUG_INFO       => L_DEBUG_INFO
103         ) ;
104         UPDATE inl_ship_lines_int
105         SET processing_status_code      = 'ERROR'                   ,
106             request_id                  = fnd_global.conc_request_id,
107             last_updated_by             = fnd_global.user_id        ,
108             last_update_date            = SYSDATE                   ,
109             last_update_login           = fnd_global.login_id       ,
110             program_id                  = fnd_global.conc_program_id,
111             program_update_date         = SYSDATE                   ,
112             program_application_id      = fnd_global.prog_appl_id
113           WHERE ship_line_int_id        = p_parent_table_id
114             AND processing_status_code <> 'ERROR';
115          SELECT ship_header_int_id
116            INTO l_ship_header_int_id
117            FROM inl_ship_lines_int
118           WHERE ship_line_int_id = p_parent_table_id;
119     ELSIF p_parent_table_name = 'INL_MATCHES_INT' THEN
120         l_debug_info := 'Set Match Interface status to ERROR.';
121         INL_LOGGING_PVT.Log_Statement(
122             p_module_name      => g_module_name,
123             p_procedure_name   => l_proc_name,
124             p_debug_info       => l_debug_info
125         ) ;
126          UPDATE inl_matches_int
127         SET processing_status_code      = 'ERROR'                   ,
128             request_id                  = fnd_global.conc_request_id,
129             last_updated_by             = fnd_global.user_id        ,
130             last_update_date            = SYSDATE                   ,
131             last_update_login           = fnd_global.login_id       ,
132             program_id                  = fnd_global.conc_program_id,
133             program_update_date         = SYSDATE                   ,
134             program_application_id      = fnd_global.prog_appl_id
135           WHERE match_int_id            = p_parent_table_id
136             AND processing_status_code <> 'ERROR';
137     ELSIF p_parent_table_name = 'INL_MATCH_AMOUNTS_INT' THEN
138         l_debug_info := 'Set Match Amounts Interface status to ERROR.';
139         INL_LOGGING_PVT.Log_Statement(
140             p_module_name      => g_module_name,
141             p_procedure_name   => l_proc_name,
142             p_debug_info       => l_debug_info
143         ) ;
144         UPDATE inl_match_amounts_int
145         SET processing_status_code      = 'ERROR'                   ,
146             request_id                  = fnd_global.conc_request_id,
147             last_updated_by             = fnd_global.user_id        ,
148             last_update_date            = SYSDATE                   ,
149             last_update_login           = fnd_global.login_id       ,
150             program_id                  = fnd_global.conc_program_id,
151             program_update_date         = SYSDATE                   ,
152             program_application_id      = fnd_global.prog_appl_id
153           WHERE match_amount_int_id     = p_parent_table_id
154             AND processing_status_code <> 'ERROR';
155     END IF;
156     IF p_parent_table_name = 'INL_SHIP_HEADERS_INT' OR l_ship_header_int_id IS NOT NULL THEN
157         l_debug_info := 'Set Shipment Header Interface status to ERROR.';
158         INL_LOGGING_PVT.Log_Statement(
159             p_module_name      => g_module_name,
160             p_procedure_name   => l_proc_name,
161             p_debug_info       => l_debug_info
162         ) ;
163         UPDATE inl_ship_headers_int
164         SET processing_status_code      = 'ERROR'                   ,
165             request_id                  = fnd_global.conc_request_id,
166             last_updated_by             = fnd_global.user_id        ,
167             last_update_date            = SYSDATE                   ,
168             last_update_login           = fnd_global.login_id       ,
169             program_id                  = fnd_global.conc_program_id,
170             program_update_date         = SYSDATE                   ,
171             program_application_id      = fnd_global.prog_appl_id
172           WHERE ship_header_int_id      = NVL(l_ship_header_int_id, p_parent_table_id)
173             AND processing_status_code <> 'ERROR';
174     END IF;
175     l_debug_info := 'Insert detailed error message into Interface Error table.';
176     INL_LOGGING_PVT.Log_Statement(
177         p_module_name      => g_module_name,
178         p_procedure_name   => l_proc_name,
179         p_debug_info       => l_debug_info
180     ) ;
181     INSERT INTO inl_interface_errors (
182             interface_error_id,            /*01*/
183             parent_table_name,             /*02*/
184             parent_table_id,               /*03*/
185             column_name,                   /*04*/
186             column_value,                  /*05*/
187             processing_date,               /*06*/
188             error_message_name,            /*07*/
189             error_message,                 /*08*/
190             token1_name,                   /*09*/
191             token1_value,                  /*10*/
192             token2_name,                   /*11*/
193             token2_value,                  /*12*/
194             token3_name,                   /*13*/
195             token3_value,                  /*14*/
196             token4_name,                   /*15*/
197             token4_value,                  /*16*/
198             token5_name,                   /*17*/
199             token5_value,                  /*18*/
200             token6_name,                   /*19*/
201             token6_value,                  /*20*/
202             created_by,                    /*21*/
203             creation_date,                 /*22*/
204             last_updated_by,               /*23*/
205             last_update_date,              /*24*/
206             last_update_login,             /*25*/
207             program_id,                    /*26*/
208             program_application_id,        /*27*/
209             program_update_date,           /*28*/
210             request_id                     /*29*/
211         )
212         VALUES (
213             inl_interface_errors_s.NEXTVAL,/*01*/
214             p_parent_table_name,           /*02*/
215             p_parent_table_id,             /*03*/
216             p_column_name,                 /*04*/
217             p_column_value,                /*05*/
218             SYSDATE,                       /*06*/
219             p_error_message_name,          /*07*/
220             l_error_message,               /*08*/
221             p_token1_name,                 /*09*/
222             p_token1_value,                /*10*/
223             p_token2_name,                 /*11*/
224             p_token2_value,                /*12*/
225             p_token3_name,                 /*13*/
226             p_token3_value,                /*14*/
227             p_token4_name,                 /*15*/
228             p_token4_value,                /*16*/
229             p_token5_name,                 /*17*/
230             p_token5_value,                /*18*/
231             p_token6_name,                 /*19*/
232             p_token6_value,                /*20*/
233             fnd_global.user_id,            /*21*/
234             SYSDATE,                       /*22*/
235             fnd_global.user_id,            /*23*/
236             SYSDATE,                       /*24*/
237             fnd_global.user_id,            /*25*/
238             fnd_global.conc_program_id,    /*26*/
239             fnd_global.prog_appl_id,       /*27*/
240             SYSDATE,                       /*28*/
241             fnd_global.conc_request_id     /*29*/
242     );
243     -- Standard End of Procedure/Function Logging
244     INL_LOGGING_PVT.Log_EndProc(
245         p_module_name    => g_module_name,
246         p_procedure_name => l_proc_name
247     );
248 EXCEPTION
249     WHEN FND_API.G_EXC_ERROR THEN
250         -- Standard Expected Error Logging
251         INL_LOGGING_PVT.Log_ExpecError (
252             p_module_name    => g_module_name,
253             p_procedure_name => l_proc_name
254         );
255         x_return_status := FND_API.G_RET_STS_ERROR;
256     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
257         -- Standard Unexpected Error Logging
258         INL_LOGGING_PVT.Log_UnexpecError (
259             p_module_name    => g_module_name,
260             p_procedure_name => l_proc_name
261         );
262         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
263     WHEN OTHERS THEN
264         -- Standard Unexpected Error Logging
265         INL_LOGGING_PVT.Log_UnexpecError (
266             p_module_name    => g_module_name,
267             p_procedure_name => l_proc_name
268         );
269         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
270         IF FND_MSG_PUB.Check_Msg_Level(
271             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
272         ) THEN
273             FND_MSG_PUB.Add_Exc_Msg(
274                 p_pkg_name       => g_pkg_name,
275                 p_procedure_name => l_proc_name
276             );
277         END IF;
278 END Handle_InterfError;
279 
280 -- Utility name : Reset_InterfError
281 -- Type       : Private
282 -- Function   : Delete errors recorded by previous validations
283 -- Pre-reqs   : None
284 -- Parameters :
285 -- IN         : p_parent_table_name IN VARCHAR2
286 --              p_parent_table_id   IN NUMBER
287 --
288 -- OUT          x_return_status     OUT NOCOPY VARCHAR2
289 --
290 -- Version    : Current version 1.0
291 --
292 -- Notes      :
293 PROCEDURE Reset_InterfError(
294         p_parent_table_name IN VARCHAR2,
295         p_parent_table_id   IN NUMBER,
296         x_return_status OUT NOCOPY VARCHAR2
297 ) IS
298     l_proc_name CONSTANT VARCHAR2(30):= 'Reset_InterfError';
299     l_return_status VARCHAR2(1);
300     l_debug_info VARCHAR2(200);
301 BEGIN
302     -- Standard Beginning of Procedure/Function Logging
303     INL_LOGGING_PVT.Log_BeginProc(
304         p_module_name    => g_module_name,
305         p_procedure_name => l_proc_name
306     ) ;
307     --  Initialize API return status to success
308     x_return_status := FND_API.G_RET_STS_SUCCESS;
309     l_debug_info    := 'Delete Errors from previous validation.';
310     INL_LOGGING_PVT.Log_Statement(
311         p_module_name      => g_module_name,
312         p_procedure_name   => l_proc_name,
313         p_debug_info       => l_debug_info
314     ) ;
315      DELETE
316        FROM inl_interface_errors
317       WHERE parent_table_name = p_parent_table_name
318         AND parent_table_id   = p_parent_table_id;
319     -- Standard End of Procedure/Function Logging
320     INL_LOGGING_PVT.Log_EndProc(
321         p_module_name    => g_module_name,
322         p_procedure_name => l_proc_name
323     );
324 EXCEPTION
325     WHEN FND_API.G_EXC_ERROR THEN
326         -- Standard Expected Error Logging
327         INL_LOGGING_PVT.Log_ExpecError (
328             p_module_name    => g_module_name,
329             p_procedure_name => l_proc_name
330         );
331         x_return_status := FND_API.G_RET_STS_ERROR;
332     WHEN FND_API.G_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_proc_name
337         );
338         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
339     WHEN OTHERS THEN
340         -- Standard Unexpected Error Logging
341         INL_LOGGING_PVT.Log_UnexpecError (
342             p_module_name    => g_module_name,
343             p_procedure_name => l_proc_name
344         );
345         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
346         IF FND_MSG_PUB.Check_Msg_Level(
347             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
348         ) THEN
349             FND_MSG_PUB.Add_Exc_Msg(
350                 p_pkg_name       => g_pkg_name,
351                 p_procedure_name => l_proc_name
352             );
353         END IF;
354 END Reset_InterfError;
355 -- Utility name : Derive_PartyID
356 -- Type       : Private
357 -- Function   : Get Party Id based on a given Party Number
358 -- Pre-reqs   : None
359 -- Parameters :
360 -- IN         : p_party_number  IN VARCHAR2
361 --
362 -- OUT          x_return_status OUT NOCOPY VARCHAR2
363 --
364 -- Version    : Current version 1.0
365 --
366 -- Notes      :
367 FUNCTION Derive_PartyID(
368         p_party_number  IN VARCHAR2,
369         x_return_status IN OUT NOCOPY VARCHAR2
370 ) RETURN NUMBER IS
371     l_proc_name     CONSTANT VARCHAR2(30) := 'Derive_PartyID';
372     l_return_status VARCHAR2(1) ;
373     l_debug_info    VARCHAR2(200) ;
374     l_return_value  NUMBER;
375 BEGIN
376     -- Standard Beginning of Procedure/Function Logging
377     INL_LOGGING_PVT.Log_BeginProc(
378         p_module_name    => g_module_name,
379         p_procedure_name => l_proc_name
380     ) ;
381     --  Initialize API return status to success
382     x_return_status := FND_API.G_RET_STS_SUCCESS;
383     l_debug_info    := 'Getting party_id.';
384     INL_LOGGING_PVT.Log_Statement(
385         p_module_name      => g_module_name,
386         p_procedure_name   => l_proc_name,
387         p_debug_info       => l_debug_info
388     ) ;
389      SELECT party_id
390        INTO l_return_value
391        FROM hz_parties
392       WHERE PARTY_NUMBER = p_party_number;
393     -- Standard End of Procedure/Function Logging
394     INL_LOGGING_PVT.Log_EndProc(
395         p_module_name    => g_module_name,
396         p_procedure_name => l_proc_name
397     );
398     RETURN l_return_value;
399 EXCEPTION
400     WHEN FND_API.G_EXC_ERROR THEN
401         -- Standard Expected Error Logging
402         INL_LOGGING_PVT.Log_ExpecError (
403             p_module_name    => g_module_name,
404             p_procedure_name => l_proc_name
405         );
406         x_return_status := FND_API.G_RET_STS_ERROR;
407         RETURN 0;
408     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
409         -- Standard Unexpected Error Logging
410         INL_LOGGING_PVT.Log_UnexpecError (
411             p_module_name    => g_module_name,
412             p_procedure_name => l_proc_name
413         );
414         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
415         RETURN 0;
416     WHEN OTHERS THEN
417         -- Standard Unexpected Error Logging
418         INL_LOGGING_PVT.Log_UnexpecError (
419             p_module_name    => g_module_name,
420             p_procedure_name => l_proc_name
421         );
422         IF FND_MSG_PUB.Check_Msg_Level(
423             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
424         ) THEN
425             FND_MSG_PUB.Add_Exc_Msg(
426                 p_pkg_name       => g_pkg_name,
427                 p_procedure_name => l_proc_name
428             );
429         END IF;
430         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
431         RETURN 0;
432 END Derive_PartyID;
433 
434 -- Utility name : Derive_PartySiteID
435 -- Type       : Private
436 -- Function   : Get Party Site Id based on a given Party Site Number
437 -- Pre-reqs   : None
438 -- Parameters :
439 -- IN         : p_party_site_number IN VARCHAR2
440 --
441 -- OUT          x_return_status     OUT NOCOPY VARCHAR2
442 --
443 -- Version    : Current version 1.0
444 --
445 -- Notes      :
446 FUNCTION Derive_PartySiteID(
447     p_party_site_number IN         VARCHAR2,
448     x_return_status     OUT NOCOPY VARCHAR2
449 ) RETURN NUMBER IS
450     l_func_name     CONSTANT VARCHAR2(30) := 'Derive_PartySiteID';
451     l_return_status VARCHAR2(1);
452     l_debug_info    VARCHAR2(200);
453     l_return_value  NUMBER;
454 BEGIN
455     -- Standard Beginning of Procedure/Function Logging
456     INL_LOGGING_PVT.Log_BeginProc(
457         p_module_name    => g_module_name,
458         p_procedure_name => l_func_name
459     ) ;
460     --  Initialize API return status to success
461     x_return_status := FND_API.G_RET_STS_SUCCESS;
462     l_debug_info := 'Getting PartySite_id.';
463     INL_LOGGING_PVT.Log_Statement(
464         p_module_name      => g_module_name,
465         p_procedure_name   => l_func_name,
466         p_debug_info       => l_debug_info
467     ) ;
468      SELECT party_site_id
469        INTO l_return_value
470        FROM hz_party_sites
471       WHERE party_site_number = p_party_site_number;
472     -- Standard End of Procedure/Function Logging
473     INL_LOGGING_PVT.Log_EndProc(
474         p_module_name    => g_module_name,
475         p_procedure_name => l_func_name
476     );
477     RETURN l_return_value;
478 EXCEPTION
479     WHEN FND_API.G_EXC_ERROR THEN
480         -- Standard Expected Error Logging
481         INL_LOGGING_PVT.Log_ExpecError (
482             p_module_name    => g_module_name,
483             p_procedure_name => l_func_name
484         );
485         x_return_status := FND_API.G_RET_STS_ERROR;
486         RETURN 0;
487     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
488         -- Standard Unexpected Error Logging
489         INL_LOGGING_PVT.Log_UnexpecError (
490             p_module_name    => g_module_name,
491             p_procedure_name => l_func_name
492         );
493         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
494         RETURN 0;
495     WHEN OTHERS THEN
496         -- Standard Unexpected Error Logging
497         INL_LOGGING_PVT.Log_UnexpecError (
498             p_module_name    => g_module_name,
499             p_procedure_name => l_func_name
500         );
501         IF FND_MSG_PUB.Check_Msg_Level(
502             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
503         ) THEN
504             FND_MSG_PUB.Add_Exc_Msg(
505                 p_pkg_name       => g_pkg_name,
506                 p_procedure_name => l_func_name
507             );
508         END IF;
509         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
510         RETURN 0;
511 END Derive_PartySiteID;
512 
513 -- Utility name   : Validate_ShipNum
514 -- Type       : Private
515 -- Function   : Shipment Number validation.
516 --              Check if the ship numbering is autiomatic and check the number informed
517 -- Pre-reqs   : None
518 -- Parameters :
519 -- IN         :     p_ship_header_int_id IN NUMBER,
520 --                  p_ship_num           IN VARCHAR2
521 --                  p_organization_id    IN NUMBER
522 --
523 -- OUT        : x_return_status      IN OUT NOCOPY VARCHAR2
524 --
525 -- Version    : Current version 1.0
526 --
527 -- Notes      :
528 FUNCTION Validate_ShipNum(
529     p_ship_header_int_id IN NUMBER,
530     p_ship_num           IN VARCHAR2,
531     p_organization_id    IN NUMBER,
532     x_return_status      IN OUT NOCOPY VARCHAR2
533 ) RETURN BOOLEAN IS
534     l_func_name     CONSTANT VARCHAR2(30) := 'Validate_ShipNum';
535     l_debug_info    VARCHAR2(400) ;
536     l_result        VARCHAR2(1) := FND_API.G_TRUE;
537     l_return_status VARCHAR2(1) := FND_API.G_TRUE;
538     l_user_defined_ship_num_code VARCHAR2(30);
539 BEGIN
540     -- Standard Beginning of Procedure/Function Logging
541     INL_LOGGING_PVT.Log_BeginProc(
542         p_module_name    => g_module_name,
543         p_procedure_name => l_func_name
544     ) ;
545     --  Initialize API return status to success
546     x_return_status := FND_API.G_RET_STS_SUCCESS;
547 
548     -- Check if the Operating Unit is null
549     l_debug_info := 'Check the setup for Organization';
550     INL_LOGGING_PVT.Log_Statement(
551         p_module_name      => g_module_name,
552         p_procedure_name   => l_func_name,
553         p_debug_info       => l_debug_info
554     ) ;
555     IF p_organization_id IS NOT NULL THEN
556 
557         SELECT
558             user_defined_ship_num_code
559         INTO
560             l_user_defined_ship_num_code
561         FROM inl_parameters
562         WHERE organization_id = p_organization_id;
563 
564         IF l_user_defined_ship_num_code = 'AUTOMATIC' THEN
565             IF p_ship_num IS NOT NULL THEN
566                 l_result := FND_API.G_FALSE;
567                 -- Add a line into inl_ship_errors
568                 Handle_InterfError(
569                     p_parent_table_name  => 'INL_SHIP_HEADERS_INT',
570                     p_parent_table_id    => p_ship_header_int_id,
571                     p_column_name        => 'SHIP_NUM',
572                     p_column_value       => p_ship_num,
573                     p_error_message_name => 'INL_ERR_SHIP_NUM_NNULL',
574                     x_return_status      => l_return_status
575                 );
576                 -- If any errors happen abort API.
577                 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
578                     RAISE FND_API.G_EXC_ERROR;
579                 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
580                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
581                 END IF;
582             END IF;
583         ELSIF l_user_defined_ship_num_code = 'MANUAL' THEN
584 
585             IF p_ship_num IS NULL THEN
586                 l_result := FND_API.G_FALSE;
587                 -- Add a line into inl_ship_errors
588                 Handle_InterfError(
589                     p_parent_table_name  => 'INL_SHIP_HEADERS_INT',
590                     p_parent_table_id    => p_ship_header_int_id,
591                     p_column_name        => 'SHIP_NUM',
592                     p_column_value       => p_ship_num,
593                     p_error_message_name => 'INL_ERR_SHIP_NUM_NULL',
594                     x_return_status      => l_return_status
595                 );
596                 -- If any errors happen abort API.
597                 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
598                     RAISE FND_API.G_EXC_ERROR;
599                 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
600                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
601                 END IF;
602             END IF;
603         END IF;
604 
605     END IF;
606     -- Standard End of Procedure/Function Logging
607     INL_LOGGING_PVT.Log_EndProc(
608         p_module_name    => g_module_name,
609         p_procedure_name => l_func_name
610     );
611     RETURN FND_API.to_boolean(l_result) ;
612 EXCEPTION
613     WHEN FND_API.G_EXC_ERROR THEN
614         -- Standard Expected Error Logging
615         INL_LOGGING_PVT.Log_ExpecError (
616             p_module_name    => g_module_name,
617             p_procedure_name => l_func_name
618         );
619         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
620     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
621         -- Standard Unexpected Error Logging
622         INL_LOGGING_PVT.Log_UnexpecError (
623             p_module_name    => g_module_name,
624             p_procedure_name => l_func_name
625         );
626         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
627     WHEN OTHERS THEN
628         -- Standard Unexpected Error Logging
629         INL_LOGGING_PVT.Log_UnexpecError (
630             p_module_name    => g_module_name,
631             p_procedure_name => l_func_name
632         );
633         IF FND_MSG_PUB.Check_Msg_Level(
634             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
635         ) THEN
636             FND_MSG_PUB.Add_Exc_Msg(
637                 p_pkg_name       => g_pkg_name,
638                 p_procedure_name => l_func_name
639             );
640         END IF;
641         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
642 END Validate_ShipNum;
643 
644 -- Utility name   : Validate_ShipType
645 -- Type       : Private
646 -- Function   : Ship type validation.
647 --              Check if the ship type exists and is active for sysdate
648 -- Pre-reqs   : None
649 -- Parameters :
650 -- IN         :     p_ship_header_int_id IN NUMBER,
651 --                  p_ship_type_id       IN NUMBER
652 --                  p_organization_id    IN NUMBER
653 --
654 -- OUT        : x_return_status      IN OUT NOCOPY VARCHAR2
655 --
656 -- Version    : Current version 1.0
657 --
658 -- Notes      :
659 FUNCTION Validate_ShipType(
660     p_ship_header_int_id IN NUMBER,
661     p_ship_type_id       IN NUMBER,
662     x_return_status      IN OUT NOCOPY VARCHAR2
663 ) RETURN BOOLEAN IS
664     l_func_name     CONSTANT VARCHAR2(30) := 'Validate_ShipType';
665     l_debug_info    VARCHAR2(400) ;
666     l_result        VARCHAR2(1) := FND_API.G_TRUE;
667     l_return_status VARCHAR2(1) := FND_API.G_TRUE;
668 
669     l_ship_type_code VARCHAR2(400);
670 BEGIN
671     -- Standard Beginning of Procedure/Function Logging
672     INL_LOGGING_PVT.Log_BeginProc(
673         p_module_name    => g_module_name,
674         p_procedure_name => l_func_name
675     ) ;
676     --  Initialize API return status to success
677     x_return_status := FND_API.G_RET_STS_SUCCESS;
678 
679     -- Check if the Operating Unit is null
680     l_debug_info := 'Check the setup for Organization';
681     INL_LOGGING_PVT.Log_Statement(
682         p_module_name      => g_module_name,
683         p_procedure_name   => l_func_name,
684         p_debug_info       => l_debug_info
685     ) ;
686     BEGIN
687 
688         SELECT
689             ship_type_code
690         INTO
691             l_ship_type_code
692         FROM INL_SHIP_TYPES_B
693         WHERE ship_type_id = p_ship_type_id
694         AND active_from_date <= trunc(SYSDATE)
695         AND (active_to_date IS NULL
696              OR active_to_date >= trunc(SYSDATE))
697         ;
698     EXCEPTION
699         WHEN OTHERS THEN
700             l_result := FND_API.G_FALSE;
701             -- Add a line into inl_ship_errors
702             Handle_InterfError(
703                 p_parent_table_name  => 'INL_SHIP_HEADERS_INT',
704                 p_parent_table_id    => p_ship_header_int_id,
705                 p_column_name        => 'SHIP_TYPE_ID',
706                 p_column_value       => p_ship_type_id,
707                 p_error_message_name => 'INL_ERR_SHIP_TP',
708                 x_return_status      => l_return_status
709             );
710             -- If any errors happen abort API.
711             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
712                 RAISE FND_API.G_EXC_ERROR;
713             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
714                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
715             END IF;
716     END;
717     -- Standard End of Procedure/Function Logging
718     INL_LOGGING_PVT.Log_EndProc(
719         p_module_name    => g_module_name,
720         p_procedure_name => l_func_name
721     );
722     RETURN FND_API.to_boolean(l_result) ;
723 EXCEPTION
724     WHEN FND_API.G_EXC_ERROR THEN
725         -- Standard Expected Error Logging
726         INL_LOGGING_PVT.Log_ExpecError (
727             p_module_name    => g_module_name,
728             p_procedure_name => l_func_name
729         );
730         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
731     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
732         -- Standard Unexpected Error Logging
733         INL_LOGGING_PVT.Log_UnexpecError (
734             p_module_name    => g_module_name,
735             p_procedure_name => l_func_name
736         );
737         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
738     WHEN OTHERS THEN
739         -- Standard Unexpected Error Logging
740         INL_LOGGING_PVT.Log_UnexpecError (
741             p_module_name    => g_module_name,
742             p_procedure_name => l_func_name
743         );
744         IF FND_MSG_PUB.Check_Msg_Level(
745             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
746         ) THEN
747             FND_MSG_PUB.Add_Exc_Msg(
748                 p_pkg_name       => g_pkg_name,
749                 p_procedure_name => l_func_name
750             );
751         END IF;
752         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
753 END Validate_ShipType;
754 
755 -- Utility name   : Validate_ShipLineType
756 -- Type       : Private
757 -- Function   : Shipment Line Type validation.
758 --              Check if the ship Line type exists, is active for sysdate and is associated with ship type
759 -- Pre-reqs   : None
760 -- Parameters :
761 -- IN         :     p_ship_header_int_id IN NUMBER,
762 --                  p_ship_line_int_id   IN NUMBER,
763 --                  p_ship_type_id       IN NUMBER
764 --                  p_ship_line_type_id  IN NUMBER
765 --                  p_organization_id    IN NUMBER
766 --
767 -- OUT        : x_return_status      IN OUT NOCOPY VARCHAR2
768 --
769 -- Version    : Current version 1.0
770 --
771 -- Notes      :
772 FUNCTION Validate_ShipLineType(
773     p_ship_header_int_id IN NUMBER,
774     p_ship_line_int_id   IN NUMBER,
775     p_ship_type_id       IN NUMBER,
776     p_ship_line_type_id  IN NUMBER,
777     x_return_status      IN OUT NOCOPY VARCHAR2
778 ) RETURN BOOLEAN IS
779     l_func_name     CONSTANT VARCHAR2(30) := 'Validate_ShipLineType';
780     l_debug_info    VARCHAR2(400) ;
781     l_result        VARCHAR2(1) := FND_API.G_TRUE;
782     l_return_status VARCHAR2(1) := FND_API.G_TRUE;
783 
784     l_ship_line_type_code VARCHAR2(400);
785 BEGIN
786     -- Standard Beginning of Procedure/Function Logging
787     INL_LOGGING_PVT.Log_BeginProc(
788         p_module_name    => g_module_name,
789         p_procedure_name => l_func_name
790     ) ;
791     --  Initialize API return status to success
792     x_return_status := FND_API.G_RET_STS_SUCCESS;
793 
794     -- Check if the Operating Unit is null
795     l_debug_info := 'Check the setup for Organization';
796     INL_LOGGING_PVT.Log_Statement(
797         p_module_name      => g_module_name,
798         p_procedure_name   => l_func_name,
799         p_debug_info       => l_debug_info
800     ) ;
801     BEGIN
802 
803         SELECT
804             slt.ship_line_type_code
805         INTO
806             l_ship_line_type_code
807         FROM inl_ship_line_types_b slt
808         WHERE slt.ship_line_type_id = p_ship_line_type_id
809         AND slt.active_from_date <= trunc(SYSDATE)
810         AND (slt.active_to_date IS NULL
811              OR slt.active_to_date >= trunc(SYSDATE))
812         AND EXISTS (SELECT 1
813                     FROM inl_alwd_line_types sltallow
814                     WHERE sltallow.ship_line_type_id = p_ship_line_type_id
815                     AND sltallow.parent_table_id     = p_ship_type_id
816                     AND sltallow.parent_table_name   = 'INL_SHIP_TYPES'
817                     AND ROWNUM                       < 2)
818         ;
819     EXCEPTION
820         WHEN OTHERS THEN
821             l_result := FND_API.G_FALSE;
822             -- Add a line into inl_ship_errors
823             Handle_InterfError(
824                 p_parent_table_name  => 'INL_SHIP_LINES_INT',
825                 p_parent_table_id    => p_ship_line_int_id,
826                 p_column_name        => 'SHIP_LINE_TYPE_ID',
827                 p_column_value       => p_ship_line_type_id,
828                 p_error_message_name => 'INL_ERR_LN_TP',
829                 x_return_status      => l_return_status
830             );
831             -- If any errors happen abort API.
832             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
833                 RAISE FND_API.G_EXC_ERROR;
834             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
835                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
836             END IF;
837     END;
838     -- Standard End of Procedure/Function Logging
839     INL_LOGGING_PVT.Log_EndProc(
840         p_module_name    => g_module_name,
841         p_procedure_name => l_func_name
842     );
843     RETURN FND_API.to_boolean(l_result) ;
844 EXCEPTION
845     WHEN FND_API.G_EXC_ERROR THEN
846         -- Standard Expected Error Logging
847         INL_LOGGING_PVT.Log_ExpecError (
848             p_module_name    => g_module_name,
849             p_procedure_name => l_func_name
850         );
851         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
852     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
853         -- Standard Unexpected Error Logging
854         INL_LOGGING_PVT.Log_UnexpecError (
855             p_module_name    => g_module_name,
856             p_procedure_name => l_func_name
857         );
858         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
859     WHEN OTHERS THEN
860         -- Standard Unexpected Error Logging
861         INL_LOGGING_PVT.Log_UnexpecError (
862             p_module_name    => g_module_name,
863             p_procedure_name => l_func_name
864         );
865         IF FND_MSG_PUB.Check_Msg_Level(
866             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
867         ) THEN
868             FND_MSG_PUB.Add_Exc_Msg(
869                 p_pkg_name       => g_pkg_name,
870                 p_procedure_name => l_func_name
871             );
872         END IF;
873         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
874 END Validate_ShipLineType;
875 
876 -- Utility name   : Validate_OpUnit
877 -- Type       : Private
878 -- Function   : Operating Unit validation.
879 --              Check if a given Operating Unit is valid.
880 -- Pre-reqs   : None
881 -- Parameters :
882 -- IN         : p_ship_header_int_id IN NUMBER
883 --              p_org_id             IN NUMBER
884 --
885 -- OUT        : x_return_status      IN OUT NOCOPY VARCHAR2
886 --
887 -- Version    : Current version 1.0
888 --
889 -- Notes      :
890 FUNCTION Validate_OpUnit(
891     p_ship_header_int_id IN NUMBER,
892     p_org_id             IN NUMBER,
893     x_return_status      IN OUT NOCOPY VARCHAR2
894 ) RETURN BOOLEAN IS
895     l_func_name     CONSTANT VARCHAR2(30) := 'Validate_OpUnit';
896     l_debug_info    VARCHAR2(400) ;
897     l_org_count     NUMBER;
898     l_result        VARCHAR2(1) := FND_API.G_TRUE;
899     l_return_status VARCHAR2(1) := FND_API.G_TRUE;
900     l_msg_count     NUMBER;
901     l_msg_data      VARCHAR2(2000) ;
902     L_SYSDATE       CONSTANT DATE := SYSDATE;
903 BEGIN
904     -- Standard Beginning of Procedure/Function Logging
905     INL_LOGGING_PVT.Log_BeginProc(
906         p_module_name    => g_module_name,
907         p_procedure_name => l_func_name
908     ) ;
909     --  Initialize API return status to success
910     x_return_status := FND_API.G_RET_STS_SUCCESS;
911     -- Check if the Operating Unit is null
912     l_debug_info := 'Check if the Operating Unit is null';
913     INL_LOGGING_PVT.Log_Statement(
914         p_module_name      => g_module_name,
915         p_procedure_name   => l_func_name,
916         p_debug_info       => l_debug_info
917     ) ;
918     IF p_org_id IS NULL THEN
919         l_result := FND_API.G_FALSE;
920         -- Add a line into inl_ship_errors
921         Handle_InterfError(
922             p_parent_table_name  => 'INL_SHIP_HEADERS_INT',
923             p_parent_table_id    => p_ship_header_int_id,
924             p_column_name        => 'ORG_ID',
925             p_column_value       => p_org_id,
926             p_error_message_name => 'INL_ERR_OP_UNIT_NULL',
927             x_return_status      => l_return_status
928         );
929         -- If any errors happen abort API.
930         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
931             RAISE FND_API.G_EXC_ERROR;
932         ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
933             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
934         END IF;
935     END IF;
936     -- Check if the Operating Unit exists and is valid
937     l_debug_info := 'Check if the Operating Unit exists and is valid';
938     INL_LOGGING_PVT.Log_Statement(
939         p_module_name      => g_module_name,
940         p_procedure_name   => l_func_name,
941         p_debug_info       => l_debug_info
942     ) ;
943      SELECT COUNT(1)
944        INTO l_org_count
945        FROM hr_operating_units hou
946       WHERE L_SYSDATE BETWEEN NVL((TRUNC(hou.date_from)), L_SYSDATE)
947       AND NVL((TRUNC(hou.date_to) + .99999) - 1, L_SYSDATE)
948       AND hou.organization_id = p_org_id;
949     IF NVL(l_org_count, 0)     = 0 THEN
950         l_result := FND_API.G_FALSE;
951         -- Add a line into inl_ship_errors
952         Handle_InterfError(
953             p_parent_table_name  => 'INL_SHIP_HEADERS_INT',
954             p_parent_table_id    => p_ship_header_int_id,
955             p_column_name        => 'ORG_ID',
956             p_column_value       => p_org_id,
957             p_error_message_name => 'INL_ERR_INVL_OP_UNIT',
958             x_return_status      => l_return_status
959         ) ;
960         -- If any errors happen abort API.
961         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
962             RAISE FND_API.G_EXC_ERROR;
963         ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
964             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
965         END IF;
966     END IF;
967     -- Standard End of Procedure/Function Logging
968     INL_LOGGING_PVT.Log_EndProc(
969         p_module_name    => g_module_name,
970         p_procedure_name => l_func_name
971     );
972     RETURN FND_API.to_boolean(l_result) ;
973 EXCEPTION
974     WHEN FND_API.G_EXC_ERROR THEN
975         -- Standard Expected Error Logging
976         INL_LOGGING_PVT.Log_ExpecError (
977             p_module_name    => g_module_name,
978             p_procedure_name => l_func_name
979         );
980         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
981     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
982         -- Standard Unexpected Error Logging
983         INL_LOGGING_PVT.Log_UnexpecError (
984             p_module_name    => g_module_name,
985             p_procedure_name => l_func_name
986         );
987         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
988     WHEN OTHERS THEN
989         -- Standard Unexpected Error Logging
990         INL_LOGGING_PVT.Log_UnexpecError (
991             p_module_name    => g_module_name,
992             p_procedure_name => l_func_name
993         );
994         IF FND_MSG_PUB.Check_Msg_Level(
995             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
996         ) THEN
997             FND_MSG_PUB.Add_Exc_Msg(
998                 p_pkg_name       => g_pkg_name,
999                 p_procedure_name => l_func_name
1000             );
1001         END IF;
1002         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
1003 END Validate_OpUnit;
1004 -- Utility name   : Validate_Organization
1005 -- Type       : Private
1006 -- Function   : Inventory Organization validation.
1007 --              Check if a given Organization
1008 --              is valid and defined in LCM Options Setup.
1009 --
1010 -- Pre-reqs   : None
1011 -- Parameters :
1012 -- IN         : p_ship_header_int_id IN NUMBER
1013 --              p_organization_id    IN NUMBER
1014 --
1015 -- OUT        : x_return_status      IN OUT NOCOPY VARCHAR2
1016 --
1017 -- Version    : Current version 1.0
1018 --
1019 -- Notes      :
1020 FUNCTION Validate_Organization(
1021     p_ship_header_int_id IN NUMBER,
1022     p_organization_id    IN NUMBER,
1023     x_return_status      OUT NOCOPY VARCHAR2
1024 ) RETURN BOOLEAN IS
1025     l_func_name          CONSTANT VARCHAR2(30) := 'Validate_Organization';
1026     l_debug_info         VARCHAR2(400) ;
1027     l_organization_count NUMBER;
1028     l_result             VARCHAR2(1) := FND_API.G_TRUE;
1029     l_return_status      VARCHAR2(1) := FND_API.G_TRUE;
1030     l_msg_count          NUMBER;
1031     l_msg_data           VARCHAR2(2000) ;
1032 BEGIN
1033     -- Standard Beginning of Procedure/Function Logging
1034     INL_LOGGING_PVT.Log_BeginProc(
1035         p_module_name    => g_module_name,
1036         p_procedure_name => l_func_name
1037     ) ;
1038     --  Initialize API return status to success
1039     x_return_status := FND_API.G_RET_STS_SUCCESS;
1040     -- Check if the Organization is null
1041     l_debug_info := 'Check if the Organization is null';
1042     INL_LOGGING_PVT.Log_Statement(
1043         p_module_name      => g_module_name,
1044         p_procedure_name   => l_func_name,
1045         p_debug_info       => l_debug_info
1046     ) ;
1047     IF p_organization_id                        IS NULL THEN
1048         l_result := FND_API.G_FALSE;
1049         -- Add a line into inl_ship_errors
1050         Handle_InterfError(
1051             p_parent_table_name  => 'INL_SHIP_HEADERS_INT',
1052             p_parent_table_id    => p_ship_header_int_id,
1053             p_column_name        => 'ORGANIZATION_ID',
1054             p_column_value       => p_organization_id,
1055             p_error_message_name => 'INL_ERR_INV_ORG_NULL',
1056             x_return_status      => l_return_status) ;
1057         -- If any errors happen abort API.
1058         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1059             RAISE FND_API.G_EXC_ERROR;
1060         ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1061             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1062         END IF;
1063     END IF;
1064     -- Check if the given Organization is valid for LCM
1065     l_debug_info := 'Check if the Organization exists and is valid for the INL Application';
1066     INL_LOGGING_PVT.Log_Statement(
1067         p_module_name      => g_module_name,
1068         p_procedure_name   => l_func_name,
1069         p_debug_info       => l_debug_info
1070     ) ;
1071      SELECT COUNT(1)
1072        INTO l_organization_count
1073        FROM org_organization_definitions
1074       WHERE organization_id          = p_organization_id;
1075     IF NVL(l_organization_count, 0) = 0 THEN
1076         l_result                    := FND_API.G_FALSE;
1077         l_organization_count        := 0;
1078         -- Add a line into inl_ship_errors
1079         Handle_InterfError(
1080             p_parent_table_name  => 'INL_SHIP_HEADERS_INT',
1081             p_parent_table_id    => p_ship_header_int_id,
1082             p_column_name        => 'ORGANIZATION_ID',
1083             p_column_value       => p_organization_id,
1084             p_error_message_name => 'INL_ERR_INVL_INV_ORG',
1085             x_return_status      => l_return_status
1086         );
1087         -- If any errors happen abort API.
1088         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1089             RAISE FND_API.G_EXC_ERROR;
1090         ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1091             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1092         END IF;
1093     END IF;
1094     -- Check if INL Setup Options has been
1095     -- defined to the given Organization
1096     l_debug_info := 'Check if the Organization is valid in INL Options Setup';
1097     INL_LOGGING_PVT.Log_Statement(
1098         p_module_name      => g_module_name,
1099         p_procedure_name   => l_func_name,
1100         p_debug_info       => l_debug_info
1101     ) ;
1102      SELECT COUNT(1)
1103        INTO l_organization_count
1104        FROM inl_parameters ipa
1105       WHERE ipa.organization_id      = p_organization_id;
1106     IF NVL(l_organization_count, 0) = 0 THEN
1107         l_result                    := FND_API.G_FALSE;
1108         -- Add a line into inl_ship_errors
1109         Handle_InterfError(
1110             p_parent_table_name  => 'INL_SHIP_HEADERS_INT',
1111             p_parent_table_id    => p_ship_header_int_id,
1112             p_column_name        => 'ORGANIZATION_ID',
1113             p_column_value       => p_organization_id,
1114             p_error_message_name => 'INL_ERR_NO_LCM_OPT_DEF',
1115             x_return_status      => l_return_status
1116         );
1117         -- If any errors happen abort API.
1118         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1119             RAISE FND_API.G_EXC_ERROR;
1120         ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1121             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1122         END IF;
1123     END IF;
1124     -- Standard End of Procedure/Function Logging
1125     INL_LOGGING_PVT.Log_EndProc(
1126         p_module_name    => g_module_name,
1127         p_procedure_name => l_func_name
1128     );
1129     RETURN FND_API.to_boolean(l_result) ;
1130 EXCEPTION
1131     WHEN FND_API.G_EXC_ERROR THEN
1132         -- Standard Expected Error Logging
1133         INL_LOGGING_PVT.Log_ExpecError (
1134             p_module_name    => g_module_name,
1135             p_procedure_name => l_func_name
1136         );
1137         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
1138     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1139         -- Standard Unexpected Error Logging
1140         INL_LOGGING_PVT.Log_UnexpecError (
1141             p_module_name    => g_module_name,
1142             p_procedure_name => l_func_name
1143         );
1144         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
1145     WHEN OTHERS THEN
1146         -- Standard Unexpected Error Logging
1147         INL_LOGGING_PVT.Log_UnexpecError (
1148             p_module_name    => g_module_name,
1149             p_procedure_name => l_func_name
1150         );
1151         IF FND_MSG_PUB.Check_Msg_Level(
1152             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
1153         ) THEN
1154             FND_MSG_PUB.Add_Exc_Msg(
1155                 p_pkg_name       => g_pkg_name,
1156                 p_procedure_name => l_func_name
1157             );
1158         END IF;
1159         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
1160 END Validate_Organization;
1161 -- Utility name   : Validate_LinesVsHeader
1162 -- Type       : Private
1163 -- Function   : Validate Shipment Lines against Shipment Headers
1164 --
1165 -- Pre-reqs   : None
1166 -- Parameters :
1167 -- IN         : p_ship_header_int_id IN NUMBER
1168 --
1169 -- OUT        : x_return_status      OUT NOCOPY VARCHAR2
1170 --
1171 -- Version    : Current version 1.0
1172 --
1173 -- Notes      :
1174 FUNCTION Validate_LinesVsHeader
1175    (
1176         p_ship_header_int_id IN NUMBER,
1177         x_return_status      IN OUT NOCOPY VARCHAR2)
1178     RETURN BOOLEAN
1179                                        IS
1180     l_func_name     CONSTANT VARCHAR2(30) := 'Validate_LinesVsHeader';
1181     l_debug_info    VARCHAR2(400) ;
1182     l_result        VARCHAR2(1) := FND_API.G_TRUE;
1183     l_return_status VARCHAR2(1) ;
1184 BEGIN
1185     -- Standard Beginning of Procedure/Function Logging
1186     INL_LOGGING_PVT.Log_BeginProc(
1187         p_module_name    => g_module_name,
1188         p_procedure_name => l_func_name
1189     ) ;
1190     --  Initialize API return status to success
1191     x_return_status := FND_API.G_RET_STS_SUCCESS;
1192     -- Standard End of Procedure/Function Logging
1193     INL_LOGGING_PVT.Log_EndProc(
1194         p_module_name    => g_module_name,
1195         p_procedure_name => l_func_name
1196     );
1197     RETURN FND_API.to_boolean(l_result) ;
1198 EXCEPTION
1199     WHEN FND_API.G_EXC_ERROR THEN
1200         -- Standard Expected Error Logging
1201         INL_LOGGING_PVT.Log_ExpecError (
1202             p_module_name    => g_module_name,
1203             p_procedure_name => l_func_name
1204         );
1205         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
1206     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1207         -- Standard Unexpected Error Logging
1208         INL_LOGGING_PVT.Log_UnexpecError (
1209             p_module_name    => g_module_name,
1210             p_procedure_name => l_func_name
1211         );
1212         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
1213     WHEN OTHERS THEN
1214         -- Standard Unexpected Error Logging
1215         INL_LOGGING_PVT.Log_UnexpecError (
1216             p_module_name    => g_module_name,
1217             p_procedure_name => l_func_name
1218         );
1219         IF FND_MSG_PUB.Check_Msg_Level(
1220             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
1221         ) THEN
1222             FND_MSG_PUB.Add_Exc_Msg(
1223                 p_pkg_name       => g_pkg_name,
1224                 p_procedure_name => l_func_name
1225             );
1226         END IF;
1227         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
1228 END Validate_LinesVsHeader;
1229 -- Utility name : Validate_LastTaskCode
1230 -- Type       : Private
1231 -- Function   : Validate the Last Task Code which is a number to
1232 --              define until which level LCM processes should be
1233 --              executed for an imported Shipment.
1234 --
1235 -- Pre-reqs   : None
1236 -- Parameters :
1237 -- IN         : p_parent_table_name IN VARCHAR2
1238 --              p_parent_table_id   IN NUMBER
1239 --              p_last_task_code    IN VARCHAR2
1240 --
1241 -- IN OUT     : x_return_status     IN OUT NOCOPY VARCHAR2
1242 --
1243 -- Version    : Current version 1.0
1244 --
1245 -- Notes      :
1246 FUNCTION Validate_LastTaskCode
1247    (
1248         p_parent_table_name IN VARCHAR2,
1249         p_parent_table_id   IN NUMBER,
1250         p_last_task_code    IN VARCHAR2,
1251         x_return_status     IN OUT NOCOPY VARCHAR2)
1252     RETURN BOOLEAN
1253                                        IS
1254     l_func_name     CONSTANT VARCHAR2(30) := 'Validate_LastTaskCode';
1255     l_return_status VARCHAR2(1) ;
1256     l_debug_info    VARCHAR2(400) ;
1257     l_response      BOOLEAN := true;
1258     l_aux           NUMBER;
1259     l_status        VARCHAR2(40) ;
1260     L_TRUNC_SYSDATE CONSTANT DATE := TRUNC(SYSDATE) ;
1261 BEGIN
1262     -- Standard Beginning of Procedure/Function Logging
1263     INL_LOGGING_PVT.Log_BeginProc(
1264         p_module_name    => g_module_name,
1265         p_procedure_name => l_func_name
1266     ) ;
1267     --  Initialize API return status to success
1268     x_return_status := FND_API.G_RET_STS_SUCCESS;
1269     BEGIN
1270          SELECT 1
1271            INTO l_aux
1272            FROM fnd_lookup_values_vl
1273           WHERE lookup_type        = 'INL_OI_LAST_TASK_CODES'
1274             AND lookup_code        = p_last_task_code
1275             AND enabled_flag       = 'Y'
1276             AND start_date_active <= L_TRUNC_SYSDATE
1277             AND
1278            (
1279                 end_date_active    IS NULL
1280                 OR end_date_active >= L_TRUNC_SYSDATE
1281             ) ;
1282     EXCEPTION
1283     WHEN NO_DATA_FOUND THEN
1284         l_response := FALSE;
1285         -- Add a line into inl_ship_errors
1286         Handle_InterfError(
1287             p_parent_table_name  => p_parent_table_name,
1288             p_parent_table_id    => p_parent_table_id,
1289             p_column_name        => 'LAST_TASK_CODE',
1290             p_column_value       => p_last_task_code,
1291             p_error_message_name => 'INL_OI_LAST_TASK_CODES',
1292             p_token1_name        => 'LTC',
1293             p_token1_value       => p_last_task_code,
1294             x_return_status      => l_return_status
1295         ) ;
1296         -- If unexpected errors happen abort
1297         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1298             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1299         END IF;
1300     END;
1301     -- Standard End of Procedure/Function Logging
1302     INL_LOGGING_PVT.Log_EndProc(
1303         p_module_name    => g_module_name,
1304         p_procedure_name => l_func_name
1305     );
1306     RETURN l_response;
1307 EXCEPTION
1308     WHEN FND_API.G_EXC_ERROR THEN
1309         -- Standard Expected Error Logging
1310         INL_LOGGING_PVT.Log_ExpecError (
1311             p_module_name    => g_module_name,
1312             p_procedure_name => l_func_name
1313         );
1314         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
1315     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1316         -- Standard Unexpected Error Logging
1317         INL_LOGGING_PVT.Log_UnexpecError (
1318             p_module_name    => g_module_name,
1319             p_procedure_name => l_func_name
1320         );
1321         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
1322     WHEN OTHERS THEN
1323         -- Standard Unexpected Error Logging
1324         INL_LOGGING_PVT.Log_UnexpecError (
1325             p_module_name    => g_module_name,
1326             p_procedure_name => l_func_name
1327         );
1328         IF FND_MSG_PUB.Check_Msg_Level(
1329             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
1330         ) THEN
1331             FND_MSG_PUB.Add_Exc_Msg(
1332                 p_pkg_name       => g_pkg_name,
1333                 p_procedure_name => l_func_name
1334             );
1335         END IF;
1336         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
1337 END Validate_LastTaskCode;
1338 -- Utility name : Validate_TrxType
1339 -- Type       : Private
1340 -- Function   : Validate the transaction type
1341 --
1342 -- Pre-reqs   : None
1343 -- Parameters :
1344 -- IN         : p_ship_header_int_id IN NUMBER
1345 --              p_transaction_type   IN NUMBER
1346 --              p_ship_header_id     IN NUMBER
1347 --
1348 -- IN OUT     : x_return_status      IN OUT NOCOPY VARCHAR2
1349 --
1350 -- Version    : Current version 1.0
1351 --
1352 -- Notes      :
1353 FUNCTION Validate_TrxType
1354    (
1355         p_ship_header_int_id IN NUMBER,
1356         p_transaction_type   IN VARCHAR2,
1357         p_ship_header_id     IN NUMBER,
1358         x_return_status      IN OUT NOCOPY VARCHAR2)
1359     RETURN BOOLEAN
1360                                        IS
1361     l_func_name     CONSTANT VARCHAR2(30) := 'Validate_TrxType';
1362     l_return_status VARCHAR2(1) ;
1363     l_debug_info    VARCHAR2(400) ;
1364     l_response      BOOLEAN := true;
1365     l_aux           NUMBER;
1366     l_status        VARCHAR2(40) ;
1367 BEGIN
1368     -- Standard Beginning of Procedure/Function Logging
1369     INL_LOGGING_PVT.Log_BeginProc(
1370         p_module_name    => g_module_name,
1371         p_procedure_name => l_func_name
1372     ) ;
1373     --  Initialize API return status to success
1374     x_return_status      := FND_API.G_RET_STS_SUCCESS;
1375     IF p_transaction_type = 'CREATE' THEN
1376         -- p_ship_header_id cannot be null
1377         IF p_ship_header_id IS NOT NULL THEN
1378             l_response      := FALSE;
1379             -- Add a line into inl_ship_errors
1380             Handle_InterfError(
1381                 p_parent_table_name => 'INL_SHIP_HEADERS_INT',
1382                 p_parent_table_id   => p_ship_header_int_id,
1383                 p_column_name       => 'TRANSACTION_TYPE',
1384                 p_column_value      => p_transaction_type,
1385                 p_error_message_name => 'INL_ERR_OI_CHK_TRX_TP_ID_NNULL',
1386                 p_token1_name       => 'ID_NAME',
1387                 p_token1_value      => 'SHIP_HEADER_INT_ID',
1388                 p_token2_name       => 'ID_VAL',
1389                 p_token2_value      => p_ship_header_int_id,
1390                 x_return_status     => l_return_status
1391             ) ;
1392             -- If any errors happen abort API.
1393             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1394                 RAISE FND_API.G_EXC_ERROR;
1395             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1396                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1397             END IF;
1398         ELSE
1399              SELECT COUNT( *)
1400                INTO l_aux
1401                FROM inl_ship_lines_int
1402               WHERE ship_header_int_id = p_ship_header_int_id
1403                 AND
1404                (
1405                     ship_header_id  IS NOT NULL
1406                     OR ship_line_id IS NOT NULL
1407                 ) ;
1408             IF NVL(l_aux, 0) > 0 THEN
1409                 Handle_InterfError(
1410                     p_parent_table_name  => 'INL_SHIP_HEADERS_INT',
1411                     p_parent_table_id    => p_ship_header_int_id,
1412                     p_column_name        => 'TRANSACTION_TYPE',
1413                     p_column_value       => p_transaction_type,
1414                     p_error_message_name => 'INL_ERR_OI_CHK_TRX_TP_ID_NNULL',
1415                     p_token1_name        => 'ID_NAME',
1416                     p_token1_value       => 'SHIP_HEADER_INT_ID',
1417                     p_token2_name        => 'ID_VAL',
1418                     p_token2_value       => p_ship_header_int_id,
1419                     x_return_status      => l_return_status
1420                 ) ;
1421                 l_response                              := FALSE;
1422 
1423                 -- Add a line into inl_ship_errors
1424                 FOR c_lin_err IN
1425                (
1426                      SELECT ship_line_int_id
1427                        FROM inl_ship_lines_int
1428                       WHERE ship_header_int_id = p_ship_header_int_id
1429                         AND
1430                        (
1431                             ship_header_id  IS NOT NULL
1432                             OR ship_line_id IS NOT NULL
1433                         )
1434                 )
1435                 LOOP
1436                     Handle_InterfError(
1437                         p_parent_table_name  => 'INL_SHIP_LINES_INT',
1438                         p_parent_table_id    => c_lin_err.ship_line_int_id,
1439                         p_column_name        => 'TRANSACTION_TYPE',
1440                         p_column_value       => p_transaction_type,
1441                         p_error_message_name => 'INL_ERR_OI_CHK_TRX_TP_ID_NNULL',
1442                         p_token1_name        => 'ID_NAME',
1443                         p_token1_value       => 'SHIP_HEADER_INT_ID',
1444                         p_token2_name        => 'ID_VAL',
1445                         p_token2_value       => p_ship_header_int_id,
1446                         x_return_status      => l_return_status
1447                     ) ;
1448                     -- If any errors happen abort API.
1449 
1450                     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1451                         RAISE FND_API.G_EXC_ERROR;
1452                     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1453                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1454                     END IF;
1455                 END LOOP;
1456             END IF;
1457         END IF;
1458     ELSIF p_transaction_type = 'UPDATE' THEN
1459         -- p_ship_header_id cannot be null
1460         IF p_ship_header_id IS NULL THEN
1461             l_response      := FALSE;
1462             -- Add a line into inl_ship_errors
1463             Handle_InterfError(
1464                 p_parent_table_name  => 'INL_SHIP_HEADERS_INT',
1465                 p_parent_table_id    => p_ship_header_int_id,
1466                 p_column_name        => 'TRANSACTION_TYPE',
1467                 p_column_value       => p_transaction_type,
1468                 p_error_message_name => 'INL_ERR_OI_CHK_TRX_TP_ID_NULL',
1469                 p_token1_name        => 'COLUMN',
1470                 p_token1_value       => 'SHIP_HEADER_ID',
1471                 p_token2_name        => 'ID_NAME',
1472                 p_token2_value       => 'SHIP_HEADER_INT_ID',
1473                 p_token3_name        => 'ID_VAL',
1474                 p_token3_value       => p_ship_header_int_id,
1475                 x_return_status      => l_return_status) ;
1476             -- If any errors happen abort API.
1477 
1478             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1479                 RAISE FND_API.G_EXC_ERROR;
1480             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1481                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1482             END IF;
1483         END IF;
1484          SELECT COUNT( *)
1485            INTO l_aux
1486            FROM inl_ship_lines_int a
1487           WHERE a.ship_header_int_id = p_ship_header_int_id
1488             AND a.ship_line_id      IS NOT NULL
1489             AND NOT EXISTS
1490            (
1491             SELECT 1
1492               FROM inl_ship_lines_all l,
1493                inl_ship_line_groups g
1494              WHERE l.ship_line_id                                        = a.ship_line_id
1495                AND l.ship_line_group_id                                  = g.ship_line_group_id
1496                AND NVL(a.ship_line_group_reference, FND_API.G_MISS_CHAR) = NVL(g.ship_line_group_reference, FND_API.G_MISS_CHAR)
1497                AND a.ship_line_src_type_code                             = g.src_type_code
1498                AND a.party_id                                            = g.party_id
1499                AND a.party_site_id                                       = g.party_site_id
1500                AND NVL(a.source_organization_id, FND_API.G_MISS_NUM)     = NVL(g.source_organization_id, FND_API.G_MISS_NUM)
1501                AND NVL(a.attribute_category_lg, FND_API.G_MISS_CHAR)     = NVL(g.attribute_category, FND_API.G_MISS_CHAR)
1502                AND NVL(a.attribute1_lg,  FND_API.G_MISS_CHAR)            = NVL(g.attribute1,  FND_API.G_MISS_CHAR)
1503                AND NVL(a.attribute2_lg,  FND_API.G_MISS_CHAR)            = NVL(g.attribute2,  FND_API.G_MISS_CHAR)
1504                AND NVL(a.attribute3_lg,  FND_API.G_MISS_CHAR)            = NVL(g.attribute3,  FND_API.G_MISS_CHAR)
1505                AND NVL(a.attribute4_lg,  FND_API.G_MISS_CHAR)            = NVL(g.attribute4,  FND_API.G_MISS_CHAR)
1506                AND NVL(a.attribute5_lg,  FND_API.G_MISS_CHAR)            = NVL(g.attribute5,  FND_API.G_MISS_CHAR)
1507                AND NVL(a.attribute6_lg,  FND_API.G_MISS_CHAR)            = NVL(g.attribute6,  FND_API.G_MISS_CHAR)
1508                AND NVL(a.attribute7_lg,  FND_API.G_MISS_CHAR)            = NVL(g.attribute7,  FND_API.G_MISS_CHAR)
1509                AND NVL(a.attribute8_lg,  FND_API.G_MISS_CHAR)            = NVL(g.attribute8,  FND_API.G_MISS_CHAR)
1510                AND NVL(a.attribute9_lg,  FND_API.G_MISS_CHAR)            = NVL(g.attribute9,  FND_API.G_MISS_CHAR)
1511                AND NVL(a.attribute10_lg, FND_API.G_MISS_CHAR)            = NVL(g.attribute10, FND_API.G_MISS_CHAR)
1512                AND NVL(a.attribute11_lg, FND_API.G_MISS_CHAR)            = NVL(g.attribute11, FND_API.G_MISS_CHAR)
1513                AND NVL(a.attribute12_lg, FND_API.G_MISS_CHAR)            = NVL(g.attribute12, FND_API.G_MISS_CHAR)
1514                AND NVL(a.attribute13_lg, FND_API.G_MISS_CHAR)            = NVL(g.attribute13, FND_API.G_MISS_CHAR)
1515                AND NVL(a.attribute14_lg, FND_API.G_MISS_CHAR)            = NVL(g.attribute14, FND_API.G_MISS_CHAR)
1516                AND NVL(a.attribute15_lg, FND_API.G_MISS_CHAR)            = NVL(g.attribute15, FND_API.G_MISS_CHAR)
1517             ) ;
1518         IF NVL(l_aux, 0) > 0 THEN
1519             l_response := FALSE;
1520             Handle_InterfError(
1521                 p_parent_table_name  => 'INL_SHIP_HEADERS_INT',
1522                 p_parent_table_id    => p_ship_header_int_id,
1523                 p_column_name        => 'TRANSACTION_TYPE',
1524                 p_column_value       => p_transaction_type,
1525                 p_error_message_name => 'INL_ERR_OI_CHK_TRX_TP_UPD_GRP',
1526                 x_return_status      => l_return_status
1527             ) ;
1528             -- If unexpected errors happen abort
1529             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1530                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1531             END IF;
1532             -- Add a line into inl_ship_errors for each line
1533             FOR c_lin_err IN  (
1534                 SELECT ship_line_int_id
1535                 FROM inl_ship_lines_int a
1536                 WHERE a.ship_header_int_id = p_ship_header_int_id
1537                 AND a.ship_line_id      IS NOT NULL
1538                 AND NOT EXISTS
1539                     (
1540                      SELECT 1
1541                      FROM inl_ship_lines_all l,
1542                      inl_ship_line_groups g
1543                      WHERE l.ship_line_id                                      = a.ship_line_id
1544                      AND l.ship_line_group_id                                  = g.ship_line_group_id
1545                      AND NVL(a.ship_line_group_reference, FND_API.G_MISS_CHAR) = NVL(g.ship_line_group_reference, FND_API.G_MISS_CHAR)
1546                      AND a.ship_line_src_type_code                             = g.src_type_code
1547                      AND a.party_id                                            = g.party_id
1548                      AND a.party_site_id                                       = g.party_site_id
1549                      AND NVL(a.source_organization_id, FND_API.G_MISS_NUM)     = NVL(g.source_organization_id, FND_API.G_MISS_NUM)
1550                      AND NVL(a.attribute_category_lg, FND_API.G_MISS_CHAR)     = NVL(g.attribute_category, FND_API.G_MISS_CHAR)
1551                      AND NVL(a.attribute1_lg, FND_API.G_MISS_CHAR)             = NVL(g.attribute1, FND_API.G_MISS_CHAR)
1552                      AND NVL(a.attribute2_lg, FND_API.G_MISS_CHAR)             = NVL(g.attribute2, FND_API.G_MISS_CHAR)
1553                      AND NVL(a.attribute3_lg, FND_API.G_MISS_CHAR)             = NVL(g.attribute3, FND_API.G_MISS_CHAR)
1554                      AND NVL(a.attribute4_lg, FND_API.G_MISS_CHAR)             = NVL(g.attribute4, FND_API.G_MISS_CHAR)
1555                      AND NVL(a.attribute5_lg, FND_API.G_MISS_CHAR)             = NVL(g.attribute5, FND_API.G_MISS_CHAR)
1556                      AND NVL(a.attribute6_lg, FND_API.G_MISS_CHAR)             = NVL(g.attribute6, FND_API.G_MISS_CHAR)
1557                      AND NVL(a.attribute7_lg, FND_API.G_MISS_CHAR)             = NVL(g.attribute7, FND_API.G_MISS_CHAR)
1558                      AND NVL(a.attribute8_lg, FND_API.G_MISS_CHAR)             = NVL(g.attribute8, FND_API.G_MISS_CHAR)
1559                      AND NVL(a.attribute9_lg, FND_API.G_MISS_CHAR)             = NVL(g.attribute9, FND_API.G_MISS_CHAR)
1560                      AND NVL(a.attribute10_lg, FND_API.G_MISS_CHAR)            = NVL(g.attribute10, FND_API.G_MISS_CHAR)
1561                      AND NVL(a.attribute11_lg, FND_API.G_MISS_CHAR)            = NVL(g.attribute11, FND_API.G_MISS_CHAR)
1562                      AND NVL(a.attribute12_lg, FND_API.G_MISS_CHAR)            = NVL(g.attribute12, FND_API.G_MISS_CHAR)
1563                      AND NVL(a.attribute13_lg, FND_API.G_MISS_CHAR)            = NVL(g.attribute13, FND_API.G_MISS_CHAR)
1564                      AND NVL(a.attribute14_lg, FND_API.G_MISS_CHAR)            = NVL(g.attribute14, FND_API.G_MISS_CHAR)
1565                      AND NVL(a.attribute15_lg, FND_API.G_MISS_CHAR)            = NVL(g.attribute15, FND_API.G_MISS_CHAR)
1566                     )
1567             ) LOOP
1568                 Handle_InterfError(
1569                     p_parent_table_name  => 'INL_SHIP_LINES_INT',
1570                     p_parent_table_id    => c_lin_err.ship_line_int_id,
1571                     p_column_name        => 'TRANSACTION_TYPE',
1572                     p_column_value       => p_transaction_type,
1573                     p_error_message_name => 'INL_ERR_OI_CHK_TRX_TP_UPD_GRP',
1574                     x_return_status      => l_return_status
1575                 ) ;
1576                 -- If any errors happen abort API.
1577                 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1578                     RAISE FND_API.G_EXC_ERROR;
1579                 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1580                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1581                 END IF;
1582             END LOOP;
1583         END IF;
1584     ELSIF p_transaction_type = 'DELETE' THEN
1585         -- p_ship_header_id cannot be null
1586         IF p_ship_header_id IS NULL THEN
1587             l_response      := FALSE;
1588             -- Add a line into inl_ship_errors
1589             Handle_InterfError(
1590                 p_parent_table_name  => 'INL_SHIP_HEADERS_INT',
1591                 p_parent_table_id    => p_ship_header_int_id,
1592                 p_column_name        => 'TRANSACTION_TYPE',
1593                 p_column_value       => p_transaction_type,
1594                 p_error_message_name => 'INL_ERR_OI_CHK_TRX_TP_ID_NULL',
1595                 p_token1_name        => 'COLUMN',
1596                 p_token1_value       => 'SHIP_HEADER_ID',
1597                 p_token2_name        => 'ID_NAME',
1598                 p_token2_value       => 'SHIP_HEADER_INT_ID',
1599                 p_token3_name        => 'ID_VAL',
1600                 p_token3_value       => p_ship_header_int_id,
1601                 x_return_status      => l_return_status
1602             ) ;
1603             -- If any errors happen abort API.
1604             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1605                 RAISE FND_API.G_EXC_ERROR;
1606             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1607                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1608             END IF;
1609         ELSE
1610             -- Check for all ids in lines
1611              SELECT COUNT( *)
1612                INTO l_aux
1613                FROM inl_ship_lines_int
1614               WHERE ship_header_int_id = p_ship_header_int_id
1615                 AND (ship_header_id  IS NULL
1616                      OR ship_line_id IS NULL
1617                     )
1618             ;
1619             IF NVL(l_aux, 0) > 0 THEN
1620                 l_response   := FALSE;
1621                 -- Add a line into inl_ship_errors
1622                 Handle_InterfError(
1623                     p_parent_table_name  => 'INL_SHIP_HEADERS_INT',
1624                     p_parent_table_id    => p_ship_header_int_id,
1625                     p_column_name        => 'TRANSACTION_TYPE',
1626                     p_column_value       => p_transaction_type,
1627                     p_error_message_name => 'INL_ERR_OI_CHK_TRX_TP_ID_NULL',
1628                     p_token1_name        => 'COLUMN',
1629                     p_token1_value       => 'SHIP_HEADER_ID/SHIP_LINE_ID',
1630                     p_token2_name        => 'ID_NAME',
1631                     p_token2_value       => 'SHIP_HEADER_INT_ID',
1632                     p_token3_name        => 'ID_VAL',
1633                     p_token3_value       => p_ship_header_int_id,
1634                     x_return_status      => l_return_status
1635                 ) ;
1636                 -- If any errors happen abort API.
1637                 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1638                     RAISE FND_API.G_EXC_ERROR;
1639                 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1640                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1641                 END IF;
1642             END IF;
1643             -- Check for lines under a given interface header
1644             SELECT COUNT( *)
1645             INTO l_aux
1646             FROM inl_ship_lines_int
1647             WHERE ship_header_int_id = p_ship_header_int_id;
1648             -- Check if all lines were included into the Open Interface
1649             IF NVL(l_aux, 0) > 0 THEN
1650                 SELECT COUNT( *)
1651                   INTO l_aux
1652                   FROM inl_ship_lines_all a
1653                  WHERE a.ship_header_id = p_ship_header_id
1654                    AND NOT EXISTS
1655                        (
1656                         SELECT 1
1657                         FROM inl_ship_lines_int b
1658                         WHERE b.ship_header_int_id = p_ship_header_int_id
1659                         AND b.ship_header_id       = a.ship_header_id
1660                         AND b.ship_line_id         = a.ship_line_id
1661                        )
1662                 ;
1663                 IF NVL(l_aux, 0) > 0 THEN
1664                     l_response   := FALSE;
1665                     -- Add a line into inl_ship_errors
1666                     Handle_InterfError(
1667                         p_parent_table_name  => 'INL_SHIP_HEADERS_INT',
1668                         p_parent_table_id    => p_ship_header_int_id,
1669                         p_column_name        => 'TRANSACTION_TYPE',
1670                         p_column_value       => p_transaction_type,
1671                         p_error_message_name => 'INL_ERR_OI_CHK_TRX_TP_DEL',
1672                         x_return_status      => l_return_status
1673                     ) ;
1674                     -- If any errors happen abort API.
1675                     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1676                         RAISE FND_API.G_EXC_ERROR;
1677                     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1678                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1679                     END IF;
1680                 END IF;
1681             END IF;
1682         END IF;
1683     ELSE
1684         l_response := FALSE;
1685         -- Add a line into inl_ship_errors
1686         Handle_InterfError(
1687             p_parent_table_name  => 'INL_SHIP_HEADERS_INT',
1688             p_parent_table_id    => p_ship_header_int_id,
1689             p_column_name        => 'TRANSACTION_TYPE',
1690             p_column_value       => p_transaction_type,
1691             p_error_message_name => 'INL_ERR_OI_CHK_TRX_TP_INVL',
1692             p_token1_name        => 'TTYPE',
1693             p_token1_value       => p_transaction_type,
1694             p_token2_name        => 'ID_NAME',
1695             p_token2_value       => 'SHIP_HEADER_INT_ID',
1696             p_token3_name        => 'ID_VAL',
1697             p_token3_value       => p_ship_header_int_id,
1698             x_return_status      => l_return_status
1699         ) ;
1700         -- If any errors happen abort API.
1701         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1702             RAISE FND_API.G_EXC_ERROR;
1703         ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1704             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1705         END IF;
1706     END IF;
1707     IF p_transaction_type IN('UPDATE', 'DELETE')
1708        AND p_ship_header_id IS NOT NULL
1709     THEN
1710          SELECT SHIP_STATUS_CODE
1711          INTO l_status
1712          FROM inl_ship_headers_all a
1713          WHERE a.ship_header_id = p_ship_header_id;
1714         IF l_status = 'COMPLETED' THEN
1715             l_response := FALSE;
1716             -- Add a line into inl_ship_errors
1717             Handle_InterfError(
1718                 p_parent_table_name  => 'INL_SHIP_HEADERS_INT',
1719                 p_parent_table_id    => p_ship_header_int_id,
1720                 p_column_name        => 'TRANSACTION_TYPE',
1721                 p_column_value       => p_transaction_type,
1722                 p_error_message_name => 'INL_ERR_OI_CHK_TRX_TP_STA_INVL',
1723                 p_token1_name        => 'SHIP_HEADER_INT_ID',
1724                 p_token1_value       => p_ship_header_int_id,
1725                 x_return_status      => l_return_status
1726             ) ;
1727             -- If any errors happen abort API.
1728             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1729                 RAISE FND_API.G_EXC_ERROR;
1730             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1731                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1732             END IF;
1733         END IF;
1734     END IF;
1735     -- Standard End of Procedure/Function Logging
1736     INL_LOGGING_PVT.Log_EndProc(
1737         p_module_name    => g_module_name,
1738         p_procedure_name => l_func_name
1739     );
1740     RETURN l_response;
1741 EXCEPTION
1742     WHEN FND_API.G_EXC_ERROR THEN
1743         -- Standard Expected Error Logging
1744         INL_LOGGING_PVT.Log_ExpecError (
1745             p_module_name    => g_module_name,
1746             p_procedure_name => l_func_name
1747         );
1748         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
1749     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1750         -- Standard Unexpected Error Logging
1751         INL_LOGGING_PVT.Log_UnexpecError (
1752             p_module_name    => g_module_name,
1753             p_procedure_name => l_func_name
1754         );
1755         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
1756     WHEN OTHERS THEN
1757         -- Standard Unexpected Error Logging
1758         INL_LOGGING_PVT.Log_UnexpecError (
1759             p_module_name    => g_module_name,
1760             p_procedure_name => l_func_name
1761         );
1762         IF FND_MSG_PUB.Check_Msg_Level(
1763             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
1764         ) THEN
1765             FND_MSG_PUB.Add_Exc_Msg(
1766                 p_pkg_name       => g_pkg_name,
1767                 p_procedure_name => l_func_name
1768             );
1769         END IF;
1770         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
1771 END Validate_TrxType;
1772 
1773 -- Utility name : Validate_LCMImport
1774 -- Type       : Private
1775 -- Function   : Validate a Shipment before import it from interface to INL Tables
1776 --
1777 -- Pre-reqs   : None
1778 -- Parameters :
1779 -- IN         : p_ship_header_int_id IN NUMBER
1780 --              p_org_id             IN NUMBER
1781 --              p_organization_id    IN NUMBER
1782 --              p_transaction_type   IN NUMBER
1783 --              p_last_task_code     IN VARCHAR2
1784 --              p_ship_num           IN VARCHAR2,
1785 --              p_ship_header_id     IN NUMBER
1786 --              p_ship_type_id       IN NUMBER,
1787 --
1788 -- OUT        : x_return_status      OUT NOCOPY VARCHAR2
1789 --
1790 -- Version    : Current version 1.0
1791 --
1792 -- Notes      :
1793 FUNCTION Validate_LCMImport (
1794     p_ship_header_int_id IN NUMBER,
1795     p_org_id             IN NUMBER,
1796     p_organization_id    IN NUMBER,
1797     p_transaction_type   IN VARCHAR2,
1798     p_last_task_code     IN VARCHAR2,
1799     p_ship_num           IN VARCHAR2,
1800     p_ship_header_id     IN NUMBER,
1801     p_ship_type_id       IN NUMBER,
1802     x_return_status      OUT NOCOPY VARCHAR2
1803 ) RETURN BOOLEAN IS
1804     l_func_name     CONSTANT VARCHAR2(30) := 'Validate_LCMImport';
1805     l_return_status VARCHAR2(1) ;
1806     l_debug_info    VARCHAR2(400) ;
1807     l_result        VARCHAR2(1) := FND_API.G_TRUE;
1808     l_response      BOOLEAN;
1809 BEGIN
1810     -- Standard Beginning of Procedure/Function Logging
1811     INL_LOGGING_PVT.Log_BeginProc(
1812         p_module_name    => g_module_name,
1813         p_procedure_name => l_func_name
1814     ) ;
1815     --  Initialize API return status to success
1816     x_return_status := FND_API.G_RET_STS_SUCCESS;
1817     -- Consist Lines versus Headers
1818     l_debug_info := 'Concistence Lines versus Headers';
1819     INL_LOGGING_PVT.Log_Statement(
1820         p_module_name      => g_module_name,
1821         p_procedure_name   => l_func_name,
1822         p_debug_info       => l_debug_info
1823     ) ;
1824     INL_LOGGING_PVT.Log_APICallIn(
1825         p_module_name     => g_module_name,
1826         p_procedure_name  => l_func_name,
1827         p_call_api_name   => 'Validate_LinesVsHeader',
1828         p_in_param_name1  => 'p_ship_header_int_id',
1829         p_in_param_value1 => p_ship_header_int_id
1830     ) ;
1831     l_response := Validate_LinesVsHeader(
1832                         p_ship_header_int_id => p_ship_header_int_id,
1833                         x_return_status => l_return_status
1834                   );
1835     -- If any errors happen abort API.
1836     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1837         RAISE FND_API.G_EXC_ERROR;
1838     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1839         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1840     END IF;
1841     l_debug_info := 'Consist Lines versus Headers: ';
1842     IF l_response = FALSE THEN
1843         l_result     := FND_API.G_FALSE;
1844         l_debug_info := l_debug_info||'FALSE';
1845     ELSE
1846         l_debug_info := l_debug_info||'OK';
1847     END IF;
1848     INL_LOGGING_PVT.Log_Statement(
1849         p_module_name    => g_module_name,
1850         p_procedure_name => l_func_name,
1851         p_debug_info     => l_debug_info
1852     ) ;
1853     -- Consistency of Transaction Type
1854     l_debug_info := 'Consistency of Transaction Type: '||p_transaction_type;
1855     INL_LOGGING_PVT.Log_Statement(
1856         p_module_name    => g_module_name,
1857         p_procedure_name => l_func_name,
1858         p_debug_info     => l_debug_info
1859     ) ;
1860     INL_LOGGING_PVT.Log_APICallIn(p_module_name => g_module_name,
1861                                   p_procedure_name => l_func_name,
1862                                   p_call_api_name => 'Validate_TrxType',
1863                                   p_in_param_name1 => 'p_ship_header_int_id',
1864                                   p_in_param_value1 => p_ship_header_int_id,
1865                                   p_in_param_name2 => 'p_transaction_type',
1866                                   p_in_param_value2 => p_transaction_type,
1867                                   p_in_param_name3 => 'p_ship_header_id',
1868                                   p_in_param_value3 => p_ship_header_id) ;
1869     l_response                                  := Validate_TrxType(p_ship_header_int_id => p_ship_header_int_id, p_transaction_type => p_transaction_type, p_ship_header_id => p_ship_header_id, x_return_status => l_return_status) ;
1870     -- If any errors happen abort API.
1871     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1872         RAISE FND_API.G_EXC_ERROR;
1873     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1874         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1875     END IF;
1876     l_debug_info := 'Consistency of Transaction Type: ';
1877     IF l_response THEN
1878         l_debug_info := l_debug_info||'OK';
1879     ELSE
1880         l_result     := FND_API.G_FALSE;
1881         l_debug_info := l_debug_info||'FALSE';
1882     END IF;
1883     -- Consistency of Last Task Code
1884     l_debug_info := 'Consistency of Last Task Code: '||p_last_task_code;
1885     INL_LOGGING_PVT.Log_Statement(
1886         p_module_name    => g_module_name,
1887         p_procedure_name => l_func_name,
1888         p_debug_info     => l_debug_info
1889     ) ;
1890     INL_LOGGING_PVT.Log_APICallIn(
1891         p_module_name     => g_module_name,
1892         p_procedure_name  => l_func_name,
1893         p_call_api_name   => 'Validate_LastTaskCode',
1894         p_in_param_name1  => 'p_parent_table_name',
1895         p_in_param_value1 => 'INL_SHIP_HEADERS_INT',
1896         p_in_param_name2  => 'p_parent_table_id',
1897         p_in_param_value2 => p_ship_header_int_id,
1898         p_in_param_name3  => 'p_last_task_code',
1899         p_in_param_value3 => p_last_task_code
1900     ) ;
1901     l_response := Validate_LastTaskCode(
1902                     p_parent_table_name => 'INL_SHIP_HEADERS_INT',
1903                     p_parent_table_id   => p_ship_header_int_id,
1904                     p_last_task_code    => p_last_task_code,
1905                     x_return_status     => l_return_status) ;
1906     -- If any errors happen abort API.
1907     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1908         RAISE FND_API.G_EXC_ERROR;
1909     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1910         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1911     END IF;
1912     l_debug_info := 'Consistency of Last Task Code: ';
1913     IF l_response THEN
1914         l_debug_info := l_debug_info||'OK';
1915     ELSE
1916         l_result     := FND_API.G_FALSE;
1917         l_debug_info := l_debug_info||'FALSE';
1918     END IF;
1919     -- Operating Unit validation
1920     l_response := Validate_OpUnit(
1921                     p_ship_header_int_id => p_ship_header_int_id,
1922                     p_org_id => p_org_id,
1923                     x_return_status => l_return_status
1924                   ) ;
1925     -- If any errors happen abort API.
1926     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1927         RAISE FND_API.G_EXC_ERROR;
1928     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1929         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1930     END IF;
1931     IF NOT l_response THEN
1932         l_result := FND_API.G_FALSE;
1933     END IF;
1934     -- If unexpected errors happen abort
1935     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1936         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1937     END IF;
1938 
1939     -- Shipment Number validation
1940     l_response := Validate_ShipNum(
1941                     p_ship_header_int_id=> p_ship_header_int_id,
1942                     p_ship_num          => p_ship_num,
1943                     p_organization_id   => p_organization_id,
1944                     x_return_status     => l_return_status
1945                   ) ;
1946     -- If any errors happen abort API.
1947     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1948         RAISE FND_API.G_EXC_ERROR;
1949     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1950         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1951     END IF;
1952     IF NOT l_response THEN
1953         l_result := FND_API.G_FALSE;
1954     END IF;
1955     -- If unexpected errors happen abort
1956     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1957         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1958     END IF;
1959 
1960 
1961     -- Shipment Type validation
1962     l_response := Validate_ShipType(
1963                     p_ship_header_int_id=> p_ship_header_int_id,
1964                     p_ship_type_id      => p_ship_type_id,
1965                     x_return_status     => l_return_status
1966                   ) ;
1967     -- If any errors happen abort API.
1968     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1969         RAISE FND_API.G_EXC_ERROR;
1970     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1971         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1972     END IF;
1973     IF NOT l_response THEN
1974         l_result := FND_API.G_FALSE;
1975     END IF;
1976     -- If unexpected errors happen abort
1977     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1978         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1979     END IF;
1980 
1981     l_debug_info := 'Inventory Organization validation';
1982     INL_LOGGING_PVT.Log_Statement(
1983         p_module_name      => g_module_name,
1984         p_procedure_name   => l_func_name,
1985         p_debug_info       => l_debug_info
1986     ) ;
1987 
1988     -- Inventory Organization validation
1989     l_response := Validate_Organization(
1990         p_ship_header_int_id => p_ship_header_int_id,
1991         p_organization_id    => p_organization_id,
1992         x_return_status      => l_return_status) ;
1993     -- If any errors happen abort API.
1994     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1995         RAISE FND_API.G_EXC_ERROR;
1996     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1997         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1998     END IF;
1999     IF NOT l_response THEN
2000         l_result := FND_API.G_FALSE;
2001     END IF;
2002     -- If unexpected errors happen abort
2003     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2004         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2005     END IF;
2006     -- Standard End of Procedure/Function Logging
2007     INL_LOGGING_PVT.Log_EndProc(
2008         p_module_name    => g_module_name,
2009         p_procedure_name => l_func_name
2010     );
2011     RETURN FND_API.to_boolean(l_result) ;
2012 EXCEPTION
2013     WHEN FND_API.G_EXC_ERROR THEN
2014         -- Standard Expected Error Logging
2015         INL_LOGGING_PVT.Log_ExpecError (
2016             p_module_name    => g_module_name,
2017             p_procedure_name => l_func_name
2018         );
2019         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
2020     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2021         -- Standard Unexpected Error Logging
2022         INL_LOGGING_PVT.Log_UnexpecError (
2023             p_module_name    => g_module_name,
2024             p_procedure_name => l_func_name
2025         );
2026         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
2027     WHEN OTHERS THEN
2028       -- Standard Unexpected Error Logging
2029         INL_LOGGING_PVT.Log_UnexpecError (
2030             p_module_name    => g_module_name,
2031             p_procedure_name => l_func_name
2032         );
2033         IF FND_MSG_PUB.Check_Msg_Level(
2034             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
2035         ) THEN
2036             FND_MSG_PUB.Add_Exc_Msg(
2037                 p_pkg_name       => g_pkg_name,
2038                 p_procedure_name => l_func_name
2039             );
2040         END IF;
2041         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
2042 END Validate_LCMImport;
2043 
2044 -- Utility name : Validate_ShipLinImport
2045 -- Type       : Private
2046 -- Function   : Validate a Shipment before import it from interface to INL Tables
2047 --
2048 -- Pre-reqs   : None
2049 -- Parameters :
2050 -- IN         : p_ship_header_int_id IN NUMBER
2051 --              p_ship_line_int_id   IN NUMBER
2052 --              p_ship_type_id       IN NUMBER,
2053 --              p_ship_line_type_id  IN NUMBER,
2054 --
2055 -- OUT        : x_return_status      OUT NOCOPY VARCHAR2
2056 --
2057 -- Version    : Current version 1.0
2058 --
2059 -- Notes      :
2060 FUNCTION Validate_ShipLinImport (
2061     p_ship_header_int_id IN NUMBER,
2062     p_ship_line_int_id   IN NUMBER,
2063     p_ship_type_id       IN NUMBER,
2064     p_ship_line_type_id  IN NUMBER,
2065     x_return_status      OUT NOCOPY VARCHAR2
2066 ) RETURN BOOLEAN IS
2067     l_func_name     CONSTANT VARCHAR2(30) := 'Validate_ShipLinImport';
2068     l_return_status VARCHAR2(1) ;
2069     l_debug_info    VARCHAR2(400) ;
2070     l_result        VARCHAR2(1) := FND_API.G_TRUE;
2071     l_response      BOOLEAN;
2072 BEGIN
2073     -- Standard Beginning of Procedure/Function Logging
2074     INL_LOGGING_PVT.Log_BeginProc(
2075         p_module_name    => g_module_name,
2076         p_procedure_name => l_func_name
2077     ) ;
2078     --  Initialize API return status to success
2079     x_return_status := FND_API.G_RET_STS_SUCCESS;
2080 
2081 
2082     -- Consist Lines versus Headers
2083     l_debug_info := 'Validate ship line type';
2084     INL_LOGGING_PVT.Log_Statement(
2085         p_module_name      => g_module_name,
2086         p_procedure_name   => l_func_name,
2087         p_debug_info       => l_debug_info
2088     ) ;
2089     INL_LOGGING_PVT.Log_APICallIn(
2090         p_module_name     => g_module_name,
2091         p_procedure_name  => l_func_name,
2092         p_call_api_name   => 'Validate_ShipLineType',
2093         p_in_param_name1  => 'p_ship_header_int_id',
2094         p_in_param_value1 => p_ship_header_int_id,
2095         p_in_param_name2  => 'p_ship_line_int_id',
2096         p_in_param_value2 => p_ship_line_int_id,
2097         p_in_param_name3  => 'p_ship_type_id',
2098         p_in_param_value3 => p_ship_type_id,
2099         p_in_param_name4  => 'p_ship_line_type_id',
2100         p_in_param_value4 => p_ship_line_type_id
2101     ) ;
2102 
2103     -- Shipment Line Type validation
2104     l_response := Validate_ShipLineType(
2105                     p_ship_header_int_id=> p_ship_header_int_id,
2106                     p_ship_line_int_id  => p_ship_line_int_id,
2107                     p_ship_type_id      => p_ship_type_id,
2108                     p_ship_line_type_id => p_ship_line_type_id,
2109                     x_return_status     => l_return_status
2110                   ) ;
2111     -- If any errors happen abort API.
2112     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
2113         RAISE FND_API.G_EXC_ERROR;
2114     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2115         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2116     END IF;
2117     IF NOT l_response THEN
2118         l_result := FND_API.G_FALSE;
2119     END IF;
2120     -- If unexpected errors happen abort
2121     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2122         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2123     END IF;
2124     IF l_response THEN
2125         l_debug_info := l_debug_info||'OK';
2126     ELSE
2127         l_result     := FND_API.G_FALSE;
2128         l_debug_info := l_debug_info||'FALSE';
2129     END IF;
2130 
2131 
2132     -- Standard End of Procedure/Function Logging
2133     INL_LOGGING_PVT.Log_EndProc(
2134         p_module_name    => g_module_name,
2135         p_procedure_name => l_func_name
2136     );
2137     RETURN FND_API.to_boolean(l_result) ;
2138 EXCEPTION
2139     WHEN FND_API.G_EXC_ERROR THEN
2140         -- Standard Expected Error Logging
2141         INL_LOGGING_PVT.Log_ExpecError (
2142             p_module_name    => g_module_name,
2143             p_procedure_name => l_func_name
2144         );
2145         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
2146     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2147         -- Standard Unexpected Error Logging
2148         INL_LOGGING_PVT.Log_UnexpecError (
2149             p_module_name    => g_module_name,
2150             p_procedure_name => l_func_name
2151         );
2152         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
2153     WHEN OTHERS THEN
2154       -- Standard Unexpected Error Logging
2155         INL_LOGGING_PVT.Log_UnexpecError (
2156             p_module_name    => g_module_name,
2157             p_procedure_name => l_func_name
2158         );
2159         IF FND_MSG_PUB.Check_Msg_Level(
2160             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
2161         ) THEN
2162             FND_MSG_PUB.Add_Exc_Msg(
2163                 p_pkg_name       => g_pkg_name,
2164                 p_procedure_name => l_func_name
2165             );
2166         END IF;
2167         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
2168 END Validate_ShipLinImport;
2169 
2170 -- Utility name : Delete_Ship
2171 -- Type       : Private
2172 -- Function   : Delete a LCM Shipment from inl_ship_holds, inl_associations,
2173 --              inl_allocations, inl_tax_lines, inl_charge_lines,
2174 --              inl_ship_lines_all, inl_ship_line_groups and inl_ship_headers_all
2175 -- Pre-reqs   : None
2176 -- Parameters :
2177 -- IN         : p_ship_header_id IN  NUMBER
2178 --
2179 -- OUT        : x_return_status  OUT NOCOPY VARCHAR2
2180 --
2181 -- Version    : Current version 1.0
2182 --
2183 -- Notes      :
2184 PROCEDURE Delete_Ship (
2185     p_ship_header_id IN NUMBER,
2186     x_return_status OUT NOCOPY VARCHAR2
2187 ) IS
2188     l_proc_name  CONSTANT VARCHAR2(100) := 'Delete_Ship';
2189     l_debug_info VARCHAR2(2000) ;
2190 BEGIN
2191     -- Standard Beginning of Procedure/Function Logging
2192     INL_LOGGING_PVT.Log_BeginProc(
2193         p_module_name    => g_module_name,
2194         p_procedure_name => l_proc_name
2195     ) ;
2196     --  Initialize API return status to success
2197     x_return_status := FND_API.G_RET_STS_SUCCESS;
2198     l_debug_info := 'Delete from inl_ship_holds';
2199     INL_LOGGING_PVT.Log_Statement(
2200         p_module_name      => g_module_name,
2201         p_procedure_name   => l_proc_name,
2202         p_debug_info       => l_debug_info
2203     ) ;
2204 
2205     DELETE FROM inl.inl_ship_holds
2206     WHERE ship_header_id = p_ship_header_id;
2207 
2208     l_debug_info := 'Delete from inl_allocations';
2209     INL_LOGGING_PVT.Log_Statement(
2210         p_module_name      => g_module_name,
2211         p_procedure_name   => l_proc_name,
2212         p_debug_info       => l_debug_info
2213     ) ;
2214 
2215     DELETE FROM inl.inl_allocations
2216     WHERE ship_header_id = p_ship_header_id;
2217 
2218     l_debug_info := 'Delete from inl_tax_lines';
2219     INL_LOGGING_PVT.Log_Statement(
2220         p_module_name      => g_module_name,
2221         p_procedure_name   => l_proc_name,
2222         p_debug_info       => l_debug_info
2223     ) ;
2224 
2225     DELETE FROM inl.inl_tax_lines
2226     WHERE ship_header_id = p_ship_header_id;
2227 
2228     l_debug_info := 'Delete from inl_charge_lines';
2229     INL_LOGGING_PVT.Log_Statement(
2230         p_module_name      => g_module_name,
2231         p_procedure_name   => l_proc_name,
2232         p_debug_info       => l_debug_info
2233     ) ;
2234     DELETE
2235     FROM inl.inl_charge_lines cl
2236     WHERE cl.charge_line_id
2237             IN (
2238                 SELECT assoc.from_parent_table_id
2239                   FROM inl_associations assoc
2240                  WHERE assoc.from_parent_table_name = 'INL_CHARGE_LINES'
2241                    AND assoc.ship_header_id         = p_ship_header_id
2242                )
2243     ;
2244 
2245     l_debug_info := 'Delete from inl_associations';
2246     INL_LOGGING_PVT.Log_Statement(
2247         p_module_name      => g_module_name,
2248         p_procedure_name   => l_proc_name,
2249         p_debug_info       => l_debug_info
2250     ) ;
2251     DELETE FROM inl.inl_associations
2252     WHERE ship_header_id = p_ship_header_id;
2253 
2254     l_debug_info := 'Delete from inl_ship_lines_all';
2255     INL_LOGGING_PVT.Log_Statement(
2256         p_module_name      => g_module_name,
2257         p_procedure_name   => l_proc_name,
2258         p_debug_info       => l_debug_info
2259     ) ;
2260     DELETE FROM inl.inl_ship_lines_all
2261     WHERE ship_header_id = p_ship_header_id;
2262 
2263     l_debug_info := 'Delete from inl_ship_line_groups';
2264     INL_LOGGING_PVT.Log_Statement(
2265         p_module_name      => g_module_name,
2266         p_procedure_name   => l_proc_name,
2267         p_debug_info       => l_debug_info
2268     ) ;
2269     DELETE FROM inl.inl_ship_line_groups
2270     WHERE ship_header_id = p_ship_header_id;
2271 
2272     l_debug_info := 'Delete from inl_ship_headers_all';
2273     INL_LOGGING_PVT.Log_Statement(
2274         p_module_name      => g_module_name,
2275         p_procedure_name   => l_proc_name,
2276         p_debug_info       => l_debug_info
2277     ) ;
2278      DELETE FROM inl.inl_ship_headers_all WHERE ship_header_id = p_ship_header_id;
2279     -- Standard End of Procedure/Function Logging
2280     INL_LOGGING_PVT.Log_EndProc(
2281         p_module_name    => g_module_name,
2282         p_procedure_name => l_proc_name
2283     );
2284 EXCEPTION
2285     WHEN FND_API.G_EXC_ERROR THEN
2286         -- Standard Expected Error Logging
2287         INL_LOGGING_PVT.Log_ExpecError (
2288             p_module_name    => g_module_name,
2289             p_procedure_name => l_proc_name
2290         );
2291         x_return_status := FND_API.G_RET_STS_ERROR;
2292     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2293         -- Standard Unexpected Error Logging
2294         INL_LOGGING_PVT.Log_UnexpecError (
2295             p_module_name    => g_module_name,
2296             p_procedure_name => l_proc_name
2297         );
2298         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2299     WHEN OTHERS THEN
2300         -- Standard Unexpected Error Logging
2301         INL_LOGGING_PVT.Log_UnexpecError (
2302             p_module_name    => g_module_name,
2303             p_procedure_name => l_proc_name
2304         );
2305         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2306         IF FND_MSG_PUB.Check_Msg_Level(
2307             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
2308         ) THEN
2309             FND_MSG_PUB.Add_Exc_Msg(
2310                 p_pkg_name       => g_pkg_name,
2311                 p_procedure_name => l_proc_name
2312             );
2313         END IF;
2314 END Delete_Ship;
2315 -- Utility name : Import_Headers
2316 -- Type       : Private
2317 -- Function   : Import Shipment Headers from Interface
2318 --              table to INL_SHIP_HEADERS_ALL
2319 --
2320 -- Pre-reqs   : None
2321 -- Parameters :
2322 -- IN         : p_group_id      IN NUMBER
2323 --              p_org_id        IN NUMBER   => Operating unit
2324 --
2325 -- OUT        : x_return_status  OUT NOCOPY VARCHAR2
2326 --
2327 -- Version    : Current version 1.0
2328 --
2329 -- Notes      :
2330 PROCEDURE Import_Headers (
2331     p_group_id      IN NUMBER,
2332     p_org_id        IN NUMBER,
2333     x_return_status OUT NOCOPY VARCHAR2
2334 ) IS
2335     -- Get all valid and possible headers from
2336     -- interface to import into INL Shipment Header table
2337     CURSOR validHeaders
2338     IS
2339          SELECT h.ship_header_int_id  ,
2340             h.group_id                ,
2341             h.processing_status_code  ,
2342             h.interface_source_code   ,
2343             h.interface_source_table  ,
2344             h.interface_source_line_id,
2345             h.validation_flag         ,
2346             h.ship_num                ,
2347             h.ship_date               ,
2348             h.ship_type_id            ,
2349             h.legal_entity_id         ,
2350             h.organization_id         ,
2351             h.location_id             ,
2352             h.org_id                  ,
2353             h.taxation_country        ,
2354             h.document_sub_type       ,
2355             h.transaction_type        ,
2356             h.attribute_category      ,
2357             h.attribute1              ,
2358             h.attribute2              ,
2359             h.attribute3              ,
2360             h.attribute4              ,
2361             h.attribute5              ,
2362             h.attribute6              ,
2363             h.attribute7              ,
2364             h.attribute8              ,
2365             h.attribute9              ,
2366             h.attribute10             ,
2367             h.attribute11             ,
2368             h.attribute12             ,
2369             h.attribute13             ,
2370             h.attribute14             ,
2371             h.attribute15             ,
2372             h.ship_header_id
2373           FROM inl_ship_headers_int h
2374           WHERE (p_group_id   IS NULL
2375                  OR h.group_id = p_group_id
2376                 )
2377           AND ( p_org_id                IS NULL
2378           OR    h.org_id                = p_org_id
2379                 )
2380           AND h.last_task_code        >= '10'
2381           AND h.processing_status_code = 'RUNNING'
2382           AND (h.transaction_type = 'DELETE'
2383                OR EXISTS (
2384                           SELECT 1
2385                           FROM inl_ship_lines_int l
2386                           WHERE l.ship_header_int_id = h.ship_header_int_id
2387                           AND ROWNUM               < 2
2388                          )
2389                )
2390           ;
2391 
2392     TYPE validHeaders_List_Type
2393 IS
2394     TABLE OF validHeaders%ROWTYPE;
2395     validHeaders_List validHeaders_List_Type;
2396     l_user_defined_ship_num_code VARCHAR2(30) ;
2397     l_next_ship_num              NUMBER;
2398     l_ship_num                   NUMBER;
2399     l_proc_name                  CONSTANT VARCHAR2(100) := 'Import_Headers';
2400     l_debug_info                 VARCHAR2(2000) ;
2401     l_return_status              VARCHAR2(1) ;
2402 BEGIN
2403     -- Standard Beginning of Procedure/Function Logging
2404     INL_LOGGING_PVT.Log_BeginProc(
2405         p_module_name    => g_module_name,
2406         p_procedure_name => l_proc_name
2407     ) ;
2408     --  Initialize API return status to success
2409     x_return_status := FND_API.G_RET_STS_SUCCESS;
2410     OPEN validHeaders;
2411     FETCH validHeaders BULK COLLECT INTO validHeaders_List;
2412 
2413     CLOSE validHeaders;
2414     IF NVL(validHeaders_List.LAST, 0) > 0 THEN
2415         FOR iHead                     IN NVL(validHeaders_List.FIRST, 0) ..NVL(validHeaders_List.LAST, 0)
2416         LOOP
2417             IF validHeaders_List(iHead) .transaction_type = 'DELETE' THEN
2418                 Delete_Ship(
2419                     p_ship_header_id => validHeaders_List(iHead).ship_header_id,
2420                     x_return_status  => l_return_status);
2421                 -- If any errors happen abort API.
2422                 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
2423                     RAISE FND_API.G_EXC_ERROR;
2424                 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2425                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2426                 END IF;
2427                 -- Set processing status code to 'COMPLETED' for all lines
2428                 -- related to the current and imported Shipment Header
2429                  UPDATE inl_ship_lines_int
2430                 SET processing_status_code = 'COMPLETED'               ,
2431                     request_id             = fnd_global.conc_request_id,
2432                     last_updated_by        = fnd_global.user_id        ,
2433                     last_update_date       = SYSDATE                   ,
2434                     last_update_login      = fnd_global.login_id       ,
2435                     program_id             = fnd_global.conc_program_id,
2436                     program_update_date    = SYSDATE                   ,
2437                     program_application_id = fnd_global.prog_appl_id
2438                   WHERE ship_header_int_id = validHeaders_List(iHead) .ship_header_int_id;
2439             ELSE
2440                 l_debug_info  := 'Check if Shipment Number is setup as Automatic or Manual';
2441                 INL_LOGGING_PVT.Log_Statement(
2442                     p_module_name      => g_module_name,
2443                     p_procedure_name   => l_proc_name,
2444                     p_debug_info       => l_debug_info
2445                 ) ;
2446                 --  Check if Shipment Number is setup as(AUTOMATIC or MANUAL)
2447                 SELECT user_defined_ship_num_code,
2448                    next_ship_num
2449                 INTO l_user_defined_ship_num_code,
2450                    l_next_ship_num
2451                 FROM inl_parameters
2452                 WHERE organization_id = validHeaders_List(iHead) .organization_id;
2453                 IF validHeaders_List(iHead) .transaction_type    = 'UPDATE' THEN
2454                     l_debug_info  := 'Updating the Shipment Header';
2455                     INL_LOGGING_PVT.Log_Statement(
2456                         p_module_name      => g_module_name,
2457                         p_procedure_name   => l_proc_name,
2458                         p_debug_info       => l_debug_info
2459                     ) ;
2460                     UPDATE inl_ship_headers
2461                     SET ship_num                 = DECODE(l_user_defined_ship_num_code, 'AUTOMATIC', ship_num, validHeaders_List(iHead) .ship_num), -- 02
2462                         ship_date                = validHeaders_List(iHead) .ship_date                                                             , -- 03
2463                         ship_type_id             = validHeaders_List(iHead) .ship_type_id                                                          , -- 04
2464                         legal_entity_id          = validHeaders_List(iHead) .legal_entity_id                                                       , -- 08
2465                         organization_id          = validHeaders_List(iHead) .organization_id                                                       , -- 09
2466                         location_id              = validHeaders_List(iHead) .location_id                                                           , -- 10
2467                         org_id                   = validHeaders_List(iHead) .org_id                                                                , -- 11
2468                         taxation_country         = validHeaders_List(iHead) .taxation_country                                                      , -- 12
2469                         document_sub_type        = validHeaders_List(iHead) .document_sub_type                                                     , -- 13
2470                         ship_header_int_id       = validHeaders_List(iHead) .ship_header_int_id                                                    , -- 14
2471                         interface_source_code    = validHeaders_List(iHead) .interface_source_code                                                 , -- 15
2472                         interface_source_table   = validHeaders_List(iHead) .interface_source_table                                                , -- 16
2473                         interface_source_line_id = validHeaders_List(iHead) .interface_source_line_id                                              , -- 17
2474                         last_updated_by          = fnd_global.user_id                                                                               , -- 20
2475                         last_update_date         = SYSDATE                                                                                          , -- 21
2476                         last_update_login        = fnd_global.login_id                                                                              , -- 22
2477                         program_id               = fnd_global.conc_program_id                                                                       , -- 23
2478                         program_update_date      = SYSDATE                                                                                          , -- 24
2479                         program_application_id   = fnd_global.prog_appl_id                                                                          , -- 25
2480                         request_id               = fnd_global.conc_request_id                                                                       , -- 26
2481                         attribute_category       = validHeaders_List(iHead) .attribute_category                                                    , -- 27
2482                         attribute1               = validHeaders_List(iHead) .attribute1                                                            , -- 28
2483                         attribute2               = validHeaders_List(iHead) .attribute2                                                            , -- 29
2484                         attribute3               = validHeaders_List(iHead) .attribute3                                                            , -- 30
2485                         attribute4               = validHeaders_List(iHead) .attribute4                                                            , -- 31
2486                         attribute5               = validHeaders_List(iHead) .attribute5                                                            , -- 32
2487                         attribute6               = validHeaders_List(iHead) .attribute6                                                            , -- 33
2488                         attribute7               = validHeaders_List(iHead) .attribute7                                                            , -- 34
2489                         attribute8               = validHeaders_List(iHead) .attribute8                                                            , -- 35
2490                         attribute9               = validHeaders_List(iHead) .attribute9                                                            , -- 36
2491                         attribute10              = validHeaders_List(iHead) .attribute10                                                           , -- 37
2492                         attribute11              = validHeaders_List(iHead) .attribute11                                                           , -- 38
2493                         attribute12              = validHeaders_List(iHead) .attribute12                                                           , -- 39
2494                         attribute13              = validHeaders_List(iHead) .attribute13                                                           , -- 40
2495                         attribute14              = validHeaders_List(iHead) .attribute14                                                           , -- 41
2496                         attribute15              = validHeaders_List(iHead) .attribute15                                                             -- 42
2497                     WHERE ship_header_id       = validHeaders_List(iHead) .ship_header_id;
2498                 ELSE
2499                     -- Get Shipment Header's nextval
2500                     SELECT inl_ship_headers_all_s.NEXTVAL
2501                     INTO validHeaders_List(iHead) .ship_header_id
2502                     FROM dual;
2503 
2504                     INL_LOGGING_PVT.Log_Variable(
2505                         p_module_name    => g_module_name,
2506                         p_procedure_name => l_proc_name,
2507                         p_var_name       => 'l_user_defined_ship_num_code',
2508                         p_var_value      => l_user_defined_ship_num_code
2509                     ) ;
2510                     INL_LOGGING_PVT.Log_Variable(
2511                         p_module_name    => g_module_name,
2512                         p_procedure_name => l_proc_name,
2513                         p_var_name       => 'l_next_ship_num',
2514                         p_var_value      => l_next_ship_num
2515                     ) ;
2516                     l_debug_info := 'Setting the next Shipment Number in INL_PARAMETERS';
2517                     INL_LOGGING_PVT.Log_Statement(
2518                         p_module_name      => g_module_name,
2519                         p_procedure_name   => l_proc_name,
2520                         p_debug_info       => l_debug_info
2521                     ) ;
2522                     l_ship_num                                  := NULL;
2523                     IF l_user_defined_ship_num_code              = 'AUTOMATIC' THEN
2524                         l_ship_num                              := l_next_ship_num;
2525                          UPDATE inl_parameters
2526                         SET next_ship_num              = l_next_ship_num + 1,
2527                             last_updated_by            = fnd_global.user_id ,
2528                             last_update_date           = SYSDATE            ,
2529                             last_update_login          = fnd_global.login_id
2530                           WHERE organization_id        = validHeaders_List(iHead).organization_id;
2531                     ELSIF l_user_defined_ship_num_code = 'MANUAL' THEN
2532                         l_ship_num                    := validHeaders_List(iHead).ship_num;
2533                     END IF;
2534                     INL_LOGGING_PVT.Log_Variable(
2535                         p_module_name    => g_module_name,
2536                         p_procedure_name => l_proc_name,
2537                         p_var_name       => 'l_ship_num',
2538                         p_var_value      => l_ship_num
2539                     ) ;
2540                     l_debug_info := 'Insert into Shipment Headers table';
2541                     INL_LOGGING_PVT.Log_Statement(
2542                         p_module_name      => g_module_name,
2543                         p_procedure_name   => l_proc_name,
2544                         p_debug_info       => l_debug_info
2545                     ) ;
2546                     --  Insert an INL SHIP HEADER record
2547                     INSERT
2548                     INTO inl_ship_headers (
2549                         ship_header_id          , -- 01
2550                         ship_num                , -- 02
2551                         ship_date               , -- 03
2552                         ship_type_id            , -- 04
2553                         ship_status_code        , -- 05
2554                         pending_matching_flag   , -- 06
2555                         legal_entity_id         , -- 08
2556                         organization_id         , -- 09
2557                         location_id             , -- 10
2558                         org_id                  , -- 11
2559                         taxation_country        , -- 12
2560                         document_sub_type       , -- 13
2561                         ship_header_int_id      , -- 14
2562                         interface_source_code   , -- 15
2563                         interface_source_table  , -- 16
2564                         interface_source_line_id, -- 17
2565                         adjustment_num          , -- 17a
2566                         created_by              , -- 18
2567                         creation_date           , -- 19
2568                         last_updated_by         , -- 20
2569                         last_update_date        , -- 21
2570                         last_update_login       , -- 22
2571                         program_id              , -- 23
2572                         program_update_date     , -- 24
2573                         program_application_id  , -- 25
2574                         request_id              , -- 26
2575                         attribute_category      , -- 27
2576                         attribute1              , -- 28
2577                         attribute2              , -- 29
2578                         attribute3              , -- 30
2579                         attribute4              , -- 31
2580                         attribute5              , -- 32
2581                         attribute6              , -- 33
2582                         attribute7              , -- 34
2583                         attribute8              , -- 35
2584                         attribute9              , -- 36
2585                         attribute10             , -- 37
2586                         attribute11             , -- 38
2587                         attribute12             , -- 39
2588                         attribute13             , -- 40
2589                         attribute14             , -- 41
2590                         attribute15               -- 42
2591                     ) VALUES  (
2592                         validHeaders_List(iHead) .ship_header_id            , -- 01
2593                         l_ship_num                                          , -- 02
2594                         validHeaders_List(iHead) .ship_date                 , -- 03
2595                         validHeaders_List(iHead) .ship_type_id              , -- 04
2596                         'INCOMPLETE'                                        , -- 05
2597                         NULL                                                , -- 06
2598                         validHeaders_List(iHead) .legal_entity_id           , -- 08
2599                         validHeaders_List(iHead) .organization_id           , -- 09
2600                         validHeaders_List(iHead) .location_id               , -- 10
2601                         validHeaders_List(iHead) .org_id                    , -- 11
2602                         validHeaders_List(iHead) .taxation_country          , -- 12
2603                         validHeaders_List(iHead) .document_sub_type         , -- 13
2604                         validHeaders_List(iHead) .ship_header_int_id        , -- 14
2605                         validHeaders_List(iHead) .interface_source_code     , -- 15
2606                         validHeaders_List(iHead) .interface_source_table    , -- 16
2607                         validHeaders_List(iHead) .interface_source_line_id  , -- 17
2608                         0                                                   , -- 17a
2609                         fnd_global.user_id                                  , -- 18
2610                         SYSDATE                                             , -- 19
2611                         fnd_global.user_id                                  , -- 20
2612                         SYSDATE                                             , -- 21
2613                         fnd_global.login_id                                 , -- 22
2614                         fnd_global.conc_program_id                          , -- 23
2615                         SYSDATE                                             , -- 24
2616                         fnd_global.prog_appl_id                             , -- 25
2617                         fnd_global.conc_request_id                          , -- 26
2618                         validHeaders_List(iHead) .attribute_category        , -- 27
2619                         validHeaders_List(iHead) .attribute1                , -- 28
2620                         validHeaders_List(iHead) .attribute2                , -- 29
2621                         validHeaders_List(iHead) .attribute3                , -- 30
2622                         validHeaders_List(iHead) .attribute4                , -- 31
2623                         validHeaders_List(iHead) .attribute5                , -- 32
2624                         validHeaders_List(iHead) .attribute6                , -- 33
2625                         validHeaders_List(iHead) .attribute7                , -- 34
2626                         validHeaders_List(iHead) .attribute8                , -- 35
2627                         validHeaders_List(iHead) .attribute9                , -- 36
2628                         validHeaders_List(iHead) .attribute10               , -- 37
2629                         validHeaders_List(iHead) .attribute11               , -- 38
2630                         validHeaders_List(iHead) .attribute12               , -- 39
2631                         validHeaders_List(iHead) .attribute13               , -- 40
2632                         validHeaders_List(iHead) .attribute14               , -- 41
2633                         validHeaders_List(iHead) .attribute15                 -- 42
2634                     ) ;
2635                 END IF;
2636             END IF;
2637             l_debug_info := 'Set Shipment Header Interface status and imported Id';
2638             INL_LOGGING_PVT.Log_Statement(
2639                 p_module_name      => g_module_name,
2640                 p_procedure_name   => l_proc_name,
2641                 p_debug_info       => l_debug_info
2642             ) ;
2643             -- Set processing status code to COMPLETED
2644             -- for the current and imported Shipment Header
2645             UPDATE inl_ship_headers_int
2646             SET processing_status_code = 'COMPLETED'                              ,
2647                 ship_header_id         = validHeaders_List(iHead).ship_header_id,
2648                 request_id             = fnd_global.conc_request_id               ,
2649                 last_updated_by        = fnd_global.user_id                       ,
2650                 last_update_date       = SYSDATE                                  ,
2651                 last_update_login      = fnd_global.login_id                      ,
2652                 program_id             = fnd_global.conc_program_id               ,
2653                 program_update_date    = SYSDATE                                  ,
2654                 program_application_id = fnd_global.prog_appl_id
2655             WHERE ship_header_int_id   = validHeaders_List(iHead).ship_header_int_id;
2656         END LOOP;
2657     END IF;
2658     -- Standard End of Procedure/Function Logging
2659     INL_LOGGING_PVT.Log_EndProc(
2660         p_module_name    => g_module_name,
2661         p_procedure_name => l_proc_name
2662     );
2663 EXCEPTION
2664     WHEN FND_API.G_EXC_ERROR THEN
2665         -- Standard Expected Error Logging
2666         INL_LOGGING_PVT.Log_ExpecError (
2667             p_module_name    => g_module_name,
2668             p_procedure_name => l_proc_name
2669         );
2670         x_return_status := FND_API.G_RET_STS_ERROR;
2671     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2672         -- Standard Unexpected Error Logging
2673         INL_LOGGING_PVT.Log_UnexpecError (
2674             p_module_name    => g_module_name,
2675             p_procedure_name => l_proc_name
2676         );
2677         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2678     WHEN OTHERS THEN
2679         -- Standard Unexpected Error Logging
2680         INL_LOGGING_PVT.Log_UnexpecError (
2681             p_module_name    => g_module_name,
2682             p_procedure_name => l_proc_name
2683         );
2684         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2685         IF FND_MSG_PUB.Check_Msg_Level(
2686             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
2687         ) THEN
2688             FND_MSG_PUB.Add_Exc_Msg(
2689                 p_pkg_name       => g_pkg_name,
2690                 p_procedure_name => l_proc_name
2691             );
2692         END IF;
2693 END Import_Headers;
2694 -- Utility name : Handle_LineGroups
2695 -- Type       : Private
2696 -- Function   : Create a Line Group for a given Shipment Header only if
2697 --              it hasn't been created yet in the current transaction
2698 --
2699 -- Pre-reqs   : None
2700 -- Parameters :
2701 -- IN         : p_ship_header_id   IN  NUMBER
2702 --              p_line_index       IN  NUMBER
2703 --
2704 -- OUT        : x_return_status    IN OUT NOCOPY VARCHAR2
2705 --
2706 -- Version    : Current version 1.0
2707 --
2708 -- Notes      :
2709 PROCEDURE Handle_LineGroups
2710    (
2711         p_ship_header_id                IN NUMBER,
2712         p_line_index                    IN NUMBER,
2713         x_return_status                 IN OUT NOCOPY VARCHAR2)
2714                                         IS
2715     l_proc_name  CONSTANT VARCHAR2(100) := 'Handle_LineGroups';
2716     l_debug_info VARCHAR2(2000) ;
2717 BEGIN
2718     -- Standard Beginning of Procedure/Function Logging
2719     INL_LOGGING_PVT.Log_BeginProc(
2720         p_module_name    => g_module_name,
2721         p_procedure_name => l_proc_name
2722     ) ;
2723     IF(rec_ship_line_groups.ship_header_id     <> p_ship_header_id OR
2724        NVL(rec_ship_line_groups.ship_line_group_reference, FND_API.G_MISS_CHAR) <> NVL(validLines_List(p_line_index) .ship_line_group_reference, FND_API.G_MISS_CHAR)
2725        OR rec_ship_line_groups.src_type_code <> validLines_List(p_line_index) .ship_line_src_type_code OR
2726        rec_ship_line_groups.party_id <> validLines_List(p_line_index) .party_id OR rec_ship_line_groups.party_site_id <> validLines_List(p_line_index) .party_site_id OR
2727        NVL(rec_ship_line_groups.source_organization_id, FND_API.G_MISS_NUM) <> NVL(validLines_List(p_line_index) .source_organization_id, FND_API.G_MISS_NUM)) THEN
2728         BEGIN
2729              SELECT ship_line_group_id,                        /* 01 */
2730                    ship_line_group_reference,                     /* 02 */
2731                    ship_header_id,                                /* 03 */
2732                    ship_line_group_num,                           /* 04 */
2733                    src_type_code,                                 /* 05 */
2734                    party_id,                                      /* 06 */
2735                    party_site_id,                                 /* 07 */
2736                    source_organization_id,                        /* 08 */
2737                    attribute_category,                            /* 09 */
2738                    attribute1,                                    /* 10 */
2739                    attribute2,                                    /* 11 */
2740                    attribute3,                                    /* 12 */
2741                    attribute4,                                    /* 13 */
2742                    attribute5,                                    /* 14 */
2743                    attribute6,                                    /* 15 */
2744                    attribute7,                                    /* 16 */
2745                    attribute8,                                    /* 17 */
2746                    attribute9,                                    /* 18 */
2747                    attribute10,                                   /* 19 */
2748                    attribute11,                                   /* 20 */
2749                    attribute12,                                   /* 21 */
2750                    attribute13,                                   /* 22 */
2751                    attribute14,                                   /* 23 */
2752                    attribute15                                    /* 24 */
2753                INTO
2754                    rec_ship_line_groups.ship_line_group_id,       /* 01 */
2755                    rec_ship_line_groups.ship_line_group_reference,/* 02 */
2756                    rec_ship_line_groups.ship_header_id,           /* 03 */
2757                    rec_ship_line_groups.ship_line_group_num,      /* 04 */
2758                    rec_ship_line_groups.src_type_code,            /* 05 */
2759                    rec_ship_line_groups.party_id,                 /* 06 */
2760                    rec_ship_line_groups.party_site_id,            /* 07 */
2761                    rec_ship_line_groups.source_organization_id,   /* 08 */
2762                    rec_ship_line_groups.attribute_category,       /* 09 */
2763                    rec_ship_line_groups.attribute1,               /* 10 */
2764                    rec_ship_line_groups.attribute2,               /* 11 */
2765                    rec_ship_line_groups.attribute3,               /* 12 */
2766                    rec_ship_line_groups.attribute4,               /* 13 */
2767                    rec_ship_line_groups.attribute5,               /* 14 */
2768                    rec_ship_line_groups.attribute6,               /* 15 */
2769                    rec_ship_line_groups.attribute7,               /* 16 */
2770                    rec_ship_line_groups.attribute8,               /* 17 */
2771                    rec_ship_line_groups.attribute9,               /* 18 */
2772                    rec_ship_line_groups.attribute10,              /* 19 */
2773                    rec_ship_line_groups.attribute11,              /* 20 */
2774                    rec_ship_line_groups.attribute12,              /* 21 */
2775                    rec_ship_line_groups.attribute13,              /* 22 */
2776                    rec_ship_line_groups.attribute14,              /* 23 */
2777                    rec_ship_line_groups.attribute15               /* 24 */
2778                FROM inl_ship_line_groups
2779                WHERE ship_header_id                       = p_ship_header_id
2780                AND NVL(src_type_code, FND_API.G_MISS_CHAR)= NVL(validLines_List(p_line_index).ship_line_src_type_code, FND_API.G_MISS_CHAR)
2781                AND party_id                               = validLines_List(p_line_index).party_id
2782                AND party_site_id                          = validLines_List(p_line_index).party_site_id
2783                AND source_organization_id                 = validLines_List(p_line_index).source_organization_id
2784                AND NVL(ship_line_group_reference, FND_API.G_MISS_NUM)= NVL(validLines_List(p_line_index).ship_line_group_reference, FND_API.G_MISS_NUM) ;
2785         EXCEPTION
2786             WHEN NO_DATA_FOUND THEN
2787                 -- Create a Line Group record
2788                 SELECT inl_ship_line_groups_s.NEXTVAL
2789                 INTO rec_ship_line_groups.ship_line_group_id
2790                 FROM dual;
2791                 SELECT MAX(ship_line_group_num)
2792                 INTO rec_ship_line_groups.ship_line_group_num
2793                 FROM inl_ship_line_groups
2794                 WHERE ship_header_id = p_ship_header_id;
2795 
2796                 rec_ship_line_groups.ship_line_group_num       := NVL(rec_ship_line_groups.ship_line_group_num, 0) + 1;
2797                 rec_ship_line_groups.ship_line_group_reference := validLines_List(p_line_index).ship_line_group_reference;
2798                 rec_ship_line_groups.ship_header_id            := p_ship_header_id;
2799                 rec_ship_line_groups.src_type_code             := validLines_List(p_line_index).ship_line_src_type_code;
2800                 rec_ship_line_groups.party_id                  := validLines_List(p_line_index).party_id;
2801                 rec_ship_line_groups.party_site_id             := validLines_List(p_line_index).party_site_id;
2802                 rec_ship_line_groups.source_organization_id    := validLines_List(p_line_index).source_organization_id;
2803                 rec_ship_line_groups.attribute_category        := validLines_List(p_line_index).attribute_category_lg;
2804                 rec_ship_line_groups.attribute1                := validLines_List(p_line_index).attribute1_lg;
2805                 rec_ship_line_groups.attribute2                := validLines_List(p_line_index).attribute2_lg;
2806                 rec_ship_line_groups.attribute3                := validLines_List(p_line_index).attribute3_lg;
2807                 rec_ship_line_groups.attribute4                := validLines_List(p_line_index).attribute4_lg;
2808                 rec_ship_line_groups.attribute5                := validLines_List(p_line_index).attribute5_lg;
2809                 rec_ship_line_groups.attribute6                := validLines_List(p_line_index).attribute6_lg;
2810                 rec_ship_line_groups.attribute7                := validLines_List(p_line_index).attribute7_lg;
2811                 rec_ship_line_groups.attribute8                := validLines_List(p_line_index).attribute8_lg;
2812                 rec_ship_line_groups.attribute9                := validLines_List(p_line_index).attribute9_lg;
2813                 rec_ship_line_groups.attribute10               := validLines_List(p_line_index).attribute10_lg;
2814                 rec_ship_line_groups.attribute11               := validLines_List(p_line_index).attribute11_lg;
2815                 rec_ship_line_groups.attribute12               := validLines_List(p_line_index).attribute12_lg;
2816                 rec_ship_line_groups.attribute13               := validLines_List(p_line_index).attribute13_lg;
2817                 rec_ship_line_groups.attribute14               := validLines_List(p_line_index).attribute14_lg;
2818                 rec_ship_line_groups.attribute15               := validLines_List(p_line_index).attribute15_lg;
2819                 l_debug_info    := 'Inserting inl_ship_line_groups';
2820                 INL_LOGGING_PVT.Log_Statement(
2821                     p_module_name      => g_module_name,
2822                     p_procedure_name   => l_proc_name,
2823                     p_debug_info       => l_debug_info
2824                 ) ;
2825                 INL_LOGGING_PVT.Log_Variable(
2826                     p_module_name    => g_module_name,
2827                     p_procedure_name => l_proc_name,
2828                     p_var_name       => 'rec_ship_line_groups.ship_line_group_id',
2829                     p_var_value      => rec_ship_line_groups.ship_line_group_id
2830                 ) ;
2831                 INSERT INTO inl_ship_line_groups (
2832                     ship_line_group_id,                                     /* 01 */
2833                     ship_line_group_reference,                              /* 02 */
2834                     ship_header_id,                                         /* 03 */
2835                     ship_line_group_num,                                    /* 04 */
2836                     src_type_code,                                          /* 05 */
2837                     party_id,                                               /* 06 */
2838                     party_site_id,                                          /* 07 */
2839                     source_organization_id,                                 /* 08 */
2840                     ship_line_int_id,                                       /* 09 */
2841                     interface_source_table,                                 /* 10 */
2842                     interface_source_line_id,                               /* 11 */
2843                     created_by,                                             /* 12 */
2844                     creation_date,                                          /* 13 */
2845                     last_updated_by,                                        /* 14 */
2846                     last_update_date,                                       /* 15 */
2847                     last_update_login,                                      /* 16 */
2848                     program_id,                                             /* 17 */
2849                     program_update_date,                                    /* 18 */
2850                     program_application_id,                                 /* 19 */
2851                     request_id,                                             /* 20 */
2852                     attribute_category,                                     /* 21 */
2853                     attribute1,                                             /* 22 */
2854                     attribute2,                                             /* 23 */
2855                     attribute3,                                             /* 24 */
2856                     attribute4,                                             /* 25 */
2857                     attribute5,                                             /* 26 */
2858                     attribute6,                                             /* 27 */
2859                     attribute7,                                             /* 28 */
2860                     attribute8,                                             /* 29 */
2861                     attribute9,                                             /* 30 */
2862                     attribute10,                                            /* 31 */
2863                     attribute11,                                            /* 32 */
2864                     attribute12,                                            /* 33 */
2865                     attribute13,                                            /* 34 */
2866                     attribute14,                                            /* 35 */
2867                     attribute15                                             /* 36 */
2868                     )
2869 
2870                 VALUES
2871                    (
2872                     rec_ship_line_groups.ship_line_group_id,                /* 01 */
2873                     rec_ship_line_groups.ship_line_group_reference,         /* 02 */
2874                     p_ship_header_id,                                       /* 03 */
2875                     rec_ship_line_groups.ship_line_group_num,               /* 04 */
2876                     rec_ship_line_groups.src_type_code,                     /* 05 */
2877                     rec_ship_line_groups.party_id,                          /* 06 */
2878                     rec_ship_line_groups.party_site_id,                     /* 07 */
2879                     rec_ship_line_groups.source_organization_id,            /* 08 */
2880                     validLines_List(p_line_index) .ship_line_int_id,        /* 09 */
2881                     validLines_List(p_line_index) .interface_source_table,  /* 10 */
2882                     validLines_List(p_line_index) .interface_source_line_id,/* 11 */
2883                     fnd_global.user_id,                                     /* 12 */
2884                     SYSDATE,                                                /* 13 */
2885                     fnd_global.user_id,                                     /* 14 */
2886                     SYSDATE,                                                /* 15 */
2887                     fnd_global.login_id,                                    /* 16 */
2888                     fnd_global.conc_program_id,                             /* 17 */
2889                     SYSDATE,                                                /* 18 */
2890                     fnd_global.prog_appl_id,                                /* 19 */
2891                     fnd_global.conc_request_id,                             /* 20 */
2892                     validLines_List(p_line_index) .attribute_category_lg,   /* 21 */
2893                     validLines_List(p_line_index) .attribute1_lg,           /* 22 */
2894                     validLines_List(p_line_index) .attribute2_lg,           /* 23 */
2895                     validLines_List(p_line_index) .attribute3_lg,           /* 24 */
2896                     validLines_List(p_line_index) .attribute4_lg,           /* 25 */
2897                     validLines_List(p_line_index) .attribute5_lg,           /* 26 */
2898                     validLines_List(p_line_index) .attribute6_lg,           /* 27 */
2899                     validLines_List(p_line_index) .attribute7_lg,           /* 28 */
2900                     validLines_List(p_line_index) .attribute8_lg,           /* 29 */
2901                     validLines_List(p_line_index) .attribute9_lg,           /* 30 */
2902                     validLines_List(p_line_index) .attribute10_lg,          /* 31 */
2903                     validLines_List(p_line_index) .attribute11_lg,          /* 32 */
2904                     validLines_List(p_line_index) .attribute12_lg,          /* 33 */
2905                     validLines_List(p_line_index) .attribute13_lg,          /* 34 */
2906                     validLines_List(p_line_index) .attribute14_lg,          /* 35 */
2907                     validLines_List(p_line_index) .attribute15_lg           /* 36 */
2908                  ) ;
2909 
2910         END;
2911     END IF;
2912     -- Standard End of Procedure/Function Logging
2913     INL_LOGGING_PVT.Log_EndProc(
2914         p_module_name    => g_module_name,
2915         p_procedure_name => l_proc_name
2916     );
2917 EXCEPTION
2918     WHEN FND_API.G_EXC_ERROR THEN
2919         -- Standard Expected Error Logging
2920         INL_LOGGING_PVT.Log_ExpecError (
2921             p_module_name    => g_module_name,
2922             p_procedure_name => l_proc_name
2923         );
2924         x_return_status := FND_API.G_RET_STS_ERROR;
2925     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2926         -- Standard Unexpected Error Logging
2927         INL_LOGGING_PVT.Log_UnexpecError (
2928             p_module_name    => g_module_name,
2929             p_procedure_name => l_proc_name
2930         );
2931         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2932     WHEN OTHERS THEN
2933         -- Standard Unexpected Error Logging
2934         INL_LOGGING_PVT.Log_UnexpecError (
2935             p_module_name    => g_module_name,
2936             p_procedure_name => l_proc_name
2937         );
2938         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2939         IF FND_MSG_PUB.Check_Msg_Level(
2940             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
2941         ) THEN
2942             FND_MSG_PUB.Add_Exc_Msg(
2943                 p_pkg_name       => g_pkg_name,
2944                 p_procedure_name => l_proc_name
2945             );
2946         END IF;
2947 END Handle_LineGroups;
2948 
2949 -- Utility name : Import_Lines
2950 -- Type       : Private
2951 -- Function   : Import Shipment Lines from the Interface table
2952 --
2953 -- Pre-reqs   : None
2954 -- Parameters :
2955 -- IN         : p_group_id       IN  NUMBER
2956 --              p_org_id         IN  NUMBER
2957 --
2958 -- OUT        : x_return_status  OUT NOCOPY VARCHAR2
2959 --
2960 -- Version    : Current version 1.0
2961 --
2962 -- Notes      :
2963 PROCEDURE Import_Lines (
2964     p_group_id IN NUMBER,
2965     p_org_id   IN NUMBER,
2966     x_return_status OUT NOCOPY VARCHAR2
2967 ) IS
2968     l_proc_name CONSTANT VARCHAR2(100) := 'Import_lines';
2969     -- Cursor to get all valid and possible Ship
2970     -- Header Ids that will be used in the
2971     -- Shipment Line import
2972     CURSOR headersToProcess
2973     IS
2974         SELECT h.ship_header_int_id,
2975           h.ship_header_id        ,
2976           h.transaction_type
2977         FROM inl_ship_headers_int h
2978         WHERE (p_group_id IS NULL
2979                OR group_id = p_group_id)
2980           AND (p_org_id IS NULL
2981           OR   h.org_id = p_org_id)
2982           AND h.processing_status_code = 'COMPLETED'
2983           AND h.transaction_type      <> 'DELETE'
2984           AND h.last_task_code        >= '10'
2985           AND EXISTS (
2986                SELECT 1
2987                FROM inl_ship_lines_int l
2988                WHERE l.ship_header_int_id     = h.ship_header_int_id
2989                AND l.processing_status_code = 'RUNNING'
2990                AND ROWNUM                   < 2
2991           );
2992 
2993     TYPE headersToProcess_ListType IS TABLE OF headersToProcess%ROWTYPE;
2994     headersToProcess_List headersToProcess_ListType;
2995     l_debug_info    VARCHAR2(2000);
2996     l_return_status VARCHAR2(1);
2997     l_ship_line_id  NUMBER;
2998 BEGIN
2999     -- Standard Beginning of Procedure/Function Logging
3000     INL_LOGGING_PVT.Log_BeginProc(
3001         p_module_name    => g_module_name,
3002         p_procedure_name => l_proc_name
3003     ) ;
3004     --  Initialize API return status to success
3005     x_return_status := FND_API.G_RET_STS_SUCCESS;
3006     OPEN headersToProcess;
3007     FETCH headersToProcess BULK COLLECT INTO headersToProcess_List;
3008 
3009     CLOSE headersToProcess;
3010     IF NVL(headersToProcess_List.LAST, 0) > 0 THEN
3011         FOR iHead IN headersToProcess_List.FIRST..headersToProcess_List.LAST
3012         LOOP
3013             OPEN validLines(headersToProcess_List(iHead) .ship_header_int_id, p_group_id) ;
3014             FETCH validLines BULK COLLECT INTO validLines_List;
3015             CLOSE validLines;
3016             IF NVL(validLines_List.LAST, 0) > 0 THEN
3017                 FOR iLine IN validLines_List.FIRST..validLines_List.LAST
3018                 LOOP
3019                     l_debug_info := 'Processing Line: '||iLine;
3020                     INL_LOGGING_PVT.Log_Statement(
3021                         p_module_name      => g_module_name,
3022                         p_procedure_name   => l_proc_name,
3023                         p_debug_info       => l_debug_info
3024                     ) ;
3025                     INL_LOGGING_PVT.Log_Variable(
3026                         p_module_name    => g_module_name,
3027                         p_procedure_name => l_proc_name,
3028                         p_var_name       => 'validLines_List(iLine).ship_Line_int_id',
3029                         p_var_value      => validLines_List(iLine).ship_Line_int_id
3030                     ) ;
3031                     l_debug_info := 'Handle Import of Shipment Line Groups';
3032                     INL_LOGGING_PVT.Log_Statement(
3033                         p_module_name      => g_module_name,
3034                         p_procedure_name   => l_proc_name,
3035                         p_debug_info       => l_debug_info
3036                     ) ;
3037                     -- For new lines
3038                     IF headersToProcess_List(iHead) .transaction_type = 'CREATE'
3039                        OR (headersToProcess_List(iHead) .transaction_type = 'UPDATE'
3040                            AND validLines_List(iLine).ship_Line_id IS NULL
3041                           )
3042                     THEN
3043                         -- Check if the Line Group has already been imported
3044                         Handle_LineGroups(p_ship_header_id => headersToProcess_List(iHead) .ship_header_id, p_line_index => iLine, x_return_status => l_return_status) ;
3045                         -- If any errors happen abort API.
3046                         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3047                             RAISE FND_API.G_EXC_ERROR;
3048                         ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3049                             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3050                         END IF;
3051                         l_debug_info := 'Getting the next Shipment Line Number';
3052                         INL_LOGGING_PVT.Log_Statement(
3053                             p_module_name      => g_module_name,
3054                             p_procedure_name   => l_proc_name,
3055                             p_debug_info       => l_debug_info
3056                         ) ;
3057                         IF validLines_List(iLine).ship_line_num   IS NULL THEN
3058                             -- Get the next Ship Line Number
3059                              SELECT MAX(ship_line_num)
3060                                INTO validLines_List(iLine).ship_line_num
3061                                FROM inl_ship_lines_all
3062                               WHERE ship_header_id     = headersToProcess_List(iHead) .ship_header_id
3063                                 AND ship_line_group_id = rec_ship_line_groups.ship_line_group_id;
3064 
3065                             validLines_List(iLine).ship_line_num     := NVL(validLines_List(iLine).ship_line_num, 0) + 1;
3066                             INL_LOGGING_PVT.Log_Variable(
3067                                 p_module_name    => g_module_name,
3068                                 p_procedure_name => l_proc_name,
3069                                 p_var_name       => 'validLines_List(iLine).ship_line_num',
3070                                 p_var_value      => validLines_List(iLine).ship_line_num
3071                             ) ;
3072                         END IF;
3073                         l_debug_info  := 'Getting Shipment Line Id';
3074                         INL_LOGGING_PVT.Log_Statement(
3075                             p_module_name      => g_module_name,
3076                             p_procedure_name   => l_proc_name,
3077                             p_debug_info       => l_debug_info
3078                         ) ;
3079                         -- Get the next Shipment Line Id
3080                         SELECT inl_ship_Lines_all_s.NEXTVAL
3081                         INTO l_ship_line_id
3082                         FROM dual;
3083 
3084                         INL_LOGGING_PVT.Log_Variable(
3085                             p_module_name    => g_module_name,
3086                             p_procedure_name => l_proc_name,
3087                             p_var_name       => 'l_ship_line_id',
3088                             p_var_value      => l_ship_line_id
3089                         ) ;
3090                         l_debug_info := 'Insert into Shipment Lines table';
3091                         INL_LOGGING_PVT.Log_Statement(
3092                             p_module_name      => g_module_name,
3093                             p_procedure_name   => l_proc_name,
3094                             p_debug_info       => l_debug_info
3095                         ) ;
3096                         --  Insert an INL SHIP LINE record
3097                         INSERT INTO inl_ship_lines_all (
3098                             ship_header_id,                                  /* 01 */
3099                             ship_line_group_id,                              /* 02 */
3100                             ship_line_id,                                    /* 03 */
3101                             ship_line_num,                                   /* 04 */
3102                             ship_line_type_id,                               /* 05 */
3103                             ship_line_src_type_code,                         /* 06 */
3104                             ship_line_source_id,                             /* 07 */
3105                             parent_ship_line_id,                             /* 08 */
3106                             adjustment_num,                                  /* 09 */
3107                             match_id,                                        /* 10 */
3108                             currency_code,                                   /* 12 */
3109                             currency_conversion_type,                        /* 13 */
3110                             currency_conversion_date,                        /* 14 */
3111                             currency_conversion_rate,                        /* 15 */
3112                             inventory_item_id,                               /* 16 */
3113                             txn_qty,                                         /* 17 */
3114                             txn_uom_code,                                    /* 18 */
3115                             txn_unit_price,                                  /* 19 */
3116                             primary_qty,                                     /* 20 */
3117                             primary_uom_code,                                /* 21 */
3118                             primary_unit_price,                              /* 22 */
3119                             secondary_qty,                                   /* 23 */
3120                             secondary_uom_code,                              /* 24 */
3121                             secondary_unit_price,                            /* 25 */
3122                             landed_cost_flag,                                /* 30 */
3123                             allocation_enabled_flag,                         /* 31 */
3124                             trx_business_category,                           /* 32 */
3125                             intended_use,                                    /* 33 */
3126                             product_fiscal_class,                            /* 34 */
3127                             product_category,                                /* 35 */
3128                             product_type,                                    /* 36 */
3129                             user_def_fiscal_class,                           /* 37 */
3130                             tax_classification_code,                         /* 38 */
3131                             assessable_value,                                /* 39 */
3132                             tax_already_calculated_flag,                     /* 40 */
3133                             ship_from_party_id,                              /* 41 */
3134                             ship_from_party_site_id,                         /* 42 */
3135                             ship_to_organization_id,                         /* 43 */
3136                             ship_to_location_id,                             /* 44 */
3137                             bill_from_party_id,                              /* 45 */
3138                             bill_from_party_site_id,                         /* 46 */
3139                             bill_to_organization_id,                         /* 47 */
3140                             bill_to_location_id,                             /* 48 */
3141                             poa_party_id,                                    /* 49 */
3142                             poa_party_site_id,                               /* 50 */
3143                             poo_organization_id,                             /* 51 */
3144                             poo_location_id,                                 /* 52 */
3145                             org_id,                                          /* 53 */
3146                             ship_line_int_id,                                /* 54 */
3147                             interface_source_table,                          /* 55 */
3148                             interface_source_line_id,                        /* 56 */
3149                             created_by,                                      /* 57 */
3150                             creation_date,                                   /* 58 */
3151                             last_updated_by,                                 /* 59 */
3152                             last_update_date,                                /* 60 */
3153                             last_update_login,                               /* 61 */
3154                             program_id,                                      /* 62 */
3155                             program_update_date,                             /* 63 */
3156                             program_application_id,                          /* 64 */
3157                             request_id,                                      /* 65 */
3158                             attribute_category,                              /* 66 */
3159                             attribute1,                                      /* 67 */
3160                             attribute2,                                      /* 68 */
3161                             attribute3,                                      /* 69 */
3162                             attribute4,                                      /* 70 */
3163                             attribute5,                                      /* 71 */
3164                             attribute6,                                      /* 72 */
3165                             attribute7,                                      /* 73 */
3166                             attribute8,                                      /* 74 */
3167                             attribute9,                                      /* 75 */
3168                             attribute10,                                     /* 76 */
3169                             attribute11,                                     /* 77 */
3170                             attribute12,                                     /* 78 */
3171                             attribute13,                                     /* 79 */
3172                             attribute14,                                     /* 80 */
3173                             attribute15                                      /* 81 */
3174                             )
3175                         VALUES
3176                             (
3177                             headersToProcess_List(iHead) .ship_header_id,    /* 01 */
3178                             rec_ship_line_groups.ship_line_group_id,         /* 02 */
3179                             l_ship_line_id,                                  /* 03 */
3180                             validLines_List(iLine).ship_line_num,            /* 04 */
3181                             validLines_List(iLine).ship_line_type_id,        /* 05 */
3182                             validLines_List(iLine).ship_line_src_type_code,  /* 06 */
3183                             validLines_List(iLine).ship_line_source_id,      /* 07 */
3184                             NULL,                                            /* 08 */
3185                             0,                                               /* 09 */
3186                             NULL,                                            /* 10 */
3187                             validLines_List(iLine).currency_code,            /* 12 */
3188                             validLines_List(iLine).currency_conversion_type, /* 13 */
3189                             validLines_List(iLine).currency_conversion_date, /* 14 */
3190                             validLines_List(iLine).currency_conversion_rate, /* 15 */
3191                             validLines_List(iLine).inventory_item_id,        /* 16 */
3192                             validLines_List(iLine).txn_qty,                  /* 17 */
3193                             validLines_List(iLine).txn_uom_code,             /* 18 */
3194                             validLines_List(iLine).txn_unit_price,           /* 19 */
3195                             validLines_List(iLine).primary_qty,              /* 20 */
3196                             validLines_List(iLine).primary_uom_code,         /* 21 */
3197                             validLines_List(iLine).primary_unit_price,       /* 22 */
3198                             validLines_List(iLine).secondary_qty,            /* 23 */
3199                             validLines_List(iLine).secondary_uom_code,       /* 24 */
3200                             validLines_List(iLine).secondary_unit_price,     /* 25 */
3201                             validLines_List(iLine).landed_cost_flag,         /* 30 */
3202                             validLines_List(iLine).allocation_enabled_flag,  /* 31 */
3203                             validLines_List(iLine).trx_business_category,    /* 32 */
3204                             validLines_List(iLine).intended_use,             /* 33 */
3205                             validLines_List(iLine).product_fiscal_class,     /* 34 */
3206                             validLines_List(iLine).product_category,         /* 35 */
3207                             validLines_List(iLine).product_type,             /* 36 */
3208                             validLines_List(iLine).user_def_fiscal_class,    /* 37 */
3209                             validLines_List(iLine).tax_classification_code,  /* 38 */
3210                             validLines_List(iLine).assessable_value,         /* 39 */
3211                             'N',                                             /* 40 */
3212                             validLines_List(iLine).ship_from_party_id,       /* 41 */
3213                             validLines_List(iLine).ship_from_party_site_id,  /* 42 */
3214                             validLines_List(iLine).ship_to_organization_id,  /* 43 */
3215                             validLines_List(iLine).ship_to_location_id,      /* 44 */
3216                             validLines_List(iLine).bill_from_party_id,       /* 45 */
3217                             validLines_List(iLine).bill_from_party_site_id,  /* 46 */
3218                             validLines_List(iLine).bill_to_organization_id,  /* 47 */
3219                             validLines_List(iLine).bill_to_location_id,      /* 48 */
3220                             validLines_List(iLine).poa_party_id,             /* 49 */
3221                             validLines_List(iLine).poa_party_site_id,        /* 50 */
3222                             validLines_List(iLine).poo_organization_id,      /* 51 */
3223                             validLines_List(iLine).poo_location_id,          /* 52 */
3224                             validLines_List(iLine).org_id,                   /* 53 */
3225                             validLines_List(iLine).ship_line_int_id,         /* 54 */
3226                             validLines_List(iLine).interface_source_table,   /* 55 */
3227                             validLines_List(iLine).interface_source_line_id, /* 56 */
3228                             fnd_global.user_id,                              /* 57 */
3229                             SYSDATE,                                         /* 58 */
3230                             fnd_global.user_id,                              /* 59 */
3231                             SYSDATE,                                         /* 60 */
3232                             fnd_global.login_id,                             /* 61 */
3233                             fnd_global.conc_program_id,                      /* 62 */
3234                             SYSDATE,                                         /* 63 */
3235                             fnd_global.prog_appl_id,                         /* 64 */
3236                             fnd_global.conc_request_id,                      /* 65 */
3237                             validLines_List(iLine).attribute_category_sl,    /* 66 */
3238                             validLines_List(iLine).attribute1_sl,            /* 67 */
3239                             validLines_List(iLine).attribute2_sl,            /* 68 */
3240                             validLines_List(iLine).attribute3_sl,            /* 69 */
3241                             validLines_List(iLine).attribute4_sl,            /* 70 */
3242                             validLines_List(iLine).attribute5_sl,            /* 71 */
3243                             validLines_List(iLine).attribute6_sl,            /* 72 */
3244                             validLines_List(iLine).attribute7_sl,            /* 73 */
3245                             validLines_List(iLine).attribute8_sl,            /* 74 */
3246                             validLines_List(iLine).attribute9_sl,            /* 75 */
3247                             validLines_List(iLine).attribute10_sl,           /* 76 */
3248                             validLines_List(iLine).attribute11_sl,           /* 77 */
3249                             validLines_List(iLine).attribute12_sl,           /* 78 */
3250                             validLines_List(iLine).attribute13_sl,           /* 79 */
3251                             validLines_List(iLine).attribute14_sl,           /* 80 */
3252                             validLines_List(iLine).attribute15_sl            /* 81 */
3253                             ) ;
3254                     ELSE
3255                         l_ship_line_id := validLines_List(iLine).ship_line_id;
3256                         l_debug_info := 'Update Shipment Lines table';
3257                         INL_LOGGING_PVT.Log_Statement(
3258                             p_module_name      => g_module_name,
3259                             p_procedure_name   => l_proc_name,
3260                             p_debug_info       => l_debug_info
3261                         ) ;
3262                         --  update the INL SHIP LINE record
3263                         UPDATE inl_ship_lines_all
3264                         SET ship_line_num            = NVL(validLines_List(iLine).ship_line_num, ship_line_num),/* 01 */
3265                             ship_line_type_id        = validLines_List(iLine).ship_line_type_id,                /* 02 */
3266                             ship_line_src_type_code  = validLines_List(iLine).ship_line_src_type_code,          /* 03 */
3267                             ship_line_source_id      = validLines_List(iLine).ship_line_source_id,              /* 04 */
3268                             adjustment_num           = 0,                                                       /* 05 */
3269                             match_id                 = NULL,                                                    /* 06 */
3270                             currency_code            = validLines_List(iLine).currency_code,                    /* 07 */
3271                             currency_conversion_type = validLines_List(iLine).currency_conversion_type,         /* 08 */
3272                             currency_conversion_date = validLines_List(iLine).currency_conversion_date,         /* 09 */
3273                             currency_conversion_rate = validLines_List(iLine).currency_conversion_rate,         /* 20 */
3274                             inventory_item_id        = validLines_List(iLine).inventory_item_id,                /* 21 */
3275                             txn_qty                  = validLines_List(iLine).txn_qty,                          /* 22 */
3276                             txn_uom_code             = validLines_List(iLine).txn_uom_code,                     /* 23 */
3277                             txn_unit_price           = validLines_List(iLine).txn_unit_price,                   /* 24 */
3278                             primary_qty              = validLines_List(iLine).primary_qty,                      /* 25 */
3279                             primary_uom_code         = validLines_List(iLine).primary_uom_code,                 /* 26 */
3280                             primary_unit_price       = validLines_List(iLine).primary_unit_price,               /* 27 */
3281                             secondary_qty            = validLines_List(iLine).secondary_qty,                    /* 28 */
3282                             secondary_uom_code       = validLines_List(iLine).secondary_uom_code,               /* 29 */
3283                             secondary_unit_price     = validLines_List(iLine).secondary_unit_price,             /* 30 */
3284                             landed_cost_flag         = validLines_List(iLine).landed_cost_flag,                 /* 31 */
3285                             allocation_enabled_flag  = validLines_List(iLine).allocation_enabled_flag,          /* 32 */
3286                             trx_business_category    = validLines_List(iLine).trx_business_category,            /* 33 */
3287                             intended_use             = validLines_List(iLine).intended_use,                     /* 34 */
3288                             product_fiscal_class     = validLines_List(iLine).product_fiscal_class,             /* 35 */
3289                             product_category         = validLines_List(iLine).product_category,                 /* 36 */
3290                             product_type             = validLines_List(iLine).product_type,                     /* 37 */
3291                             user_def_fiscal_class    = validLines_List(iLine).user_def_fiscal_class,            /* 38 */
3292                             tax_classification_code  = validLines_List(iLine).tax_classification_code,          /* 39 */
3293                             assessable_value         = validLines_List(iLine).assessable_value,                 /* 40 */
3294                             ship_from_party_id       = validLines_List(iLine).ship_from_party_id,               /* 41 */
3295                             ship_from_party_site_id  = validLines_List(iLine).ship_from_party_site_id,          /* 42 */
3296                             ship_to_organization_id  = validLines_List(iLine).ship_to_organization_id,          /* 43 */
3297                             ship_to_location_id      = validLines_List(iLine).ship_to_location_id,              /* 44 */
3298                             bill_from_party_id       = validLines_List(iLine).bill_from_party_id,               /* 45 */
3299                             bill_from_party_site_id  = validLines_List(iLine).bill_from_party_site_id,          /* 46 */
3300                             bill_to_organization_id  = validLines_List(iLine).bill_to_organization_id,          /* 47 */
3301                             bill_to_location_id      = validLines_List(iLine).bill_to_location_id,              /* 48 */
3302                             poa_party_id             = validLines_List(iLine).poa_party_id,                     /* 49 */
3303                             poa_party_site_id        = validLines_List(iLine).poa_party_site_id,                /* 50 */
3304                             poo_organization_id      = validLines_List(iLine).poo_organization_id,              /* 51 */
3305                             poo_location_id          = validLines_List(iLine).poo_location_id,                  /* 52 */
3306                             org_id                   = validLines_List(iLine).org_id,                           /* 53 */
3307                             ship_line_int_id         = validLines_List(iLine).ship_line_int_id,                 /* 54 */
3308                             interface_source_table   = validLines_List(iLine).interface_source_table,           /* 55 */
3309                             interface_source_line_id = validLines_List(iLine).interface_source_line_id,         /* 56 */
3310                             last_updated_by          = fnd_global.user_id,                                      /* 57 */
3311                             last_update_date         = SYSDATE,                                                 /* 58 */
3312                             last_update_login        = fnd_global.login_id,                                     /* 59 */
3313                             program_id               = fnd_global.conc_program_id,                              /* 60 */
3314                             program_update_date      = SYSDATE,                                                 /* 61 */
3315                             program_application_id   = fnd_global.prog_appl_id,                                 /* 62 */
3316                             request_id               = fnd_global.conc_request_id,                              /* 63 */
3317                             attribute_category       = validLines_List(iLine).attribute_category_sl,            /* 64 */
3318                             attribute1               = validLines_List(iLine).attribute1_sl,                    /* 65 */
3319                             attribute2               = validLines_List(iLine).attribute2_sl,                    /* 66 */
3320                             attribute3               = validLines_List(iLine).attribute3_sl,                    /* 67 */
3321                             attribute4               = validLines_List(iLine).attribute4_sl,                    /* 68 */
3322                             attribute5               = validLines_List(iLine).attribute5_sl,                    /* 69 */
3323                             attribute6               = validLines_List(iLine).attribute6_sl,                    /* 70 */
3324                             attribute7               = validLines_List(iLine).attribute7_sl,                    /* 71 */
3325                             attribute8               = validLines_List(iLine).attribute8_sl,                    /* 72 */
3326                             attribute9               = validLines_List(iLine).attribute9_sl,                    /* 73 */
3327                             attribute10              = validLines_List(iLine).attribute10_sl,                   /* 74 */
3328                             attribute11              = validLines_List(iLine).attribute11_sl,                   /* 75 */
3329                             attribute12              = validLines_List(iLine).attribute12_sl,                   /* 76 */
3330                             attribute13              = validLines_List(iLine).attribute13_sl,                   /* 77 */
3331                             attribute14              = validLines_List(iLine).attribute14_sl,                   /* 78 */
3332                             attribute15              = validLines_List(iLine).attribute15_sl                    /* 79 */
3333                         WHERE ship_line_id = l_ship_line_id;
3334                     END IF;
3335                     l_debug_info  := 'Set Shipment Line Interface status and imported Ids';
3336                     INL_LOGGING_PVT.Log_Statement(
3337                         p_module_name      => g_module_name,
3338                         p_procedure_name   => l_proc_name,
3339                         p_debug_info       => l_debug_info
3340                     ) ;
3341                     -- Set processing status code to COMPLETED
3342                     -- for a given and imported Shipment Line
3343                     UPDATE inl_ship_lines_int
3344                     SET processing_status_code = 'COMPLETED'                                ,
3345                         ship_header_id         = headersToProcess_List(iHead).ship_header_id,
3346                         ship_line_id           = l_ship_line_id                             ,
3347                         request_id             = fnd_global.conc_request_id                 ,
3348                         last_updated_by        = fnd_global.user_id                         ,
3349                         last_update_date       = SYSDATE                                    ,
3350                         last_update_login      = fnd_global.login_id                        ,
3351                         program_id             = fnd_global.conc_program_id                 ,
3352                         program_update_date    = SYSDATE                                    ,
3353                         program_application_id = fnd_global.prog_appl_id
3354                       WHERE ship_line_int_id   = validLines_List(iLine).ship_line_int_id;
3355                 END LOOP;
3356             END IF;
3357         END LOOP;
3358     END IF;
3359     -- Standard End of Procedure/Function Logging
3360     INL_LOGGING_PVT.Log_EndProc(
3361         p_module_name    => g_module_name,
3362         p_procedure_name => l_proc_name
3363     );
3364 EXCEPTION
3365     WHEN FND_API.G_EXC_ERROR THEN
3366         -- Standard Expected Error Logging
3367         INL_LOGGING_PVT.Log_ExpecError (
3368             p_module_name    => g_module_name,
3369             p_procedure_name => l_proc_name
3370         );
3371         x_return_status := FND_API.G_RET_STS_ERROR;
3372     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3373         -- Standard Unexpected Error Logging
3374         INL_LOGGING_PVT.Log_UnexpecError (
3375             p_module_name    => g_module_name,
3376             p_procedure_name => l_proc_name
3377         );
3378         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3379     WHEN OTHERS THEN
3380         -- Standard Unexpected Error Logging
3381         INL_LOGGING_PVT.Log_UnexpecError (
3382             p_module_name    => g_module_name,
3383             p_procedure_name => l_proc_name
3384         );
3385         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3386         IF FND_MSG_PUB.Check_Msg_Level(
3387             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
3388         ) THEN
3389             FND_MSG_PUB.Add_Exc_Msg(
3390                 p_pkg_name       => g_pkg_name,
3391                 p_procedure_name => l_proc_name
3392             );
3393         END IF;
3394 END Import_Lines;
3395 
3396 -- Utility name : Set_existingMatchInfoFlag
3397 -- Type       : Private
3398 -- Function   : Import Match Lines
3399 --
3400 --
3401 -- Pre-reqs   : None
3402 -- Parameters :
3403 -- IN         : p_from_parent_table_name
3404 --              p_from_parent_table_id
3405 --              p_to_parent_table_name
3406 --              p_to_parent_table_id
3407 --
3408 -- OUT        : x_existing_match_info_flag
3409 --              x_parent_match_id
3410 --              x_return_status
3411 -- Version    : Current version 1.0
3412 --
3413 -- Notes      :
3414 PROCEDURE Set_existingMatchInfoFlag(
3415     p_from_parent_table_name    IN VARCHAR2,
3416     p_from_parent_table_id      IN NUMBER,
3417     p_to_parent_table_name      IN VARCHAR2,
3418     p_to_parent_table_id        IN NUMBER,
3419     x_existing_match_info_flag  OUT NOCOPY VARCHAR2,
3420     x_parent_match_id           OUT NOCOPY NUMBER,
3421     x_return_status             OUT NOCOPY VARCHAR2
3422 ) IS
3423     l_proc_name CONSTANT VARCHAR2(100) := 'Set_existingMatchInfoFlag';
3424     l_debug_info    VARCHAR2(2000) ;
3425     l_return_status VARCHAR2(1) ;
3426 BEGIN
3427     -- Standard Beginning of Procedure/Function Logging
3428     INL_LOGGING_PVT.Log_BeginProc(
3429         p_module_name    => g_module_name,
3430         p_procedure_name => l_proc_name) ;
3431     -- Initialize API return status to success
3432     x_return_status := FND_API.G_RET_STS_SUCCESS;
3433     -- Include the lines with transaction_type = 'CREATE'
3434     l_debug_info := 'Deriving Existing_Match_Info_Flag';
3435     INL_LOGGING_PVT.Log_Statement(
3436         p_module_name       => g_module_name,
3437         p_procedure_name    => l_proc_name,
3438         p_debug_info        => l_debug_info
3439     ) ;
3440     SELECT MIN(match_id)
3441     INTO   x_parent_match_id
3442     FROM inl_matches
3443     WHERE to_parent_table_id = p_to_parent_table_id
3444     AND to_parent_table_name = p_to_parent_table_name
3445     AND from_parent_table_id = p_from_parent_table_id
3446     AND from_parent_table_name = p_from_parent_table_name
3447     ;
3448     IF x_parent_match_id IS NOT NULL THEN
3449         x_existing_match_info_flag:='Y';
3450     ELSE
3451         x_existing_match_info_flag:='N';
3452     END IF;
3453     -- Standard End of Procedure/Function Logging
3454     INL_logging_pvt.Log_EndProc(
3455         p_module_name    => g_module_name,
3456         p_procedure_name => l_proc_name
3457     );
3458 EXCEPTION
3459     WHEN FND_API.G_EXC_ERROR THEN
3460         -- Standard Expected Error Logging
3461         INL_LOGGING_PVT.Log_ExpecError (
3462             p_module_name    => g_module_name,
3463             p_procedure_name => l_proc_name
3464         );
3465         x_return_status := FND_API.G_RET_STS_ERROR;
3466     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3467         -- Standard Unexpected Error Logging
3468         INL_LOGGING_PVT.Log_UnexpecError (
3469             p_module_name    => g_module_name,
3470             p_procedure_name => l_proc_name
3471         );
3472         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3473     WHEN OTHERS THEN
3474         -- Standard Unexpected Error Logging
3475         INL_LOGGING_PVT.Log_UnexpecError (
3476             p_module_name    => g_module_name,
3477             p_procedure_name => l_proc_name
3478         );
3479         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3480         IF FND_MSG_PUB.Check_Msg_Level(
3481             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
3482         ) THEN
3483             FND_MSG_PUB.Add_Exc_Msg(
3484                 p_pkg_name       => g_pkg_name,
3485                 p_procedure_name => l_proc_name
3486             );
3487         END IF;
3488 END Set_existingMatchInfoFlag;
3489 
3490 -- Utility name : Derive_FromAP
3491 -- Type       : Private
3492 -- Function   : Make AP derivation
3493 --
3494 --
3495 -- Pre-reqs   : None
3496 -- Parameters :
3497 -- IN         : p_from_parent_table_name  VARCHAR2,
3498 --              p_from_parent_table_id    NUMBER,
3499 --              p_match_type_code         VARCHAR2,
3500 --
3501 -- IN/OUT     : x_matched_amt                   NUMBER,
3502 --              x_matched_qty                   NUMBER,
3503 --              x_nrec_tax_amt                  NUMBER,
3504 --              x_matched_uom_code              VARCHAR2,
3505 --              x_new_to_parent_table_name      VARCHAR2,
3506 --              x_new_to_parent_table_id        NUMBER,
3507 --              x_matched_curr_code             VARCHAR2,
3508 --              x_matched_curr_conversion_type  VARCHAR2,
3509 --              x_matched_curr_conversion_date  DATE,
3510 --              x_matched_curr_conversion_rate  NUMBER,
3511 --              x_ship_header_id                NUMBER,
3512 --
3513 -- OUT        : x_existing_match_info_flag      VARCHAR2,
3514 --              x_parent_match_id               NUMBER,
3515 --              x_return_status                 VARCHAR2
3516 --
3517 -- Version    : Current version 1.0
3518 --
3519 -- Notes      : When the information come from AP the amounts variations
3520 --              are recorded in interface tables by the INL_MATCHES_GRP package
3521 --              and the adjustment program wait for final amounts.
3522 --              In order to equalize the information in this proc we:
3523 --              - receive the values of the new match
3524 PROCEDURE Derive_FromAP(
3525     p_from_parent_table_name        IN VARCHAR2,
3526     p_from_parent_table_id          IN NUMBER,
3527     p_match_type_code               IN VARCHAR2,
3528     x_matched_amt                   IN OUT NOCOPY NUMBER,
3529     x_matched_qty                   IN OUT NOCOPY NUMBER,
3530     x_nrec_tax_amt                  IN OUT NOCOPY NUMBER,
3531     x_matched_uom_code              IN OUT NOCOPY VARCHAR2,
3532     x_new_to_parent_table_name      IN OUT NOCOPY VARCHAR2,
3533     x_new_to_parent_table_id        IN OUT NOCOPY NUMBER,
3534     x_matched_curr_code             IN OUT NOCOPY VARCHAR2,
3535     x_matched_curr_conversion_type  IN OUT NOCOPY VARCHAR2,
3536     x_matched_curr_conversion_date  IN OUT NOCOPY DATE,
3537     x_matched_curr_conversion_rate  IN OUT NOCOPY NUMBER,
3538     x_ship_header_id                IN OUT NOCOPY NUMBER,
3539     x_existing_match_info_flag      OUT NOCOPY VARCHAR2,
3540     x_parent_match_id               OUT NOCOPY NUMBER,
3541     x_return_status                 OUT NOCOPY VARCHAR2
3542 ) IS
3543     l_proc_name CONSTANT VARCHAR2(100) := 'Derive_FromAP';
3544     l_debug_info    VARCHAR2(2000) ;
3545     l_return_status VARCHAR2(1) ;
3546 
3547     l_org_id NUMBER;
3548     l_inventory_item_id NUMBER;
3549     l_match_type VARCHAR2(30);
3550     l_line_type_lookup_code VARCHAR2(30);
3551     l_mat_curr_code_P VARCHAR2(30);
3552     l_mat_curr_rate_P NUMBER;
3553     l_mat_curr_type_P VARCHAR2(30);
3554     l_mat_curr_date_P DATE;
3555     l_mat_nrec_tax_amt_P NUMBER;
3556     l_mat_charge_line_type_id_P NUMBER;
3557     l_mat_qty_P NUMBER;
3558     l_mat_uom_code_P VARCHAR2(30);
3559     l_mat_amt_P NUMBER;
3560     l_mat_par_mat_id_P  NUMBER;
3561     l_ship_header_id_tab inl_int_table := inl_int_table() ;
3562     l_corr_from_parent_table_name VARCHAR2(30);
3563     l_corr_from_parent_table_id NUMBER;
3564     l_currency_conversion_rate NUMBER;
3565 
3566 BEGIN
3567     -- Standard Beginning of Procedure/Function Logging
3568     INL_LOGGING_PVT.Log_BeginProc(
3569         p_module_name    => g_module_name,
3570         p_procedure_name => l_proc_name) ;
3571 
3572     -- Initialize API return status to success
3573     x_return_status := FND_API.G_RET_STS_SUCCESS;
3574     -- Include the lines with transaction_type = 'CREATE'
3575     l_debug_info := 'Include the lines with transaction_type = CREATE';
3576     INL_LOGGING_PVT.Log_Statement(
3577         p_module_name       => g_module_name,
3578         p_procedure_name    => l_proc_name,
3579         p_debug_info        => l_debug_info
3580     ) ;
3581     IF x_new_to_parent_table_name = 'RCV_TRANSACTIONS' THEN
3582         x_new_to_parent_table_name := 'INL_SHIP_LINES';
3583         SELECT  lcm_shipment_line_id
3584         INTO x_new_to_parent_table_id
3585         FROM rcv_transactions rt
3586         WHERE rt.transaction_id = x_new_to_parent_table_id
3587         ;
3588     END IF;
3589     Set_existingMatchInfoFlag(
3590         p_from_parent_table_name    => p_from_parent_table_name,
3591         p_from_parent_table_id      => p_from_parent_table_id,
3592         p_to_parent_table_name      => x_new_to_parent_table_name,
3593         p_to_parent_table_id        => x_new_to_parent_table_id,
3594         x_existing_match_info_flag  => x_existing_match_info_flag,
3595         x_parent_match_id           => x_parent_match_id,
3596         x_return_status             => x_return_status
3597     );
3598 
3599      -- If any errors happen abort API.
3600     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3601         RAISE FND_API.G_EXC_ERROR;
3602     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3603         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3604     END IF;
3605 -- Migrated from matche_grp
3606     SELECT l.line_type_lookup_code,
3607            d.org_id,
3608            l.inventory_item_id,
3609            l.match_type
3610     INTO   l_line_type_lookup_code,
3611            l_org_id,
3612            l_inventory_item_id,
3613            l_match_type
3614     FROM   ap_invoice_distributions d,
3615            ap_invoice_lines l
3616     WHERE  d.invoice_distribution_id = p_from_parent_table_id
3617     AND    d.invoice_id = l.invoice_id
3618     AND    d.invoice_line_number = l.line_number
3619     ;
3620 
3621     l_debug_info := 'Getting from inl_corr_matches_v the current value for transaction.';
3622     INL_LOGGING_PVT.Log_Statement(
3623         p_module_name    => g_module_name,
3624         p_procedure_name => l_proc_name,
3625         p_debug_info     => l_debug_info
3626     );
3627 
3628     IF p_match_type_code = 'CORRECTION'
3629     THEN
3630         l_debug_info := 'Is a correction. Type: '||l_match_type;
3631         INL_LOGGING_PVT.Log_Statement(
3632             p_module_name    => g_module_name,
3633             p_procedure_name => l_proc_name,
3634             p_debug_info     => l_debug_info) ;
3635 
3636         IF l_line_type_lookup_code = 'ITEM' THEN
3637             IF x_existing_match_info_flag = 'Y' THEN   -- RESUBMIT A CORRECTION
3638                -- select based on inl_corr_matches_v
3639                 SELECT
3640                     mat1.matched_curr_code       ,
3641                     mat1.matched_curr_conversion_rate,
3642                     mat1.matched_curr_conversion_type,
3643                     mat1.matched_curr_conversion_date,
3644                     NULL nrec_tax_amt             ,
3645                     NULL charge_line_type_id      ,
3646                     mat1.matched_qty                ,
3647                     mat1.matched_uom_code           ,
3648                     NVL(DECODE(mat1.matched_curr_code, mat2.matched_curr_code, mat2.matched_amt,
3649                                                             inl_landedcost_pvt.Converted_Amt(
3650                                                                 mat2.matched_amt,
3651                                                                 mat2.matched_curr_code,
3652                                                                 mat1.matched_curr_code,
3653                                                                 mat1.matched_curr_conversion_type,
3654                                                                 mat1.matched_curr_conversion_date))
3655                                                                 , mat1.matched_amt) AS matched_amt,
3656                     mat1.match_id,
3657                     mat2.from_parent_table_name,
3658                     mat2.from_parent_table_id
3659                 INTO
3660                     l_mat_curr_code_P          ,
3661                     l_mat_curr_rate_P          ,
3662                     l_mat_curr_type_P          ,
3663                     l_mat_curr_date_P          ,
3664                     l_mat_nrec_tax_amt_P       ,
3665                     l_mat_charge_line_type_id_P,
3666                     l_mat_qty_P                ,
3667                     l_mat_uom_code_P           ,
3668                     l_mat_amt_P                ,
3669                     l_mat_par_mat_id_P         ,
3670                     l_corr_from_parent_table_name,
3671                     l_corr_from_parent_table_id
3672                 FROM
3673                     inl_matches mat1,
3674                     (select *
3675                        from inl_matches m2
3676                        where NOT (m2.from_parent_table_name = p_from_parent_table_name
3677                              AND m2.from_parent_table_id = p_from_parent_table_id)
3678                     ) mat2
3679                 WHERE
3680                     mat2.parent_match_id (+) = mat1.match_id
3681                     AND mat2.match_type_code (+) = 'CORRECTION'
3682                     AND mat1.from_parent_table_name = x_new_to_parent_table_name
3683                     AND mat1.from_parent_table_id   = x_new_to_parent_table_id
3684                     AND mat1.match_id
3685                     =(
3686                         SELECT MAX(mat1B.match_id)
3687                         FROM inl_matches mat1B
3688                         WHERE mat1B.to_parent_table_name = mat1.to_parent_table_name
3689                         AND mat1B.to_parent_table_id     = mat1.to_parent_table_id
3690                         AND mat1B.from_parent_table_name = mat1.from_parent_table_name
3691                         AND mat1B.from_parent_table_id   = mat1.from_parent_table_id
3692                     )
3693                     AND (mat2.match_id is null
3694                          OR mat2.match_id = mat1.match_id
3695                          OR mat2.match_id
3696                         =(
3697                             SELECT MAX(DECODE(mat2.match_id, mat1.match_id, NULL, mat2.match_id))
3698                             FROM inl_matches mat1C,
3699                                  inl_matches mat2C
3700                             WHERE mat2C.parent_match_id (+) = mat1C.match_id
3701                             AND mat2C.match_type_code (+) = 'CORRECTION'
3702                             AND NOT (mat2C.from_parent_table_name = p_from_parent_table_name
3703                                      AND mat2C.from_parent_table_id = p_from_parent_table_id)
3704                             AND mat1C.from_parent_table_name = mat1.from_parent_table_name
3705                             AND mat1C.from_parent_table_id   = mat1.from_parent_table_id
3706                          ))
3707                 ;
3708             ELSE
3709                 l_corr_from_parent_table_name := NULL;
3710                 l_corr_from_parent_table_id := NULL;
3711                 SELECT
3712                     mP.matched_curr_code       ,
3713                     mP.matched_curr_conversion_rate,
3714                     mP.matched_curr_conversion_type,
3715                     mP.matched_curr_conversion_date,
3716                     NULL nrec_tax_amt             ,
3717                     NULL charge_line_type_id      ,
3718                     mP.matched_qty                ,
3719                     mP.matched_uom_code           ,
3720                     mP.matched_amt                ,
3721                     mP.match_id
3722                 INTO
3723                     l_mat_curr_code_P          ,
3724                     l_mat_curr_rate_P          ,
3725                     l_mat_curr_type_P          ,
3726                     l_mat_curr_date_P          ,
3727                     l_mat_nrec_tax_amt_P       ,
3728                     l_mat_charge_line_type_id_P,
3729                     l_mat_qty_P                ,
3730                     l_mat_uom_code_P           ,
3731                     l_mat_amt_P                ,
3732                     l_mat_par_mat_id_P
3733                 FROM
3734                     inl_corr_matches_v mP -- 1 get the parent
3735                 WHERE mP.from_parent_table_name = x_new_to_parent_table_name
3736                 AND mP.from_parent_table_id   = x_new_to_parent_table_id
3737                 AND mP.match_id
3738                     =(
3739                         SELECT MAX(m1P.match_id)
3740                         FROM inl_corr_matches_v m1P
3741                         WHERE m1P.from_parent_table_name = mP.from_parent_table_name
3742                         AND m1P.from_parent_table_id   = mP.from_parent_table_id
3743                 )
3744                 AND (mP.correction_match_id IS NULL
3745                      OR mP.correction_match_id
3746                     =(
3747                         SELECT MAX(m1P.correction_match_id)
3748                         FROM inl_corr_matches_v m1P
3749                         WHERE m1P.from_parent_table_name = mP.from_parent_table_name
3750                         AND m1P.from_parent_table_id   = mP.from_parent_table_id
3751                 ))
3752                 ;
3753             END IF;
3754 
3755             l_debug_info := 'match_type: '||l_match_type;
3756             INL_LOGGING_PVT.Log_Statement(
3757                 p_module_name    => g_module_name,
3758                 p_procedure_name => l_proc_name,
3759                 p_debug_info     => l_debug_info
3760             );
3761 
3762             IF l_match_type = 'PRICE_CORRECTION' THEN
3763                 x_matched_qty := l_mat_qty_P;
3764 
3765             ELSE
3766                 IF l_mat_uom_code_P <> x_matched_uom_code THEN
3767                     x_matched_qty :=
3768                         INL_LANDEDCOST_PVT.Converted_Qty(
3769                             p_organization_id   => l_org_id,
3770                             p_inventory_item_id => l_inventory_item_id,
3771                             p_qty               => x_matched_qty,
3772                             p_from_uom_code     => x_matched_uom_code,
3773                             P_to_uom_code       => l_mat_uom_code_P
3774                         )
3775                     ;
3776 
3777                 END IF;
3778                 x_matched_qty := x_matched_qty + NVL(l_mat_qty_P, 0) ;
3779             END IF;
3780             x_matched_uom_code := l_mat_uom_code_P;
3781         ELSE -- isn't a ITEM
3782             SELECT
3783                 m.matched_curr_code           ,
3784                 m.matched_curr_conversion_rate,
3785                 m.matched_curr_conversion_type,
3786                 m.matched_curr_conversion_date,
3787                 m.nrec_tax_amt                ,
3788                 m.charge_line_type_id         ,
3789                 m.matched_qty                 ,
3790                 m.matched_uom_code            ,
3791                 m.matched_amt                 ,
3792                 m.match_id
3793             INTO
3794                 l_mat_curr_code_P          ,
3795                 l_mat_curr_rate_P          ,
3796                 l_mat_curr_type_P          ,
3797                 l_mat_curr_date_P          ,
3798                 l_mat_nrec_tax_amt_P       ,
3799                 l_mat_charge_line_type_id_P,
3800                 l_mat_qty_P                ,
3801                 l_mat_uom_code_P           ,
3802                 l_mat_amt_P                ,
3803                 l_mat_par_mat_id_P
3804             FROM inl_corr_matches_v m
3805             WHERE m.from_parent_table_name = x_new_to_parent_table_name
3806             AND m.from_parent_table_id   = x_new_to_parent_table_id
3807             AND m.match_id               =
3808                (
3809                      SELECT MAX(m1.match_id)
3810                        FROM inl_corr_matches_v m1
3811                       WHERE m1.from_parent_table_name = x_new_to_parent_table_name
3812                         AND m1.from_parent_table_id   = x_new_to_parent_table_id
3813                 )
3814             ;
3815         END IF;
3816 
3817         IF l_mat_curr_code_P <> x_matched_curr_code THEN
3818             --correction
3819             l_debug_info := 'conversion required.';
3820             INL_LOGGING_PVT.Log_Statement(
3821                 p_module_name    => g_module_name,
3822                 p_procedure_name => l_proc_name,
3823                 p_debug_info     => l_debug_info
3824             );
3825             x_matched_amt := INL_LANDEDCOST_PVT.Converted_Amt(
3826                                 p_amt                       => NVL(x_matched_amt, 0),
3827                                 p_from_currency_code        => x_matched_curr_code,
3828                                 p_to_currency_code          => l_mat_curr_code_P,
3829                                 p_currency_conversion_type  => NVL(l_mat_curr_type_P,x_matched_curr_conversion_type),
3830                                 p_currency_conversion_date  => NVL(l_mat_curr_date_P,x_matched_curr_conversion_date),
3831                                 x_currency_conversion_rate  => l_currency_conversion_rate
3832                             )
3833             ;
3834             IF NVL(x_nrec_tax_amt, 0) <> 0 THEN
3835                 l_debug_info := 'conversion required for Not recoverable tax.';
3836                 INL_LOGGING_PVT.Log_Statement(
3837                     p_module_name    => g_module_name,
3838                     p_procedure_name => l_proc_name,
3839                     p_debug_info     => l_debug_info
3840                 );
3841 
3842                 x_nrec_tax_amt := inl_landedcost_pvt.Converted_Amt(
3843                                       p_amt                       => NVL(x_nrec_tax_amt, 0),
3844                                       p_from_currency_code        => x_matched_curr_code,
3845                                       p_to_currency_code          => l_mat_curr_code_P,
3846                                       p_currency_conversion_type  => NVL(l_mat_curr_type_P,x_matched_curr_conversion_type),
3847                                       p_currency_conversion_date  => NVL(l_mat_curr_date_P,x_matched_curr_conversion_date),
3848                                       x_currency_conversion_rate  => l_currency_conversion_rate
3849                                   )
3850                 ;
3851             END IF;
3852         END IF;
3853         x_matched_curr_code            := l_mat_curr_code_P;
3854         x_matched_curr_conversion_type := l_mat_curr_type_P;
3855         x_matched_curr_conversion_date := l_mat_curr_date_P;
3856         x_matched_curr_conversion_rate := l_currency_conversion_rate; --l_mat_curr_rate_P;
3857 
3858         IF x_existing_match_info_flag = 'Y'
3859             AND l_corr_from_parent_table_id IS NOT NULL
3860             AND l_corr_from_parent_table_id > p_from_parent_table_id
3861         THEN
3862             x_matched_amt := NVL(x_matched_amt,0) + NVL(x_nrec_tax_amt, 0); -- RESUBMIT A CORRECTION THAT ISN'T THE LAST CORRECTION
3863         ELSE
3864             x_matched_amt := NVL(x_matched_amt,0) + NVL(x_nrec_tax_amt, 0) + NVL(l_mat_amt_P, 0);
3865         END IF;
3866         x_parent_match_id := l_mat_par_mat_id_P;
3867         IF NVL(x_nrec_tax_amt, 0) <> 0 OR NVL(l_mat_nrec_tax_amt_P, 0) <> 0 THEN
3868             x_nrec_tax_amt := NVL(x_nrec_tax_amt, 0) + NVL(l_mat_nrec_tax_amt_P, 0) ;
3869         END IF;
3870     END IF;
3871 
3872     IF x_new_to_parent_table_name = 'INL_SHIP_HEADERS' THEN
3873         SELECT ship_header_id
3874         INTO x_ship_header_id
3875         FROM inl_ship_headers
3876         WHERE ship_header_id = x_new_to_parent_table_id;
3877     ELSIF x_new_to_parent_table_name = 'INL_SHIP_LINES' THEN
3878         SELECT ship_header_id
3879         INTO x_ship_header_id
3880         FROM inl_ship_lines
3881         WHERE ship_line_id  = x_new_to_parent_table_id;
3882     ELSIF x_new_to_parent_table_name = 'INL_SHIP_LINE_GROUPS' THEN
3883         SELECT ship_header_id
3884         INTO x_ship_header_id
3885         FROM inl_ship_line_groups
3886         WHERE ship_line_group_id = x_new_to_parent_table_id;
3887     ELSIF x_new_to_parent_table_name = 'INL_CHARGE_LINES' THEN
3888         l_ship_header_id_tab.DELETE;
3889         SELECT DISTINCT(a.ship_header_id) BULK COLLECT
3890         INTO l_ship_header_id_tab
3891         FROM inl_charge_lines c,
3892         inl_associations a
3893         WHERE c.charge_line_id              = x_new_to_parent_table_id
3894         AND a.from_parent_table_name      = 'INL_CHARGE_LINES'
3895         AND a.from_parent_table_id        = c.charge_line_id;
3896         IF NVL(l_ship_header_id_tab.LAST, 0) = 1 THEN
3897             x_ship_header_id                 := l_ship_header_id_tab(1) ;
3898         END IF;
3899     ELSIF x_new_to_parent_table_name = 'INL_TAX_LINES' THEN
3900         SELECT ship_header_id
3901         INTO x_ship_header_id
3902         FROM inl_tax_lines
3903         WHERE tax_line_id   = x_new_to_parent_table_id;
3904     ELSE -- In case of correction, the table is out of LCM limit
3905         SELECT ship_header_id
3906         INTO x_ship_header_id
3907         FROM inl_matches
3908         WHERE match_id     = l_mat_par_mat_id_P;
3909     END IF;
3910 --
3911     -- Standard End of Procedure/Function Logging
3912     INL_logging_pvt.Log_EndProc(
3913         p_module_name    => g_module_name,
3914         p_procedure_name => l_proc_name
3915     );
3916 EXCEPTION
3917     WHEN FND_API.G_EXC_ERROR THEN
3918         -- Standard Expected Error Logging
3919         INL_LOGGING_PVT.Log_ExpecError (
3920             p_module_name    => g_module_name,
3921             p_procedure_name => l_proc_name
3922         );
3923         x_return_status := FND_API.G_RET_STS_ERROR;
3924     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3925         -- Standard Unexpected Error Logging
3926         INL_LOGGING_PVT.Log_UnexpecError (
3927             p_module_name    => g_module_name,
3928             p_procedure_name => l_proc_name
3929         );
3930         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3931     WHEN OTHERS THEN
3932         -- Standard Unexpected Error Logging
3933         INL_LOGGING_PVT.Log_UnexpecError (
3934             p_module_name    => g_module_name,
3935             p_procedure_name => l_proc_name
3936         );
3937         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3938         IF FND_MSG_PUB.Check_Msg_Level(
3939             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
3940         ) THEN
3941             FND_MSG_PUB.Add_Exc_Msg(
3942                 p_pkg_name       => g_pkg_name,
3943                 p_procedure_name => l_proc_name
3944             );
3945         END IF;
3946 END Derive_FromAP;
3947 
3948 -- Utility name : Import_Matches
3949 -- Type       : Private
3950 -- Function   : Import Match Lines
3951 --
3952 --
3953 -- Pre-reqs   : None
3954 -- Parameters :
3955 -- IN         : p_group_id      IN  NUMBER
3956 --
3957 -- OUT        : x_return_status OUT NOCOPY VARCHAR2
3958 --
3959 -- Version    : Current version 1.0
3960 --
3961 -- Notes      :
3962 PROCEDURE Import_Matches(
3963     p_group_id      IN NUMBER,
3964     x_return_status OUT NOCOPY VARCHAR2
3965 ) IS
3966     l_proc_name CONSTANT VARCHAR2(100) := 'Import_Matches';
3967     -- Cursor to get all valid and possible Matches
3968     -- that will be used in the import process
3969     CURSOR matchAmountsToProcess
3970     IS
3971         SELECT inl_match_Amounts_s.NEXTVAL new_match_Amount_id,
3972            matched_amt                 ,
3973            matched_curr_code           ,
3974            matched_curr_conversion_type,
3975            matched_curr_conversion_date,
3976            matched_curr_conversion_rate,
3977            match_amount_int_id,
3978            transaction_type
3979         FROM inl_match_amounts_int
3980         WHERE processing_status_code = 'PENDING'
3981         AND   (p_group_id   IS NULL
3982                OR p_group_id = group_id)
3983     ;
3984 
3985     TYPE matchAmountsToProcess_ListType IS TABLE OF matchAmountsToProcess%ROWTYPE;
3986     matchAmountsToProcess_List matchAmountsToProcess_ListType;
3987 
3988     CURSOR matchesToProcess
3989     IS
3990          SELECT inl_matches_s.NEXTVAL new_match_id,
3991             match_type_code          ,
3992             from_parent_table_name,
3993             from_parent_table_id  ,
3994             to_parent_table_name  ,
3995             to_parent_table_id    ,
3996             matched_qty                 ,
3997             matched_uom_code            ,
3998             matched_amt                 ,
3999             matched_curr_code           ,
4000             matched_curr_conversion_type,
4001             matched_curr_conversion_date,
4002             matched_curr_conversion_rate,
4003             replace_estim_qty_flag      ,
4004             charge_line_type_id  ,
4005             party_id             ,
4006             party_site_id        ,
4007             tax_code             ,
4008             nrec_tax_amt         ,
4009             tax_amt_included_flag,
4010             match_amount_int_id  ,
4011             match_int_id         ,
4012             transaction_type
4013          FROM inl_matches_int
4014          WHERE processing_status_code = 'RUNNING' /* Point 1: If any change occur here the other 4 points might be affected */
4015          AND   (p_group_id   IS NULL
4016                 OR p_group_id = group_id)
4017     ;
4018 
4019     TYPE matchesToProcess_ListType IS TABLE OF matchesToProcess%ROWTYPE;
4020     matchesToProcess_List matchesToProcess_ListType;
4021     l_debug_info    VARCHAR2(2000) ;
4022     l_return_status VARCHAR2(1) ;
4023     l_ship_line_id  NUMBER;
4024     l_ship_header_id  NUMBER;
4025     l_parent_match_id  NUMBER;
4026     l_existing_match_info_flag VARCHAR2(1) ;
4027     l_match_id  NUMBER;
4028     l_new_to_parent_table_name VARCHAR2(30) ;
4029     l_new_to_parent_table_id NUMBER;
4030     l_matched_qty NUMBER;
4031     l_matched_amt NUMBER;
4032     l_nrec_tax_amt NUMBER;
4033     l_matched_uom_code VARCHAR2(30) ;
4034     l_matched_curr_code VARCHAR2(30) ;
4035     l_matched_curr_conversion_type  VARCHAR2(30);
4036     l_matched_curr_conversion_date DATE;
4037     l_matched_curr_conversion_rate  NUMBER;
4038 BEGIN
4039     -- Standard Beginning of Procedure/Function Logging
4040     INL_LOGGING_PVT.Log_BeginProc(
4041         p_module_name    => g_module_name,
4042         p_procedure_name => l_proc_name
4043     ) ;
4044     -- Initialize API return status to success
4045     x_return_status := FND_API.G_RET_STS_SUCCESS;
4046     l_debug_info := 'Processing Match Amounts';
4047     INL_LOGGING_PVT.Log_Statement(
4048         p_module_name      => g_module_name,
4049         p_procedure_name   => l_proc_name,
4050         p_debug_info       => l_debug_info
4051     ) ;
4052 
4053     OPEN matchAmountsToProcess;
4054     FETCH matchAmountsToProcess BULK COLLECT INTO matchAmountsToProcess_List;
4055     CLOSE matchAmountsToProcess;
4056 
4057     IF NVL(matchAmountsToProcess_List.LAST, 0) > 0 THEN
4058         FOR iMatch IN matchAmountsToProcess_List.FIRST..matchAmountsToProcess_List.LAST
4059         LOOP
4060             l_debug_info := 'Processing Match Amount: '||iMatch||'('||matchAmountsToProcess_List(iMatch).match_amount_int_id||')';
4061             INL_LOGGING_PVT.Log_Statement(
4062                 p_module_name      => g_module_name,
4063                 p_procedure_name   => l_proc_name,
4064                 p_debug_info       => l_debug_info
4065             ) ;
4066 
4067             INL_LOGGING_PVT.Log_Variable(p_module_name     => g_module_name,
4068                                          p_procedure_name  => l_proc_name,
4069                                          p_var_name => 'matchAmountsToProcess_List(iMatch).match_amount_int_id',
4070                                          p_var_value => matchAmountsToProcess_List(iMatch) .match_amount_int_id) ;
4071             IF matchAmountsToProcess_List(iMatch).transaction_type <> 'CREATE' THEN
4072                 l_debug_info := 'Transaction_type '||matchAmountsToProcess_List(iMatch).transaction_type||'not supported.';
4073                         INL_LOGGING_PVT.Log_Statement(
4074                             p_module_name      => g_module_name,
4075                             p_procedure_name   => l_proc_name,
4076                             p_debug_info       => l_debug_info
4077                         ) ;
4078 
4079                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4080             ELSE
4081                 INSERT INTO inl_match_Amounts(
4082                     match_amount_id             ,
4083                     matched_amt                 ,
4084                     matched_curr_code           ,
4085                     matched_curr_conversion_type,
4086                     matched_curr_conversion_date,
4087                     matched_curr_conversion_rate,
4088                     match_amount_int_id         ,
4089                     program_id                  ,
4090                     program_update_date         ,
4091                     program_application_id      ,
4092                     request_id                  ,
4093                     created_by                  ,
4094                     creation_date               ,
4095                     last_updated_by             ,
4096                     last_update_date            ,
4097                     last_update_login
4098                 )   VALUES
4099                (
4100                     matchAmountsToProcess_List(iMatch).new_match_Amount_id          ,
4101                     matchAmountsToProcess_List(iMatch).matched_amt                  ,
4102                     matchAmountsToProcess_List(iMatch).matched_curr_code            ,
4103                     matchAmountsToProcess_List(iMatch).matched_curr_conversion_type ,
4104                     matchAmountsToProcess_List(iMatch).matched_curr_conversion_date ,
4105                     matchAmountsToProcess_List(iMatch).matched_curr_conversion_rate ,
4106                     matchAmountsToProcess_List(iMatch).match_amount_int_id          ,
4107                     fnd_global.conc_program_id                                      ,
4108                     SYSDATE                                                         ,
4109                     fnd_global.prog_appl_id                                         ,
4110                     fnd_global.conc_request_id                                      ,
4111                     fnd_global.user_id                                              ,
4112                     SYSDATE                                                         ,
4113                     fnd_global.user_id                                              ,
4114                     SYSDATE                                                         ,
4115                     fnd_global.login_id
4116                 );
4117             END IF;
4118             l_debug_info := 'Set Shipment Line Interface status and imported Ids';
4119             INL_LOGGING_PVT.Log_Statement(
4120                 p_module_name      => g_module_name,
4121                 p_procedure_name   => l_proc_name,
4122                 p_debug_info       => l_debug_info
4123             ) ;
4124             -- Set processing status to COMPLETED for
4125             -- the current and imported Match Line
4126             UPDATE inl_match_Amounts_int m
4127             SET m.processing_status_code = 'COMPLETED'               ,
4128                 m.request_id             = fnd_global.conc_request_id,
4129                 m.last_updated_by        = fnd_global.user_id        ,
4130                 m.last_update_date       = SYSDATE                   ,
4131                 m.last_update_login      = fnd_global.login_id       ,
4132                 m.program_id             = fnd_global.conc_program_id,
4133                 m.program_update_date    = SYSDATE                   ,
4134                 m.program_application_id = fnd_global.prog_appl_id
4135               WHERE m.match_Amount_int_id       = matchAmountsToProcess_List(iMatch).match_Amount_int_id;
4136         END LOOP;
4137     END IF;
4138 
4139     l_debug_info := 'Processing Matches';
4140     INL_LOGGING_PVT.Log_Statement(
4141         p_module_name      => g_module_name,
4142         p_procedure_name   => l_proc_name,
4143         p_debug_info       => l_debug_info
4144     ) ;
4145 
4146     OPEN matchesToProcess;
4147     FETCH matchesToProcess BULK COLLECT INTO matchesToProcess_List;
4148     CLOSE matchesToProcess;
4149 
4150     IF NVL(matchesToProcess_List.LAST, 0) > 0 THEN
4151         FOR iMatch IN matchesToProcess_List.FIRST..matchesToProcess_List.LAST
4152         LOOP
4153 
4154             IF matchesToProcess_List(iMatch).from_parent_table_name = 'AP_INVOICE_DISTRIBUTIONS'
4155             THEN
4156                 l_matched_qty                  := matchesToProcess_List(iMatch).matched_qty                    ;
4157                 l_matched_uom_code             := matchesToProcess_List(iMatch).matched_uom_code               ;
4158                 l_new_to_parent_table_name     := matchesToProcess_List(iMatch).to_parent_table_name           ;
4159                 l_new_to_parent_table_id       := matchesToProcess_List(iMatch).to_parent_table_id             ;
4160                 l_matched_curr_code            := matchesToProcess_List(iMatch).matched_curr_code              ;
4161                 l_matched_curr_conversion_type := matchesToProcess_List(iMatch).matched_curr_conversion_type   ;
4162                 l_matched_curr_conversion_date := matchesToProcess_List(iMatch).matched_curr_conversion_date   ;
4163                 l_matched_curr_conversion_rate := matchesToProcess_List(iMatch).matched_curr_conversion_rate   ;
4164                 l_matched_amt                  := matchesToProcess_List(iMatch).matched_amt                    ;
4165                 l_nrec_tax_amt                 := matchesToProcess_List(iMatch).nrec_tax_amt                   ;
4166                 Derive_FromAP(
4167                     p_from_parent_table_name        => matchesToProcess_List(iMatch).from_parent_table_name,
4168                     p_from_parent_table_id          => matchesToProcess_List(iMatch).from_parent_table_id,
4169                     p_match_type_code               => matchesToProcess_List(iMatch).match_type_code,
4170                     x_matched_amt                   => l_matched_amt,
4171                     x_matched_qty                   => l_matched_qty,
4172                     x_nrec_tax_amt                  => l_nrec_tax_amt,
4173                     x_matched_uom_code              => l_matched_uom_code,
4174                     x_new_to_parent_table_name      => l_new_to_parent_table_name,
4175                     x_new_to_parent_table_id        => l_new_to_parent_table_id,
4176                     x_matched_curr_code             => l_matched_curr_code,
4177                     x_matched_curr_conversion_type  => l_matched_curr_conversion_type,
4178                     x_matched_curr_conversion_date  => l_matched_curr_conversion_date,
4179                     x_matched_curr_conversion_rate  => l_matched_curr_conversion_rate,
4180                     x_ship_header_id                => l_ship_header_id,
4181                     x_existing_match_info_flag      => l_existing_match_info_flag,
4182                     x_parent_match_id               => l_parent_match_id,
4183                     x_return_status                 => l_return_status
4184                 );
4185 
4186                  -- If any errors happen abort API.
4187                 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4188                     RAISE FND_API.G_EXC_ERROR;
4189                 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4190                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4191                 END IF;
4192             ELSE
4193                 l_new_to_parent_table_name := matchesToProcess_List(iMatch).to_parent_table_name;
4194                 l_new_to_parent_table_id := matchesToProcess_List(iMatch).to_parent_table_id;
4195                 Set_existingMatchInfoFlag(
4196                     p_from_parent_table_name    => matchesToProcess_List(iMatch).from_parent_table_name,
4197                     p_from_parent_table_id      => matchesToProcess_List(iMatch).from_parent_table_id,
4198                     p_to_parent_table_name      => l_new_to_parent_table_name,
4199                     p_to_parent_table_id        => l_new_to_parent_table_id,
4200                     x_existing_match_info_flag  => l_existing_match_info_flag,
4201                     x_parent_match_id           => l_parent_match_id,
4202                     x_return_status             => l_return_status
4203                 );
4204                  -- If any errors happen abort API.
4205                 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4206                     RAISE FND_API.G_EXC_ERROR;
4207                 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4208                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4209                 END IF;
4210             END IF;
4211             l_debug_info := 'Processing Match: '||iMatch||'('||matchesToProcess_List(iMatch) .transaction_type||')';
4212             INL_LOGGING_PVT.Log_Statement(
4213                 p_module_name      => g_module_name,
4214                 p_procedure_name   => l_proc_name,
4215                 p_debug_info       => l_debug_info
4216             ) ;
4217 
4218             INL_LOGGING_PVT.Log_Variable(
4219                 p_module_name    => g_module_name,
4220                 p_procedure_name => l_proc_name,
4221                 p_var_name       => 'matchesToProcess_List(iMatch).match_int_id',
4222                 p_var_value      => matchesToProcess_List(iMatch).match_int_id
4223             ) ;
4224             IF matchesToProcess_List(iMatch) .transaction_type <> 'CREATE' THEN
4225                 l_debug_info := 'Transaction_type '||matchesToProcess_List(iMatch) .transaction_type||'not supported.';
4226                 INL_LOGGING_PVT.Log_Statement(
4227                     p_module_name      => g_module_name,
4228                     p_procedure_name   => l_proc_name,
4229                     p_debug_info       => l_debug_info
4230                 ) ;
4231                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4232             ELSE
4233                 INSERT INTO inl_matches(
4234                     match_id                     ,  /* 01 */
4235                     match_type_code              ,  /* 02 */
4236                     ship_header_id               ,  /* 03 */
4237                     from_parent_table_name       ,  /* 04 */
4238                     from_parent_table_id         ,  /* 05 */
4239                     to_parent_table_name         ,  /* 06 */
4240                     to_parent_table_id           ,  /* 07 */
4241                     parent_match_id              ,  /* 08 */
4242                     matched_qty                  ,  /* 09 */
4243                     matched_uom_code             ,  /* 10 */
4244                     matched_amt                  ,  /* 11 */
4245                     matched_curr_code            ,  /* 12 */
4246                     matched_curr_conversion_type ,  /* 13 */
4247                     matched_curr_conversion_date ,  /* 14 */
4248                     matched_curr_conversion_rate ,  /* 15 */
4249                     adj_already_generated_flag   ,  /* 16 */
4250                     replace_estim_qty_flag       ,  /* 17 */
4251                     existing_match_info_flag     ,  /* 18 */
4252                     charge_line_type_id          ,  /* 19 */
4253                     party_id                     ,  /* 20 */
4254                     party_site_id                ,  /* 21 */
4255                     tax_code                     ,  /* 22 */
4256                     nrec_tax_amt                 ,  /* 23 */
4257                     tax_amt_included_flag        ,  /* 24 */
4258                     match_amount_id              ,  /* 25 */
4259                     match_int_id                 ,  /* 26 */
4260                     program_id                   ,  /* 27 */
4261                     program_update_date          ,  /* 28 */
4262                     program_application_id       ,  /* 29 */
4263                     request_id                   ,  /* 30 */
4264                     created_by                   ,  /* 31 */
4265                     creation_date                ,  /* 32 */
4266                     last_updated_by              ,  /* 33 */
4267                     last_update_date             ,  /* 34 */
4268                     last_update_login               /* 35 */
4269                 )
4270                 VALUES(
4271                     matchesToProcess_List(iMatch).new_match_id           ,             /* 01 */
4272                     matchesToProcess_List(iMatch).match_type_code        ,             /* 02 */
4273                     l_ship_header_id                                     ,             /* 03 */
4274                     matchesToProcess_List(iMatch).from_parent_table_name ,             /* 04 */
4275                     matchesToProcess_List(iMatch).from_parent_table_id   ,             /* 05 */
4276                     l_new_to_parent_table_name                           ,             /* 06 */
4277                     l_new_to_parent_table_id                             ,             /* 07 */
4278                     l_parent_match_id                                    ,             /* 08 */
4279                     l_matched_qty                                        ,             /* 09 */
4280                     l_matched_uom_code                                   ,             /* 10 */
4281                     l_matched_amt                                        ,             /* 11 */
4282                     l_matched_curr_code                                  ,             /* 12 */
4283                     l_matched_curr_conversion_type                       ,             /* 13 */
4284                     l_matched_curr_conversion_date                       ,             /* 14 */
4285                     l_matched_curr_conversion_rate                       ,             /* 15 */
4286                     'N'   ,                                                            /* 16 */
4287                     matchesToProcess_List(iMatch).replace_estim_qty_flag ,             /* 17 */
4288                     l_existing_match_info_flag                           ,             /* 18 */
4289                     matchesToProcess_List(iMatch).charge_line_type_id    ,             /* 19 */
4290                     matchesToProcess_List(iMatch).party_id               ,             /* 20 */
4291                     matchesToProcess_List(iMatch).party_site_id          ,             /* 21 */
4292                     matchesToProcess_List(iMatch).tax_code               ,             /* 22 */
4293                     l_nrec_tax_amt                                       ,             /* 23 */
4294                     matchesToProcess_List(iMatch).tax_amt_included_flag  ,             /* 24 */
4295                     DECODE(matchesToProcess_List(iMatch).match_amount_int_id,
4296                             NULL, NULL,
4297                            (SELECT ima.match_amount_id
4298                              FROM inl_match_amounts ima
4299                              WHERE ima.match_amount_int_id =
4300                              matchesToProcess_List(iMatch).match_amount_int_id)
4301                             ),                                                         /* 25 */
4302                     matchesToProcess_List(iMatch).match_int_id           ,             /* 26 */
4303                     fnd_global.conc_program_id                           ,             /* 27 */
4304                     SYSDATE                                              ,             /* 28 */
4305                     fnd_global.prog_appl_id                              ,             /* 29 */
4306                     fnd_global.conc_request_id                           ,             /* 30 */
4307                     fnd_global.user_id                                   ,             /* 31 */
4308                     SYSDATE                                              ,             /* 32 */
4309                     fnd_global.user_id                                   ,             /* 33 */
4310                     SYSDATE                                              ,             /* 34 */
4311                     fnd_global.login_id                                                /* 35 */
4312                 );
4313                 -- Set Shipment Header's pending_matching_flag to 'Y'
4314                 l_debug_info := 'Set LCM Shipment pending_matching_flag to Y';
4315                 INL_LOGGING_PVT.Log_Statement(
4316                     p_module_name => g_module_name,
4317                     p_procedure_name => l_proc_name,
4318                     p_debug_info => l_debug_info
4319                 );
4320                 -- Set Pending Matching Flag = 'Y' to the current Shipment Header
4321                 UPDATE inl_ship_headers sH
4322                 SET sH.pending_matching_flag  = 'Y',
4323                 sH.request_id             = fnd_global.conc_request_id,
4324                 sH.last_updated_by        = fnd_global.user_id,
4325                 sH.last_update_date       = SYSDATE,
4326                 sH.last_update_login      = fnd_global.login_id,
4327                 sH.program_id             = fnd_global.conc_program_id,
4328                 sH.program_update_date    = SYSDATE,
4329                 sH.program_application_id = fnd_global.prog_appl_id
4330                 WHERE sH.ship_header_id = l_ship_header_id
4331                 ;
4332             END IF;
4333             l_debug_info  := 'Set Shipment Line Interface status and imported Ids';
4334             INL_LOGGING_PVT.Log_Statement(
4335                 p_module_name      => g_module_name,
4336                 p_procedure_name   => l_proc_name,
4337                 p_debug_info       => l_debug_info
4338             ) ;
4339             -- Set processing status to COMPLETED for
4340             -- the current and imported Match Line
4341             UPDATE inl_matches_int m
4342             SET m.processing_status_code = 'COMPLETED'               ,
4343                 m.request_id             = fnd_global.conc_request_id,
4344                 m.last_updated_by        = fnd_global.user_id        ,
4345                 m.last_update_date       = SYSDATE                   ,
4346                 m.last_update_login      = fnd_global.login_id       ,
4347                 m.program_id             = fnd_global.conc_program_id,
4348                 m.program_update_date    = SYSDATE                   ,
4349                 m.program_application_id = fnd_global.prog_appl_id
4350               WHERE m.match_int_id       = matchesToProcess_List(iMatch) .match_int_id;
4351         END LOOP;
4352     END IF;
4353     -- Standard End of Procedure/Function Logging
4354     INL_LOGGING_PVT.Log_EndProc(
4355         p_module_name    => g_module_name,
4356         p_procedure_name => l_proc_name
4357     );
4358 EXCEPTION
4359     WHEN FND_API.G_EXC_ERROR THEN
4360         -- Standard Expected Error Logging
4361         INL_LOGGING_PVT.Log_ExpecError (
4362             p_module_name    => g_module_name,
4363             p_procedure_name => l_proc_name
4364         );
4365         x_return_status := FND_API.G_RET_STS_ERROR;
4366     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4367         -- Standard Unexpected Error Logging
4368         INL_LOGGING_PVT.Log_UnexpecError (
4369             p_module_name    => g_module_name,
4370             p_procedure_name => l_proc_name
4371         );
4372         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4373     WHEN OTHERS THEN
4374         -- Standard Unexpected Error Logging
4375         INL_LOGGING_PVT.Log_UnexpecError (
4376             p_module_name    => g_module_name,
4377             p_procedure_name => l_proc_name
4378         );
4379         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4380         IF FND_MSG_PUB.Check_Msg_Level(
4381             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
4382         ) THEN
4383             FND_MSG_PUB.Add_Exc_Msg(
4384                 p_pkg_name       => g_pkg_name,
4385                 p_procedure_name => l_proc_name
4386             );
4387         END IF;
4388 END Import_Matches;
4389 -- Utility name : Derive_ShipHeaderCols
4390 -- Type         : Private
4391 -- Function     : Get and Set Shipment Header values before
4392 --                the first set of validations.
4393 --
4394 -- Pre-reqs     : None
4395 -- Parameters   :
4396 -- IN           : p_ship_header_int_id  IN  NUMBER
4397 --                p_organization_id     IN  NUMBER
4398 --
4399 -- OUT          : x_return_status       OUT NOCOPY VARCHAR2
4400 --
4401 -- Version      : Current version 1.0
4402 --
4403 -- Notes        :
4404 PROCEDURE Derive_ShipHeaderCols(
4405     p_ship_header_int_id IN NUMBER,
4406     p_organization_id    IN NUMBER,
4407     x_return_status      OUT NOCOPY VARCHAR2
4408 ) IS
4409     l_proc_name     CONSTANT VARCHAR2(100) := 'Derive_ShipHeaderCols';
4410     l_msg_count     NUMBER;
4411     l_msg_data      VARCHAR2(2000) ;
4412     l_debug_info    VARCHAR2(200) ;
4413     l_updated_flag  VARCHAR2(1) ;
4414     l_return_status VARCHAR2(1) ;
4415 BEGIN
4416     -- Standard Beginning of Procedure/Function Logging
4417     INL_LOGGING_PVT.Log_BeginProc(
4418         p_module_name    => g_module_name,
4419         p_procedure_name => l_proc_name
4420     ) ;
4421     --  Initialize API return status to success
4422     x_return_status := FND_API.G_RET_STS_SUCCESS;
4423     UPDATE inl_ship_headers_int sh
4424     SET sh.location_id = (
4425                SELECT hou.location_id
4426                  FROM hr_organization_units hou,
4427                       hr_locations hl
4428                 WHERE hl.location_id         = hou.location_id
4429                   AND hl.receiving_site_flag = 'Y'
4430                   AND hou.organization_id    = sh.organization_id
4431         )
4432     WHERE sh.ship_header_int_id = p_ship_header_int_id
4433     AND sh.location_id       IS NULL;
4434     -- Standard End of Procedure/Function Logging
4435     INL_LOGGING_PVT.Log_EndProc(
4436         p_module_name    => g_module_name,
4437         p_procedure_name => l_proc_name
4438     );
4439 EXCEPTION
4440     WHEN FND_API.G_EXC_ERROR THEN
4441         -- Standard Expected Error Logging
4442         INL_LOGGING_PVT.Log_ExpecError (
4443             p_module_name    => g_module_name,
4444             p_procedure_name => l_proc_name
4445         );
4446         x_return_status := FND_API.G_RET_STS_ERROR;
4447     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4448         -- Standard Unexpected Error Logging
4449         INL_LOGGING_PVT.Log_UnexpecError (
4450             p_module_name    => g_module_name,
4451             p_procedure_name => l_proc_name
4452         );
4453         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4454     WHEN OTHERS THEN
4455         -- Standard Unexpected Error Logging
4456         INL_LOGGING_PVT.Log_UnexpecError (
4457             p_module_name    => g_module_name,
4458             p_procedure_name => l_proc_name
4459         );
4460         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4461         IF FND_MSG_PUB.Check_Msg_Level(
4462             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
4463         ) THEN
4464             FND_MSG_PUB.Add_Exc_Msg(
4465                 p_pkg_name       => g_pkg_name,
4466                 p_procedure_name => l_proc_name
4467             );
4468         END IF;
4469 END Derive_ShipHeaderCols;
4470 -- Utility name : Derive_ShipLineCols
4471 -- Type         : Private
4472 -- Function     : Get and Set Shipment Line values before
4473 --                the first set of validations.
4474 --
4475 -- Pre-reqs     : None
4476 -- Parameters   :
4477 -- IN           : p_ship_header_int_id  IN  NUMBER
4478 --                p_organization_id     IN  NUMBER
4479 --
4480 -- OUT          : x_return_status       OUT NOCOPY VARCHAR2
4481 --
4482 -- Version      : Current version 1.0
4483 --
4484 -- Notes        :
4485 PROCEDURE Derive_ShipLineCols(
4486     p_ship_header_int_id IN NUMBER,
4487     p_organization_id    IN NUMBER,
4488     x_return_status OUT NOCOPY VARCHAR2
4489 ) IS
4490     l_proc_name     CONSTANT VARCHAR2(100) := 'Derive_ShipLineCols';
4491     l_msg_count     NUMBER;
4492     l_msg_data      VARCHAR2(2000) ;
4493     l_debug_info    VARCHAR2(200) ;
4494     l_updated_flag  VARCHAR2(1) ;
4495     l_return_status VARCHAR2(1) ;
4496     l_1ary_uom_code VARCHAR2(3) ;
4497     l_1ary_qty      NUMBER;
4498     l_2ary_uom_code VARCHAR2(3) ;
4499     l_2ary_qty      NUMBER;
4500     CURSOR toDeriveLines(p_ship_header_int_id NUMBER)
4501     IS
4502     SELECT ship_line_int_id       ,
4503        party_id                   ,
4504        party_number               ,
4505        party_site_id              ,
4506        party_site_number          ,
4507        source_organization_id     ,
4508        source_organization_code   ,
4509        ship_line_type_id          ,
4510        ship_line_type_code        ,
4511        inventory_item_id          ,
4512        txn_qty                    ,
4513        txn_uom_code               ,
4514        txn_unit_price             ,
4515        primary_qty                ,
4516        primary_uom_code           ,
4517        primary_unit_price         ,
4518        secondary_qty              ,
4519        secondary_uom_code         ,
4520        secondary_unit_price       ,
4521        ship_from_party_id         ,
4522        ship_from_party_number     ,
4523        ship_from_party_site_id    ,
4524        ship_from_party_site_number,
4525        ship_to_organization_id    ,
4526        ship_to_organization_code  ,
4527        ship_to_location_id        ,
4528        ship_to_location_code      ,
4529        bill_from_party_id         ,
4530        bill_from_party_number     ,
4531        bill_from_party_site_id    ,
4532        bill_from_party_site_number,
4533        bill_to_organization_id    ,
4534        bill_to_organization_code  ,
4535        bill_to_location_id        ,
4536        bill_to_location_code      ,
4537        poa_party_id               ,
4538        poa_party_number           ,
4539        poa_party_site_id          ,
4540        poa_party_site_number      ,
4541        poo_organization_id        ,
4542        poo_to_organization_code   ,
4543        poo_location_id            ,
4544        poo_location_code
4545     FROM inl_ship_lines_int
4546     WHERE ship_header_int_id     = P_ship_header_int_id
4547     AND processing_status_code = 'PENDING'; --'ERROR' IN CASE OF FAIL
4548     TYPE toDeriveLines_List_Type IS TABLE OF toDeriveLines%ROWTYPE;
4549     toDeriveLines_List toDeriveLines_List_Type ;
4550 BEGIN
4551     -- Standard Beginning of Procedure/Function Logging
4552     INL_LOGGING_PVT.Log_BeginProc(
4553         p_module_name    => g_module_name,
4554         p_procedure_name => l_proc_name
4555     ) ;
4556     --  Initialize API return status to success
4557     x_return_status                             := FND_API.G_RET_STS_SUCCESS;
4558     l_debug_info := 'Open and fetch toDeriveLines cursor';
4559     INL_LOGGING_PVT.Log_Statement(
4560         p_module_name      => g_module_name,
4561         p_procedure_name   => l_proc_name,
4562         p_debug_info       => l_debug_info
4563     ) ;
4564     OPEN toDeriveLines(p_ship_header_int_id) ;
4565     FETCH toDeriveLines BULK COLLECT INTO toDeriveLines_list;
4566 
4567     CLOSE toDeriveLines;
4568     IF NVL(toDeriveLines_list.LAST, 0) > 0 THEN
4569         FOR i IN toDeriveLines_list.FIRST .. toDeriveLines_list.LAST
4570         LOOP
4571             l_updated_flag := 'N';
4572             -- Examine the line
4573             l_debug_info := 'Examine the line ID '||toDeriveLines_list(i) .ship_line_int_id;
4574             INL_LOGGING_PVT.Log_Statement(
4575                 p_module_name      => g_module_name,
4576                 p_procedure_name   => l_proc_name,
4577                 p_debug_info       => l_debug_info
4578             ) ;
4579             -- Derive Primary and Secondary UOM information
4580             INL_SHIPMENT_PVT.Get_1ary2aryQty(p_api_version => 1.0,
4581                                              p_init_msg_list => FND_API.G_FALSE,
4582                                              p_commit => FND_API.G_FALSE,
4583                                              p_inventory_item_id => toDeriveLines_list(i) .inventory_item_id,
4584                                              p_organization_id => p_organization_id,
4585                                              p_uom_code => toDeriveLines_list(i) .txn_uom_code,
4586                                              p_qty => toDeriveLines_list(i) .txn_qty,
4587                                              x_1ary_uom_code => l_1ary_uom_code,
4588                                              x_1ary_qty => l_1ary_qty,
4589                                              x_2ary_uom_code => l_2ary_uom_code,
4590                                              x_2ary_qty => l_2ary_qty,
4591                                              x_return_status => l_return_status,
4592                                              x_msg_count => l_msg_count,
4593                                              x_msg_data => l_msg_data) ;
4594             -- If any errors happen abort the process.
4595             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4596                 RAISE FND_API.G_EXC_ERROR;
4597             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4598                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4599             END IF;
4600             IF l_1ary_uom_code IS NOT NULL THEN
4601                 l_updated_flag                            := 'Y';
4602                 toDeriveLines_list(i) .primary_qty        := l_1ary_qty;
4603                 toDeriveLines_list(i) .primary_uom_code   := l_1ary_uom_code;
4604                 toDeriveLines_list(i) .primary_unit_price :=(toDeriveLines_list(i) .txn_qty * toDeriveLines_list(i) .txn_unit_price) / l_1ary_qty;
4605             END IF;
4606             IF l_2ary_uom_code IS NOT NULL THEN
4607                 l_updated_flag                              := 'Y';
4608                 toDeriveLines_list(i) .secondary_qty        := l_2ary_qty;
4609                 toDeriveLines_list(i) .secondary_uom_code   := l_2ary_uom_code;
4610                 toDeriveLines_list(i) .secondary_unit_price :=(toDeriveLines_list(i) .txn_qty * toDeriveLines_list(i) .txn_unit_price) / l_2ary_qty;
4611             END IF;
4612             IF l_updated_flag = 'Y' THEN
4613                 UPDATE inl_ship_lines_int
4614                 SET party_id                = toDeriveLines_list(i) .party_id               ,
4615                     party_site_id           = toDeriveLines_list(i) .party_site_id          ,
4616                     source_organization_id  = toDeriveLines_list(i) .source_organization_id ,
4617                     ship_line_type_id       = toDeriveLines_list(i) .ship_line_type_id      ,
4618                     inventory_item_id       = toDeriveLines_list(i) .inventory_item_id      ,
4619                     primary_qty             = toDeriveLines_list(i) .primary_qty            ,
4620                     primary_uom_code        = toDeriveLines_list(i) .primary_uom_code       ,
4621                     primary_unit_price      = toDeriveLines_list(i) .primary_unit_price     ,
4622                     secondary_qty           = toDeriveLines_list(i) .secondary_qty          ,
4623                     secondary_uom_code      = toDeriveLines_list(i) .secondary_uom_code     ,
4624                     secondary_unit_price    = toDeriveLines_list(i) .secondary_unit_price   ,
4625                     ship_from_party_id      = toDeriveLines_list(i) .ship_from_party_id     ,
4626                     ship_from_party_site_id = toDeriveLines_list(i) .ship_from_party_site_id,
4627                     ship_to_organization_id = toDeriveLines_list(i) .ship_to_organization_id,
4628                     ship_to_location_id     = toDeriveLines_list(i) .ship_to_location_id    ,
4629                     bill_from_party_id      = toDeriveLines_list(i) .bill_from_party_id     ,
4630                     bill_from_party_site_id = toDeriveLines_list(i) .bill_from_party_site_id,
4631                     bill_to_organization_id = toDeriveLines_list(i) .bill_to_organization_id,
4632                     bill_to_location_id     = toDeriveLines_list(i) .bill_to_location_id    ,
4633                     poa_party_id            = toDeriveLines_list(i) .poa_party_id           ,
4634                     poa_party_site_id       = toDeriveLines_list(i) .poa_party_site_id      ,
4635                     poo_organization_id     = toDeriveLines_list(i) .poo_organization_id    ,
4636                     poo_location_id         = toDeriveLines_list(i) .poo_location_id        ,
4637                     request_id              = fnd_global.conc_request_id                     ,
4638                     last_updated_by         = fnd_global.user_id                             ,
4639                     last_update_date        = SYSDATE                                        ,
4640                     last_update_login       = fnd_global.login_id                            ,
4641                     program_id              = fnd_global.conc_program_id                     ,
4642                     program_update_date     = SYSDATE                                        ,
4643                     program_application_id  = fnd_global.prog_appl_id
4644                 WHERE ship_line_int_id    = toDeriveLines_list(i) .ship_line_int_id;
4645             END IF;
4646         END LOOP;
4647     END IF;
4648     -- Standard End of Procedure/Function Logging
4649     INL_LOGGING_PVT.Log_EndProc(
4650         p_module_name    => g_module_name,
4651         p_procedure_name => l_proc_name
4652     );
4653 EXCEPTION
4654     WHEN FND_API.G_EXC_ERROR THEN
4655         -- Standard Expected Error Logging
4656         INL_LOGGING_PVT.Log_ExpecError (
4657             p_module_name    => g_module_name,
4658             p_procedure_name => l_proc_name
4659         );
4660         x_return_status := FND_API.G_RET_STS_ERROR;
4661     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4662         -- Standard Unexpected Error Logging
4663         INL_LOGGING_PVT.Log_UnexpecError (
4664             p_module_name    => g_module_name,
4665             p_procedure_name => l_proc_name
4666         );
4667         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4668     WHEN OTHERS THEN
4669         -- Standard Unexpected Error Logging
4670         INL_LOGGING_PVT.Log_UnexpecError (
4671             p_module_name    => g_module_name,
4672             p_procedure_name => l_proc_name
4673         );
4674         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4675         IF FND_MSG_PUB.Check_Msg_Level(
4676             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
4677         ) THEN
4678             FND_MSG_PUB.Add_Exc_Msg(
4679                 p_pkg_name       => g_pkg_name,
4680                 p_procedure_name => l_proc_name
4681             );
4682         END IF;
4683 END Derive_ShipLineCols;
4684 -- Utility name : Derive_MatchCols
4685 -- Type         : Private
4686 -- Function     : Get and Set Match Line values
4687 --                before the first set of validations.
4688 --
4689 -- Pre-reqs     : None
4690 -- Parameters   :
4691 -- IN           : p_party_number      VARCHAR2
4692 --                p_party_site_number VARCHAR2
4693 --
4694 --
4695 -- IN OUT       : p_party_id          NUMBER
4696 --                p_party_site_id     NUMBER
4697 --
4698 -- OUT          : x_return_status     VARCHAR2
4699 --
4700 -- Version      : Current version 1.0
4701 --
4702 -- Notes        :
4703 PROCEDURE Derive_MatchCols(
4704     p_party_number          IN VARCHAR2,
4705     p_party_site_number     IN VARCHAR2,
4706     p_match_type_code       IN VARCHAR2,
4707     p_to_parent_table_name  IN VARCHAR2,
4708     p_to_parent_table_id  IN NUMBER,
4709     p_party_id              IN OUT NOCOPY NUMBER,
4710     p_party_site_id         IN OUT NOCOPY NUMBER,
4711     p_parent_match_id       IN OUT NOCOPY NUMBER,
4712     x_return_status            OUT NOCOPY        VARCHAR2
4713 ) IS
4714     l_proc_name     CONSTANT VARCHAR2(100) := 'Derive_MatchCols';
4715     l_debug_info    VARCHAR2(200) ;
4716     l_return_status VARCHAR2(1) ;
4717 BEGIN
4718 
4719     -- Standard Beginning of Procedure/Function Logging
4720     INL_LOGGING_PVT.Log_BeginProc(
4721         p_module_name    => g_module_name,
4722         p_procedure_name => l_proc_name
4723     ) ;
4724     --  Initialize API return status to success
4725     x_return_status                             := FND_API.G_RET_STS_SUCCESS;
4726     l_debug_info := 'Derive values for Match Lines';
4727     INL_LOGGING_PVT.Log_Statement(
4728         p_module_name      => g_module_name,
4729         p_procedure_name   => l_proc_name,
4730         p_debug_info       => l_debug_info
4731     ) ;
4732     IF p_party_number IS NOT NULL AND p_party_id IS NULL THEN
4733         p_party_id  := Derive_PartyID(
4734                             p_party_number => p_party_number,
4735                             x_return_status => l_return_status
4736                        )
4737         ;
4738         -- If any errors happen abort the process.
4739         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4740             RAISE FND_API.G_EXC_ERROR;
4741         ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4742             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4743         END IF;
4744     END IF;
4745     IF p_party_site_number IS NOT NULL AND p_party_site_id IS NULL THEN
4746         p_party_site_id :=
4747             Derive_PartySiteID(p_party_site_number => p_party_site_number,
4748                                x_return_status     => l_return_status
4749                                )
4750         ;
4751         -- If any errors happen abort the process.
4752         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4753             RAISE FND_API.G_EXC_ERROR;
4754         ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4755             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4756         END IF;
4757     END IF;
4758 
4759     IF p_parent_match_id IS NULL
4760         AND p_match_type_code = 'CORRECTION'
4761     THEN
4762         SELECT MIN(match_id)
4763         INTO p_parent_match_id
4764         FROM inl_matches
4765         WHERE from_parent_table_id = p_to_parent_table_id
4766         AND from_parent_table_name = p_to_parent_table_name
4767         ;
4768     END IF;
4769 
4770     -- Standard End of Procedure/Function Logging
4771     INL_LOGGING_PVT.Log_EndProc(
4772         p_module_name    => g_module_name,
4773         p_procedure_name => l_proc_name
4774     );
4775 EXCEPTION
4776     WHEN FND_API.G_EXC_ERROR THEN
4777         -- Standard Expected Error Logging
4778         INL_LOGGING_PVT.Log_ExpecError (
4779             p_module_name    => g_module_name,
4780             p_procedure_name => l_proc_name
4781         );
4782         x_return_status := FND_API.G_RET_STS_ERROR;
4783     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4784         -- Standard Unexpected Error Logging
4785         INL_LOGGING_PVT.Log_UnexpecError (
4786             p_module_name    => g_module_name,
4787             p_procedure_name => l_proc_name
4788         );
4789         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4790     WHEN OTHERS THEN
4791         -- Standard Unexpected Error Logging
4792         INL_LOGGING_PVT.Log_UnexpecError (
4793             p_module_name    => g_module_name,
4794             p_procedure_name => l_proc_name
4795         );
4796         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4797         IF FND_MSG_PUB.Check_Msg_Level(
4798             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
4799         ) THEN
4800             FND_MSG_PUB.Add_Exc_Msg(
4801                 p_pkg_name       => g_pkg_name,
4802                 p_procedure_name => l_proc_name
4803             );
4804         END IF;
4805 END Derive_MatchCols;
4806 -- Funct name : Validate_MatchChLnTpID
4807 -- Type       : Private
4808 -- Function   : Validate a given Charge Line Type that was used
4809 --              by the Matching Process
4810 --
4811 -- Pre-reqs   : None
4812 -- Parameters :
4813 -- IN         : p_match_int_id               IN NUMBER
4814 --              p_match_type_code            IN VARCHAR2
4815 --              p_parent_match_type_code     IN VARCHAR2
4816 --              p_charge_line_type_id        IN NUMBER
4817 --              p_match_amount_int_id        IN NUMBER
4818 --
4819 -- OUT        : x_return_status              OUT NOCOPY VARCHAR2
4820 --
4821 -- Version    : Current version 1.0
4822 --
4823 -- Notes      :
4824 FUNCTION Validate_MatchChLnTpID(
4825     p_match_int_id           IN NUMBER,
4826     p_match_type_code        IN VARCHAR2,
4827     p_parent_match_type_code IN VARCHAR2,
4828     p_charge_line_type_id    IN NUMBER,
4829     p_match_amount_int_id    IN NUMBER,
4830     x_return_status          OUT NOCOPY VARCHAR2
4831 ) RETURN BOOLEAN IS
4832     l_func_name     CONSTANT VARCHAR2(30) := 'Validate_MatchChLnTpID';
4833     l_debug_info    VARCHAR2(400) ;
4834     l_return_status VARCHAR2(1) ;
4835     l_result        VARCHAR2(1) := FND_API.G_TRUE;
4836 BEGIN
4837     -- Standard Beginning of Procedure/Function Logging
4838     INL_LOGGING_PVT.Log_BeginProc(
4839         p_module_name    => g_module_name,
4840         p_procedure_name => l_func_name
4841     ) ;
4842     --  Initialize API return status to success
4843     x_return_status := FND_API.G_RET_STS_SUCCESS;
4844     l_debug_info := 'Check if CHARGE_LINE_TYPE_ID is valid';
4845     INL_LOGGING_PVT.Log_Statement(
4846         p_module_name      => g_module_name,
4847         p_procedure_name   => l_func_name,
4848         p_debug_info       => l_debug_info
4849     ) ;
4850     IF NVL(p_parent_match_type_code, p_match_type_code) = 'CHARGE' THEN
4851         IF p_charge_line_type_id IS NULL THEN
4852             l_result := FND_API.G_FALSE;
4853             -- Add a line into inl_ship_errors
4854             Handle_InterfError(
4855                 p_parent_table_name  => 'INL_MATCHES_INT',
4856                 p_parent_table_id    => p_match_int_id,
4857                 p_column_name        => 'CHARGE_LINE_TYPE_ID',
4858                 p_column_value       => p_charge_line_type_id,
4859                 p_error_message_name => 'INL_ERR_OI_MAT_CH_LN_TP_ID_N',
4860                 p_token1_name        => 'MATCH_INT_ID',
4861                 p_token1_value       => p_match_int_id,
4862                 x_return_status      => l_return_status
4863             ) ;
4864             -- If unexpected errors happen abort
4865             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4866                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4867             END IF;
4868         END IF;
4869     ELSE
4870         IF p_charge_line_type_id IS NOT NULL
4871         AND p_match_amount_int_id IS NULL
4872         THEN
4873             l_result := FND_API.G_FALSE;
4874             -- Add a line into inl_ship_errors
4875             Handle_InterfError(
4876                 p_parent_table_name  => 'INL_MATCHES_INT',
4877                 p_parent_table_id    => p_match_int_id,
4878                 p_column_name        => 'CHARGE_LINE_TYPE_ID',
4879                 p_column_value       => p_charge_line_type_id,
4880                 p_error_message_name => 'INL_ERR_OI_MAT_CH_LN_TP_ID_NN',
4881                 p_token1_name        => 'MATCH_INT_ID',
4882                 p_token1_value       => p_match_int_id,
4883                 x_return_status      => l_return_status
4884             ) ;
4885             -- If unexpected errors happen abort
4886 
4887             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4888                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4889             END IF;
4890         END IF;
4891     END IF;
4892     -- Standard End of Procedure/Function Logging
4893     INL_LOGGING_PVT.Log_EndProc(
4894         p_module_name    => g_module_name,
4895         p_procedure_name => l_func_name
4896     );
4897     RETURN FND_API.to_boolean(l_result) ;
4898 EXCEPTION
4899     WHEN FND_API.G_EXC_ERROR THEN
4900         -- Standard Expected Error Logging
4901         INL_LOGGING_PVT.Log_ExpecError (
4902             p_module_name    => g_module_name,
4903             p_procedure_name => l_func_name
4904         );
4905         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
4906     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4907         -- Standard Unexpected Error Logging
4908         INL_LOGGING_PVT.Log_UnexpecError (
4909             p_module_name    => g_module_name,
4910             p_procedure_name => l_func_name
4911         );
4912         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
4913     WHEN OTHERS THEN
4914           -- Standard Unexpected Error Logging
4915           INL_LOGGING_PVT.Log_UnexpecError (
4916               p_module_name    => g_module_name,
4917               p_procedure_name => l_func_name
4918           );
4919           IF FND_MSG_PUB.Check_Msg_Level(
4920             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
4921         ) THEN
4922             FND_MSG_PUB.Add_Exc_Msg(
4923                 p_pkg_name       => g_pkg_name,
4924                 p_procedure_name => l_func_name
4925             );
4926         END IF;
4927     RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
4928 END Validate_MatchChLnTpID;
4929 -- Funct name : Validate_MatchFlags
4930 -- Type       : Private
4931 -- Function   : Validate Matching Flags
4932 --
4933 -- Pre-reqs   : None
4934 -- Parameters :
4935 -- IN         : p_match_int_id               IN NUMBER
4936 --              p_match_type_code            IN VARCHAR2
4937 --              p_parent_match_type_code     IN VARCHAR2
4938 --              p_replace_estim_qty_flag     IN VARCHAR2
4939 --              p_existing_match_info_flag   IN VARCHAR2
4940 --
4941 -- OUT        : x_return_status              OUT NOCOPY VARCHAR2
4942 --
4943 -- Version    : Current version 1.0
4944 --
4945 -- Notes      :
4946 FUNCTION Validate_MatchFlags(
4947     p_match_int_id             IN NUMBER,
4948     p_match_type_code          IN VARCHAR2,
4949     p_parent_match_type_code   IN VARCHAR2,
4950     p_replace_estim_qty_flag   IN VARCHAR2,
4951     p_existing_match_info_flag IN VARCHAR2,
4952     x_return_status            OUT NOCOPY VARCHAR2
4953 ) RETURN BOOLEAN IS
4954     l_func_name     CONSTANT VARCHAR2(30) := 'Validate_MatchFlags';
4955     l_debug_info    VARCHAR2(400) ;
4956     l_return_status VARCHAR2(1) ;
4957     l_result        VARCHAR2(1) := FND_API.G_TRUE;
4958 BEGIN
4959     -- Standard Beginning of Procedure/Function Logging
4960     INL_LOGGING_PVT.Log_BeginProc(
4961         p_module_name    => g_module_name,
4962         p_procedure_name => l_func_name
4963     ) ;
4964     --  Initialize API return status to success
4965     x_return_status := FND_API.G_RET_STS_SUCCESS;
4966     l_debug_info    := 'Check if replace_estim_qty_flag = "Y" and it is not about an ITEM match';
4967     INL_LOGGING_PVT.Log_Statement(
4968         p_module_name      => g_module_name,
4969         p_procedure_name   => l_func_name,
4970         p_debug_info       => l_debug_info
4971     ) ;
4972     IF p_replace_estim_qty_flag = 'Y' THEN
4973         IF NVL(p_parent_match_type_code, p_match_type_code) <> 'ITEM' THEN
4974             l_result          := FND_API.G_FALSE;
4975             -- Add a line into inl_ship_errors
4976             Handle_InterfError(
4977                 p_parent_table_name  => 'INL_MATCHES_INT',
4978                 p_parent_table_id    => p_match_int_id,
4979                 p_column_name        => 'REPLACE_ESTIM_QTY_FLAG',
4980                 p_column_value       => p_replace_estim_qty_flag,
4981                 p_error_message_name => 'INL_ERR_OI_CHK_RPL_EST_QT_FLAG',
4982                 p_token1_name        => 'MATCH_INT_ID',
4983                 p_token1_value       => p_match_int_id,
4984                 x_return_status      => l_return_status) ;
4985             -- If unexpected errors happen abort
4986             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4987                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4988             END IF;
4989         END IF;
4990     END IF;
4991     -- Standard End of Procedure/Function Logging
4992     INL_LOGGING_PVT.Log_EndProc(
4993         p_module_name    => g_module_name,
4994         p_procedure_name => l_func_name
4995     );
4996     RETURN FND_API.to_boolean(l_result) ;
4997 EXCEPTION
4998     WHEN FND_API.G_EXC_ERROR THEN
4999         -- Standard Expected Error Logging
5000         INL_LOGGING_PVT.Log_ExpecError (
5001             p_module_name    => g_module_name,
5002             p_procedure_name => l_func_name
5003         );
5004         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
5005     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5006         -- Standard Unexpected Error Logging
5007         INL_LOGGING_PVT.Log_UnexpecError (
5008             p_module_name    => g_module_name,
5009             p_procedure_name => l_func_name
5010         );
5011         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
5012     WHEN OTHERS THEN
5013         -- Standard Unexpected Error Logging
5014         INL_LOGGING_PVT.Log_UnexpecError (
5015             p_module_name    => g_module_name,
5016             p_procedure_name => l_func_name
5017         );
5018         IF FND_MSG_PUB.Check_Msg_Level(
5019             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
5020         ) THEN
5021             FND_MSG_PUB.Add_Exc_Msg(
5022                 p_pkg_name       => g_pkg_name,
5023                 p_procedure_name => l_func_name
5024             );
5025         END IF;
5026         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
5027 END Validate_MatchFlags;
5028 -- Funct name : Validate_MatchQty
5029 -- Type       : Private
5030 -- Function   : Validate a given Match Quantity
5031 --
5032 -- Pre-reqs   : None
5033 -- Parameters :
5034 -- IN         : p_match_int_id           IN NUMBER
5035 --              p_corrected_match_id     IN NUMBER
5036 --              p_updated_match_id       IN NUMBER
5037 --              p_ship_line_id           IN NUMBER
5038 --              p_matched_qty            IN NUMBER
5039 --              p_matched_uom_code       IN VARCHAR2
5040 --              p_replace_estim_qty_flag IN VARCHAR2
5041 --              p_match_type_code        IN VARCHAR2
5042 --
5043 -- OUT        : x_return_status          IN OUT NOCOPY VARCHAR2
5044 --
5045 -- Version    : Current version 1.0
5046 --
5047 -- Notes      :
5048 FUNCTION Validate_MatchQty(
5049     p_match_int_id           IN NUMBER,
5050     p_corrected_match_id     IN NUMBER,
5051     p_updated_match_id       IN NUMBER,
5052     p_ship_line_id           IN NUMBER,
5053     p_matched_qty            IN NUMBER,
5054     p_matched_uom_code       IN VARCHAR2,
5055     p_replace_estim_qty_flag IN VARCHAR2,
5056     p_match_type_code        IN VARCHAR2,
5057     x_return_status          OUT NOCOPY VARCHAR2
5058 ) RETURN BOOLEAN IS
5059     l_func_name     CONSTANT VARCHAR2(30) := 'Validate_MatchQty';
5060     l_debug_info    VARCHAR2(400) ;
5061     l_return_status VARCHAR2(1) ;
5062     l_result        VARCHAR2(1) := FND_API.G_TRUE;
5063     CURSOR processed_matches
5064     IS
5065          SELECT m1.match_id,
5066             m1.matched_qty ,
5067             m1.matched_uom_code
5068          FROM inl_corr_matches_v m1
5069          WHERE m1.to_parent_table_name   = 'INL_SHIP_LINES'
5070          AND m1.to_parent_table_id     = p_ship_line_id
5071          AND m1.match_type_code        = 'ITEM'
5072          AND m1.replace_estim_qty_flag = 'N'
5073          -- In case of resubmit the same actual value more than once, the
5074          -- new line is created as existing_match_info_flag = 'Y'.
5075          -- For checking purposes, it will consider only the latest record
5076          AND m1.match_id IN (SELECT MAX(m2.match_id)
5077                              FROM inl_corr_matches_v m2
5078                              WHERE m2.to_parent_table_name   = m1.to_parent_table_name
5079                              AND m2.to_parent_table_id     = m1.to_parent_table_id
5080                              AND m2.from_parent_table_name = m1.from_parent_table_name
5081                              AND m2.from_parent_table_id   = m1.from_parent_table_id
5082                              AND m2.match_type_code        = 'ITEM'
5083                              AND m2.replace_estim_qty_flag = 'N'
5084                             )
5085     ;
5086 
5087     TYPE processed_matches_List_Type IS TABLE OF processed_matches%ROWTYPE;
5088     processed_matches_List processed_matches_List_Type;
5089     CURSOR OI_matches
5090     IS
5091         SELECT m1.transaction_type,
5092             m1.match_type_code    ,
5093             m1.match_int_id       ,
5094             m1.matched_qty        ,
5095             m1.matched_uom_code   ,
5096             m1.replace_estim_qty_flag
5097         FROM inl_matches_int m1
5098         WHERE m1.to_parent_table_name   = 'INL_SHIP_LINES'
5099         AND m1.to_parent_table_id     = p_ship_line_id
5100         AND m1.match_int_id          <> NVL(p_updated_match_id, 0)
5101         AND m1.processing_status_code = 'RUNNING'
5102         ORDER BY m1.match_int_id
5103     ;
5104 
5105     TYPE OI_matches_List_Type IS TABLE OF OI_matches%ROWTYPE;
5106     OI_matches_List OI_matches_List_Type;
5107     l_ship_header_id     NUMBER;
5108     l_ship_line_num      NUMBER;
5109     l_ship_line_group_id NUMBER;
5110     l_qty                NUMBER;
5111     l_actual_qty         NUMBER := 0;
5112     l_aux_qty            NUMBER;
5113     l_match_qty          NUMBER;
5114     l_UOM_code           VARCHAR2(3) ;
5115     l_organization_id    NUMBER;
5116     l_inventory_item_id  NUMBER;
5117     l_matches            VARCHAR2(20000);
5118     l_unproc_actual_qty  NUMBER;
5119     l_unproc_UOM_code    VARCHAR2(3);
5120     l_unproc_match_id    NUMBER;
5121     OI_matches_qty       NUMBER;
5122     OI_matches_UOM_code  VARCHAR2(3);
5123     OI_match_type_code   VARCHAR2(30);
5124 BEGIN
5125     -- Standard Beginning of Procedure/Function Logging
5126     INL_LOGGING_PVT.Log_BeginProc(
5127         p_module_name    => g_module_name,
5128         p_procedure_name => l_func_name
5129     ) ;
5130     --  Initialize API return status to success
5131     x_return_status := FND_API.G_RET_STS_SUCCESS;
5132     -- Get ship_header_id and the ship_line_num from Shipment Lines table
5133     -- to be used as criteria in the search for estimated values(Adjustment View)
5134     l_debug_info := 'Getting from ADJ View the total QTY';
5135     INL_LOGGING_PVT.Log_Statement(
5136         p_module_name      => g_module_name,
5137         p_procedure_name   => l_func_name,
5138         p_debug_info       => l_debug_info
5139     ) ;
5140     SELECT ship_header_id,
5141        ship_line_num     ,
5142        inventory_item_id ,
5143        ship_line_group_id
5144     INTO l_ship_header_id,
5145        l_ship_line_num     ,
5146        l_inventory_item_id ,
5147        l_ship_line_group_id
5148     FROM inl_ship_lines sl
5149     WHERE ship_line_id = p_ship_line_id;
5150     -- Get Organization_Id for UOM conversion purpose
5151     SELECT organization_id
5152     INTO l_organization_id
5153     FROM inl_ship_headers
5154     WHERE ship_header_id = l_ship_header_id;
5155 
5156     l_debug_info := 'Get from Adjustment View the TXN_QTY and TXN_UOM_CODE';
5157     INL_LOGGING_PVT.Log_Statement(
5158         p_module_name      => g_module_name,
5159         p_procedure_name   => l_func_name,
5160         p_debug_info       => l_debug_info
5161     ) ;
5162     SELECT txn_qty,
5163            txn_uom_code
5164     INTO l_qty,
5165          l_uom_code
5166     FROM inl_adj_ship_lines_v sl
5167     WHERE sl.ship_header_id = l_ship_header_id
5168     AND sl.ship_line_group_id = l_ship_line_group_id
5169     AND sl.ship_line_num      = l_ship_line_num;
5170 
5171     INL_LOGGING_PVT.Log_Variable(
5172         p_module_name    => g_module_name,
5173         p_procedure_name => l_func_name,
5174         p_var_name       => 'l_qty',
5175         p_var_value      => l_qty
5176     ) ;
5177     INL_LOGGING_PVT.Log_Variable(
5178         p_module_name    => g_module_name,
5179         p_procedure_name => l_func_name,
5180         p_var_name       => 'l_UOM_code',
5181         p_var_value      => l_UOM_code
5182     ) ;
5183     -- Check if there is any match line as
5184     -- replace_estim_qty_flag = 'Y' and adj_already_generated_flag = 'N'
5185     -- In this case it will affect the estimated quantity when processed
5186     l_debug_info := 'Get values from unprocessed matches';
5187     INL_LOGGING_PVT.Log_Statement(
5188         p_module_name      => g_module_name,
5189         p_procedure_name   => l_func_name,
5190         p_debug_info       => l_debug_info
5191     ) ;
5192     BEGIN
5193         SELECT m1.matched_qty,
5194                m1.matched_uom_code,
5195                m1.match_id
5196         INTO l_unproc_actual_qty,
5197              l_unproc_uom_code,
5198              l_unproc_match_id
5199         FROM inl_corr_matches_v m1
5200         WHERE m1.to_parent_table_name = 'INL_SHIP_LINES'
5201         AND m1.to_parent_table_id = p_ship_line_id
5202         AND m1.match_type_code = 'ITEM'
5203         AND m1.replace_estim_qty_flag = 'Y'
5204         AND m1.adj_already_generated_flag = 'N'
5205         -- For checking purposes, it will consider only
5206         -- the latest and not processed record
5207         AND m1.match_id IN (SELECT MAX(m2.match_id)
5208                             FROM inl_corr_matches_v m2
5209                             WHERE m2.to_parent_table_name     = m1.to_parent_table_name
5210                             AND m2.to_parent_table_id         = m1.to_parent_table_id
5211                             AND m2.match_type_code            = 'ITEM'
5212                             AND m2.replace_estim_qty_flag     = 'Y'
5213                             AND m2.adj_already_generated_flag = 'N'
5214                             )
5215         ;
5216         l_qty        := l_unproc_actual_qty;
5217         l_UOM_code   := l_unproc_UOM_code;
5218         l_debug_info := 'Unprocessed value as replace_estim_qty_flag = Y:';
5219         INL_LOGGING_PVT.Log_Statement(
5220             p_module_name    => g_module_name,
5221             p_procedure_name => l_func_name,
5222             p_debug_info     => l_debug_info
5223         ) ;
5224         INL_LOGGING_PVT.Log_Variable(
5225             p_module_name    => g_module_name,
5226             p_procedure_name => l_func_name,
5227             p_var_name       => 'l_qty',
5228             p_var_value      => l_qty
5229         ) ;
5230         INL_LOGGING_PVT.Log_Variable(
5231             p_module_name    => g_module_name,
5232             p_procedure_name => l_func_name,
5233             p_var_name       => 'l_uom_code',
5234             p_var_value      => l_uom_code
5235         ) ;
5236         IF p_updated_match_id = l_unproc_match_id THEN
5237             l_qty := p_matched_qty;
5238             l_UOM_code := p_matched_uom_code;
5239             l_debug_info := 'Unprocessed value will be updated by the current record(replace_estim_qty_flag = Y):';
5240             INL_LOGGING_PVT.Log_Statement(
5241                 p_module_name      => g_module_name,
5242                 p_procedure_name   => l_func_name,
5243                 p_debug_info       => l_debug_info
5244             ) ;
5245                     INL_LOGGING_PVT.Log_Variable(
5246                         p_module_name    => g_module_name,
5247                         p_procedure_name => l_func_name,
5248                         p_var_name       => 'l_qty',
5249                         p_var_value      => l_qty
5250                     ) ;
5251                     INL_LOGGING_PVT.Log_Variable(
5252                         p_module_name    => g_module_name,
5253                         p_procedure_name => l_func_name,
5254                         p_var_name       => 'l_UOM_code',
5255                         p_var_value      => l_UOM_code
5256                     ) ;
5257         END IF;
5258     EXCEPTION
5259     WHEN NO_DATA_FOUND THEN
5260         NULL;
5261     END;
5262     -- Check if there is any match line as
5263     -- replace_estim_qty_flag = 'N' and adj_already_generated_flag = 'N'
5264     l_debug_info := 'Get actual values from unprocessed matches';
5265     INL_LOGGING_PVT.Log_Statement(
5266         p_module_name      => g_module_name,
5267         p_procedure_name   => l_func_name,
5268         p_debug_info       => l_debug_info
5269     ) ;
5270     BEGIN
5271         SELECT SUM(decode(m1.matched_uom_code,
5272                           l_uom_code, m1.matched_qty,
5273                           NVL(inl_landedcost_pvt.Converted_Qty(l_organization_id,
5274                                                                l_inventory_item_id,
5275                                                                m1.matched_qty,
5276                                                                m1.matched_uom_code,
5277                                                                l_uom_code
5278                                                               )
5279                              ,0)
5280                          )
5281                   )
5282         INTO l_unproc_actual_qty
5283         FROM inl_corr_matches_v m1
5284         WHERE m1.to_parent_table_name = 'INL_SHIP_LINES'
5285         AND m1.to_parent_table_id     = p_ship_line_id
5286         AND m1.match_type_code        = 'ITEM'
5287         AND m1.replace_estim_qty_flag = 'N'
5288         AND m1.adj_already_generated_flag = 'N'
5289         ;
5290         l_debug_info := 'Actuals from unprocessed Matches(replace_estim_qty_flag = N):';
5291         INL_LOGGING_PVT.Log_Statement(
5292             p_module_name      => g_module_name,
5293             p_procedure_name   => l_func_name,
5294             p_debug_info       => l_debug_info
5295         ) ;
5296         INL_LOGGING_PVT.Log_Variable(
5297             p_module_name    => g_module_name,
5298             p_procedure_name => l_func_name,
5299             p_var_name       => 'l_unproc_actual_qty',
5300             p_var_value      => l_unproc_actual_qty
5301         ) ;
5302         l_actual_qty := l_actual_qty + l_unproc_actual_qty;
5303     EXCEPTION
5304         WHEN NO_DATA_FOUND THEN
5305             NULL;
5306     END;
5307     l_debug_info := 'Get values from processed matches';
5308     INL_LOGGING_PVT.Log_Statement(
5309         p_module_name      => g_module_name,
5310         p_procedure_name   => l_func_name,
5311         p_debug_info       => l_debug_info
5312     ) ;
5313     OPEN processed_matches;
5314     FETCH processed_matches BULK COLLECT INTO processed_matches_List;
5315     CLOSE processed_matches;
5316     IF NVL(processed_matches_List.LAST, 0) > 0 THEN
5317         FOR iMat IN NVL(processed_matches_List.FIRST, 0)..NVL(processed_matches_List.LAST, 0)
5318         LOOP
5319             IF NVL(processed_matches_List(iMat).matched_qty, 0) <> 0 THEN
5320                 l_matches := l_matches ||processed_matches_List(iMat) .match_id||', ';
5321                 IF processed_matches_List(iMat).matched_uom_code <> l_UOM_code THEN
5322                     l_actual_qty := NVL(l_actual_qty, 0) +
5323                                     NVL(inl_landedcost_pvt.Converted_Qty( p_organization_id => l_organization_id,
5324                                                                           p_inventory_item_id => l_inventory_item_id,
5325                                                                           p_qty => processed_matches_List(iMat) .matched_qty,
5326                                                                           p_from_uom_code => processed_matches_List(iMat) .matched_uom_code,
5327                                                                           P_to_uom_code => l_UOM_code), 0) ;
5328                 ELSE
5329                     l_actual_qty := NVL(l_actual_qty, 0) + NVL(processed_matches_List(iMat).matched_qty, 0) ;
5330                 END IF;
5331             END IF;
5332         END LOOP;
5333     END IF;
5334     l_debug_info := 'Actuals from processed matches:';
5335     INL_LOGGING_PVT.Log_Statement(
5336         p_module_name      => g_module_name,
5337         p_procedure_name   => l_func_name,
5338         p_debug_info       => l_debug_info
5339     ) ;
5340     INL_LOGGING_PVT.Log_Variable(
5341         p_module_name    => g_module_name,
5342         p_procedure_name => l_func_name,
5343         p_var_name       => 'l_actual_qty',
5344         p_var_value      => l_actual_qty
5345     ) ;
5346     l_debug_info := 'Get values from not interfaced matches';
5347     INL_LOGGING_PVT.Log_Statement(
5348         p_module_name      => g_module_name,
5349         p_procedure_name   => l_func_name,
5350         p_debug_info       => l_debug_info
5351     ) ;
5352     OPEN OI_matches;
5353     FETCH OI_matches BULK COLLECT INTO OI_matches_List;
5354     CLOSE OI_matches;
5355     l_matches := l_matches ||'/ OI_mathes: ';
5356     IF NVL(OI_matches_List.LAST, 0) > 0 THEN
5357         FOR iMat IN NVL(OI_matches_List.FIRST, 0) ..NVL(OI_matches_List.LAST, 0)
5358         LOOP
5359             l_debug_info := 'Get values from not interfaced matches';
5360             INL_LOGGING_PVT.Log_Statement(
5361                 p_module_name      => g_module_name,
5362                 p_procedure_name   => l_func_name,
5363                 p_debug_info       => l_debug_info
5364             ) ;
5365             l_matches := l_matches ||OI_matches_List(iMat) .MATCH_INT_ID ;
5366             IF OI_matches_List(iMat) .replace_estim_qty_flag = 'Y' THEN
5367                 IF OI_matches_List(iMat).transaction_type <> 'DELETE' THEN
5368                     l_qty := OI_matches_List(iMat) .matched_qty;
5369                     l_UOM_code := OI_matches_List(iMat) .matched_UOM_code;
5370                     l_debug_info := 'New estimated values from match interface:';
5371                     INL_LOGGING_PVT.Log_Statement(
5372                         p_module_name      => g_module_name,
5373                         p_procedure_name   => l_func_name,
5374                         p_debug_info       => l_debug_info
5375                     ) ;
5376                     INL_LOGGING_PVT.Log_Variable(
5377                         p_module_name    => g_module_name,
5378                         p_procedure_name => l_func_name,
5379                         p_var_name       => 'l_qty',
5380                         p_var_value      => l_qty
5381                     ) ;
5382                     INL_LOGGING_PVT.Log_Variable(
5383                         p_module_name    => g_module_name,
5384                         p_procedure_name => l_func_name,
5385                         p_var_name       => 'l_uom_code',
5386                         p_var_value      => l_uom_code
5387                     ) ;
5388 
5389                 END IF;
5390             ELSIF OI_matches_List(iMat).match_type_code   = 'ITEM' THEN
5391                 IF OI_matches_List(iMat).transaction_type = 'CREATE' THEN
5392                     OI_matches_qty := OI_matches_List(iMat) .matched_qty;
5393                     OI_matches_UOM_code := OI_matches_List(iMat).matched_UOM_code;
5394                 END IF;
5395                 IF OI_matches_UOM_code <> l_UOM_code THEN
5396                     l_actual_qty := NVL(l_actual_qty, 0)
5397                                     + NVL(inl_landedcost_pvt.Converted_Qty(
5398                                               p_organization_id => l_organization_id,
5399                                               p_inventory_item_id => l_inventory_item_id,
5400                                               p_qty => OI_matches_qty,
5401                                               p_from_uom_code => OI_matches_UOM_code,
5402                                               P_to_uom_code => l_UOM_code)
5403                                     , 0)
5404                     ;
5405                 ELSE
5406                     l_actual_qty := NVL(l_actual_qty, 0) + NVL(OI_matches_qty, 0) ;
5407                 END IF;
5408             END IF;
5409             l_debug_info := 'End Loop';
5410             INL_LOGGING_PVT.Log_Statement(
5411                 p_module_name      => g_module_name,
5412                 p_procedure_name   => l_func_name,
5413                 p_debug_info       => l_debug_info
5414             );
5415                     INL_LOGGING_PVT.Log_Variable(
5416                         p_module_name    => g_module_name,
5417                         p_procedure_name => l_func_name,
5418                         p_var_name       => 'l_actual_qty',
5419                         p_var_value      => l_actual_qty
5420                     ) ;
5421 
5422         END LOOP;
5423     END IF;
5424     IF p_matched_uom_code <> l_UOM_code THEN
5425         l_match_qty := NVL(inl_landedcost_pvt.Converted_Qty(
5426                             p_organization_id   => l_organization_id,
5427                             p_inventory_item_id => l_inventory_item_id,
5428                             p_qty               => p_matched_qty,
5429                             p_from_uom_code     => p_matched_uom_code,
5430                             P_to_uom_code       => l_UOM_code), 0)
5431         ;
5432     ELSE
5433         l_match_qty := NVL(p_matched_qty, 0) ;
5434     END IF;
5435     IF p_replace_estim_qty_flag = 'Y' THEN
5436         l_qty := NVL(l_match_qty, 0) ;
5437     ELSIF p_match_type_code <> 'CORRECTION' THEN
5438         l_actual_qty := NVL(l_actual_qty, 0) + NVL(l_match_qty, 0) ;
5439     END IF;
5440     IF NVL(l_actual_qty, 0) > NVL(l_qty, 0) THEN
5441         l_result := FND_API.G_FALSE;
5442         l_debug_info := 'Insufficient estimated quantity('||l_qty||') for the actuals received('||l_actual_qty||')'|| l_matches;
5443         INL_LOGGING_PVT.Log_Statement(
5444             p_module_name      => g_module_name,
5445             p_procedure_name   => l_func_name,
5446             p_debug_info       => l_debug_info
5447         );
5448         -- Add a line into inl_ship_errors
5449         Handle_InterfError(
5450             p_parent_table_name  => 'INL_MATCHES_INT',
5451             p_parent_table_id    => p_match_int_id,
5452             p_column_name        => 'MATCHED_QTY',
5453             p_column_value       => p_matched_qty,
5454             p_error_message_name => 'INL_ERR_OI_MAT_INSUF_EST_QTY',
5455             p_token1_name        => 'EST_QTY',
5456             p_token1_value       => l_qty,
5457             p_token2_name        => 'ACT_QTY',
5458             p_token2_value       => l_actual_qty,
5459             p_token3_name        => 'MATCH_INT_ID',
5460             p_token3_value       => p_match_int_id,
5461             x_return_status      => l_return_status
5462         ) ;
5463         -- If unexpected errors happen abort
5464         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5465             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5466         END IF;
5467     END IF;
5468     l_debug_info := 'Trace: '||l_matches;
5469     INL_LOGGING_PVT.Log_Statement(
5470         p_module_name      => g_module_name,
5471         p_procedure_name   => l_func_name,
5472         p_debug_info       => l_debug_info
5473     );
5474     -- Standard End of Procedure/Function Logging
5475     INL_LOGGING_PVT.Log_EndProc(
5476         p_module_name    => g_module_name,
5477         p_procedure_name => l_func_name
5478     );
5479     RETURN FND_API.to_boolean(l_result) ;
5480 EXCEPTION
5481     WHEN FND_API.G_EXC_ERROR THEN
5482         -- Standard Expected Error Logging
5483         INL_LOGGING_PVT.Log_ExpecError (
5484             p_module_name    => g_module_name,
5485             p_procedure_name => l_func_name
5486         );
5487         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
5488     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5489         -- Standard Unexpected Error Logging
5490         INL_LOGGING_PVT.Log_UnexpecError (
5491             p_module_name    => g_module_name,
5492             p_procedure_name => l_func_name
5493         );
5494         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
5495     WHEN OTHERS THEN
5496         -- Standard Unexpected Error Logging
5497         INL_LOGGING_PVT.Log_UnexpecError (
5498             p_module_name    => g_module_name,
5499             p_procedure_name => l_func_name
5500         );
5501         IF FND_MSG_PUB.Check_Msg_Level(
5502             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
5503         ) THEN
5504             FND_MSG_PUB.Add_Exc_Msg(
5505                 p_pkg_name       => g_pkg_name,
5506                 p_procedure_name => l_func_name
5507             );
5508         END IF;
5509         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
5510 END Validate_MatchQty;
5511 -- Funct name : Validate_MatchTax
5512 -- Type       : Private
5513 -- Function   : Validate a given Match Tax
5514 --
5515 -- Pre-reqs   : None
5516 -- Parameters :
5517 -- IN         : p_match_int_id           IN NUMBER
5518 --              p_tax_code               IN VARCHAR2
5519 --              p_nrec_tax_amt           IN NUMBER
5520 --              p_tax_amt_included_flag  IN VARCHAR2
5521 --              p_matched_amt            IN NUMBER
5522 --              p_match_type_code        IN VARCHAR2
5523 --              p_parent_match_type_code IN VARCHAR2
5524 --
5525 -- OUT        : x_return_status          OUT NOCOPY VARCHAR2
5526 --
5527 -- Version    : Current version 1.0
5528 --
5529 -- Notes      :
5530 FUNCTION Validate_MatchTax(
5531     p_match_int_id           IN NUMBER,
5532     p_tax_code               IN VARCHAR2,
5533     p_nrec_tax_amt           IN NUMBER,
5534     p_tax_amt_included_flag  IN VARCHAR2,
5535     p_matched_amt            IN NUMBER,
5536     p_match_type_code        IN VARCHAR2,
5537     p_parent_match_type_code IN VARCHAR2,
5538     x_return_status          OUT NOCOPY VARCHAR2
5539 ) RETURN BOOLEAN IS
5540     l_func_name     CONSTANT VARCHAR2(30) := 'Validate_MatchTax';
5541     l_debug_info    VARCHAR2(400) ;
5542     l_return_status VARCHAR2(1) ;
5543     l_result        VARCHAR2(1) := FND_API.G_TRUE;
5544 BEGIN
5545     -- Standard Beginning of Procedure/Function Logging
5546     INL_LOGGING_PVT.Log_BeginProc(
5547         p_module_name    => g_module_name,
5548         p_procedure_name => l_func_name
5549     ) ;
5550     --  Initialize API return status to success
5551     x_return_status := FND_API.G_RET_STS_SUCCESS;
5552     IF NVL(p_parent_match_type_code, p_match_type_code) = 'TAX' THEN
5553         l_debug_info     := 'Check: The unrecoverable amount should be smaller or equal to matched amount';
5554         INL_LOGGING_PVT.Log_Statement(
5555             p_module_name      => g_module_name,
5556             p_procedure_name   => l_func_name,
5557             p_debug_info       => l_debug_info
5558         );
5559         IF (NVL(p_nrec_tax_amt, 0) > NVL(p_matched_amt, 0) --BUG#8198265
5560             AND NVL(p_nrec_tax_amt, 0) > 0)
5561             OR
5562             (NVL(p_nrec_tax_amt, 0) < NVL(p_matched_amt, 0)
5563             AND NVL(p_matched_amt, 0) < 0
5564             AND NVL(p_nrec_tax_amt, 0) < 0)
5565         THEN
5566             l_result     := FND_API.G_FALSE;
5567             -- Add a line into inl_ship_errors
5568             Handle_InterfError(
5569                 p_parent_table_name  => 'INL_MATCHES_INT',
5570                 p_parent_table_id    => p_match_int_id,
5571                 p_column_name        => 'NREC_TAX_AMT',
5572                 p_column_value       => p_nrec_tax_amt,
5573                 p_error_message_name => 'INL_ERR_OI_CHK_NREC_TAX_AMT',
5574                 p_token1_name        => 'MATCH_INT_ID',
5575                 p_token1_value       => p_match_int_id,
5576                 x_return_status      => l_return_status
5577             ) ;
5578             -- If unexpected errors happen abort
5579             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5580                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5581             END IF;
5582         END IF;
5583         l_debug_info := 'Check: TAX_CODE cannot be null';
5584         INL_LOGGING_PVT.Log_Statement(
5585             p_module_name      => g_module_name,
5586             p_procedure_name   => l_func_name,
5587             p_debug_info       => l_debug_info
5588         );
5589         IF p_tax_code                               IS NULL THEN
5590             l_result := FND_API.G_FALSE;
5591             -- Add a line into inl_ship_errors
5592             Handle_InterfError(
5593                 p_parent_table_name  => 'INL_MATCHES_INT',
5594                 p_parent_table_id    => p_match_int_id,
5595                 p_column_name        => 'TAX_CODE',
5596                 p_column_value       => p_tax_code,
5597                 p_error_message_name => 'INL_ERR_OI_CHK_TX_CODE_NULL',
5598                 p_token1_name        => 'MATCH_INT_ID',
5599                 p_token1_value       => p_match_int_id,
5600                 x_return_status      => l_return_status
5601             ) ;
5602             -- If unexpected errors happen abort
5603             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5604                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5605             END IF;
5606         END IF;
5607         l_debug_info := 'Check: TAX_AMT_INCLUDED_FLAG cannot be null';
5608         INL_LOGGING_PVT.Log_Statement(
5609             p_module_name      => g_module_name,
5610             p_procedure_name   => l_func_name,
5611             p_debug_info       => l_debug_info
5612         );
5613         IF p_tax_amt_included_flag IS NULL THEN
5614             l_result := FND_API.G_FALSE;
5615             -- Add a line into inl_ship_errors
5616             Handle_InterfError(
5617                 p_parent_table_name  => 'INL_MATCHES_INT',
5618                 p_parent_table_id    => p_match_int_id,
5619                 p_column_name        => 'TAX_AMT_INCLUDED_FLAG',
5620                 p_column_value       => p_tax_amt_included_flag,
5621                 p_error_message_name => 'INL_ERR_OI_CHK_TX_AMT_FLG_NULL',
5622                 p_token1_name        => 'MATCH_INT_ID',
5623                 p_token1_value       => p_match_int_id,
5624                 x_return_status      => l_return_status
5625             ) ;
5626             -- If unexpected errors happen abort
5627             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5628                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5629             END IF;
5630         END IF;
5631     ELSIF p_tax_amt_included_flag IS NOT NULL OR p_tax_code IS NOT NULL OR NVL(p_nrec_tax_amt, 0) <> 0 THEN
5632         l_result := FND_API.G_FALSE;
5633         -- Add a line into inl_ship_errors
5634         Handle_InterfError(
5635             p_parent_table_name  => 'INL_MATCHES_INT',
5636             p_parent_table_id    => p_match_int_id,
5637             p_column_name        => 'TAX_INT_ID',
5638             p_column_value       => p_match_int_id,
5639             p_error_message_name => 'INL_ERR_OI_CHK_TX_FIELD_NNULL',
5640             p_token1_name        => 'MATCH_INT_ID',
5641             p_token1_value       => p_match_int_id,
5642             x_return_status      => l_return_status
5643         ) ;
5644         -- If unexpected errors happen abort
5645         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5646             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5647         END IF;
5648     END IF;
5649     -- Standard End of Procedure/Function Logging
5650     INL_LOGGING_PVT.Log_EndProc(
5651         p_module_name    => g_module_name,
5652         p_procedure_name => l_func_name
5653     );
5654     RETURN FND_API.to_boolean(l_result) ;
5655 EXCEPTION
5656     WHEN FND_API.G_EXC_ERROR THEN
5657         -- Standard Expected Error Logging
5658         INL_LOGGING_PVT.Log_ExpecError (
5659             p_module_name    => g_module_name,
5660             p_procedure_name => l_func_name
5661         );
5662         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
5663     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5664         -- Standard Unexpected Error Logging
5665         INL_LOGGING_PVT.Log_UnexpecError (
5666             p_module_name    => g_module_name,
5667             p_procedure_name => l_func_name
5668         );
5669         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
5670     WHEN OTHERS THEN
5671         -- Standard Unexpected Error Logging
5672         INL_LOGGING_PVT.Log_UnexpecError (
5673             p_module_name    => g_module_name,
5674             p_procedure_name => l_func_name
5675         );
5676         IF FND_MSG_PUB.Check_Msg_Level(
5677             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
5678         ) THEN
5679             FND_MSG_PUB.Add_Exc_Msg(
5680                 p_pkg_name       => g_pkg_name,
5681                 p_procedure_name => l_func_name
5682             );
5683         END IF;
5684         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
5685 END Validate_MatchTax;
5686 -- Funct name : Validate_MatchAmt
5687 -- Type       : Private
5688 -- Function   : Validate a given Match Amount
5689 --
5690 -- Pre-reqs   : None
5691 -- Parameters :
5692 -- IN         : p_match_int_id             IN NUMBER
5693 --              p_parent_matched_curr_code IN VARCHAR2
5694 --              p_parent_match_type_code   IN VARCHAR2
5695 --              p_match_type_code          IN VARCHAR2
5696 --              p_matched_amt              IN NUMBER
5697 --              p_matched_curr_code        IN VARCHAR2
5698 --              p_matched_curr_conv_type   IN VARCHAR2
5699 --              p_matched_curr_conv_date   IN DATE
5700 --              p_matched_curr_conv_rate   IN NUMBER
5701 --              p_replace_estim_qty_flag   IN VARCHAR2
5702 --
5703 -- IN OUT     : x_return_status            OUT NOCOPY VARCHAR2
5704 --
5705 -- Version    : Current version 1.0
5706 --
5707 -- Notes      :
5708 FUNCTION Validate_MatchAmt(
5709     p_match_int_id             IN NUMBER,
5710     p_parent_matched_curr_code IN VARCHAR2,
5711     p_parent_match_type_code   IN VARCHAR2,
5712     p_match_type_code          IN VARCHAR2,
5713     p_matched_amt              IN NUMBER,
5714     p_matched_curr_code        IN VARCHAR2,
5715     p_matched_curr_conv_type   IN VARCHAR2,
5716     p_matched_curr_conv_date   IN DATE,
5717     p_matched_curr_conv_rate   IN NUMBER,
5718     p_replace_estim_qty_flag   IN VARCHAR2,
5719     x_return_status            OUT NOCOPY VARCHAR2
5720 ) RETURN BOOLEAN IS
5721     l_func_name     CONSTANT VARCHAR2(30) := 'Validate_MatchAmt';
5722     l_debug_info    VARCHAR2(400) ;
5723     l_return_status VARCHAR2(1) ;
5724     l_result        VARCHAR2(1) := FND_API.G_TRUE;
5725 BEGIN
5726     -- Standard Beginning of Procedure/Function Logging
5727     INL_LOGGING_PVT.Log_BeginProc(
5728         p_module_name    => g_module_name,
5729         p_procedure_name => l_func_name
5730     ) ;
5731     --  Initialize API return status to success
5732     x_return_status := FND_API.G_RET_STS_SUCCESS;
5733     l_debug_info := 'Check in case of correction, the currency must be the same of the original';
5734     INL_LOGGING_PVT.Log_Statement(
5735         p_module_name      => g_module_name,
5736         p_procedure_name   => l_func_name,
5737         p_debug_info       => l_debug_info
5738     );
5739     IF p_match_type_code = 'CORRECTION' THEN
5740         IF p_parent_matched_curr_code           <> p_matched_curr_code THEN
5741             l_result                            := FND_API.G_FALSE;
5742             -- Add a line into inl_ship_errors
5743             Handle_InterfError(
5744                 p_parent_table_name  => 'INL_MATCHES_INT',
5745                 p_parent_table_id    => p_match_int_id,
5746                 p_column_name        => 'MATCHED_AMT',
5747                 p_column_value       => p_matched_amt,
5748                 p_error_message_name => 'INL_ERR_OI_CHK_CURR_INV',
5749                 p_token1_name        => 'CURR1',
5750                 p_token1_value       => p_matched_curr_code,
5751                 p_token2_name        => 'CURR2',
5752                 p_token2_value       => p_parent_matched_curr_code,
5753                 p_token3_name        => 'MATCH_INT_ID',
5754                 p_token3_value       => p_match_int_id,
5755                 x_return_status      => l_return_status) ;
5756             -- If unexpected errors happen abort
5757             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5758                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5759             END IF;
5760         END IF;
5761     END IF;
5762     l_debug_info := 'When replace_estim_qty_flag = "Y", the final Amount cannot be null';
5763     INL_LOGGING_PVT.Log_Statement(
5764         p_module_name      => g_module_name,
5765         p_procedure_name   => l_func_name,
5766         p_debug_info       => l_debug_info
5767     );
5768     IF p_replace_estim_qty_flag = 'Y'
5769        AND (p_matched_amt IS NULL OR NVL(p_matched_amt, 0) < 0)
5770     THEN
5771         l_result := FND_API.G_FALSE;
5772         -- Add a line into inl_ship_errors
5773         Handle_InterfError(
5774             p_parent_table_name  => 'INL_MATCHES_INT',
5775             p_parent_table_id    => p_match_int_id,
5776             p_column_name        => 'MATCHED_AMT',
5777             p_column_value       => p_matched_amt,
5778             p_error_message_name => 'INL_ERR_OI_CHK_AMT_NULL',
5779             p_token1_name        => 'MATCH_INT_ID',
5780             p_token1_value       => p_match_int_id,
5781             x_return_status      => l_return_status
5782         ) ;
5783         -- If unexpected errors happen abort
5784         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5785             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5786         END IF;
5787     END IF;
5788     -- Standard End of Procedure/Function Logging
5789     INL_LOGGING_PVT.Log_EndProc(
5790         p_module_name    => g_module_name,
5791         p_procedure_name => l_func_name
5792     );
5793     RETURN FND_API.to_boolean(l_result) ;
5794 EXCEPTION
5795     WHEN FND_API.G_EXC_ERROR THEN
5796         -- Standard Expected Error Logging
5797         INL_LOGGING_PVT.Log_ExpecError (
5798             p_module_name    => g_module_name,
5799             p_procedure_name => l_func_name
5800         );
5801         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
5802     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5803         -- Standard Unexpected Error Logging
5804         INL_LOGGING_PVT.Log_UnexpecError (
5805             p_module_name    => g_module_name,
5806             p_procedure_name => l_func_name
5807         );
5808         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
5809     WHEN OTHERS THEN
5810         -- Standard Unexpected Error Logging
5811         INL_LOGGING_PVT.Log_UnexpecError (
5812             p_module_name    => g_module_name,
5813             p_procedure_name => l_func_name
5814         );
5815         IF FND_MSG_PUB.Check_Msg_Level(
5816             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
5817         ) THEN
5818             FND_MSG_PUB.Add_Exc_Msg(
5819                 p_pkg_name       => g_pkg_name,
5820                 p_procedure_name => l_func_name
5821             );
5822         END IF;
5823         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
5824 END Validate_MatchAmt;
5825 -- Funct name : Validate_MatchUOM
5826 -- Type       : Private
5827 -- Function   : Validate a given UOM code used by the Matching Process
5828 --
5829 -- Pre-reqs   : None
5830 -- Parameters :
5831 -- IN         : p_match_int_id              IN NUMBER
5832 --              p_matched_uom_code          IN VARCHAR2
5833 --              p_match_type_code           IN VARCHAR2
5834 --              p_parent_match_type_code    IN VARCHAR2
5835 --
5836 -- IN OUT     : x_return_status      OUT NOCOPY VARCHAR2
5837 --
5838 -- Version    : Current version 1.0
5839 --
5840 -- Notes      :
5841 FUNCTION Validate_MatchUOM(
5842     p_match_int_id           IN NUMBER,
5843     p_matched_uom_code       IN VARCHAR2,
5844     p_match_type_code        IN VARCHAR2,
5845     p_parent_match_type_code IN VARCHAR2,
5846     x_return_status          OUT NOCOPY VARCHAR2
5847 )RETURN BOOLEAN IS
5848     l_func_name     CONSTANT VARCHAR2(30) := 'Validate_MatchUOM';
5849     l_debug_info    VARCHAR2(400) ;
5850     l_return_status VARCHAR2(1) ;
5851     l_result        VARCHAR2(1) := FND_API.G_TRUE;
5852     l_uom           VARCHAR2(100) ;
5853 BEGIN
5854     -- Standard Beginning of Procedure/Function Logging
5855     INL_LOGGING_PVT.Log_BeginProc(
5856         p_module_name    => g_module_name,
5857         p_procedure_name => l_func_name
5858     ) ;
5859     --  Initialize API return status to success
5860     x_return_status := FND_API.G_RET_STS_SUCCESS;
5861     l_debug_info         := 'Validate the type of the corrected match in case of correction process.';
5862     INL_LOGGING_PVT.Log_Statement(
5863         p_module_name      => g_module_name,
5864         p_procedure_name   => l_func_name,
5865         p_debug_info       => l_debug_info
5866     );
5867     IF NVL(p_parent_match_type_code, p_match_type_code) = 'ITEM' THEN
5868         IF p_matched_uom_code IS NULL THEN
5869             l_result     := FND_API.G_FALSE;
5870             -- Add a line into inl_ship_errors
5871             Handle_InterfError(
5872                 p_parent_table_name  => 'INL_MATCHES_INT',
5873                 p_parent_table_id    => p_match_int_id,
5874                 p_column_name        => 'MATCHED_UOM_CODE',
5875                 p_column_value       => p_matched_uom_code,
5876                 p_error_message_name => 'INL_ERR_OI_CHK_UOM_NULL',
5877                 p_token1_name        => 'TYPE',
5878                 p_token1_value       => p_match_type_code,
5879                 p_token2_name        => 'MATCH_INT_ID',
5880                 p_token2_value       => p_match_int_id,
5881                 x_return_status      => l_return_status
5882             ) ;
5883             -- If unexpected errors happen abort
5884             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5885                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5886             END IF;
5887         ELSE
5888             BEGIN
5889                 -- Get UOM Code
5890                 SELECT unit_of_measure
5891                 INTO l_uom
5892                 FROM mtl_units_of_measure
5893                 WHERE uom_code = p_matched_uom_code;
5894             EXCEPTION
5895             WHEN NO_DATA_FOUND THEN
5896                 l_result := FND_API.G_FALSE;
5897                 -- Add a line into inl_ship_errors
5898                 Handle_InterfError(
5899                     p_parent_table_name  => 'INL_MATCHES_INT',
5900                     p_parent_table_id    => p_match_int_id,
5901                     p_column_name        => 'MATCHED_UOM_CODE',
5902                     p_column_value       => p_matched_uom_code,
5903                     p_error_message_name => 'INL_ERR_OI_CHK_UOM_INV',
5904                     p_token1_name        => 'MATCH_INT_ID',
5905                     p_token1_value       => p_match_int_id,
5906                     x_return_status      => l_return_status
5907                 ) ;
5908                 -- If unexpected errors happen abort
5909                 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5910                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5911                 END IF;
5912             END;
5913         END IF;
5914     ELSE
5915         IF p_matched_uom_code IS NOT NULL THEN
5916             l_result := FND_API.G_FALSE;
5917             -- Add a line into inl_ship_errors
5918             Handle_InterfError(
5919                 p_parent_table_name  => 'INL_MATCHES_INT',
5920                 p_parent_table_id    => p_match_int_id,
5921                 p_column_name        => 'MATCHED_UOM_CODE',
5922                 p_column_value       => p_matched_uom_code,
5923                 p_error_message_name => 'INL_ERR_OI_CHK_UOM_NNULL',
5924                 p_token1_name        => 'TYPE',
5925                 p_token1_value       => p_match_type_code,
5926                 p_token2_name        => 'MATCH_INT_ID',
5927                 p_token2_value       => p_match_int_id,
5928                 x_return_status      => l_return_status
5929             ) ;
5930             -- If unexpected errors happen abort
5931             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5932                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5933             END IF;
5934         END IF;
5935     END IF;
5936     -- Standard End of Procedure/Function Logging
5937     INL_LOGGING_PVT.Log_EndProc(
5938         p_module_name    => g_module_name,
5939         p_procedure_name => l_func_name
5940     );
5941     RETURN FND_API.to_boolean(l_result) ;
5942 EXCEPTION
5943     WHEN FND_API.G_EXC_ERROR THEN
5944         -- Standard Expected Error Logging
5945         INL_LOGGING_PVT.Log_ExpecError (
5946             p_module_name    => g_module_name,
5947             p_procedure_name => l_func_name
5948         );
5949         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
5950     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5951         -- Standard Unexpected Error Logging
5952         INL_LOGGING_PVT.Log_UnexpecError (
5953             p_module_name    => g_module_name,
5954             p_procedure_name => l_func_name
5955         );
5956         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
5957     WHEN OTHERS THEN
5958         -- Standard Unexpected Error Logging
5959         INL_LOGGING_PVT.Log_UnexpecError (
5960             p_module_name    => g_module_name,
5961             p_procedure_name => l_func_name
5962         );
5963         IF FND_MSG_PUB.Check_Msg_Level(
5964             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
5965         ) THEN
5966             FND_MSG_PUB.Add_Exc_Msg(
5967                 p_pkg_name       => g_pkg_name,
5968                 p_procedure_name => l_func_name
5969             );
5970         END IF;
5971         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
5972 END Validate_MatchUOM;
5973 -- Funct name : Validate_MatchMatIDS
5974 -- Type       : Private
5975 -- Function   : Validate Match Id and Parent Match Id
5976 --
5977 -- Pre-reqs   : None
5978 -- Parameters :
5979 -- IN         : p_transaction_type IN VARCHAR2
5980 --              p_match_int_id     IN NUMBER
5981 --              p_match_id         IN NUMBER
5982 --              p_parent_match_id  IN NUMBER
5983 --              p_match_type_code  IN VARCHAR2
5984 --              p_existing_match_info_flag IN VARCHAR2
5985 --
5986 -- IN OUT     : x_return_status    IN OUT NOCOPY VARCHAR2
5987 --
5988 -- Version    : Current version 1.0
5989 --
5990 -- Notes      :
5991 FUNCTION Validate_MatchMatIDS(
5992     p_transaction_type         IN VARCHAR2,
5993     p_match_int_id             IN NUMBER,
5994     p_match_id                 IN NUMBER,
5995     p_parent_match_id          IN NUMBER,
5996     p_match_type_code          IN VARCHAR2,
5997     p_existing_match_info_flag IN VARCHAR2,
5998     x_return_status            OUT NOCOPY VARCHAR2
5999 ) RETURN BOOLEAN IS
6000     l_func_name        CONSTANT VARCHAR2(30) := 'Validate_MatchMatIDS';
6001     l_debug_info       VARCHAR2(400) ;
6002     l_return_status    VARCHAR2(1) ;
6003     l_result           VARCHAR2(1) := FND_API.G_TRUE;
6004     l_adj_alr_gen_flag VARCHAR2(1) ;
6005 BEGIN
6006     -- Standard Beginning of Procedure/Function Logging
6007     INL_LOGGING_PVT.Log_BeginProc(
6008         p_module_name    => g_module_name,
6009         p_procedure_name => l_func_name
6010     ) ;
6011     --  Initialize API return status to success
6012     x_return_status := FND_API.G_RET_STS_SUCCESS;
6013     l_debug_info := 'Check: When match type code is CORRECTION, parent_match_id cannot be null';
6014     INL_LOGGING_PVT.Log_Statement(
6015         p_module_name      => g_module_name,
6016         p_procedure_name   => l_func_name,
6017         p_debug_info       => l_debug_info
6018     );
6019     IF p_match_type_code = 'CORRECTION' THEN
6020         IF p_parent_match_id IS NULL THEN
6021             l_result := FND_API.G_FALSE;
6022             -- Add a line into inl_ship_errors
6023             Handle_InterfError(
6024                 p_parent_table_name  => 'INL_MATCHES_INT',
6025                 p_parent_table_id    => p_match_int_id,
6026                 p_column_name        => 'PARENT_MATCH_ID',
6027                 p_column_value       => p_parent_match_id,
6028                 p_error_message_name => 'INL_ERR_OI_CHK_MAT_ID_NULL',
6029                 p_token1_name        => 'OPER',
6030                 p_token1_value       => p_match_type_code,
6031                 p_token2_name        => 'COL',
6032                 p_token2_value       => 'PARENT_MATCH_ID',
6033                 p_token3_name        => 'MATCH_INT_ID',
6034                 p_token3_value       => p_match_int_id,
6035                 x_return_status      => l_return_status
6036             ) ;
6037             -- If unexpected errors happen abort
6038             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6039                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6040             END IF;
6041         ELSE
6042             BEGIN
6043                  SELECT adj_already_generated_flag
6044                    INTO l_adj_alr_gen_flag
6045                    FROM inl_matches
6046                   WHERE match_id = p_parent_match_id;
6047             EXCEPTION
6048                 WHEN NO_DATA_FOUND THEN
6049                     l_result := FND_API.G_FALSE;
6050                     -- Add a line into inl_ship_errors
6051                     Handle_InterfError(
6052                         p_parent_table_name  => 'INL_MATCHES_INT',
6053                         p_parent_table_id    => p_match_int_id,
6054                         p_column_name        => 'PARENT_MATCH_ID',
6055                         p_column_value       => p_parent_match_id,
6056                         p_error_message_name => 'INL_ERR_OI_CHK_PAR_MAT_ID_NF',
6057                         p_token1_name        => 'COL_NAME',
6058                         p_token1_value       => 'PARENT_MATCH_ID',
6059                         p_token2_name        => 'COL_ID',
6060                         p_token2_value       => p_parent_match_id,
6061                         x_return_status      => l_return_status
6062                     ) ;
6063                     -- If unexpected errors happen abort
6064                     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6065                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6066                     END IF;
6067             END;
6068         END IF;
6069     ELSE -- p_match_type_code <> 'CORRECTION'
6070         IF p_parent_match_id IS NOT NULL AND p_existing_match_info_flag <> 'Y' THEN
6071             l_result := FND_API.G_FALSE;
6072             -- Add a line into inl_ship_errors
6073             Handle_InterfError(
6074                 p_parent_table_name  => 'INL_MATCHES_INT',
6075                 p_parent_table_id    => p_match_int_id,
6076                 p_column_name        => 'PARENT_MATCH_ID',
6077                 p_column_value       => p_parent_match_id,
6078                 p_error_message_name => 'INL_ERR_OI_CHK_MAT_ID_NNULL',
6079                 p_token1_name        => 'OPER',
6080                 p_token1_value       => p_match_type_code,
6081                 p_token2_name        => 'COL',
6082                 p_token2_value       => 'PARENT_MATCH_ID',
6083                 p_token3_name        => 'MATCH_INT_ID',
6084                 p_token3_value       => p_match_int_id,
6085                 x_return_status      => l_return_status
6086             ) ;
6087             -- If unexpected errors happen abort
6088             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6089                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6090             END IF;
6091         END IF;
6092         IF p_transaction_type <> 'CREATE' THEN
6093             l_debug_info := 'Check: When transaction type is not CREATE, match_id cannot be null';
6094             INL_LOGGING_PVT.Log_Statement(
6095                 p_module_name      => g_module_name,
6096                 p_procedure_name   => l_func_name,
6097                 p_debug_info       => l_debug_info
6098             );
6099             IF p_match_id IS NULL THEN
6100                 l_result := FND_API.G_FALSE;
6101                 -- Add a line into inl_ship_errors
6102                 Handle_InterfError(
6103                     p_parent_table_name  => 'INL_MATCHES_INT',
6104                     p_parent_table_id    => p_match_int_id,
6105                     p_column_name        => 'MATCH_ID',
6106                     p_column_value       => p_match_id,
6107                     p_error_message_name => 'INL_ERR_OI_CHK_MAT_ID_NULL',
6108                     p_token1_name        => 'OPER',
6109                     p_token1_value       => p_transaction_type,
6110                     p_token2_name        => 'COL',
6111                     p_token2_value       => 'MATCH_ID',
6112                     p_token3_name        => 'MATCH_INT_ID',
6113                     p_token3_value       => p_match_int_id,
6114                     x_return_status      => l_return_status
6115                 ) ;
6116                 -- If unexpected errors happen abort
6117                 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6118                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6119                 END IF;
6120             ELSE
6121                 BEGIN
6122                      SELECT adj_already_generated_flag
6123                        INTO l_adj_alr_gen_flag
6124                        FROM inl_matches
6125                       WHERE match_id = p_match_id;
6126                     IF l_adj_alr_gen_flag <> 'N' THEN
6127                         l_result := FND_API.G_FALSE;
6128                         -- Add a line into inl_ship_errors
6129                         Handle_InterfError(
6130                             p_parent_table_name  => 'INL_MATCHES_INT',
6131                             p_parent_table_id    => p_match_int_id,
6132                             p_column_name        => 'MATCH_ID',
6133                             p_column_value       => p_match_id,
6134                             p_error_message_name => 'INL_ERR_OI_CHK_MAT_ADJUSTED',
6135                             p_token1_name        => 'MATCH_INT_ID',
6136                             p_token1_value       => p_match_int_id,
6137                             x_return_status      => l_return_status
6138                         ) ;
6139                         -- If unexpected errors happen abort
6140                         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6141                             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6142                         END IF;
6143                     END IF;
6144                 EXCEPTION
6145                 WHEN NO_DATA_FOUND THEN
6146                     l_result := FND_API.G_FALSE;
6147                     -- Add a line into inl_ship_errors
6148                     Handle_InterfError(
6149                         p_parent_table_name  => 'INL_MATCHES_INT',
6150                         p_parent_table_id    => p_match_int_id,
6151                         p_column_name        => 'MATCH_ID',
6152                         p_column_value       => p_match_id,
6153                         p_error_message_name => 'INL_ERR_OI_CHK_MAT_ID_NF',
6154                         p_token1_name        => 'COL_NAME',
6155                         p_token1_value       => 'MATCH_ID',
6156                         p_token2_name        => 'COL_ID',
6157                         p_token2_value       => p_match_id,
6158                         p_token3_name        => 'MATCH_INT_ID',
6159                         p_token3_value       => p_match_int_id,
6160                         x_return_status      => l_return_status
6161                     ) ;
6162                     -- If unexpected errors happen abort
6163                     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6164                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6165                     END IF;
6166                 END;
6167             END IF;
6168         END IF;
6169     END IF;
6170     -- Standard End of Procedure/Function Logging
6171     INL_LOGGING_PVT.Log_EndProc(
6172         p_module_name    => g_module_name,
6173         p_procedure_name => l_func_name
6174     );
6175     RETURN FND_API.to_boolean(l_result) ;
6176 EXCEPTION
6177     WHEN FND_API.G_EXC_ERROR THEN
6178         -- Standard Expected Error Logging
6179         INL_LOGGING_PVT.Log_ExpecError (
6180             p_module_name    => g_module_name,
6181             p_procedure_name => l_func_name
6182         );
6183         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
6184     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6185         -- Standard Unexpected Error Logging
6186         INL_LOGGING_PVT.Log_UnexpecError (
6187             p_module_name    => g_module_name,
6188             p_procedure_name => l_func_name
6189         );
6190         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
6191     WHEN OTHERS THEN
6192       -- Standard Unexpected Error Logging
6193         INL_LOGGING_PVT.Log_UnexpecError (
6194             p_module_name    => g_module_name,
6195             p_procedure_name => l_func_name
6196         );
6197         IF FND_MSG_PUB.Check_Msg_Level(
6198             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
6199         ) THEN
6200             FND_MSG_PUB.Add_Exc_Msg(
6201                 p_pkg_name       => g_pkg_name,
6202                 p_procedure_name => l_func_name
6203             );
6204         END IF;
6205         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
6206 END Validate_MatchMatIDS;
6207 -- Funct name : Validate_MatchToParTab
6208 -- Type       : Private
6209 -- Function   : Validate Match To_Parent values
6210 --
6211 -- Pre-reqs   : None
6212 -- Parameters :
6213 -- IN         : p_transaction_type      IN VARCHAR2
6214 --              p_match_int_id          IN NUMBER
6215 --              p_match_id              IN NUMBER
6216 --              p_parent_match_id       IN NUMBER
6217 --              p_ship_header_id        IN NUMBER
6218 --              p_to_parent_table_name  IN VARCHAR2
6219 --              p_to_parent_table_id    IN NUMBER
6220 --              p_match_type_code       IN VARCHAR2
6221 --
6222 -- IN OUT     : x_return_status         OUT NOCOPY VARCHAR2
6223 --
6224 -- Version    : Current version 1.0
6225 --
6226 -- Notes      :
6227 FUNCTION Validate_MatchToParTab(
6228     p_transaction_type     IN VARCHAR2,
6229     p_match_int_id         IN NUMBER,
6230     p_match_id             IN NUMBER,
6231     p_parent_match_id      IN NUMBER,
6232     p_ship_header_id       IN NUMBER,
6233     p_to_parent_table_name IN VARCHAR2,
6234     p_to_parent_table_id   IN NUMBER,
6235     p_match_type_code      IN VARCHAR2,
6236     x_return_status        OUT NOCOPY VARCHAR2
6237 ) RETURN BOOLEAN IS
6238     l_func_name      CONSTANT VARCHAR2(30) := 'Validate_MatchToParTab';
6239     l_debug_info     VARCHAR2(400) ;
6240     l_return_status  VARCHAR2(1) ;
6241     l_result         VARCHAR2(1) := FND_API.G_TRUE;
6242     l_ship_header_id NUMBER;
6243     l_ship_line_id NUMBER;
6244     l_ship_header_id_tab inl_int_table := inl_int_table() ;
6245     l_nameOk         VARCHAR2(1) ;
6246     l_idOk           VARCHAR2(1) ;
6247     l_SHidOk         VARCHAR2(1) ;
6248     l_INT_importedOk VARCHAR2(1) ;
6249     l_matchTpCdOk    VARCHAR2(1) ;
6250 BEGIN
6251     -- Standard Beginning of Procedure/Function Logging
6252     INL_LOGGING_PVT.Log_BeginProc(
6253         p_module_name    => g_module_name,
6254         p_procedure_name => l_func_name
6255     ) ;
6256     --  Initialize API return status to success
6257     x_return_status                             := FND_API.G_RET_STS_SUCCESS;
6258     l_debug_info := 'Check to_parent_table value and all related information.';
6259     INL_LOGGING_PVT.Log_Statement(
6260         p_module_name      => g_module_name,
6261         p_procedure_name   => l_func_name,
6262         p_debug_info       => l_debug_info
6263     );
6264     l_nameOk          := 'N';
6265     l_idOk            := 'N';
6266     l_SHidOk          := 'N';
6267     l_matchTpCdOk     := 'N';
6268     l_INT_importedOk  := 'N';
6269     INL_LOGGING_PVT.Log_Variable(
6270         p_module_name    => g_module_name,
6271         p_procedure_name => l_func_name,
6272         p_var_name       => 'p_to_parent_table_name',
6273         p_var_value      => p_to_parent_table_name
6274     ) ;
6275 
6276     INL_LOGGING_PVT.Log_Variable(
6277         p_module_name    => g_module_name,
6278         p_procedure_name => l_func_name,
6279         p_var_name       => 'p_transaction_type',
6280         p_var_value      => p_transaction_type
6281     ) ;
6282 
6283     INL_LOGGING_PVT.Log_Variable(
6284         p_module_name    => g_module_name,
6285         p_procedure_name => l_func_name,
6286         p_var_name       => 'p_match_type_code',
6287         p_var_value      => p_match_type_code
6288     ) ;
6289 
6290     IF p_to_parent_table_name IN('INL_SHIP_HEADERS',
6291                                  'INL_SHIP_LINES',
6292                                  'INL_SHIP_LINE_GROUPS',
6293                                  'INL_CHARGE_LINES',
6294                                  'INL_TAX_LINES',
6295                                  'RCV_TRANSACTIONS'
6296                                  )
6297     OR (p_transaction_type = 'CREATE'
6298         AND p_to_parent_table_name IN('INL_SHIP_LINES_INT',
6299                                       'INL_SHIP_HEADERS_INT')
6300        )
6301     OR(p_match_type_code = 'CORRECTION'
6302        AND p_to_parent_table_name IN('AP_INVOICE_DISTRIBUTIONS')
6303       )
6304     THEN
6305         l_nameOk := 'Y';
6306         BEGIN
6307             IF p_to_parent_table_name = 'INL_SHIP_HEADERS' THEN
6308                 l_INT_importedOk     := 'Y';
6309                 SELECT ship_header_id
6310                 INTO l_ship_header_id
6311                 FROM inl_ship_headers
6312                 WHERE ship_header_id = p_to_parent_table_id;
6313                 IF p_match_type_code   = 'CHARGE' THEN
6314                     l_matchTpCdOk     := 'Y';
6315                 END IF;
6316             ELSIF p_to_parent_table_name = 'INL_SHIP_LINES' THEN
6317                 l_INT_importedOk        := 'Y';
6318                 SELECT ship_header_id
6319                 INTO l_ship_header_id
6320                 FROM inl_ship_lines
6321                 WHERE ship_line_id  = p_to_parent_table_id;
6322                 IF p_match_type_code IN('ITEM', 'CHARGE', 'TAX') THEN
6323                     l_matchTpCdOk    := 'Y';
6324                 END IF;
6325             ELSIF p_to_parent_table_name = 'INL_SHIP_LINE_GROUPS' THEN
6326                 l_INT_importedOk        := 'Y';
6327                 SELECT ship_header_id
6328                 INTO l_ship_header_id
6329                 FROM inl_ship_line_groups
6330                 WHERE ship_line_group_id = p_to_parent_table_id;
6331                 IF p_match_type_code       = 'CHARGE' THEN
6332                     l_matchTpCdOk         := 'Y';
6333                 END IF;
6334             ELSIF p_to_parent_table_name = 'INL_CHARGE_LINES' THEN
6335                 l_INT_importedOk        := 'Y';
6336                 l_ship_header_id_tab.DELETE;
6337                 SELECT DISTINCT(a.ship_header_id) BULK COLLECT
6338                 INTO l_ship_header_id_tab
6339                 FROM inl_charge_lines c,
6340                 inl_associations a
6341                 WHERE c.charge_line_id              = p_to_parent_table_id
6342                 AND a.from_parent_table_name      = 'INL_CHARGE_LINES'
6343                 AND a.from_parent_table_id        = c.charge_line_id;
6344                 IF NVL(l_ship_header_id_tab.LAST, 0) = 1 THEN
6345                     l_ship_header_id                 := l_ship_header_id_tab(1) ;
6346                 END IF;
6347                 IF p_match_type_code IN('CHARGE', 'TAX') THEN
6348                     l_matchTpCdOk    := 'Y';
6349                 END IF;
6350             ELSIF p_to_parent_table_name = 'INL_TAX_LINES' THEN
6351                 l_INT_importedOk        := 'Y';
6352                 SELECT ship_header_id
6353                 INTO l_ship_header_id
6354                 FROM inl_tax_lines
6355                 WHERE tax_line_id   = p_to_parent_table_id;
6356                 IF p_match_type_code IN('TAX') THEN
6357                     l_matchTpCdOk    := 'Y';
6358                 END IF;
6359             ELSIF p_to_parent_table_name = 'INL_SHIP_LINES_INT' THEN
6360                 SELECT ship_header_id
6361                 INTO l_ship_header_id
6362                 FROM inl_ship_lines_int
6363                 WHERE ship_line_int_id = p_to_parent_table_id;
6364                 IF p_match_type_code IN('ITEM', 'CHARGE', 'TAX') THEN
6365                     l_matchTpCdOk       := 'Y';
6366                 END IF;
6367                 -- Check if the Interface has been imported
6368                 SELECT ship_header_id
6369                 INTO l_ship_header_id
6370                 FROM inl_ship_lines
6371                 WHERE ship_line_int_id = p_to_parent_table_id;
6372 
6373                 l_INT_importedOk        := 'Y';
6374             ELSIF p_to_parent_table_name = 'INL_SHIP_HEADERS_INT' THEN
6375                 SELECT ship_header_id
6376                 INTO l_ship_header_id
6377                 FROM inl_ship_headers_int
6378                 WHERE ship_header_int_id = p_to_parent_table_id;
6379                 IF p_match_type_code      IN('CHARGE') THEN
6380                     l_matchTpCdOk         := 'Y';
6381                 END IF;
6382                 -- Check if the Interface record has been imported
6383                 SELECT ship_header_id
6384                 INTO l_ship_header_id
6385                 FROM inl_ship_headers
6386                 WHERE ship_header_int_id = p_to_parent_table_id;
6387                 l_INT_importedOk := 'Y';
6388             ELSIF p_to_parent_table_name = 'RCV_TRANSACTIONS' THEN
6389                 l_INT_importedOk        := 'Y';
6390                 SELECT  lcm_shipment_line_id
6391                 INTO l_ship_line_id
6392                 FROM rcv_transactions rt
6393                 WHERE rt.transaction_id = p_to_parent_table_id;
6394                SELECT ship_header_id
6395                 INTO l_ship_header_id
6396                 FROM inl_ship_lines
6397                 WHERE ship_line_id  = l_ship_line_id;
6398                 IF p_match_type_code IN('ITEM', 'CHARGE', 'TAX') THEN
6399                     l_matchTpCdOk    := 'Y';
6400                 END IF;
6401             ELSE -- In case of correction, the table is out of LCM limit
6402                 l_idOk           := 'Y';
6403                 l_INT_importedOk := 'Y';
6404                 SELECT ship_header_id
6405                 INTO l_ship_header_id
6406                 FROM inl_matches
6407                 WHERE match_id     = p_parent_match_id;
6408                 IF p_match_type_code = 'CORRECTION' THEN
6409                     l_matchTpCdOk   := 'Y';
6410                 END IF;
6411             END IF;
6412             l_idOk              := 'Y';
6413             IF p_ship_header_id IS NULL OR l_ship_header_id = p_ship_header_id THEN
6414                 l_SHidOk        := 'Y';
6415             END IF;
6416         EXCEPTION
6417         WHEN NO_DATA_FOUND THEN
6418             NULL;
6419         END;
6420     END IF;
6421     IF(l_nameOk  = 'N') THEN
6422         l_result := FND_API.G_FALSE;
6423         -- Add a line into inl_ship_errors
6424         Handle_InterfError(
6425             p_parent_table_name  => 'INL_MATCHES_INT',
6426             p_parent_table_id    => p_match_int_id,
6427             p_column_name        => 'TO_PARENT_TABLE_NAME',
6428             p_column_value       => p_to_parent_table_name,
6429             p_error_message_name => 'INL_ERR_OI_CHK_TO_PAR_TAB_NAME',
6430             p_token1_name        => 'NAME',
6431             p_token1_value       => 'INL_MATCHES_INT',
6432             p_token2_name        => 'ID',
6433             p_token2_value       => p_match_int_id,
6434             x_return_status      => l_return_status
6435         ) ;
6436         -- If unexpected errors happen abort
6437 
6438         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6439             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6440         END IF;
6441     ELSIF(l_idOk = 'N') THEN
6442         l_result := FND_API.G_FALSE;
6443         -- Add a line into inl_ship_errors
6444         Handle_InterfError(
6445             p_parent_table_name  => 'INL_MATCHES_INT',
6446             p_parent_table_id    => p_match_int_id,
6447             p_column_name        => 'TO_PARENT_TABLE_NAME',
6448             p_column_value       => p_to_parent_table_name,
6449             p_error_message_name => 'INL_ERR_OI_CHK_TO_PAR_TAB_ID',
6450             p_token1_name        => 'NAME',
6451             p_token1_value       => 'INL_MATCHES_INT',
6452             p_token2_name        => 'ID',
6453             p_token2_value       => p_match_int_id,
6454             x_return_status      => l_return_status
6455         ) ;
6456         -- If unexpected errors happen abort
6457         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6458             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6459         END IF;
6460     ELSE
6461         IF(l_SHidOk  = 'N') THEN
6462             l_result := FND_API.G_FALSE;
6463             -- Add a line into inl_ship_errors
6464             Handle_InterfError(
6465                 p_parent_table_name  => 'INL_MATCHES_INT',
6466                 p_parent_table_id    => p_match_int_id,
6467                 p_column_name        => 'SHIP_HEADER_ID',
6468                 p_column_value       => p_ship_header_id,
6469                 p_error_message_name => 'INL_ERR_OI_CHK_SHIP_HEADER_ID',
6470                 p_token1_name        => 'NAME',
6471                 p_token1_value       => 'INL_MATCHES_INT',
6472                 p_token2_name        => 'ID',
6473                 p_token2_value       => p_match_int_id,
6474                 x_return_status      => l_return_status) ;
6475             -- If unexpected errors happen abort
6476             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6477                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6478             END IF;
6479         END IF;
6480         IF(l_matchTpCdOk = 'N') THEN
6481             l_result     := FND_API.G_FALSE;
6482             -- Add a line into inl_ship_errors
6483             Handle_InterfError(
6484                 p_parent_table_name  => 'INL_MATCHES_INT',
6485                 p_parent_table_id    => p_match_int_id,
6486                 p_column_name        => 'MATCH_TYPE_CODE',
6487                 p_column_value       => p_match_type_code,
6488                 p_error_message_name => 'INL_ERR_OI_CHK_MATCH_TP_CD',
6489                 p_token1_name        => 'NAME',
6490                 p_token1_value       => 'INL_MATCHES_INT',
6491                 p_token2_name        => 'ID',
6492                 p_token2_value       => p_match_int_id,
6493                 x_return_status      => l_return_status
6494             ) ;
6495             -- If unexpected errors happen abort
6496             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6497                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6498             END IF;
6499         END IF;
6500         IF(l_INT_importedOk = 'N') THEN
6501             l_result        := FND_API.G_FALSE;
6502             -- Add a line into inl_ship_errors
6503             Handle_InterfError(
6504                 p_parent_table_name  => 'INL_MATCHES_INT',
6505                 p_parent_table_id    => p_match_int_id,
6506                 p_column_name        => 'MATCH_TYPE_CODE',
6507                 p_column_value       => p_match_type_code,
6508                 p_error_message_name => 'INL_ERR_OI_CHK_TO_PAR_TAB_ID2',
6509                 p_token1_name        => 'NAME',
6510                 p_token1_value       => p_to_parent_table_name,
6511                 p_token2_name        => 'ID',
6512                 p_token2_value       => p_to_parent_table_id,
6513                 p_token3_name        => 'MATCH_INT_ID',
6514                 p_token3_value       => p_match_int_id,
6515                 x_return_status      => l_return_status
6516             ) ;
6517             -- If unexpected errors happen abort
6518             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6519                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6520             END IF;
6521         END IF;
6522     END IF;
6523     -- Standard End of Procedure/Function Logging
6524     INL_LOGGING_PVT.Log_EndProc(
6525         p_module_name    => g_module_name,
6526         p_procedure_name => l_func_name
6527     );
6528     RETURN FND_API.to_boolean(l_result) ;
6529 EXCEPTION
6530     WHEN FND_API.G_EXC_ERROR THEN
6531         -- Standard Expected Error Logging
6532         INL_LOGGING_PVT.Log_ExpecError (
6533             p_module_name    => g_module_name,
6534             p_procedure_name => l_func_name
6535         );
6536         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
6537     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6538         -- Standard Unexpected Error Logging
6539         INL_LOGGING_PVT.Log_UnexpecError (
6540             p_module_name    => g_module_name,
6541             p_procedure_name => l_func_name
6542         );
6543         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
6544     WHEN OTHERS THEN
6545         -- Standard Unexpected Error Logging
6546         INL_LOGGING_PVT.Log_UnexpecError (
6547             p_module_name    => g_module_name,
6548             p_procedure_name => l_func_name
6549         );
6550         IF FND_MSG_PUB.Check_Msg_Level(
6551             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
6552         ) THEN
6553             FND_MSG_PUB.Add_Exc_Msg(
6554                 p_pkg_name       => g_pkg_name,
6555                 p_procedure_name => l_func_name
6556             );
6557         END IF;
6558         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
6559 END Validate_MatchToParTab;
6560 -- Funct name : Validate_MatchTrxType
6561 -- Type       : Private
6562 -- Function   : Validate Match Transaction Type
6563 --
6564 -- Pre-reqs   : None
6565 -- Parameters :
6566 -- IN         : p_transaction_type       IN VARCHAR2
6567 --              p_match_int_id           IN NUMBER
6568 --              p_to_parent_table_name   IN VARCHAR2
6569 --              p_to_parent_table_id     IN NUMBER
6570 --              p_match_id               IN NUMBER
6571 --              p_replace_estim_qty_flag IN VARCHAR2
6572 --
6573 -- OUT        : x_return_status          OUT NOCOPY VARCHAR2
6574 --
6575 -- Version    : Current version 1.0
6576 --
6577 -- Notes      :
6578 FUNCTION Validate_MatchTrxType(
6579     p_transaction_type       IN VARCHAR2,
6580     p_match_int_id           IN NUMBER,
6581     p_to_parent_table_name   IN VARCHAR2,
6582     p_to_parent_table_id     IN NUMBER,
6583     p_match_id               IN NUMBER,
6584     p_replace_estim_qty_flag IN VARCHAR2,
6585     x_return_status          OUT NOCOPY VARCHAR2
6586 ) RETURN BOOLEAN IS
6587     l_func_name                  CONSTANT VARCHAR2(30) := 'Validate_MatchTrxType';
6588     l_debug_info                 VARCHAR2(400) ;
6589     l_return_status              VARCHAR2(1) ;
6590     l_result                     VARCHAR2(1) := FND_API.G_TRUE;
6591     l_adj_already_generated_flag VARCHAR2(1) ;
6592     l_replace_estim_qty_flag     VARCHAR2(1) ;
6593     l_other_REQF_Y_match_id      NUMBER;
6594 BEGIN
6595     -- Standard Beginning of Procedure/Function Logging
6596     INL_LOGGING_PVT.Log_BeginProc(
6597         p_module_name    => g_module_name,
6598         p_procedure_name => l_func_name
6599     ) ;
6600     --  Initialize API return status to success
6601     x_return_status := FND_API.G_RET_STS_SUCCESS;
6602     INL_LOGGING_PVT.Log_Variable(
6603         p_module_name    => g_module_name,
6604         p_procedure_name => l_func_name,
6605         p_var_name       => 'p_transaction_type',
6606         p_var_value      => p_transaction_type
6607     ) ;
6608 
6609     IF p_transaction_type = 'CREATE' THEN
6610         IF p_match_id IS NOT NULL THEN
6611             l_result := FND_API.G_FALSE;
6612             -- Add a line into inl_ship_errors
6613             Handle_InterfError(
6614                 p_parent_table_name  => 'INL_MATCHES_INT',
6615                 p_parent_table_id    => p_match_int_id,
6616                 p_column_name        => 'MATCH_ID',
6617                 p_column_value       => p_match_id,
6618                 p_error_message_name => 'INL_ERR_OI_CHK_MAT_ID_NNULL',
6619                 p_token1_name        => 'OPER',
6620                 p_token1_value       => p_transaction_type,
6621                 p_token2_name        => 'COL',
6622                 p_token2_value       => 'MATCH_ID',
6623                 p_token3_name        => 'MATCH_INT_ID',
6624                 p_token3_value       => p_match_int_id,
6625                 x_return_status      => l_return_status) ;
6626             -- If unexpected errors happen abort
6627             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6628                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6629             END IF;
6630         END IF;
6631     ELSIF p_transaction_type IN('UPDATE', 'DELETE') THEN
6632         IF p_match_id IS NULL THEN
6633             l_result := FND_API.G_FALSE;
6634             -- Add a line into inl_ship_errors
6635             Handle_InterfError(
6636                 p_parent_table_name  => 'INL_MATCHES_INT',
6637                 p_parent_table_id    => p_match_int_id,
6638                 p_column_name        => 'MATCH_ID',
6639                 p_column_value       => p_match_id,
6640                 p_error_message_name => 'INL_ERR_OI_CHK_TRX_TP_ID_NULL',
6641                 p_token1_name        => 'COLUMN',
6642                 p_token1_value       => 'MATCH_ID',
6643                 p_token2_name        => 'ID_NAME',
6644                 p_token2_value       => 'MATCH_INT_ID',
6645                 p_token3_name        => 'ID_VAL',
6646                 p_token3_value       => p_match_int_id,
6647                 x_return_status      => l_return_status
6648             ) ;
6649             -- If unexpected errors happen abort
6650             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6651                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6652             END IF;
6653         ELSE
6654             SELECT adj_already_generated_flag,
6655             replace_estim_qty_flag
6656             INTO l_adj_already_generated_flag,
6657             l_replace_estim_qty_flag
6658             FROM inl_matches m
6659             WHERE m.match_id = p_match_id;
6660 
6661             INL_LOGGING_PVT.Log_Variable(
6662                 p_module_name    => g_module_name,
6663                 p_procedure_name => l_func_name,
6664                 p_var_name       => 'l_adj_already_generated_flag',
6665                 p_var_value      => l_adj_already_generated_flag
6666             ) ;
6667 
6668             IF l_adj_already_generated_flag = 'Y' THEN
6669                 l_debug_info := 'Matches that has adjustments already generated, cannot be changed.';
6670                 INL_LOGGING_PVT.Log_Statement(
6671                     p_module_name      => g_module_name,
6672                     p_procedure_name   => l_func_name,
6673                     p_debug_info       => l_debug_info
6674                 );
6675                 l_result := FND_API.G_FALSE;
6676                 -- Add a line into inl_ship_errors
6677                 Handle_InterfError(
6678                     p_parent_table_name  => 'INL_MATCHES_INT',
6679                     p_parent_table_id    => p_match_int_id,
6680                     p_column_name        => 'TRANSACTION_TYPE',
6681                     p_column_value       => p_transaction_type,
6682                     p_error_message_name => 'INL_ERR_OI_CHK_PROC_MAT_INVL',
6683                     p_token1_name        => 'MATCH_INT_ID',
6684                     p_token1_value       => p_match_int_id,
6685                     x_return_status      => l_return_status
6686                 ) ;
6687                 -- If unexpected errors happen abort
6688                 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6689                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6690                 END IF;
6691             END IF;
6692             IF p_replace_estim_qty_flag <> l_replace_estim_qty_flag THEN
6693                 l_debug_info := 'Matches that has adjustments already generated, cannot be changed.';
6694                 INL_LOGGING_PVT.Log_Statement(
6695                     p_module_name      => g_module_name,
6696                     p_procedure_name   => l_func_name,
6697                     p_debug_info       => l_debug_info
6698                 );
6699                 l_result := FND_API.G_FALSE;
6700                 -- Add a line into inl_ship_errors
6701                 Handle_InterfError(
6702                     p_parent_table_name  => 'INL_MATCHES_INT',
6703                     p_parent_table_id    => p_match_int_id,
6704                     p_column_name        => 'REPLACE_ESTIM_QTY_FLAG',
6705                     p_column_value       => p_replace_estim_qty_flag,
6706                     p_error_message_name => 'INL_ERR_OI_CHK_TRX_TP_INVL',
6707                     p_token1_name        => 'MATCH_INT_ID',
6708                     p_token1_value       => p_match_int_id,
6709                     x_return_status      => l_return_status
6710                 ) ;
6711                 -- If unexpected errors happen abort
6712                 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6713                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6714                 END IF;
6715             END IF;
6716             INL_LOGGING_PVT.Log_Variable(
6717                 p_module_name    => g_module_name,
6718                 p_procedure_name => l_func_name,
6719                 p_var_name       => 'l_replace_estim_qty_flag',
6720                 p_var_value      => l_replace_estim_qty_flag
6721             ) ;
6722             IF l_replace_estim_qty_flag                 = 'Y' THEN
6723                 -- Check if there is any new record as
6724                 -- replace_estim_qty_flag = 'Y' and adj_already_generated_flag = 'N'
6725                 BEGIN
6726                     SELECT m1.match_id
6727                     INTO l_other_REQF_Y_match_id
6728                     FROM inl_matches m1
6729                     WHERE m1.to_parent_table_name       = p_to_parent_table_name
6730                     AND m1.to_parent_table_id         = p_to_parent_table_id
6731                     AND m1.match_type_code            = 'ITEM'
6732                     AND m1.replace_estim_qty_flag     = 'Y'
6733                     AND m1.adj_already_generated_flag = 'N'
6734                     --For validation purpose, it will consider only the latest and not processed record
6735                     AND m1.match_id IN (SELECT MAX(m2.match_id)
6736                                         FROM inl_matches m2
6737                                         WHERE m2.to_parent_table_name       = m1.to_parent_table_name
6738                                          AND m2.to_parent_table_id         = m1.to_parent_table_id
6739                                          AND m2.match_type_code            = 'ITEM'
6740                                          AND m2.replace_estim_qty_flag     = 'Y'
6741                                          AND m2.adj_already_generated_flag = 'N'
6742                                         )
6743                     ;
6744                 EXCEPTION
6745                     WHEN NO_DATA_FOUND THEN
6746                         l_other_REQF_Y_match_id := 0;
6747                 END;
6748                 INL_LOGGING_PVT.Log_Variable(
6749                     p_module_name    => g_module_name,
6750                     p_procedure_name => l_func_name,
6751                     p_var_name       => 'p_match_id',
6752                     p_var_value      => p_match_id
6753                 ) ;
6754 
6755                 INL_LOGGING_PVT.Log_Variable(
6756                     p_module_name    => g_module_name,
6757                     p_procedure_name => l_func_name,
6758                     p_var_name       => 'l_other_REQF_Y_match_id',
6759                     p_var_value      => l_other_REQF_Y_match_id
6760                 ) ;
6761 
6762                 IF p_match_id < l_other_REQF_Y_match_id THEN
6763                     l_result := FND_API.G_FALSE;
6764                     -- Add a line into inl_ship_errors
6765                     Handle_InterfError(
6766                         p_parent_table_name  => 'INL_MATCHES_INT',
6767                         p_parent_table_id    => p_match_int_id,
6768                         p_column_name        => 'TRANSACTION_TYPE',
6769                         p_column_value       => p_transaction_type,
6770                         p_error_message_name => 'INL_ERR_OI_CHK_MAT_NO_EFFECT',
6771                         p_token1_name        => 'MATCH_INT_ID',
6772                         p_token1_value       => p_match_int_id,
6773                         x_return_status      => l_return_status
6774                     ) ;
6775                     -- If unexpected errors happen abort
6776                     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6777                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6778                     END IF;
6779                 END IF;
6780             END IF;
6781         END IF;
6782     ELSE
6783         l_result := FND_API.G_FALSE;
6784         -- Add a line into inl_ship_errors
6785         Handle_InterfError(
6786             p_parent_table_name  => 'INL_MATCHES_INT',
6787             p_parent_table_id    => p_match_int_id,
6788             p_column_name        => 'TRANSACTION_TYPE',
6789             p_column_value       => p_transaction_type,
6790             p_error_message_name => 'INL_ERR_OI_CHK_TRX_TP_INVL',
6791             p_token1_name        => 'TTYPE',
6792             p_token1_value       => p_transaction_type,
6793             p_token2_name        => 'ID_NAME',
6794             p_token2_value       => 'MATCH_INT_ID',
6795             p_token3_name        => 'ID_VAL',
6796             p_token3_value       => p_match_int_id,
6797             x_return_status      => l_return_status
6798         ) ;
6799         -- If unexpected errors happen abort
6800         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6801             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6802         END IF;
6803     END IF;
6804     -- Standard End of Procedure/Function Logging
6805     INL_LOGGING_PVT.Log_EndProc(
6806         p_module_name    => g_module_name,
6807         p_procedure_name => l_func_name
6808     );
6809     RETURN FND_API.to_boolean(l_result) ;
6810 EXCEPTION
6811     WHEN FND_API.G_EXC_ERROR THEN
6812         -- Standard Expected Error Logging
6813         INL_LOGGING_PVT.Log_ExpecError (
6814             p_module_name    => g_module_name,
6815             p_procedure_name => l_func_name
6816         );
6817         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
6818     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6819         -- Standard Unexpected Error Logging
6820         INL_LOGGING_PVT.Log_UnexpecError (
6821             p_module_name    => g_module_name,
6822             p_procedure_name => l_func_name
6823         );
6824         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
6825     WHEN OTHERS THEN
6826         -- Standard Unexpected Error Logging
6827         INL_LOGGING_PVT.Log_UnexpecError (
6828             p_module_name    => g_module_name,
6829             p_procedure_name => l_func_name
6830         );
6831         IF FND_MSG_PUB.Check_Msg_Level(
6832             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
6833         ) THEN
6834             FND_MSG_PUB.Add_Exc_Msg(
6835                 p_pkg_name       => g_pkg_name,
6836                 p_procedure_name => l_func_name
6837             );
6838         END IF;
6839         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
6840 END Validate_MatchTrxType;
6841 -- Funct Name : Validate_MatchParty
6842 -- Type       : Private
6843 -- Function   : Validate Match Party and Party Site
6844 --
6845 -- Pre-reqs   : None
6846 -- Parameters :
6847 -- IN         : p_match_int_id           IN NUMBER
6848 --              p_match_type_code        IN VARCHAR2
6849 --              p_parent_match_type_code IN VARCHAR2
6850 --              p_party_id               IN NUMBER
6851 --              p_party_site_id          IN NUMBER
6852 --
6853 -- IN OUT     : x_return_status          OUT NOCOPY VARCHAR2
6854 --
6855 -- Version    : Current version 1.0
6856 --
6857 -- Notes      :
6858 FUNCTION Validate_MatchParty(
6859     p_match_int_id           IN NUMBER,
6860     p_match_type_code        IN VARCHAR2,
6861     p_parent_match_type_code IN VARCHAR2,
6862     p_party_id               IN NUMBER,
6863     p_party_site_id          IN NUMBER,
6864     x_return_status          OUT NOCOPY VARCHAR2
6865 ) RETURN BOOLEAN IS
6866     l_func_name     CONSTANT VARCHAR2(30) := 'Validate_MatchParty';
6867     l_debug_info    VARCHAR2(400) ;
6868     l_return_status VARCHAR2(1) ;
6869     l_result        VARCHAR2(1) := FND_API.G_TRUE;
6870     l_field         VARCHAR2(30) ;
6871     l_field_id      NUMBER;
6872 BEGIN
6873     -- Standard Beginning of Procedure/Function Logging
6874     INL_LOGGING_PVT.Log_BeginProc(
6875         p_module_name    => g_module_name,
6876         p_procedure_name => l_func_name
6877     ) ;
6878     --  Initialize API return status to success
6879     x_return_status := FND_API.G_RET_STS_SUCCESS;
6880     l_debug_info := 'Check if the Party information should be included based on a given Match Type Code ';
6881     INL_LOGGING_PVT.Log_Statement(
6882         p_module_name      => g_module_name,
6883         p_procedure_name   => l_func_name,
6884         p_debug_info       => l_debug_info
6885     );
6886     INL_LOGGING_PVT.Log_Variable(
6887         p_module_name    => g_module_name,
6888         p_procedure_name => l_func_name,
6889         p_var_name       => 'p_parent_match_type_code',
6890         p_var_value      => p_parent_match_type_code
6891     ) ;
6892 
6893     INL_LOGGING_PVT.Log_Variable(
6894         p_module_name    => g_module_name,
6895         p_procedure_name => l_func_name,
6896         p_var_name       => 'p_match_type_code',
6897         p_var_value      => p_match_type_code
6898     ) ;
6899 
6900     IF NVL(p_parent_match_type_code, p_match_type_code) = 'CHARGE' THEN
6901         l_field := 'x';
6902         INL_LOGGING_PVT.Log_Variable(
6903             p_module_name    => g_module_name,
6904             p_procedure_name => l_func_name,
6905             p_var_name       => 'p_party_id',
6906             p_var_value      => p_party_id
6907         ) ;
6908 
6909         l_debug_info     := 'party_id: ';
6910         IF p_party_id IS NOT NULL THEN
6911             BEGIN
6912                 l_debug_info := 'Chech Party_Id in HZ_PARTIES table';
6913                 INL_LOGGING_PVT.Log_Statement(
6914                     p_module_name      => g_module_name,
6915                     p_procedure_name   => l_func_name,
6916                     p_debug_info       => l_debug_info
6917                 );
6918                 SELECT 'x'
6919                 INTO l_field
6920                 FROM hz_parties
6921                 WHERE p_party_id = party_id;
6922 
6923                 l_debug_info := l_debug_info||'(OK) ';
6924             EXCEPTION
6925                 WHEN OTHERS THEN
6926                     l_field      := 'PARTY_ID';
6927                     l_field_id   := p_party_id;
6928                     l_debug_info := l_debug_info||'(NOT OK) ';
6929             END;
6930         ELSE
6931             l_field    := 'PARTY_ID';
6932             l_field_id := NULL;
6933         END IF;
6934         INL_LOGGING_PVT.Log_Statement(
6935             p_module_name      => g_module_name,
6936             p_procedure_name   => l_func_name,
6937             p_debug_info       => l_debug_info
6938         );
6939         INL_LOGGING_PVT.Log_Variable(
6940             p_module_name    => g_module_name,
6941             p_procedure_name => l_func_name,
6942             p_var_name       => 'p_party_site_id',
6943             p_var_value      => p_party_site_id
6944         ) ;
6945         l_debug_info := 'p_party_site_id: ';
6946         IF p_party_site_id IS NOT NULL THEN
6947             BEGIN
6948                  SELECT 'x'
6949                  INTO l_field
6950                  FROM hz_party_sites
6951                  WHERE party_site_id = p_party_site_id;
6952 
6953                 l_debug_info := l_debug_info||'(OK) ';
6954             EXCEPTION
6955             WHEN OTHERS THEN
6956                 l_field      := 'PARTY_SITE_ID';
6957                 l_field_id   := p_party_site_id;
6958                 l_debug_info := l_debug_info||'(NOT OK) ';
6959             END;
6960         ELSE
6961             IF l_field     <> 'x' THEN
6962                 l_field    := 'PARTY_SITE_ID';
6963                 l_field_id := NULL;
6964             END IF;
6965         END IF;
6966         INL_LOGGING_PVT.Log_Statement(
6967             p_module_name    => g_module_name,
6968             p_procedure_name => l_func_name,
6969             p_debug_info     => l_debug_info
6970         );
6971         IF l_field                                      <> 'x' THEN
6972             l_debug_info := 'ERROR l_field: '||l_field;
6973             INL_LOGGING_PVT.Log_Statement(
6974                 p_module_name    => g_module_name,
6975                 p_procedure_name => l_func_name,
6976                 p_debug_info     => l_debug_info
6977             );
6978             l_result     := FND_API.G_FALSE;
6979             -- Add a line into inl_ship_errors
6980             Handle_InterfError(
6981                 p_parent_table_name  => 'INL_MATCHES_INT',
6982                 p_parent_table_id    => p_match_int_id,
6983                 p_column_name        => l_field,
6984                 p_column_value       => l_field_id,
6985                 p_error_message_name => 'INL_ERR_OI_CHK_PARTY_INVAL',
6986                 p_token1_name        => 'MATCH_INT_ID',
6987                 p_token1_value       => p_match_int_id,
6988                 x_return_status      => l_return_status
6989             ) ;
6990             -- If unexpected errors happen abort
6991             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6992                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6993             END IF;
6994         END IF;
6995     ELSE
6996         l_field := 'x';
6997         IF p_party_id  IS NOT NULL THEN
6998             l_field    := 'PARTY_ID';
6999             l_field_id := p_party_id;
7000         END IF;
7001         IF p_party_site_id IS NOT NULL THEN
7002             l_field    := 'PARTY_SITE_ID';
7003             l_field_id := p_party_site_id;
7004         END IF;
7005         IF l_field   <> 'x' THEN
7006             l_result := FND_API.G_FALSE;
7007             -- Add a line into inl_ship_errors
7008             Handle_InterfError(
7009                 p_parent_table_name  => 'INL_MATCHES_INT',
7010                 p_parent_table_id    => p_match_int_id,
7011                 p_column_name        => l_field,
7012                 p_column_value       => l_field_id,
7013                 p_error_message_name => 'INL_ERR_OI_CHK_PARTY_NNULL',
7014                 p_token1_name        => 'MATCH_INT_ID',
7015                 p_token1_value       => p_match_int_id,
7016                 x_return_status      => l_return_status
7017             ) ;
7018             -- If unexpected errors happen abort
7019             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7020                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7021             END IF;
7022         END IF;
7023     END IF;
7024     -- Standard End of Procedure/Function Logging
7025     INL_LOGGING_PVT.Log_EndProc(
7026         p_module_name    => g_module_name,
7027         p_procedure_name => l_func_name
7028     );
7029     RETURN FND_API.to_boolean(l_result) ;
7030 EXCEPTION
7031     WHEN FND_API.G_EXC_ERROR THEN
7032         -- Standard Expected Error Logging
7033         INL_LOGGING_PVT.Log_ExpecError (
7034             p_module_name    => g_module_name,
7035             p_procedure_name => l_func_name
7036         );
7037         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
7038     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7039         -- Standard Unexpected Error Logging
7040         INL_LOGGING_PVT.Log_UnexpecError (
7041             p_module_name    => g_module_name,
7042             p_procedure_name => l_func_name
7043         );
7044         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
7045     WHEN OTHERS THEN
7046         -- Standard Unexpected Error Logging
7047         INL_LOGGING_PVT.Log_UnexpecError (
7048             p_module_name    => g_module_name,
7049             p_procedure_name => l_func_name
7050         );
7051         IF FND_MSG_PUB.Check_Msg_Level(
7052             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
7053         ) THEN
7054             FND_MSG_PUB.Add_Exc_Msg(
7055                 p_pkg_name       => g_pkg_name,
7056                 p_procedure_name => l_func_name
7057             );
7058         END IF;
7059         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
7060 END Validate_MatchParty;
7061 -- Utility name   : Validate_MatchAmtInt
7062 -- Type       : Private
7063 -- Function   : Validate a Match before import it from interface to INL Tables
7064 --
7065 -- Pre-reqs   : None
7066 -- Parameters :
7067 -- IN         : p_match_int_rec  IN  match_int_type%TYPE
7068 --
7069 -- OUT        : x_return_status  IN OUT NOCOPY VARCHAR2
7070 --
7071 -- Version    : Current version 1.0
7072 --
7073 -- Notes      :
7074 FUNCTION Validate_MatchAmtInt(
7075     MATCH_AMOUNT_INT_ID IN match_int_type,
7076     x_return_status     IN OUT NOCOPY VARCHAR2
7077 ) RETURN BOOLEAN IS
7078     l_func_name                   CONSTANT VARCHAR2(30) := 'Validate_MatchAmtInt';
7079     l_return_status               VARCHAR2(1) ;
7080     l_debug_info                  VARCHAR2(400) ;
7081     x_result                      VARCHAR2(1) := FND_API.G_TRUE;
7082     l_result                      BOOLEAN;
7083     l_parent_match_type_code      VARCHAR2(100) ;
7084     l_parent_matched_curr_code    VARCHAR2(15) ;
7085     l_parent_to_parent_table_name VARCHAR2(100) ;
7086     l_parent_to_parent_table_ID   NUMBER;
7087 BEGIN
7088     -- Standard Beginning of Procedure/Function Logging
7089     INL_LOGGING_PVT.Log_BeginProc(
7090         p_module_name    => g_module_name,
7091         p_procedure_name => l_func_name
7092     ) ;
7093     --  Initialize API return status to success
7094     x_return_status := FND_API.G_RET_STS_SUCCESS;
7095     l_debug_info := 'Validate Transaction Type. Call Validate_MatchTrxType';
7096     INL_LOGGING_PVT.Log_Statement(
7097         p_module_name      => g_module_name,
7098         p_procedure_name   => l_func_name,
7099         p_debug_info       => l_debug_info
7100     );
7101     -- If unexpected errors happen abort
7102     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7103         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7104     END IF;
7105     -- Standard End of Procedure/Function Logging
7106     INL_LOGGING_PVT.Log_EndProc(
7107         p_module_name    => g_module_name,
7108         p_procedure_name => l_func_name
7109     );
7110     RETURN FND_API.to_boolean(x_result) ;
7111 EXCEPTION
7112     WHEN FND_API.G_EXC_ERROR THEN
7113         -- Standard Expected Error Logging
7114         INL_LOGGING_PVT.Log_ExpecError (
7115             p_module_name    => g_module_name,
7116             p_procedure_name => l_func_name
7117         );
7118         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
7119     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7120         -- Standard Unexpected Error Logging
7121         INL_LOGGING_PVT.Log_UnexpecError (
7122             p_module_name    => g_module_name,
7123             p_procedure_name => l_func_name
7124         );
7125         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
7126     WHEN OTHERS THEN
7127         -- Standard Unexpected Error Logging
7128         INL_LOGGING_PVT.Log_UnexpecError (
7129             p_module_name    => g_module_name,
7130             p_procedure_name => l_func_name
7131         );
7132         IF FND_MSG_PUB.Check_Msg_Level(
7133             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
7134         ) THEN
7135             FND_MSG_PUB.Add_Exc_Msg(
7136                 p_pkg_name       => g_pkg_name,
7137                 p_procedure_name => l_func_name
7138             );
7139         END IF;
7140         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
7141 END Validate_MatchAmtInt;
7142 -- Utility name   : Validate_MatchInt
7143 -- Type       : Private
7144 -- Function   : Validate a Match before import it from interface to INL Tables
7145 --
7146 -- Pre-reqs   : None
7147 -- Parameters :
7148 -- IN         : p_match_int_rec  IN  match_int_type%TYPE
7149 --
7150 -- OUT        : x_return_status  OUT NOCOPY VARCHAR2
7151 --
7152 -- Version    : Current version 1.0
7153 --
7154 -- Notes      :
7155 FUNCTION Validate_MatchInt(
7156     p_match_int_rec IN match_int_type,
7157     x_return_status OUT NOCOPY VARCHAR2
7158 ) RETURN BOOLEAN IS
7159     l_func_name                   CONSTANT VARCHAR2(30) := 'Validate_MatchInt';
7160     l_return_status               VARCHAR2(1) ;
7161     l_debug_info                  VARCHAR2(400) ;
7162     x_result                      VARCHAR2(1) := FND_API.G_TRUE;
7163     l_result                      BOOLEAN;
7164     l_parent_match_type_code      VARCHAR2(100) ;
7165     l_parent_matched_curr_code    VARCHAR2(15) ;
7166     l_parent_to_parent_table_name VARCHAR2(100) ;
7167     l_parent_to_parent_table_ID   NUMBER;
7168 BEGIN
7169     -- Standard Beginning of Procedure/Function Logging
7170     INL_LOGGING_PVT.Log_BeginProc(
7171         p_module_name    => g_module_name,
7172         p_procedure_name => l_func_name
7173     ) ;
7174     --  Initialize API return status to success
7175     x_return_status := FND_API.G_RET_STS_SUCCESS;
7176     l_debug_info := 'Validate Transaction Type. Call Validate_MatchTrxType';
7177     INL_LOGGING_PVT.Log_Statement(
7178         p_module_name      => g_module_name,
7179         p_procedure_name   => l_func_name,
7180         p_debug_info       => l_debug_info
7181     );
7182 
7183     l_result     := Validate_MatchTrxType( p_transaction_type => p_match_int_rec.transaction_type,
7184                                            p_match_int_id => p_match_int_rec.match_int_id,
7185                                            p_to_parent_table_name => p_match_int_rec.to_parent_table_name,
7186                                            p_to_parent_table_id => p_match_int_rec.to_parent_table_id,
7187                                            p_match_id => p_match_int_rec.match_id,
7188                                            p_replace_estim_qty_flag => p_match_int_rec.replace_estim_qty_flag,
7189                                            x_return_status => l_return_status) ;
7190     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7191         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7192     END IF;
7193     l_debug_info     := l_debug_info||': ';
7194     IF l_result       = FALSE THEN
7195         x_result     := FND_API.G_FALSE;
7196         l_debug_info := l_debug_info||'FALSE';
7197     ELSE
7198         l_debug_info := l_debug_info||'OK';
7199     END IF;
7200     INL_LOGGING_PVT.Log_Statement(
7201         p_module_name      => g_module_name,
7202         p_procedure_name   => l_func_name,
7203         p_debug_info       => l_debug_info
7204     );
7205 
7206     l_debug_info := 'Get Match Type Code from Parent Match when processing corrections.';
7207     INL_LOGGING_PVT.Log_Statement(
7208         p_module_name      => g_module_name,
7209         p_procedure_name   => l_func_name,
7210         p_debug_info       => l_debug_info
7211     );
7212 
7213     INL_LOGGING_PVT.Log_Variable(
7214         p_module_name    => g_module_name,
7215         p_procedure_name => l_func_name,
7216         p_var_name       => 'p_match_int_rec.parent_match_id',
7217         p_var_value      => p_match_int_rec.parent_match_id
7218     ) ;
7219     IF p_match_int_rec.match_type_code = 'CORRECTION' THEN
7220          SELECT match_type_code ,
7221             matched_curr_code   ,
7222             to_parent_table_name,
7223             to_parent_table_id
7224            INTO l_parent_match_type_code ,
7225             l_parent_matched_curr_code   ,
7226             l_parent_to_parent_table_name,
7227             l_parent_to_parent_table_ID
7228            FROM inl_matches
7229           WHERE match_id = p_match_int_rec.parent_match_id;
7230     ELSE
7231         l_parent_match_type_code      := NULL;
7232         l_parent_matched_curr_code    := NULL;
7233         l_parent_to_parent_table_name := NULL;
7234         l_parent_to_parent_table_ID   := NULL;
7235     END IF;
7236     l_debug_info := 'Validate TO_PARENT_TABLE information. Call Validate_MatchToParTab.';
7237     INL_LOGGING_PVT.Log_Statement(
7238         p_module_name      => g_module_name,
7239         p_procedure_name   => l_func_name,
7240         p_debug_info       => l_debug_info
7241     );
7242     l_result     := Validate_MatchToParTab( p_transaction_type => p_match_int_rec.transaction_type,
7243                                             p_match_int_id => p_match_int_rec.match_int_id,
7244                                             p_match_id => p_match_int_rec.match_id,
7245                                             p_parent_match_id => p_match_int_rec.parent_match_id,
7246                                             p_ship_header_id => p_match_int_rec.ship_header_id,
7247                                             p_to_parent_table_name => p_match_int_rec.to_parent_table_name,
7248                                             p_to_parent_table_id => p_match_int_rec.to_parent_table_id,
7249                                             p_match_type_code => p_match_int_rec.match_type_code,
7250                                             x_return_status => l_return_status) ;
7251     IF l_return_status                          <> FND_API.G_RET_STS_SUCCESS THEN
7252         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7253     END IF;
7254     l_debug_info := l_debug_info||': ';
7255     IF l_result = FALSE THEN
7256         x_result     := FND_API.G_FALSE;
7257         l_debug_info := l_debug_info||'FALSE';
7258     ELSE
7259         l_debug_info := l_debug_info||'OK';
7260     END IF;
7261     INL_LOGGING_PVT.Log_Statement(
7262         p_module_name      => g_module_name,
7263         p_procedure_name   => l_func_name,
7264         p_debug_info       => l_debug_info
7265     );
7266     l_debug_info := 'Validate Match IDs. Call Validate_MatchMatIDS';
7267     INL_LOGGING_PVT.Log_Statement(
7268         p_module_name      => g_module_name,
7269         p_procedure_name   => l_func_name,
7270         p_debug_info       => l_debug_info
7271     );
7272     l_result := Validate_MatchMatIDS(
7273                     p_transaction_type         => p_match_int_rec.transaction_type,
7274                     p_match_int_id             => p_match_int_rec.match_int_id,
7275                     p_match_id                 => p_match_int_rec.match_id,
7276                     p_parent_match_id          => p_match_int_rec.parent_match_id,
7277                     p_match_type_code          => p_match_int_rec.match_type_code,
7278                     p_existing_match_info_flag => p_match_int_rec.existing_match_info_flag,
7279                     x_return_status            => l_return_status
7280                     )
7281     ;
7282     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7283         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7284     END IF;
7285     l_debug_info := l_debug_info||': ';
7286     IF l_result = FALSE THEN
7287         x_result     := FND_API.G_FALSE;
7288         l_debug_info := l_debug_info||'FALSE';
7289     ELSE
7290         l_debug_info := l_debug_info||'OK';
7291     END IF;
7292     INL_LOGGING_PVT.Log_Statement(
7293         p_module_name      => g_module_name,
7294         p_procedure_name   => l_func_name,
7295         p_debug_info       => l_debug_info
7296     );
7297     IF p_match_int_rec.matched_qty IS NOT NULL
7298     THEN
7299         l_debug_info := 'Validate Matched UOM Code. Call Validate_MatchUOM';
7300         INL_LOGGING_PVT.Log_Statement(
7301             p_module_name      => g_module_name,
7302             p_procedure_name   => l_func_name,
7303             p_debug_info       => l_debug_info
7304         );
7305         l_result := Validate_MatchUOM(
7306                         p_match_int_id           => p_match_int_rec.match_int_id,
7307                         p_matched_uom_code       => p_match_int_rec.matched_uom_code,
7308                         p_match_type_code        => p_match_int_rec.match_type_code,
7309                         p_parent_match_type_code => l_parent_match_type_code,
7310                         x_return_status          => l_return_status
7311                     )
7312         ;
7313         IF l_return_status                          <> FND_API.G_RET_STS_SUCCESS THEN
7314             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7315         END IF;
7316         l_debug_info := l_debug_info||': ';
7317         IF l_result = FALSE THEN
7318             x_result     := FND_API.G_FALSE;
7319             l_debug_info := l_debug_info||'FALSE';
7320         ELSE
7321             l_debug_info := l_debug_info||'OK';
7322         END IF;
7323         INL_LOGGING_PVT.Log_Statement(
7324             p_module_name      => g_module_name,
7325             p_procedure_name   => l_func_name,
7326             p_debug_info       => l_debug_info
7327         );
7328     END IF;
7329     l_debug_info := 'Validate Matched Amount. Call Validate_MatchAmt';
7330     INL_LOGGING_PVT.Log_Statement(
7331         p_module_name      => g_module_name,
7332         p_procedure_name   => l_func_name,
7333         p_debug_info       => l_debug_info
7334     );
7335     l_result := Validate_MatchAmt(
7336                     p_match_int_id             => p_match_int_rec.match_int_id,
7337                     p_parent_matched_curr_code => l_parent_matched_curr_code,
7338                     p_match_type_code          => p_match_int_rec.match_type_code,
7339                     p_parent_match_type_code   => l_parent_match_type_code,
7340                     p_matched_amt              => p_match_int_rec.matched_amt,
7341                     p_matched_curr_code        => p_match_int_rec.matched_curr_code,
7342                     p_matched_curr_conv_type   => p_match_int_rec.matched_curr_conversion_type,
7343                     p_matched_curr_conv_date   => p_match_int_rec.matched_curr_conversion_date,
7344                     p_matched_curr_conv_rate   => p_match_int_rec.matched_curr_conversion_rate,
7345                     p_replace_estim_qty_flag   => p_match_int_rec.replace_estim_qty_flag,
7346                     x_return_status            => l_return_status) ;
7347     IF l_return_status                          <> FND_API.G_RET_STS_SUCCESS THEN
7348         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7349     END IF;
7350     l_debug_info     := l_debug_info||': ';
7351     IF l_result       = FALSE THEN
7352         x_result     := FND_API.G_FALSE;
7353         l_debug_info := l_debug_info||'FALSE';
7354     ELSE
7355         l_debug_info := l_debug_info||'OK';
7356     END IF;
7357     INL_LOGGING_PVT.Log_Statement(
7358         p_module_name      => g_module_name,
7359         p_procedure_name   => l_func_name,
7360         p_debug_info       => l_debug_info
7361     );
7362     l_debug_info := 'Validate Matched Quantity. Call Validate_MatchQty';
7363     INL_LOGGING_PVT.Log_Statement(
7364         p_module_name      => g_module_name,
7365         p_procedure_name   => l_func_name,
7366         p_debug_info       => l_debug_info
7367     );
7368     IF((p_match_int_rec.to_parent_table_name = 'INL_SHIP_LINES'
7369          AND p_match_int_rec.match_type_code = 'ITEM')
7370       OR (l_parent_to_parent_table_name = 'INL_SHIP_LINES'
7371           AND l_parent_match_type_code = 'ITEM'
7372          )
7373       ) AND p_match_int_rec.matched_qty IS NOT NULL
7374     THEN
7375         l_result := Validate_MatchQty(
7376                         p_match_int_id           => p_match_int_rec.match_int_id,
7377                         p_corrected_match_id     => p_match_int_rec.parent_match_id,
7378                         p_updated_match_id       => p_match_int_rec.match_id,
7379                         p_ship_line_id           => NVL(l_parent_to_parent_table_id,
7380                                                         p_match_int_rec.to_parent_table_id),
7381                         p_matched_qty            => p_match_int_rec.matched_qty,
7382                         p_matched_uom_code       => p_match_int_rec.matched_uom_code,
7383                         p_replace_estim_qty_flag => p_match_int_rec.replace_estim_qty_flag,
7384                         p_match_type_code        => p_match_int_rec.match_type_code,
7385                         x_return_status          => l_return_status) ;
7386         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7387             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7388         END IF;
7389     END IF;
7390     l_debug_info     := l_debug_info||': ';
7391     IF l_result       = FALSE THEN
7392         x_result     := FND_API.G_FALSE;
7393         l_debug_info := l_debug_info||'FALSE';
7394     ELSE
7395         l_debug_info := l_debug_info||'OK';
7396     END IF;
7397     INL_LOGGING_PVT.Log_Statement(
7398         p_module_name      => g_module_name,
7399         p_procedure_name   => l_func_name,
7400         p_debug_info       => l_debug_info
7401     );
7402     l_debug_info := 'Validate Match Tax. Call Validate_MatchTax';
7403     INL_LOGGING_PVT.Log_Statement(
7404         p_module_name      => g_module_name,
7405         p_procedure_name   => l_func_name,
7406         p_debug_info       => l_debug_info
7407     );
7408     l_result := Validate_MatchTax(
7409                     p_match_int_id           => p_match_int_rec.match_int_id,
7410                     p_tax_code               => p_match_int_rec.tax_code,
7411                     p_nrec_tax_amt           => p_match_int_rec.nrec_tax_amt,
7412                     p_tax_amt_included_flag  => p_match_int_rec.tax_amt_included_flag,
7413                     p_matched_amt            => p_match_int_rec.matched_amt,
7414                     p_match_type_code        => p_match_int_rec.match_type_code,
7415                     p_parent_match_type_code => l_parent_match_type_code, x_return_status => l_return_status) ;
7416     IF l_return_status                          <> FND_API.G_RET_STS_SUCCESS THEN
7417         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7418     END IF;
7419     l_debug_info     := l_debug_info||': ';
7420     IF l_result       = FALSE THEN
7421         x_result     := FND_API.G_FALSE;
7422         l_debug_info := l_debug_info||'FALSE';
7423     ELSE
7424         l_debug_info := l_debug_info||'OK';
7425     END IF;
7426     INL_LOGGING_PVT.Log_Statement(
7427         p_module_name      => g_module_name,
7428         p_procedure_name   => l_func_name,
7429         p_debug_info       => l_debug_info
7430     );
7431     l_debug_info := 'Validate Matching Flags. Call Validate_MatchFlags';
7432     INL_LOGGING_PVT.Log_Statement(
7433         p_module_name      => g_module_name,
7434         p_procedure_name   => l_func_name,
7435         p_debug_info       => l_debug_info
7436     );
7437     l_result := Validate_MatchFlags(
7438                     p_match_int_id             => p_match_int_rec.match_int_id,
7439                     p_match_type_code          => p_match_int_rec.match_type_code,
7440                     p_parent_match_type_code   => l_parent_match_type_code,
7441                     p_replace_estim_qty_flag   => p_match_int_rec.replace_estim_qty_flag,
7442                     p_existing_match_info_flag => p_match_int_rec.existing_match_info_flag,
7443                     x_return_status            => l_return_status) ;
7444     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7445         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7446     END IF;
7447     l_debug_info     := l_debug_info||': ';
7448     IF l_result       = FALSE THEN
7449         x_result     := FND_API.G_FALSE;
7450         l_debug_info := l_debug_info||'FALSE';
7451     ELSE
7452         l_debug_info := l_debug_info||'OK';
7453     END IF;
7454     INL_LOGGING_PVT.Log_Statement(
7455         p_module_name      => g_module_name,
7456         p_procedure_name   => l_func_name,
7457         p_debug_info       => l_debug_info
7458     );
7459     l_debug_info := 'Validate Charge Line Type Id. Call Validate_MatchChLnTpID';
7460     INL_LOGGING_PVT.Log_Statement(
7461         p_module_name      => g_module_name,
7462         p_procedure_name   => l_func_name,
7463         p_debug_info       => l_debug_info
7464     );
7465     l_result := Validate_MatchChLnTpID(
7466                     p_match_int_id           => p_match_int_rec.match_int_id,
7467                     p_match_type_code        => p_match_int_rec.match_type_code,
7468                     p_parent_match_type_code => l_parent_match_type_code,
7469                     p_charge_line_type_id    => p_match_int_rec.charge_line_type_id,
7470                     p_match_amount_int_id    => p_match_int_rec.match_amount_int_id,
7471                     x_return_status          => l_return_status)
7472     ;
7473     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7474         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7475     END IF;
7476     l_debug_info     := l_debug_info||': ';
7477     IF l_result       = FALSE THEN
7478         x_result     := FND_API.G_FALSE;
7479         l_debug_info := l_debug_info||'FALSE';
7480     ELSE
7481         l_debug_info := l_debug_info||'OK';
7482     END IF;
7483     INL_LOGGING_PVT.Log_Statement(
7484         p_module_name      => g_module_name,
7485         p_procedure_name   => l_func_name,
7486         p_debug_info       => l_debug_info
7487     );
7488     l_debug_info := 'Validate Party and Party Site. Call Validate_MatchParty';
7489     INL_LOGGING_PVT.Log_Statement(
7490         p_module_name      => g_module_name,
7491         p_procedure_name   => l_func_name,
7492         p_debug_info       => l_debug_info
7493     );
7494     l_result := Validate_MatchParty(
7495                     p_match_int_id           => p_match_int_rec.match_int_id,
7496                     p_match_type_code        => p_match_int_rec.match_type_code,
7497                     p_parent_match_type_code => l_parent_match_type_code,
7498                     p_party_id               => p_match_int_rec.party_id,
7499                     p_party_site_id          => p_match_int_rec.party_site_id,
7500                     x_return_status          => l_return_status) ;
7501     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7502         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7503     END IF;
7504     l_debug_info     := l_debug_info||': ';
7505     IF l_result       = FALSE THEN
7506         x_result     := FND_API.G_FALSE;
7507         l_debug_info := l_debug_info||'FALSE';
7508     ELSE
7509         l_debug_info := l_debug_info||'OK';
7510     END IF;
7511     INL_LOGGING_PVT.Log_Statement(
7512         p_module_name      => g_module_name,
7513         p_procedure_name   => l_func_name,
7514         p_debug_info       => l_debug_info
7515     );
7516     INL_LOGGING_PVT.Log_Variable(
7517         p_module_name    => g_module_name,
7518         p_procedure_name => l_func_name,
7519         p_var_name       => 'p_match_int_rec.transaction_type',
7520         p_var_value      => p_match_int_rec.transaction_type
7521     ) ;
7522 
7523     INL_LOGGING_PVT.Log_Variable(
7524         p_module_name    => g_module_name,
7525         p_procedure_name => l_func_name,
7526         p_var_name       => 'p_match_int_rec.match_int_id',
7527         p_var_value      => p_match_int_rec.match_int_id
7528     ) ;
7529 
7530     INL_LOGGING_PVT.Log_Variable(
7531         p_module_name    => g_module_name,
7532         p_procedure_name => l_func_name,
7533         p_var_name       => 'p_match_int_rec.match_id',
7534         p_var_value      => p_match_int_rec.match_id
7535     ) ;
7536 
7537     l_debug_info := 'Validate Transaction Type. Call Validate_MatchTrxType';
7538     INL_LOGGING_PVT.Log_Statement(
7539         p_module_name      => g_module_name,
7540         p_procedure_name   => l_func_name,
7541         p_debug_info       => l_debug_info
7542     );
7543     l_result := Validate_MatchTrxType(
7544                     p_transaction_type       => p_match_int_rec.transaction_type,
7545                     p_match_int_id           => p_match_int_rec.match_int_id,
7546                     p_to_parent_table_name   => p_match_int_rec.to_parent_table_name,
7547                     p_to_parent_table_id     => p_match_int_rec.to_parent_table_id,
7548                     p_match_id               => p_match_int_rec.match_id,
7549                     p_replace_estim_qty_flag => p_match_int_rec.replace_estim_qty_flag,
7550                     x_return_status          => l_return_status) ;
7551     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7552         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7553     END IF;
7554     l_debug_info := 'Consistency of Transaction Type: ';
7555     IF l_result THEN
7556         l_debug_info := l_debug_info||'OK';
7557     ELSE
7558         x_result     := FND_API.G_FALSE;
7559         l_debug_info := l_debug_info||'FALSE';
7560     END IF;
7561     -- If unexpected errors happen abort
7562     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7563         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7564     END IF;
7565     -- Standard End of Procedure/Function Logging
7566     INL_LOGGING_PVT.Log_EndProc(
7567         p_module_name    => g_module_name,
7568         p_procedure_name => l_func_name
7569     );
7570     RETURN FND_API.to_boolean(x_result) ;
7571 EXCEPTION
7572     WHEN FND_API.G_EXC_ERROR THEN
7573         -- Standard Expected Error Logging
7574         INL_LOGGING_PVT.Log_ExpecError (
7575             p_module_name    => g_module_name,
7576             p_procedure_name => l_func_name
7577         );
7578         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
7579     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7580         -- Standard Unexpected Error Logging
7581         INL_LOGGING_PVT.Log_UnexpecError (
7582             p_module_name    => g_module_name,
7583             p_procedure_name => l_func_name
7584         );
7585         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
7586     WHEN OTHERS THEN
7587         -- Standard Unexpected Error Logging
7588         INL_LOGGING_PVT.Log_UnexpecError (
7589             p_module_name    => g_module_name,
7590             p_procedure_name => l_func_name
7591         );
7592         IF FND_MSG_PUB.Check_Msg_Level(
7593             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
7594         ) THEN
7595             FND_MSG_PUB.Add_Exc_Msg(
7596                 p_pkg_name       => g_pkg_name,
7597                 p_procedure_name => l_func_name
7598             );
7599         END IF;
7600         RETURN FND_API.to_boolean(FND_API.G_FALSE) ;
7601 END Validate_MatchInt;
7602 -- Utility name : Run_MatchPreProcessor
7603 -- Type       : Private
7604 -- Function   : Executes the first set of validations before import.
7605 --
7606 -- Pre-reqs   : None
7607 -- Parameters :
7608 -- IN         : p_group_id       IN  NUMBER
7609 --
7610 -- OUT        : x_return_status  OUT NOCOPY VARCHAR2
7611 --
7612 -- Version    : Current version 1.0
7613 --
7614 -- Notes      :
7615 PROCEDURE Run_MatchPreProcessor(
7616     p_group_id IN NUMBER,
7617     x_return_status OUT NOCOPY VARCHAR2
7618 ) IS
7619     -- Cursor to get all PENDING match_amounts from the
7620     -- Interface table based on a given group id
7621     CURSOR c_match_amount_int
7622     IS
7623          SELECT match_amount_int_id      ,
7624             group_id              ,
7625             transaction_type      ,
7626             matched_amt                 ,
7627             matched_curr_code           ,
7628             matched_curr_conversion_type,
7629             matched_curr_conversion_date,
7630             matched_curr_conversion_rate
7631            FROM inl_matches_int m
7632           WHERE (p_group_id   IS NULL
7633                  OR m.group_id = p_group_id
7634                 )
7635           AND m.processing_status_code = 'PENDING';
7636     TYPE inl_match_amounts_int_type_tbl IS TABLE OF c_match_amount_int%ROWTYPE INDEX BY BINARY_INTEGER;
7637     match_amounts_int_list inl_match_amounts_int_type_tbl;
7638 
7639     -- Cursor to get all PENDING matches from the
7640     -- Interface table based on a given group id
7641     CURSOR c_match_int
7642     IS
7643          SELECT match_int_id      ,
7644             group_id              ,
7645             processing_status_code,
7646             transaction_type      ,
7647             match_type_code       ,
7648             null,
7649             from_parent_table_name,
7650             from_parent_table_id  ,
7651             to_parent_table_name  ,
7652             to_parent_table_id    ,
7653             null,
7654             matched_qty                 ,
7655             matched_uom_code            ,
7656             matched_amt                 ,
7657             matched_curr_code           ,
7658             matched_curr_conversion_type,
7659             matched_curr_conversion_date,
7660             matched_curr_conversion_rate,
7661             replace_estim_qty_flag      ,
7662             null,
7663             charge_line_type_id  ,
7664             party_id             ,
7665             party_number         ,
7666             party_site_id        ,
7667             party_site_number    ,
7668             tax_code             ,
7669             nrec_tax_amt         ,
7670             tax_amt_included_flag,
7671             match_amount_int_id,
7672             null
7673           FROM inl_matches_int m
7674           WHERE (p_group_id   IS NULL
7675                  OR m.group_id = p_group_id)
7676           AND m.processing_status_code = 'PENDING';
7677     match_int_list match_int_list_type;
7678 
7679 
7680     l_proc_name         CONSTANT VARCHAR2(100) := 'Run_MatchPreProcessor';
7681     l_return_status     VARCHAR2(1) ;
7682     l_msg_count         NUMBER;
7683     l_msg_data          VARCHAR2(2000) ;
7684     l_debug_info        VARCHAR2(200) ;
7685     l_import_validation BOOLEAN;
7686     l_amt_sum           NUMBER;
7687     l_processing_status_code VARCHAR2(30) ;
7688 BEGIN
7689     -- Standard Beginning of Procedure/Function Logging
7690     INL_LOGGING_PVT.Log_BeginProc(
7691         p_module_name    => g_module_name,
7692         p_procedure_name => l_proc_name
7693     ) ;
7694     --  Initialize API return status to success
7695     x_return_status := FND_API.G_RET_STS_SUCCESS;
7696     OPEN c_match_int;
7697     FETCH c_match_int
7698     BULK COLLECT INTO match_int_list;
7699     CLOSE c_match_int;
7700 
7701     IF NVL(match_int_list.LAST, 0) > 0 THEN
7702         FOR i IN match_int_list.FIRST .. match_int_list.LAST
7703         LOOP
7704             INL_LOGGING_PVT.Log_Variable(
7705                 p_module_name    => g_module_name,
7706                 p_procedure_name => l_proc_name,
7707                 p_var_name       => 'match_int_list(i).match_int_id',
7708                 p_var_value      => match_int_list(i).match_int_id
7709             ) ;
7710 
7711             INL_LOGGING_PVT.Log_Variable(
7712                 p_module_name    => g_module_name,
7713                 p_procedure_name => l_proc_name,
7714                 p_var_name       => 'match_int_list(i).transaction_type',
7715                 p_var_value      => match_int_list(i).transaction_type
7716             ) ;
7717 
7718             INL_LOGGING_PVT.Log_Variable(
7719                 p_module_name    => g_module_name,
7720                 p_procedure_name => l_proc_name,
7721                 p_var_name       => 'match_int_list(i).to_parent_table_name',
7722                 p_var_value      => match_int_list(i).to_parent_table_name
7723             ) ;
7724 
7725             INL_LOGGING_PVT.Log_Variable(
7726                 p_module_name    => g_module_name,
7727                 p_procedure_name => l_proc_name,
7728                 p_var_name       => 'match_int_list(i).to_parent_table_id',
7729                 p_var_value      => match_int_list(i).to_parent_table_id
7730             ) ;
7731 
7732             l_debug_info := 'Delete errors from previous analysis performed on the current line. Call Reset_InterfError';
7733             INL_LOGGING_PVT.Log_Statement(
7734                 p_module_name      => g_module_name,
7735                 p_procedure_name   => l_proc_name,
7736                 p_debug_info       => l_debug_info
7737             );
7738             Reset_InterfError(
7739                 p_parent_table_name       => 'INL_MATCHES_INT',
7740                 p_parent_table_id => match_int_list(i) .match_int_id,
7741                 x_return_status => l_return_status
7742             ) ;
7743             -- If any errors happen abort the process.
7744             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7745                 RAISE FND_API.G_EXC_ERROR;
7746             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7747                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7748             END IF;
7749             l_debug_info := 'Call Derive_MatchCols';
7750             INL_LOGGING_PVT.Log_Statement(
7751                 p_module_name      => g_module_name,
7752                 p_procedure_name   => l_proc_name,
7753                 p_debug_info       => l_debug_info
7754             );
7755             Derive_MatchCols(
7756                 p_party_number          => match_int_list(i).party_number,
7757                 p_party_site_number     => match_int_list(i) .party_site_number,
7758                 p_match_type_code       => match_int_list(i) .match_type_code,
7759                 p_to_parent_table_name  => match_int_list(i) .to_parent_table_name,
7760                 p_to_parent_table_id    => match_int_list(i) .to_parent_table_id,
7761                 p_party_id              => match_int_list(i) .party_id,
7762                 p_party_site_id         => match_int_list(i) .party_site_id,
7763                 p_parent_match_id       => match_int_list(i) .parent_match_id,
7764                 x_return_status         => l_return_status) ;
7765             -- If any errors happen abort the process.
7766             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7767                 RAISE FND_API.G_EXC_ERROR;
7768             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7769                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7770             END IF;
7771             l_debug_info := 'Validate Match before import it from interface. Call Validate_MatchInt';
7772             INL_LOGGING_PVT.Log_Statement(
7773                 p_module_name      => g_module_name,
7774                 p_procedure_name   => l_proc_name,
7775                 p_debug_info       => l_debug_info
7776             );
7777 
7778             l_import_validation := Validate_MatchInt(p_match_int_rec => match_int_list(i), x_return_status => l_return_status) ;
7779             -- If any errors happen abort the process.
7780 
7781             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7782                 RAISE FND_API.G_EXC_ERROR;
7783             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7784                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7785             END IF;
7786             -- Validation has been executed successfully and
7787             -- processing status code has been changed to RUNNING
7788             IF(l_import_validation = TRUE) THEN
7789                 l_debug_info := 'Set Interface Status to RUNNING';
7790                 INL_LOGGING_PVT.Log_Statement(
7791                     p_module_name      => g_module_name,
7792                     p_procedure_name   => l_proc_name,
7793                     p_debug_info       => l_debug_info
7794                 );
7795 
7796                 UPDATE inl_matches_int
7797                 SET processing_status_code = 'RUNNING'                        ,
7798                     party_id               = match_int_list(i).party_id     ,
7799                     party_site_id          = match_int_list(i).party_site_id,
7800                     request_id             = fnd_global.conc_request_id       ,
7801                     last_updated_by        = fnd_global.user_id               ,
7802                     last_update_date       = SYSDATE                          ,
7803                     last_update_login      = fnd_global.login_id              ,
7804                     program_id             = fnd_global.conc_program_id       ,
7805                     program_update_date    = SYSDATE                          ,
7806                     program_application_id = fnd_global.prog_appl_id
7807                 WHERE match_int_id       = match_int_list(i).match_int_id;
7808 
7809             END IF;
7810 
7811         END LOOP;
7812     ELSE
7813         -- Add a line into inl_ship_errors
7814         Handle_InterfError(
7815             p_parent_table_name  => 'INL_MATCHES_INT',
7816             p_parent_table_id    => 0,
7817             p_column_name        => 'P_GROUP_ID',
7818             p_column_value       => p_group_id,
7819             p_error_message_name => 'INL_NO_RECORDS_FOUND_ERR',
7820             x_return_status      => l_return_status
7821         );
7822         -- If unexpected errors happen abort
7823         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7824             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7825         END IF;
7826     END IF;
7827 
7828     OPEN c_match_amount_int;
7829     FETCH c_match_amount_int
7830     BULK COLLECT INTO match_amounts_int_list;
7831     CLOSE c_match_amount_int;
7832 
7833     IF NVL(match_amounts_int_list.LAST, 0) > 0 THEN
7834         FOR i IN match_amounts_int_list.FIRST .. match_amounts_int_list.LAST
7835         LOOP
7836             INL_LOGGING_PVT.Log_Variable(
7837                 p_module_name    => g_module_name,
7838                 p_procedure_name => l_proc_name,
7839                 p_var_name       => 'match_amounts_int_list(i).match_amount_int_id',
7840                 p_var_value      => match_amounts_int_list(i).match_amount_int_id
7841             ) ;
7842             INL_LOGGING_PVT.Log_Variable(
7843                 p_module_name    => g_module_name,
7844                 p_procedure_name => l_proc_name,
7845                 p_var_name       => 'match_amounts_int_list(i).transaction_type',
7846                 p_var_value      => match_amounts_int_list(i).transaction_type
7847             ) ;
7848             l_debug_info := 'Delete errors from previous analysis performed on the current line. Call Reset_InterfError';
7849             INL_LOGGING_PVT.Log_Statement(
7850                 p_module_name      => g_module_name,
7851                 p_procedure_name   => l_proc_name,
7852                 p_debug_info       => l_debug_info
7853             );
7854             Reset_InterfError(
7855                 p_parent_table_name => 'INL_MATCH_AMOUNTS_INT',
7856                 p_parent_table_id   => match_amounts_int_list(i).match_amount_int_id,
7857                 x_return_status     => l_return_status) ;
7858             -- If any errors happen abort the process.
7859             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7860                 RAISE FND_API.G_EXC_ERROR;
7861             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7862                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7863             END IF;
7864 
7865             SELECT SUM(matched_amt)
7866             INTO l_amt_sum
7867             FROM inl_matches_int m
7868             WHERE m.match_amount_int_id = match_amounts_int_list(i).match_amount_int_id
7869             AND m.matched_curr_code = match_amounts_int_list(i).matched_curr_code
7870             ;
7871             IF l_amt_sum <> match_amounts_int_list(i).matched_amt THEN
7872                 l_processing_status_code := 'ERROR';
7873                 UPDATE inl_matches_int m
7874                 SET processing_status_code = 'ERROR'
7875                 WHERE m.match_amount_int_id = match_amounts_int_list(i).match_amount_int_id
7876                 ;
7877                 -- Add a line into inl_ship_errors
7878                 Handle_InterfError(
7879                     p_parent_table_name  => 'INL_MATCH_AMOUNTS_INT',
7880                     p_parent_table_id    => match_amounts_int_list(i).match_amount_int_id,
7881                     p_column_name        => 'P_GROUP_ID',
7882                     p_column_value       => P_GROUP_ID,
7883                     p_token1_name        => 'AMT1',
7884                     p_token1_value       => match_amounts_int_list(i).matched_amt,
7885                     p_token2_name        => 'AMT2',
7886                     p_token2_value       => l_amt_sum,
7887                     p_error_message_name => 'INL_ERR_OI_MAT_AMOUNTS_AMT',
7888                     x_return_status      => l_return_status
7889                 ) ;
7890             ELSE
7891                 l_processing_status_code := 'RUNNING';
7892             END IF;
7893             l_debug_info := 'Validate Match before import it from interface. Call Validate_MatchInt';
7894             INL_LOGGING_PVT.Log_Statement(
7895                 p_module_name      => g_module_name,
7896                 p_procedure_name   => l_proc_name,
7897                 p_debug_info       => l_debug_info
7898             );
7899             l_import_validation                         := Validate_MatchInt(p_match_int_rec => match_int_list(i), x_return_status => l_return_status) ;
7900             -- If any errors happen abort the process.
7901             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7902                 RAISE FND_API.G_EXC_ERROR;
7903             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7904                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7905             END IF;
7906             -- Validation has been executed successfully and
7907             -- processing status code has been changed to RUNNING
7908             IF(l_import_validation = TRUE) THEN
7909                 l_debug_info := 'Set Interface Status to RUNNING';
7910                 INL_LOGGING_PVT.Log_Statement(
7911                     p_module_name      => g_module_name,
7912                     p_procedure_name   => l_proc_name,
7913                     p_debug_info       => l_debug_info
7914                 );
7915                 UPDATE inl_matches_int
7916                 SET processing_status_code = l_processing_status_code         ,
7917                     party_id               = match_int_list(i) .party_id     ,
7918                     party_site_id          = match_int_list(i) .party_site_id,
7919                     request_id             = fnd_global.conc_request_id       ,
7920                     last_updated_by        = fnd_global.user_id               ,
7921                     last_update_date       = SYSDATE                          ,
7922                     last_update_login      = fnd_global.login_id              ,
7923                     program_id             = fnd_global.conc_program_id       ,
7924                     program_update_date    = SYSDATE                          ,
7925                     program_application_id = fnd_global.prog_appl_id
7926                 WHERE match_int_id       = match_int_list(i) .match_int_id;
7927             END IF;
7928         END LOOP;
7929     END IF;
7930 
7931     -- Standard End of Procedure/Function Logging
7932     INL_LOGGING_PVT.Log_EndProc(
7933         p_module_name    => g_module_name,
7934         p_procedure_name => l_proc_name
7935     );
7936 EXCEPTION
7937     WHEN FND_API.G_EXC_ERROR THEN
7938         -- Standard Expected Error Logging
7939         INL_LOGGING_PVT.Log_ExpecError (
7940             p_module_name    => g_module_name,
7941             p_procedure_name => l_proc_name
7942         );
7943         x_return_status := FND_API.G_RET_STS_ERROR;
7944     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7945         -- Standard Unexpected Error Logging
7946         INL_LOGGING_PVT.Log_UnexpecError (
7947             p_module_name    => g_module_name,
7948             p_procedure_name => l_proc_name
7949         );
7950         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7951     WHEN OTHERS THEN
7952         -- Standard Unexpected Error Logging
7953         INL_LOGGING_PVT.Log_UnexpecError (
7954             p_module_name    => g_module_name,
7955             p_procedure_name => l_proc_name
7956         );
7957         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7958         IF FND_MSG_PUB.Check_Msg_Level(
7959             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
7960         ) THEN
7961             FND_MSG_PUB.Add_Exc_Msg(
7962                 p_pkg_name       => g_pkg_name,
7963                 p_procedure_name => l_proc_name
7964             );
7965         END IF;
7966 END Run_MatchPreProcessor;
7967 -- Utility name : Run_MatchPostProcessor
7968 -- Type       : Private
7969 -- Function   : Post processor to import Match Lines.
7970 --
7971 -- Pre-reqs   : None
7972 -- Parameters :
7973 -- IN         : p_group_id      IN NUMBER
7974 --
7975 -- OUT        : x_return_status OUT NOCOPY VARCHAR2
7976 --
7977 -- Version    : Current version 1.0
7978 --
7979 -- Notes      :
7980 PROCEDURE Run_MatchPostProcessor(
7981     p_group_id IN NUMBER,
7982     x_return_status OUT NOCOPY VARCHAR2
7983 ) IS
7984     l_proc_name     CONSTANT VARCHAR2(100) := 'Run_MatchPostProcessor';
7985     l_return_status VARCHAR2(1) ;
7986     l_debug_info    VARCHAR2(200) ;
7987 BEGIN
7988     -- Standard Beginning of Procedure/Function Logging
7989     INL_LOGGING_PVT.Log_BeginProc(
7990         p_module_name    => g_module_name,
7991         p_procedure_name => l_proc_name
7992     ) ;
7993     --  Initialize API return status to success
7994     x_return_status := FND_API.G_RET_STS_SUCCESS;
7995     l_debug_info := 'Import Matches. Call Import_Matches';
7996     INL_LOGGING_PVT.Log_Statement(
7997         p_module_name      => g_module_name,
7998         p_procedure_name   => l_proc_name,
7999         p_debug_info       => l_debug_info
8000     );
8001     Import_Matches(p_group_id      => p_group_id,
8002                    x_return_status => l_return_status) ;
8003     -- If any errors happen abort API.
8004     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8005         RAISE FND_API.G_EXC_ERROR;
8006     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8007         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8008     END IF;
8009     -- Standard End of Procedure/Function Logging
8010     INL_LOGGING_PVT.Log_EndProc(
8011         p_module_name    => g_module_name,
8012         p_procedure_name => l_proc_name
8013     );
8014 EXCEPTION
8015     WHEN FND_API.G_EXC_ERROR THEN
8016         -- Standard Expected Error Logging
8017         INL_LOGGING_PVT.Log_ExpecError (
8018             p_module_name    => g_module_name,
8019             p_procedure_name => l_proc_name
8020         );
8021         x_return_status := FND_API.G_RET_STS_ERROR;
8022     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8023         -- Standard Unexpected Error Logging
8024         INL_LOGGING_PVT.Log_UnexpecError (
8025             p_module_name    => g_module_name,
8026             p_procedure_name => l_proc_name
8027         );
8028         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8029     WHEN OTHERS THEN
8030         -- Standard Unexpected Error Logging
8031         INL_LOGGING_PVT.Log_UnexpecError (
8032             p_module_name    => g_module_name,
8033             p_procedure_name => l_proc_name
8034         );
8035         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8036         IF FND_MSG_PUB.Check_Msg_Level(
8037             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
8038         ) THEN
8039             FND_MSG_PUB.Add_Exc_Msg(
8040                 p_pkg_name       => g_pkg_name,
8041                 p_procedure_name => l_proc_name
8042             );
8043         END IF;
8044 END Run_MatchPostProcessor;
8045 -- Utility name : Run_ShipPreProcessor
8046 -- Type       : Private
8047 -- Function   : Executes the first set of validations before import a Shipment.
8048 --
8049 -- Pre-reqs   : None
8050 -- Parameters :
8051 -- IN         : p_group_id       IN  NUMBER
8052 --              p_org_id         IN  NUMBER
8053 --
8054 -- OUT        : x_return_status  OUT NOCOPY VARCHAR2
8055 --
8056 -- Version    : Current version 1.0
8057 --
8058 -- Notes      :
8059 PROCEDURE Run_ShipPreProcessor(
8060     p_group_id      IN NUMBER,
8061     p_org_id        IN NUMBER,
8062     x_return_status OUT NOCOPY VARCHAR2
8063 ) IS
8064     -- Cursor to get all PENDING Shipments from the
8065     -- Interface table based on a given group id
8066     CURSOR c_ship_hdr_int
8067     IS
8068          SELECT ship_header_int_id,
8069             validation_flag       ,
8070             last_task_code        ,
8071             organization_id       ,
8072             org_id                ,
8073             transaction_type      ,
8074             ship_header_id        ,
8075             ship_num              ,
8076             ship_type_id
8077            FROM inl_ship_headers_int h
8078           WHERE
8079            (
8080                 p_group_id   IS NULL
8081                 OR h.group_id = p_group_id
8082             )
8083             AND (
8084                  p_org_id IS NULL
8085             OR   h.org_id = p_org_id
8086 
8087             )
8088             AND h.processing_status_code = 'PENDING'
8089             AND
8090            (
8091                 h.transaction_type = 'DELETE'
8092                 OR EXISTS
8093                (
8094                      SELECT 1
8095                        FROM inl_ship_lines_int l
8096                       WHERE l.ship_header_int_id = h.ship_header_int_id
8097                         AND ROWNUM               < 2
8098                 )
8099             ) ;
8100 
8101     TYPE ship_hdr_int_list_type IS TABLE OF c_ship_hdr_int%ROWTYPE;
8102     ship_hdr_int_list ship_hdr_int_list_type;
8103 
8104     -- Cursor to get all PENDING Shipments Lines from the
8105     -- Interface table based on a given ship_header_int_id
8106     CURSOR c_ship_lin_int (p_ship_header_int_id number)
8107     IS
8108          SELECT
8109             ship_header_int_id    ,
8110             ship_line_int_id      ,
8111             ship_line_type_id
8112          FROM inl_ship_lines_int l
8113          WHERE l.processing_status_code = 'PENDING'
8114          AND l.ship_header_int_id = p_ship_header_int_id;
8115 
8116     TYPE ship_lin_int_list_type IS TABLE OF c_ship_lin_int%ROWTYPE;
8117     ship_lin_int_list ship_lin_int_list_type;
8118 
8119     l_proc_name          CONSTANT VARCHAR2(100) := 'Run_ShipPreProcessor';
8120     l_return_status      VARCHAR2(1) ;
8121     l_msg_count          NUMBER;
8122     l_msg_data           VARCHAR2(2000) ;
8123     l_debug_info         VARCHAR2(200) ;
8124     l_import_validation  BOOLEAN;
8125     l_ship_header_int_id NUMBER;
8126     l_organization_id    NUMBER;
8127     l_org_id             NUMBER;
8128     l_validation_flag    VARCHAR2(1) ;
8129 BEGIN
8130     -- Standard Beginning of Procedure/Function Logging
8131     INL_LOGGING_PVT.Log_BeginProc(
8132         p_module_name    => g_module_name,
8133         p_procedure_name => l_proc_name
8134     ) ;
8135     --  Initialize API return status to success
8136     x_return_status := FND_API.G_RET_STS_SUCCESS;
8137     OPEN c_ship_hdr_int;
8138     FETCH c_ship_hdr_int BULK COLLECT INTO ship_hdr_int_list;
8139 
8140     CLOSE c_ship_hdr_int;
8141     IF NVL(ship_hdr_int_list.LAST, 0) > 0 THEN
8142         FOR i IN ship_hdr_int_list.FIRST .. ship_hdr_int_list.LAST
8143         LOOP
8144             l_ship_header_int_id := ship_hdr_int_list(i) .ship_header_int_id;
8145             l_org_id             := ship_hdr_int_list(i) .org_id;
8146             l_organization_id    := ship_hdr_int_list(i) .organization_id;
8147             l_validation_flag    := ship_hdr_int_list(i) .validation_flag;
8148             INL_LOGGING_PVT.Log_Variable(
8149                 p_module_name    => g_module_name,
8150                 p_procedure_name => l_proc_name,
8151                 p_var_name       => 'l_ship_header_int_id',
8152                 p_var_value      => l_ship_header_int_id
8153             ) ;
8154 
8155             INL_LOGGING_PVT.Log_Variable(
8156                 p_module_name    => g_module_name,
8157                 p_procedure_name => l_proc_name,
8158                 p_var_name       => 'l_org_id',
8159                 p_var_value      => l_org_id
8160             ) ;
8161 
8162             INL_LOGGING_PVT.Log_Variable(
8163                 p_module_name    => g_module_name,
8164                 p_procedure_name => l_proc_name,
8165                 p_var_name       => 'l_organization_id',
8166                 p_var_value      => l_organization_id
8167             ) ;
8168 
8169             INL_LOGGING_PVT.Log_Variable(
8170                 p_module_name    => g_module_name,
8171                 p_procedure_name => l_proc_name,
8172                 p_var_name       => 'l_validation_flag',
8173                 p_var_value      => l_validation_flag
8174             ) ;
8175 
8176             INL_LOGGING_PVT.Log_Variable(
8177                 p_module_name    => g_module_name,
8178                 p_procedure_name => l_proc_name,
8179                 p_var_name       => 'ship_hdr_int_list(i).last_task_code',
8180                 p_var_value      => ship_hdr_int_list(i).last_task_code
8181             ) ;
8182 
8183             INL_LOGGING_PVT.Log_Variable(
8184                 p_module_name    => g_module_name,
8185                 p_procedure_name => l_proc_name,
8186                 p_var_name       => 'ship_hdr_int_list(i).transaction_type',
8187                 p_var_value      => ship_hdr_int_list(i).transaction_type
8188             ) ;
8189 
8190             INL_LOGGING_PVT.Log_Variable(
8191                 p_module_name    => g_module_name,
8192                 p_procedure_name => l_proc_name,
8193                 p_var_name       => 'ship_hdr_int_list(i).ship_header_id',
8194                 p_var_value      => ship_hdr_int_list(i).ship_header_id
8195             ) ;
8196 
8197             l_debug_info := 'Delete errors from previous analysis. Call Reset_InterfError';
8198             INL_LOGGING_PVT.Log_Statement(
8199                 p_module_name      => g_module_name,
8200                 p_procedure_name   => l_proc_name,
8201                 p_debug_info       => l_debug_info
8202             );
8203             Reset_InterfError(p_parent_table_name => 'INL_SHIP_HEADERS_INT', p_parent_table_id => ship_hdr_int_list(i) .ship_header_int_id, x_return_status => l_return_status) ;
8204             -- If any errors happen abort API.
8205             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8206                 RAISE FND_API.G_EXC_ERROR;
8207             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8208                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8209             END IF;
8210             INL_LOGGING_PVT.Log_APICallIn( p_module_name => g_module_name,
8211                                            p_procedure_name => l_proc_name,
8212                                            p_call_api_name => 'Derive_ShipHeaderCols',
8213                                            p_in_param_name1 => 'i',
8214                                            p_in_param_value1 => i,
8215                                            p_in_param_name2 => NULL,
8216                                            p_in_param_value2 => NULL,
8217                                            p_in_param_name3 => NULL,
8218                                            p_in_param_value3 => NULL,
8219                                            p_in_param_name4 => NULL,
8220                                            p_in_param_value4 => NULL,
8221                                            p_in_param_name5 => NULL,
8222                                            p_in_param_value5 => NULL,
8223                                            p_in_param_name6 => NULL,
8224                                            p_in_param_value6 => NULL,
8225                                            p_in_param_name7 => NULL,
8226                                            p_in_param_value7 => NULL,
8227                                            p_in_param_name8 => NULL,
8228                                            p_in_param_value8 => NULL,
8229                                            p_in_param_name9 => NULL,
8230                                            p_in_param_value9 => NULL,
8231                                            p_in_param_name10 => NULL,
8232                                            p_in_param_value10 => NULL) ;
8233             Derive_ShipHeaderCols(p_ship_header_int_id   => ship_hdr_int_list(i) .ship_header_int_id, p_organization_id => ship_hdr_int_list(i) .organization_id, x_return_status => l_return_status) ;
8234             -- If any errors happen abort API.
8235             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8236                 RAISE FND_API.G_EXC_ERROR;
8237             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8238                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8239             END IF;
8240             INL_LOGGING_PVT.Log_APICallIn( p_module_name => g_module_name,
8241                                            p_procedure_name => l_proc_name,
8242                                            p_call_api_name => 'Derive_ShipLineCols',
8243                                            p_in_param_name1 => 'i',
8244                                            p_in_param_value1 => i,
8245                                            p_in_param_name2 => NULL,
8246                                            p_in_param_value2 => NULL,
8247                                            p_in_param_name3 => NULL,
8248                                            p_in_param_value3 => NULL,
8249                                            p_in_param_name4 => NULL,
8250                                            p_in_param_value4 => NULL,
8251                                            p_in_param_name5 => NULL,
8252                                            p_in_param_value5 => NULL,
8253                                            p_in_param_name6 => NULL,
8254                                            p_in_param_value6 => NULL,
8255                                            p_in_param_name7 => NULL,
8256                                            p_in_param_value7 => NULL,
8257                                            p_in_param_name8 => NULL,
8258                                            p_in_param_value8 => NULL,
8259                                            p_in_param_name9 => NULL,
8260                                            p_in_param_value9 => NULL,
8261                                            p_in_param_name10 => NULL,
8262                                            p_in_param_value10 => NULL) ;
8263             Derive_ShipLineCols(p_ship_header_int_id     => ship_hdr_int_list(i) .ship_header_int_id, p_organization_id => ship_hdr_int_list(i) .organization_id, x_return_status => l_return_status) ;
8264             -- If any errors happen abort API.
8265             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8266                 RAISE FND_API.G_EXC_ERROR;
8267             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8268                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8269             END IF;
8270             -- When Validation_Flag = Y, it means that
8271             -- we must execute the first level validation
8272             IF(l_validation_flag = 'Y') THEN
8273                 l_debug_info := 'Validate before import from interface. Call Validate_LCMImport';
8274                 INL_LOGGING_PVT.Log_Statement(
8275                     p_module_name      => g_module_name,
8276                     p_procedure_name   => l_proc_name,
8277                     p_debug_info       => l_debug_info
8278                 );
8279                 l_import_validation := Validate_LCMImport(
8280                     p_ship_header_int_id => l_ship_header_int_id,
8281                     p_org_id            => l_org_id,
8282                     p_organization_id   => l_organization_id,
8283                     p_transaction_type  => ship_hdr_int_list(i).transaction_type,
8284                     p_last_task_code    => ship_hdr_int_list(i).last_task_code,
8285                     p_ship_num          => ship_hdr_int_list(i).ship_num,
8286                     p_ship_header_id    => ship_hdr_int_list(i).ship_header_id,
8287                     p_ship_type_id      => ship_hdr_int_list(i).ship_type_id,
8288                     x_return_status     => l_return_status) ;
8289                 -- If any errors happen abort API.
8290                 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8291                     RAISE FND_API.G_EXC_ERROR;
8292                 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8293                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8294                 END IF;
8295                 OPEN c_ship_lin_int(l_ship_header_int_id);
8296                 FETCH c_ship_lin_int BULK COLLECT INTO ship_lin_int_list;
8297 
8298                 CLOSE c_ship_lin_int;
8299                 IF NVL(ship_lin_int_list.LAST, 0) > 0 THEN
8300                     FOR j IN ship_lin_int_list.FIRST .. ship_lin_int_list.LAST
8301                     LOOP
8302                         l_debug_info := 'Validate before import from interface. Call Validate_LCMImport';
8303                         INL_LOGGING_PVT.Log_Statement(
8304                             p_module_name      => g_module_name,
8305                             p_procedure_name   => l_proc_name,
8306                             p_debug_info       => l_debug_info
8307                         );
8308                         l_import_validation := Validate_ShipLinImport(
8309                             p_ship_header_int_id => l_ship_header_int_id,
8310                             p_ship_line_int_id   => ship_lin_int_list(j).ship_line_int_id,
8311                             p_ship_type_id       => ship_hdr_int_list(i).ship_type_id, --pay attention to idx
8312                             p_ship_line_type_id  => ship_lin_int_list(j).ship_line_type_id,
8313                             x_return_status      => l_return_status) ;
8314                         -- If any errors happen abort API.
8315                         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8316                             RAISE FND_API.G_EXC_ERROR;
8317                         ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8318                             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8319                         END IF;
8320                     END LOOP;
8321                 END IF;
8322             END IF;
8323             -- When validation_flag = N, it means that we're not
8324             -- supposed to execute the first level validation.
8325             -- In both cases(Validation flag = N or validation
8326             -- flag = Y) and if validation completes with no errors,
8327             -- processing status code is changed to RUNNING
8328             IF((l_validation_flag = 'N') OR
8329                (
8330                     l_validation_flag = 'Y' AND l_import_validation = TRUE
8331                 )
8332                 ) THEN
8333                 IF ship_hdr_int_list(i).last_task_code >= '10' THEN -- check if import will be executed
8334                     l_debug_info := 'Change Interface Status Code to RUNNING';
8335                     INL_LOGGING_PVT.Log_Statement(
8336                         p_module_name      => g_module_name,
8337                         p_procedure_name   => l_proc_name,
8338                         p_debug_info       => l_debug_info
8339                     );
8340                      UPDATE inl_ship_headers_int
8341                     SET processing_status_code = 'RUNNING'                 ,
8342                         request_id             = fnd_global.conc_request_id,
8343                         last_updated_by        = fnd_global.user_id        ,
8344                         last_update_date       = SYSDATE                   ,
8345                         last_update_login      = fnd_global.login_id       ,
8346                         program_id             = fnd_global.conc_program_id,
8347                         program_update_date    = SYSDATE                   ,
8348                         program_application_id = fnd_global.prog_appl_id
8349                       WHERE ship_header_int_id = l_ship_header_int_id;
8350                      UPDATE inl_ship_lines_int
8351                     SET processing_status_code     = 'RUNNING'                 ,
8352                         request_id                 = fnd_global.conc_request_id,
8353                         last_updated_by            = fnd_global.user_id        ,
8354                         last_update_date           = SYSDATE                   ,
8355                         last_update_login          = fnd_global.login_id       ,
8356                         program_id                 = fnd_global.conc_program_id,
8357                         program_update_date        = SYSDATE                   ,
8358                         program_application_id     = fnd_global.prog_appl_id
8359                       WHERE ship_header_int_id     = l_ship_header_int_id
8360                         AND processing_status_code = 'PENDING';
8361                 ELSE
8362                     l_debug_info := 'Change Interface Status Code to COMPLETED';
8363                     INL_LOGGING_PVT.Log_Statement(
8364                         p_module_name      => g_module_name,
8365                         p_procedure_name   => l_proc_name,
8366                         p_debug_info       => l_debug_info
8367                     );
8368                      UPDATE inl_ship_headers_int
8369                     SET processing_status_code = 'COMPLETED'               ,
8370                         request_id             = fnd_global.conc_request_id,
8371                         last_updated_by        = fnd_global.user_id        ,
8372                         last_update_date       = SYSDATE                   ,
8373                         last_update_login      = fnd_global.login_id       ,
8374                         program_id             = fnd_global.conc_program_id,
8375                         program_update_date    = SYSDATE                   ,
8376                         program_application_id = fnd_global.prog_appl_id
8377                       WHERE ship_header_int_id = l_ship_header_int_id;
8378                      UPDATE inl_ship_lines_int
8379                     SET processing_status_code     = 'COMPLETED'               ,
8380                         request_id                 = fnd_global.conc_request_id,
8381                         last_updated_by            = fnd_global.user_id        ,
8382                         last_update_date           = SYSDATE                   ,
8383                         last_update_login          = fnd_global.login_id       ,
8384                         program_id                 = fnd_global.conc_program_id,
8385                         program_update_date        = SYSDATE                   ,
8386                         program_application_id     = fnd_global.prog_appl_id
8387                       WHERE ship_header_int_id     = l_ship_header_int_id
8388                         AND processing_status_code = 'PENDING';
8389                 END IF;
8390             END IF;
8391         END LOOP;
8392     END IF;
8393     -- Standard End of Procedure/Function Logging
8394     INL_LOGGING_PVT.Log_EndProc(
8395         p_module_name    => g_module_name,
8396         p_procedure_name => l_proc_name
8397     );
8398 EXCEPTION
8399     WHEN FND_API.G_EXC_ERROR THEN
8400         -- Standard Expected Error Logging
8401         INL_LOGGING_PVT.Log_ExpecError (
8402             p_module_name    => g_module_name,
8403             p_procedure_name => l_proc_name
8404         );
8405         x_return_status := FND_API.G_RET_STS_ERROR;
8406     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8407         -- Standard Unexpected Error Logging
8408         INL_LOGGING_PVT.Log_UnexpecError (
8409             p_module_name    => g_module_name,
8410             p_procedure_name => l_proc_name
8411         );
8412         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8413     WHEN OTHERS THEN
8414         -- Standard Unexpected Error Logging
8415         INL_LOGGING_PVT.Log_UnexpecError (
8416             p_module_name    => g_module_name,
8417             p_procedure_name => l_proc_name
8418         );
8419         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8420         IF FND_MSG_PUB.Check_Msg_Level(
8421             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
8422         ) THEN
8423             FND_MSG_PUB.Add_Exc_Msg(
8424                 p_pkg_name       => g_pkg_name,
8425                 p_procedure_name => l_proc_name
8426             );
8427         END IF;
8428 END Run_ShipPreProcessor;
8429 -- Utility name : Run_ShipPostProcessor
8430 -- Type       : Private
8431 -- Function   : Import Shipments and based on a selected value
8432 --             (Last Task Code), execute all necessary steps to validate,
8433 --              calculate, complete and integrate with other applications
8434 --              in order to generate a suiatble INL Shipment.
8435 --
8436 -- Pre-reqs   : None
8437 -- Parameters :
8438 -- IN         : p_group_id      IN NUMBER
8439 -- IN         : p_org_id        IN NUMBER  => Operating unit
8440 --
8441 -- OUT        : x_return_status OUT NOCOPY VARCHAR2
8442 --
8443 -- Version    : Current version 1.0
8444 --
8445 -- Notes      :
8446 PROCEDURE Run_ShipPostProcessor(
8447     p_group_id      IN NUMBER,
8448     p_org_id        IN NUMBER,
8449     x_return_status OUT NOCOPY VARCHAR2
8450 ) IS
8451     -- Cursor to get all interfaced and COMPLETED
8452     -- Shipments to validate and Last Task Code
8453     -- value to control dynamically the
8454     -- Post process actions
8455     CURSOR c_ship_headers
8456     IS
8457          SELECT h.ship_header_id,
8458             h.ship_header_int_id,
8459             h.last_task_code    ,
8460             h.transaction_type
8461            FROM inl_ship_headers_int h
8462           WHERE
8463            (
8464                 p_group_id   IS NULL
8465                 OR h.group_id = p_group_id
8466             )
8467             AND (
8468                  p_org_id IS NULL
8469             OR   h.org_id = p_org_id
8470 
8471             )
8472             AND h.processing_status_code = 'COMPLETED'
8473             AND h.transaction_type      <> 'DELETE'
8474             AND h.last_task_code        >= '20'
8475             AND EXISTS
8476            (
8477                  SELECT 1
8478                    FROM inl_ship_lines_int l
8479                   WHERE l.ship_header_int_id = h.ship_header_int_id
8480                     AND ROWNUM               < 2
8481             )
8482         AND h.request_id = fnd_global.conc_request_id;
8483 
8484     TYPE ship_hdr_list_type IS  TABLE OF c_ship_headers%ROWTYPE;
8485     ship_hdr_list ship_hdr_list_type;
8486     l_proc_name          CONSTANT VARCHAR2(100) := 'Run_ShipPostProcessor';
8487     l_return_status      VARCHAR2(1) ;
8488     l_init_msg_list      VARCHAR2(2000) := FND_API.G_FALSE;
8489     l_commit             VARCHAR2(1)    := FND_API.G_FALSE;
8490     l_validation_level   NUMBER          := FND_API.G_VALID_LEVEL_FULL;
8491     l_debug_info         VARCHAR2(200) ;
8492     l_msg_data           VARCHAR2(2000) ;
8493     l_msg_count          NUMBER;
8494     l_msg_count_validate NUMBER;
8495     l_ship_header_id     NUMBER;
8496     l_mx_last_task_code  VARCHAR2(30) ;
8497 BEGIN
8498     -- Standard Beginning of Procedure/Function Logging
8499     INL_LOGGING_PVT.Log_BeginProc(
8500         p_module_name    => g_module_name,
8501         p_procedure_name => l_proc_name
8502     ) ;
8503     --  Initialize API return status to success
8504     x_return_status := FND_API.G_RET_STS_SUCCESS;
8505     -- Get the Last Task Code to control
8506     -- which actions must be executed
8507      SELECT MAX(last_task_code)
8508        INTO l_mx_last_task_code
8509        FROM inl_ship_headers_int h
8510       WHERE (p_group_id   IS NULL
8511              OR h.group_id = p_group_id)
8512       AND (p_org_id IS NULL
8513       OR   h.org_id = p_org_id)
8514       AND h.processing_status_code = 'RUNNING'
8515       AND (h.transaction_type = 'DELETE'
8516            OR EXISTS (SELECT 1
8517                       FROM inl_ship_lines_int l
8518                       WHERE l.ship_header_int_id = h.ship_header_int_id
8519                       AND ROWNUM               < 2
8520                      )
8521           )
8522     ;
8523     IF l_mx_last_task_code >= '10' THEN
8524         l_debug_info := 'Import Shipment Headers. Call Import_Headers';
8525         INL_LOGGING_PVT.Log_Statement(
8526             p_module_name      => g_module_name,
8527             p_procedure_name   => l_proc_name,
8528             p_debug_info       => l_debug_info
8529         );
8530         Import_Headers(p_group_id       => p_group_id,
8531                        p_org_id         => p_org_id,
8532                        x_return_status  => l_return_status) ;
8533         -- If any errors happen abort API.
8534         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8535             RAISE FND_API.G_EXC_ERROR;
8536         ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8537             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8538         END IF;
8539         l_debug_info := 'Import Shipment Lines. Call Import_Lines';
8540         INL_LOGGING_PVT.Log_Statement(
8541             p_module_name      => g_module_name,
8542             p_procedure_name   => l_proc_name,
8543             p_debug_info       => l_debug_info
8544         );
8545         Import_Lines(p_group_id => p_group_id, p_org_id => p_org_id, x_return_status => l_return_status) ;
8546         -- If any errors happen abort API.
8547         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8548             RAISE FND_API.G_EXC_ERROR;
8549         ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8550             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8551         END IF;
8552         OPEN c_ship_headers;
8553         FETCH c_ship_headers BULK COLLECT INTO ship_hdr_list;
8554 
8555         CLOSE c_ship_headers;
8556         IF NVL(ship_hdr_list.LAST, 0) > 0 THEN
8557             FOR i IN ship_hdr_list.FIRST .. ship_hdr_list.LAST
8558             LOOP
8559                 l_ship_header_id := ship_hdr_list(i) .ship_header_id;
8560                 INL_LOGGING_PVT.Log_Variable(
8561                     p_module_name    => g_module_name,
8562                     p_procedure_name => l_proc_name,
8563                     p_var_name       => 'l_ship_header_id',
8564                     p_var_value      => l_ship_header_id
8565                 ) ;
8566 
8567                 INL_LOGGING_PVT.Log_Variable(
8568                     p_module_name    => g_module_name,
8569                     p_procedure_name => l_proc_name,
8570                     p_var_name       => 'ship_hdr_list(i).last_task_code',
8571                     p_var_value      => ship_hdr_list(i).last_task_code
8572                 ) ;
8573                 -- Generate Charges and Integration with QP
8574                 IF ship_hdr_list(i) .last_task_code >= '20' THEN
8575                     l_debug_info    := 'Generate Charges(Integration with QP). Call INL_CHARGE_PVT.Generate_Charges';
8576                     INL_LOGGING_PVT.Log_Statement(
8577                         p_module_name      => g_module_name,
8578                         p_procedure_name   => l_proc_name,
8579                         p_debug_info       => l_debug_info
8580                     );
8581                     INL_CHARGE_PVT.Generate_Charges(
8582                         p_api_version    => 1.0,
8583                         p_init_msg_list  => l_init_msg_list,
8584                         p_commit         => l_commit,
8585                         p_ship_header_id => l_ship_header_id,
8586                         x_return_status  => l_return_status,
8587                         x_msg_count      => l_msg_count,
8588                         x_msg_data       => l_msg_data
8589                     ) ;
8590                     -- If any errors happen abort the process.
8591                     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8592                         RAISE FND_API.G_EXC_ERROR;
8593                     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8594                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8595                     END IF;
8596                 END IF;
8597                 -- Process LCM Shipment Actions
8598                 IF ship_hdr_list(i) .last_task_code >= '30' THEN
8599                     INL_LOGGING_PVT.Log_Variable(
8600                         p_module_name    => g_module_name,
8601                         p_procedure_name => l_proc_name,
8602                         p_var_name       => 'ship_hdr_list(i).last_task_code',
8603                         p_var_value      => ship_hdr_list(i).last_task_code
8604                     ) ;
8605 
8606                     l_debug_info  := 'Call INL_SHIPMENT_PVT.ProcessAction';
8607                     INL_LOGGING_PVT.Log_Statement(
8608                         p_module_name    => g_module_name,
8609                         p_procedure_name => l_proc_name,
8610                         p_debug_info     => l_debug_info
8611                     );
8612                     INL_SHIPMENT_PVT.ProcessAction(p_api_version => 1.0,
8613                                                    p_init_msg_list => l_init_msg_list,
8614                                                    p_commit => l_commit,
8615                                                    p_ship_header_id => l_ship_header_id,
8616                                                    p_task_code => ship_hdr_list(i) .last_task_code,
8617                                                    x_return_status => l_return_status,
8618                                                    x_msg_count => l_msg_count,
8619                                                    x_msg_data => l_msg_data) ;
8620                     -- If any errors happen abort the process.
8621                     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8622                         RAISE FND_API.G_EXC_ERROR;
8623                     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8624                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8625                     END IF;
8626                 END IF;
8627             END LOOP;
8628         END IF;
8629     END IF;
8630     -- Standard End of Procedure/Function Logging
8631     INL_LOGGING_PVT.Log_EndProc(
8632         p_module_name    => g_module_name,
8633         p_procedure_name => l_proc_name
8634     );
8635 EXCEPTION
8636     WHEN FND_API.G_EXC_ERROR THEN
8637         -- Standard Expected Error Logging
8638         INL_LOGGING_PVT.Log_ExpecError (
8639             p_module_name    => g_module_name,
8640             p_procedure_name => l_proc_name
8641         );
8642         x_return_status := FND_API.G_RET_STS_ERROR;
8643     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8644         -- Standard Unexpected Error Logging
8645         INL_LOGGING_PVT.Log_UnexpecError (
8646             p_module_name    => g_module_name,
8647             p_procedure_name => l_proc_name
8648         );
8649         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8650     WHEN OTHERS THEN
8651         -- Standard Unexpected Error Logging
8652         INL_LOGGING_PVT.Log_UnexpecError (
8653             p_module_name    => g_module_name,
8654             p_procedure_name => l_proc_name
8655         );
8656         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8657         IF FND_MSG_PUB.Check_Msg_Level(
8658             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
8659         ) THEN
8660             FND_MSG_PUB.Add_Exc_Msg(
8661                 p_pkg_name       => g_pkg_name,
8662                 p_procedure_name => l_proc_name
8663             );
8664         END IF;
8665 
8666 END Run_ShipPostProcessor;
8667 -- Utility name   : Import_LCMShipments
8668 -- Type       : Public
8669 -- Function   : This is called by a concurrent program to Import Shipments.
8670 --
8671 -- Pre-reqs   : None
8672 -- Parameters :
8673 -- IN         : p_group_id      IN NUMBER
8674 --              p_org_id        IN NUMBER,  => Operating unit
8675 --
8676 -- OUT        : errbuf          OUT NOCOPY VARCHAR2
8677 --              retcode         OUT NOCOPY VARCHAR2
8678 --
8679 -- Version    : Current version 1.0
8680 --
8681 -- Notes      :
8682 PROCEDURE Import_LCMShipments(
8683     errbuf     OUT NOCOPY  VARCHAR2,
8684     retcode    OUT NOCOPY VARCHAR2,
8685     p_group_id IN NUMBER,
8686     p_org_id   IN NUMBER
8687 )  IS
8688     l_proc_name     CONSTANT VARCHAR2(30) := 'Import_LCMShipments';
8689     l_return_status VARCHAR2(1) ;
8690     l_msg_data      VARCHAR2(2000) ;
8691     l_debug_info    VARCHAR2(200) ;
8692     l_msg_count     NUMBER;
8693 BEGIN
8694     errbuf  := NULL;
8695     retcode := 0;
8696     -- Standard Beginning of Procedure/Function Logging
8697     INL_LOGGING_PVT.Log_BeginProc(
8698         p_module_name    => g_module_name,
8699         p_procedure_name => l_proc_name
8700     ) ;
8701     l_debug_info := 'Call Import_LCMShipments';
8702     INL_LOGGING_PVT.Log_Statement(
8703         p_module_name    => g_module_name,
8704         p_procedure_name => l_proc_name,
8705         p_debug_info     => l_debug_info
8706     );
8707     Import_LCMShipments(
8708         p_api_version => 1.0,
8709         p_init_msg_list => FND_API.G_TRUE,
8710         p_commit => FND_API.G_TRUE,
8711         p_group_id => p_group_id,
8712         p_org_id => p_org_id,
8713         x_return_status => l_return_status,
8714         x_msg_count => l_msg_count,
8715         x_msg_data => l_msg_data
8716     ) ;
8717     IF l_msg_count = 1 THEN
8718         FND_FILE.PUT_LINE(FND_FILE.LOG, l_msg_data);
8719         retcode := 1;
8720     ELSIF l_msg_count > 1 THEN
8721         FND_FILE.PUT_LINE(FND_FILE.LOG, l_msg_count|| ' warnings found.' );
8722         FOR i IN 1 ..l_msg_count
8723         LOOP
8724             FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.get (i, FND_API.g_false) );
8725         END LOOP;
8726         retcode := 1;
8727     END IF;
8728     -- If any errors happen abort API.
8729     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8730         RAISE FND_API.G_EXC_ERROR;
8731     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8732         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8733     END IF;
8734     -- Standard End of Procedure/Function Logging
8735     INL_LOGGING_PVT.Log_EndProc(
8736         p_module_name    => g_module_name,
8737         p_procedure_name => l_proc_name
8738     );
8739 EXCEPTION
8740     WHEN FND_API.G_EXC_ERROR THEN
8741         -- Standard Expected Error Logging
8742         INL_LOGGING_PVT.Log_ExpecError (
8743             p_module_name    => g_module_name,
8744             p_procedure_name => l_proc_name
8745         );
8746         retcode := 1;
8747     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8748         -- Standard Unexpected Error Logging
8749         INL_LOGGING_PVT.Log_UnexpecError(
8750             p_module_name    => g_module_name,
8751             p_procedure_name => l_proc_name
8752         );
8753         retcode := 2;
8754     WHEN OTHERS THEN
8755         -- Standard Unexpected Error Logging
8756         INL_LOGGING_PVT.Log_UnexpecError(
8757             p_module_name    => g_module_name,
8758             p_procedure_name => l_proc_name
8759         );
8760         retcode := 2;
8761 END Import_LCMShipments;
8762 -- API name   : Import_LCMShipments
8763 -- Type       : Public
8764 -- Function   : Main Import procedure. It calls the Pre and Post
8765 --              processors to validate and import a Shipment.
8766 --
8767 -- Pre-reqs   : None
8768 -- Parameters :
8769 -- IN         : p_api_version   IN NUMBER
8770 --              p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
8771 --              p_commit        IN VARCHAR2 := FND_API.G_FALSE
8772 --              p_group_id      IN NUMBER
8773 --              p_org_id        IN NUMBER,  => Operating unit
8774 --
8775 -- OUT        : x_return_status OUT NOCOPY VARCHAR2
8776 -- OUT        : x_msg_count     OUT NOCOPY NUMBER
8777 -- OUT        : x_msg_data      OUT NOCOPY VARCHAR2
8778 --
8779 -- Version    : Current version 1.0
8780 --
8781 -- Notes      :
8782 PROCEDURE Import_LCMShipments(
8783     p_api_version   IN NUMBER,
8784     p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
8785     p_commit        IN VARCHAR2 := FND_API.G_FALSE,
8786     p_group_id      IN NUMBER,
8787     p_org_id        IN NUMBER,
8788     x_return_status OUT NOCOPY VARCHAR2,
8789     x_msg_count     OUT NOCOPY NUMBER,
8790     x_msg_data      OUT NOCOPY VARCHAR2
8791 ) IS
8792     l_api_name      CONSTANT VARCHAR2(30) := 'Import_LCMShipments';
8793     l_api_version   CONSTANT NUMBER       := 1.0;
8794     l_return_status VARCHAR2(1);
8795     l_msg_count     NUMBER;
8796     l_msg_data      VARCHAR2(2000);
8797     l_debug_info    VARCHAR2(200);
8798 BEGIN
8799     -- Standard Beginning of Procedure/Function Logging
8800     INL_LOGGING_PVT.Log_BeginProc(
8801         p_module_name    => g_module_name,
8802         p_procedure_name => l_api_name
8803     ) ;
8804     -- Standard Start of API savepoint
8805     SAVEPOINT Import_LCMShipments_PVT;
8806     -- Initialize message list if p_init_msg_list is set to TRUE.
8807     IF FND_API.to_Boolean(p_init_msg_list) THEN
8808         FND_MSG_PUB.initialize;
8809     END IF;
8810     -- Standard call to check for call compatibility
8811     IF NOT FND_API.Compatible_API_Call(
8812             p_current_version_number => l_api_version,
8813             p_caller_version_number => p_api_version,
8814             p_api_name => l_api_name,
8815             p_pkg_name => g_pkg_name
8816     ) THEN
8817         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8818     END IF;
8819     --  Initialize API return status to success
8820     x_return_status := FND_API.G_RET_STS_SUCCESS;
8821     l_debug_info := 'Run Shipment Pre-Processor(First level validation). Call Run_ShipPreProcessor';
8822     INL_LOGGING_PVT.Log_Statement(
8823         p_module_name      => g_module_name,
8824         p_procedure_name   => l_api_name,
8825         p_debug_info       => l_debug_info
8826     );
8827     Run_ShipPreProcessor(
8828         p_group_id => p_group_id,
8829         p_org_id => p_org_id,
8830         x_return_status => l_return_status
8831     ) ;
8832     -- If any errors happen abort API.
8833     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8834         RAISE FND_API.G_EXC_ERROR;
8835     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8836         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8837     END IF;
8838     l_debug_info := 'Run Shipment Post-Processor. Call Run_ShipPostProcessor';
8839     INL_LOGGING_PVT.Log_Statement(
8840         p_module_name      => g_module_name,
8841         p_procedure_name   => l_api_name,
8842         p_debug_info       => l_debug_info
8843     );
8844     Run_ShipPostProcessor(
8845         p_group_id      => p_group_id,
8846         p_org_id        => p_org_id,
8847         x_return_status => l_return_status
8848     ) ;
8849     -- If any errors happen abort API.
8850     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8851         RAISE FND_API.G_EXC_ERROR;
8852     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8853         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8854     END IF;
8855     -- Standard check of p_commit.
8856     IF FND_API.To_Boolean(p_commit) THEN
8857         COMMIT WORK;
8858     END IF;
8859     -- Standard call to get message count and if count is 1, get message info.
8860     FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.g_false, p_count => x_msg_count, p_data => x_msg_data) ;
8861     -- Standard End of Procedure/Function Logging
8862     INL_LOGGING_PVT.Log_EndProc(
8863         p_module_name    => g_module_name,
8864         p_procedure_name => l_api_name
8865     );
8866 EXCEPTION
8867     WHEN FND_API.G_EXC_ERROR THEN
8868         -- Standard Expected Error Logging
8869         INL_LOGGING_PVT.Log_ExpecError (
8870             p_module_name    => g_module_name,
8871             p_procedure_name => l_api_name
8872         );
8873         ROLLBACK TO Import_LCMShipments_PVT;
8874         x_return_status := FND_API.G_RET_STS_ERROR;
8875         FND_MSG_PUB.Count_And_Get(
8876             p_encoded        =>      FND_API.g_false,
8877             p_count          =>      x_msg_count,
8878             p_data           =>      x_msg_data
8879         );
8880     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8881         -- Standard Unexpected Error Logging
8882         INL_LOGGING_PVT.Log_UnexpecError (
8883             p_module_name    => g_module_name,
8884             p_procedure_name => l_api_name
8885         );
8886         ROLLBACK TO Import_LCMShipments_PVT;
8887         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8888         FND_MSG_PUB.Count_And_Get(
8889             p_encoded        =>      FND_API.g_false,
8890             p_count          =>      x_msg_count,
8891             p_data           =>      x_msg_data
8892         );
8893     WHEN OTHERS THEN
8894         -- Standard Unexpected Error Logging
8895         INL_LOGGING_PVT.Log_UnexpecError (
8896             p_module_name    => g_module_name,
8897             p_procedure_name => l_api_name
8898         );
8899         ROLLBACK TO Import_LCMShipments_PVT;
8900         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
8901         IF FND_MSG_PUB.Check_Msg_Level(
8902             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
8903         ) THEN
8904             FND_MSG_PUB.Add_Exc_Msg(
8905                 p_pkg_name       => g_pkg_name,
8906                 p_procedure_name => l_api_name
8907             );
8908         END IF;
8909         FND_MSG_PUB.Count_And_Get(
8910             p_encoded        =>      FND_API.g_false,
8911             p_count          =>      x_msg_count,
8912             p_data           =>      x_msg_data
8913         );
8914 END Import_LCMShipments;
8915 -- Utility name   : Import_LCMMatches
8916 -- Type       : Public
8917 -- Function   : This is called by a concurrent
8918 --              program to import LCM Match Lines.
8919 --
8920 -- Pre-reqs   : None
8921 -- Parameters :
8922 -- IN         : p_group_id      IN NUMBER
8923 --
8924 -- OUT        : errbuf          OUT NOCOPY VARCHAR2
8925 --              retcode         OUT NOCOPY VARCHAR2
8926 --
8927 -- Version    : Current version 1.0
8928 --
8929 -- Notes      :
8930 PROCEDURE Import_LCMMatches(
8931     errbuf     OUT NOCOPY  VARCHAR2,
8932     retcode    OUT NOCOPY VARCHAR2,
8933     p_group_id IN NUMBER
8934 ) IS
8935     l_proc_name     CONSTANT VARCHAR2(30) := 'Import_LCMMatches';
8936     l_return_status VARCHAR2(1) ;
8937     l_msg_data      VARCHAR2(2000) ;
8938     l_debug_info    VARCHAR2(200) ;
8939     l_msg_count     NUMBER;
8940 BEGIN
8941     errbuf  := NULL;
8942     retcode := 0;
8943     -- Standard Beginning of Procedure/Function Logging
8944     INL_LOGGING_PVT.Log_BeginProc(
8945         p_module_name    => g_module_name,
8946         p_procedure_name => l_proc_name
8947     ) ;
8948     l_debug_info := 'Call Import_LCMMatches';
8949     INL_LOGGING_PVT.Log_Statement(
8950         p_module_name      => g_module_name,
8951         p_procedure_name   => l_proc_name,
8952         p_debug_info       => l_debug_info
8953     );
8954     Import_LCMMatches(p_api_version => 1.0,
8955                       p_init_msg_list => FND_API.G_TRUE,
8956                       p_commit => FND_API.G_TRUE,
8957                       p_group_id => p_group_id,
8958                       x_return_status => l_return_status,
8959                       x_msg_count => l_msg_count,
8960                       x_msg_data => l_msg_data) ;
8961     IF l_msg_count = 1 THEN
8962         FND_FILE.PUT_LINE(FND_FILE.LOG, l_msg_data);
8963         retcode := 1;
8964     ELSIF l_msg_count > 1 THEN
8965         FND_FILE.PUT_LINE(FND_FILE.LOG, l_msg_count|| ' warnings found.' );
8966         FOR i IN 1 ..l_msg_count
8967         LOOP
8968             FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.get (i, FND_API.g_false) );
8969         END LOOP;
8970         retcode := 1;
8971     END IF;
8972     -- If any errors happen abort API.
8973     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8974         RAISE FND_API.G_EXC_ERROR;
8975     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8976         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8977     END IF;
8978     -- Standard End of Procedure/Function Logging
8979     INL_LOGGING_PVT.Log_EndProc(
8980         p_module_name    => g_module_name,
8981         p_procedure_name => l_proc_name
8982     );
8983 EXCEPTION
8984     WHEN FND_API.G_EXC_ERROR THEN
8985         -- Standard Expected Error Logging
8986         INL_LOGGING_PVT.Log_ExpecError (
8987             p_module_name    => g_module_name,
8988             p_procedure_name => l_proc_name
8989         );
8990         retcode := 1;
8991     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8992         -- Standard Unexpected Error Logging
8993         INL_LOGGING_PVT.Log_UnexpecError(
8994             p_module_name    => g_module_name,
8995             p_procedure_name => l_proc_name
8996         );
8997         retcode := 2;
8998     WHEN OTHERS THEN
8999         -- Standard Unexpected Error Logging
9000         INL_LOGGING_PVT.Log_UnexpecError(
9001             p_module_name    => g_module_name,
9002             p_procedure_name => l_proc_name
9003         );
9004         retcode := 2;
9005 END Import_LCMMatches;
9006 -- API name   : Import_LCMMatches
9007 -- Type       : Public
9008 -- Function   : Main Import procedure. It calls the
9009 --              Pre and Post processors to import Match Lines
9010 --
9011 -- Pre-reqs   : None
9012 -- Parameters :
9013 -- IN         : p_api_version   IN NUMBER
9014 --              p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
9015 --              p_commit        IN VARCHAR2 := FND_API.G_FALSE
9016 --              p_group_id      IN NUMBER
9017 --
9018 -- OUT        : x_return_status OUT NOCOPY VARCHAR2
9019 --              x_msg_count     OUT NOCOPY NUMBER
9020 --              x_msg_data      OUT NOCOPY VARCHAR2
9021 --
9022 -- Version    : Current version 1.0
9023 --
9024 -- Notes      :
9025 PROCEDURE Import_LCMMatches(
9026     p_api_version   IN NUMBER,
9027     p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
9028     p_commit        IN VARCHAR2 := FND_API.G_FALSE,
9029     p_group_id      IN NUMBER,
9030     x_return_status OUT NOCOPY VARCHAR2,
9031     x_msg_count     OUT NOCOPY NUMBER,
9032     x_msg_data      OUT NOCOPY VARCHAR2
9033 ) IS
9034     l_api_name      CONSTANT VARCHAR2(30) := 'Import_LCMMatches';
9035     l_api_version   CONSTANT NUMBER        := 1.0;
9036     l_return_status VARCHAR2(1) ;
9037     l_msg_count     NUMBER;
9038     l_msg_data      VARCHAR2(2000) ;
9039     l_debug_info    VARCHAR2(200) ;
9040 BEGIN
9041     -- Standard Beginning of Procedure/Function Logging
9042     INL_LOGGING_PVT.Log_BeginProc(
9043         p_module_name    => g_module_name,
9044         p_procedure_name => l_api_name
9045     ) ;
9046 
9047     -- Standard Start of API savepoint
9048     SAVEPOINT Import_LCMMatches_PVT;
9049     -- Initialize message list if p_init_msg_list is set to TRUE.
9050     IF FND_API.to_Boolean(p_init_msg_list) THEN
9051         FND_MSG_PUB.initialize;
9052     END IF;
9053     -- Standard call to check for call compatibility
9054     IF NOT FND_API.Compatible_API_Call(
9055                 p_current_version_number => l_api_version,
9056                 p_caller_version_number => p_api_version,
9057                 p_api_name => l_api_name,
9058                 p_pkg_name => g_pkg_name)
9059     THEN
9060         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9061     END IF;
9062     --  Initialize API return status to success
9063     x_return_status := FND_API.G_RET_STS_SUCCESS;
9064     l_debug_info := 'Run Match Pre-Processor(first level validation). Call Run_MatchPreProcessor';
9065     INL_LOGGING_PVT.Log_Statement(
9066         p_module_name      => g_module_name,
9067         p_procedure_name   => l_api_name,
9068         p_debug_info       => l_debug_info
9069     );
9070 
9071     Run_MatchPreProcessor(p_group_id => p_group_id, x_return_status => l_return_status) ;
9072     -- If any errors happen abort API.
9073     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
9074         RAISE FND_API.G_EXC_ERROR;
9075     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9076         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9077     END IF;
9078     l_debug_info := 'Run Match Post-Processor. Call Run_MatchPostProcessor';
9079     INL_LOGGING_PVT.Log_Statement(
9080         p_module_name   => g_module_name,
9081         p_procedure_name=> l_api_name,
9082         p_debug_info    => l_debug_info
9083     );
9084     Run_MatchPostProcessor(
9085         p_group_id => p_group_id,
9086         x_return_status => l_return_status
9087     ) ;
9088     -- If any errors happen abort API.
9089     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
9090         RAISE FND_API.G_EXC_ERROR;
9091     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9092         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9093     END IF;
9094     -- Standard check of p_commit.
9095     IF FND_API.To_Boolean(p_commit) THEN
9096         COMMIT WORK;
9097     END IF;
9098     -- Standard call to get message count and if count is 1, get message info.
9099     FND_MSG_PUB.Count_And_Get(
9100         p_encoded => FND_API.g_false,
9101         p_count => x_msg_count,
9102         p_data => x_msg_data
9103     ) ;
9104     -- Standard End of Procedure/Function Logging
9105     INL_LOGGING_PVT.Log_EndProc(
9106         p_module_name    => g_module_name,
9107         p_procedure_name => l_api_name
9108     );
9109 EXCEPTION
9110     WHEN FND_API.G_EXC_ERROR THEN
9111         -- Standard Expected Error Logging
9112         INL_LOGGING_PVT.Log_ExpecError (
9113             p_module_name    => g_module_name,
9114             p_procedure_name => l_api_name
9115         );
9116         ROLLBACK TO Import_LCMMatches_PVT;
9117         x_return_status := FND_API.G_RET_STS_ERROR;
9118         FND_MSG_PUB.Count_And_Get(
9119             p_encoded        =>      FND_API.g_false,
9120             p_count          =>      x_msg_count,
9121             p_data           =>      x_msg_data
9122         );
9123     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
9124         -- Standard Unexpected Error Logging
9125         INL_LOGGING_PVT.Log_UnexpecError (
9126             p_module_name    => g_module_name,
9127             p_procedure_name => l_api_name
9128         );
9129         ROLLBACK TO Import_LCMMatches_PVT;
9130         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9131         FND_MSG_PUB.Count_And_Get(
9132             p_encoded        =>      FND_API.g_false,
9133             p_count          =>      x_msg_count,
9134             p_data           =>      x_msg_data
9135         );
9136     WHEN OTHERS THEN
9137         -- Standard Unexpected Error Logging
9138         INL_LOGGING_PVT.Log_UnexpecError (
9139             p_module_name    => g_module_name,
9140             p_procedure_name => l_api_name
9141         );
9142         ROLLBACK TO Import_LCMMatches_PVT;
9143         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
9144         IF FND_MSG_PUB.Check_Msg_Level(
9145             p_message_level =>FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
9146         ) THEN
9147             FND_MSG_PUB.Add_Exc_Msg(
9148                 p_pkg_name       => g_pkg_name,
9149                 p_procedure_name => l_api_name
9150             );
9151         END IF;
9152         FND_MSG_PUB.Count_And_Get(
9153             p_encoded        =>      FND_API.g_false,
9154             p_count          =>      x_msg_count,
9155             p_data           =>      x_msg_data
9156         );
9157 
9158 END Import_LCMMatches;
9159 
9160 END INL_INTERFACE_PVT;