DBA Data[Home] [Help]

PACKAGE BODY: APPS.PO_ASL_API_GRP

Source


1 PACKAGE BODY PO_ASL_API_GRP AS
2 /* $Header: PO_ASL_API_GRP.plb 120.3.12020000.2 2013/02/11 13:40:48 vegajula noship $ */
3 
4 g_session_key   NUMBER;
5 
6 PROCEDURE validate_asl_gt(
7   x_return_status   OUT NOCOPY VARCHAR2
8 , x_return_msg      OUT NOCOPY VARCHAR2
9 );
10 
11 PROCEDURE validate_asl_attr_gt(
12   x_return_status   OUT NOCOPY VARCHAR2
13 , x_return_msg      OUT NOCOPY VARCHAR2
14 );
15 
16 PROCEDURE validate_asl_doc_gt(
17   x_return_status   OUT NOCOPY VARCHAR2
18 , x_return_msg      OUT NOCOPY VARCHAR2
19 );
20 
21 PROCEDURE validate_chv_auth_gt(
22   x_return_status   OUT NOCOPY VARCHAR2
23 , x_return_msg      OUT NOCOPY VARCHAR2
24 );
25 
26 PROCEDURE validate_supp_item_cap_gt(
27   x_return_status   OUT NOCOPY VARCHAR2
28 , x_return_msg      OUT NOCOPY VARCHAR2
29 );
30 
31 PROCEDURE validate_supp_item_tol_gt(
32   x_return_status   OUT NOCOPY VARCHAR2
33 , x_return_msg      OUT NOCOPY VARCHAR2
34 );
35 
36 --------------------------------------------------------------------------------
37   --Start of Comments
38 
39   --Name: process
40 
41   --Function:
42   --  This will determine whether to do insert or update.
43   --  Create will throw error if you are passing duplicate asl.
44   --  Update will throw error if asl does not exists.
45   --  Call Validation interface to perform field validations
46   --  Call PO_ASL_API_PVT.reject_asl_record for the records in case any
47   --  validation error.
48 
49   --Parameters:
50 
51   --IN:
52   --  p_session_key     NUMBER
53 
54   --OUT:
55   --  x_return_status   VARCHAR2
56   --  x_return_msg      VARCHAR2
57 
58   --End of Comments
59 --------------------------------------------------------------------------------
60 
61 PROCEDURE process(
62   p_session_key     IN         NUMBER
63 , x_return_status   OUT NOCOPY VARCHAR2
64 , x_return_msg      OUT NOCOPY VARCHAR2
65 )
66 IS
67   l_progress          NUMBER := 0;
68 
69   l_user_key_tbl      po_tbl_number;
70   l_entity_name       po_tbl_varchar30;
71   l_reject_reason     po_tbl_varchar2000;
72 
73   l_user_key_tbl1     po_tbl_number;
74   l_entity_name1      po_tbl_varchar30;
75   l_reject_reason1    po_tbl_varchar2000;
76 
77 BEGIN
78   po_asl_api_pvt.log('START ::: po_asl_api_grp.process');
79   po_asl_api_pvt.log('p_session_key:' || p_session_key);
80   g_session_key  := p_session_key;
81   --Determine Create/Update when mode is Sync
82   UPDATE po_approved_supplier_list_gt GT
83   SET GT.process_action =
84       determine_action(
85         p_item_id                => GT.item_id              ,
86         p_category_id            => GT.category_id          ,
87         p_using_organization_id  => GT.using_organization_id,
88         p_vendor_id              => GT.vendor_id            ,
89         p_vendor_site_id         => GT.vendor_site_id
90       )
91   WHERE GT.process_action = PO_ASL_API_PUB.g_ACTION_SYNC;
92   l_progress := 5;
93   po_asl_api_pvt.log('count at prg ' || l_progress || ':' ||  SQL%ROWCOUNT);
94 
95   --Populate asl ids in case of update
96   /* RR: Review Perf */
97   UPDATE po_approved_supplier_list_gt GT
98   SET asl_id =
99      (SELECT  asl_id
100         FROM  po_approved_supplier_list PASL
101         WHERE (GT.item_id                  = PASL.item_id
102                OR GT.category_id           = PASL.category_id)
103               AND GT.using_organization_id = PASL.using_organization_id
104               AND (GT.vendor_id            = PASL.vendor_id
105                    OR GT.manufacturer_id   = PASL.manufacturer_id)
106               AND Nvl(GT.vendor_site_id,-1)= Nvl(PASL.vendor_site_id,-1)
107               AND ROWNUM < 2)
108   WHERE GT.process_action = PO_ASL_API_PUB.g_ACTION_UPDATE;
109   l_progress := 10;
110   po_asl_api_pvt.log('count at prg ' || l_progress || ':' ||  SQL%ROWCOUNT);
111 
112   --Populate asl ids in case of create
113   UPDATE po_approved_supplier_list_gt GT
114   SET asl_id = po_approved_supplier_list_s.NEXTVAL
115   WHERE GT.process_action = PO_ASL_API_PUB.g_ACTION_CREATE;
116 
117   l_progress := 15;
118   po_asl_api_pvt.log('count at prg ' || l_progress || ':' ||  SQL%ROWCOUNT);
119 
120   UPDATE po_asl_attributes_gt PAA
121   SET asl_id = (SELECT  asl_id
122                   FROM  po_approved_supplier_list_gt PASL
123                   WHERE PASL.user_key = PAA.user_key
124                         AND ROWNUM < 2);
125 
126   l_progress := 20;
127   po_asl_api_pvt.log('count at prg ' || l_progress || ':' ||  SQL%ROWCOUNT);
128 
129   UPDATE po_asl_documents_gt PAD
130   SET asl_id = (SELECT  asl_id
131                   FROM  po_approved_supplier_list_gt PASL
132                   WHERE PASL.user_key = PAD.user_key
133                         AND ROWNUM < 2);
134 
135   l_progress := 25;
136   po_asl_api_pvt.log('count at prg ' || l_progress || ':' ||  SQL%ROWCOUNT);
137 
138   UPDATE chv_authorizations_gt CHV
139   SET reference_id = (SELECT  asl_id
140                         FROM  po_approved_supplier_list_gt PASL
141                         WHERE PASL.user_key = CHV.user_key
142                               AND ROWNUM < 2);
143 
144   l_progress := 30;
145   po_asl_api_pvt.log('count at prg ' || l_progress || ':' ||  SQL%ROWCOUNT);
146 
147   UPDATE po_supplier_item_capacity_gt PSIC
148   SET asl_id = (SELECT  asl_id
149                   FROM  po_approved_supplier_list_gt PASL
150                   WHERE PASL.user_key = PSIC.user_key
151                         AND ROWNUM < 2);
152 
153   l_progress := 35;
154   po_asl_api_pvt.log('count at prg ' || l_progress || ':' ||  SQL%ROWCOUNT);
155 
156   UPDATE po_supplier_item_tolerance_gt PSIT
157   SET asl_id = (SELECT  asl_id
158                   FROM  po_approved_supplier_list_gt PASL
159                   WHERE PASL.user_key = PSIT.user_key
160                         AND ROWNUM < 2);
161 
162   l_progress := 40;
163   po_asl_api_pvt.log('count at prg ' || l_progress || ':' ||  SQL%ROWCOUNT);
164 
165   /*--Populate capacity id in case of update and
166   --Capacity's process action is ADD
167   UPDATE po_supplier_item_capacity_gt PSIC
168   SET    capacity_id    = po_supplier_item_capacity_s.NEXTVAL
169   WHERE  process_action = PO_ASL_API_PUB.g_ACTION_ADD;
170   l_progress := 42;
171   po_asl_api_pvt.log('count at prg ' || l_progress || ':' ||  SQL%ROWCOUNT);*/
172 
173   --Reject records if asl exist when mode is Create
174   SELECT  user_key                               ,
175           'po_approved_supplier_list_gt'         ,
176           fnd_message.get_string('PO','DUPLICATE_ASL')
177     BULK  COLLECT INTO
178           l_user_key_tbl                         ,
179           l_entity_name                          ,
180           l_reject_reason
181     FROM  po_approved_supplier_list_gt GT
182     WHERE EXISTS
183          (SELECT  asl_id
184             FROM  po_approved_supplier_list PASL
185             WHERE (GT.item_id                   = PASL.item_id
186                    OR GT.category_id            = PASL.category_id)
187                   AND GT.using_organization_id  = PASL.using_organization_id
188                   AND (GT.vendor_id             = PASL.vendor_id
189                        OR GT.manufacturer_id    = PASL.manufacturer_id)
190                   AND Nvl(GT.vendor_site_id,-1) = Nvl(PASL.vendor_site_id,-1))
191          AND GT.process_action = PO_ASL_API_PUB.g_ACTION_CREATE;
192 
193   l_progress := 45;
194   l_user_key_tbl1  := l_user_key_tbl;
195   l_entity_name1   := l_entity_name;
196   l_reject_reason1 := l_reject_reason;
197   --Reject records if asl doesn't exist when mode is update.
198   SELECT  user_key                               ,
199           'po_approved_supplier_list_gt'         ,
200           fnd_message.get_string('PO','ASL_DOES_NOT_EXIST')
201     BULK  COLLECT INTO
202           l_user_key_tbl                         ,
203           l_entity_name                          ,
204           l_reject_reason
205     FROM  po_approved_supplier_list_gt GT
206     WHERE NOT EXISTS
207           (SELECT  asl_id
208              FROM  po_approved_supplier_list PASL
209              WHERE (GT.item_id                  = PASL.item_id
210                     OR GT.category_id           = PASL.category_id)
211                    AND GT.using_organization_id = PASL.using_organization_id
212                    AND (GT.vendor_id            = PASL.vendor_id
213                         OR GT.manufacturer_id   = PASL.manufacturer_id)
214                    AND Nvl(GT.vendor_site_id,-1) = Nvl(PASL.vendor_site_id,-1))
215           AND GT.process_action = PO_ASL_API_PUB.g_ACTION_UPDATE;
216 
217   l_progress := 50;
218   l_user_key_tbl1  := l_user_key_tbl1  MULTISET UNION ALL l_user_key_tbl ;
219   l_entity_name1   := l_entity_name1   MULTISET UNION ALL l_entity_name  ;
220   l_reject_reason1 := l_reject_reason1 MULTISET UNION ALL l_reject_reason;
221 
222   --Reject records if attributes mode is add, asl mode is update/delete and
223   --attributes already exists for that org
224   SELECT  PAAGT.user_key                         ,
225           'po_asl_attributes_gt'                 ,
226           fnd_message.get_string('PO','DUPLICATE_ATTRIBUTES')
227     BULK  COLLECT INTO
228           l_user_key_tbl                         ,
229           l_entity_name                          ,
230           l_reject_reason
231     FROM  po_asl_attributes_gt PAAGT,
232           po_approved_supplier_list_gt ASLGT
233     WHERE EXISTS
234           (SELECT  1
235              FROM  po_asl_attributes PAA
236              WHERE PAAGT.asl_id                    = PAA.asl_id
237                    AND PAAGT.using_organization_id = PAA.using_organization_id)
238           AND ASLGT.user_key       = PAAGT.user_key
239           AND ASLGT.process_action = PO_ASL_API_PUB.g_ACTION_UPDATE
240           AND PAAGT.process_action = PO_ASL_API_PUB.g_ACTION_ADD;
241 
242   l_progress := 55;
243   l_user_key_tbl1  := l_user_key_tbl1  MULTISET UNION ALL l_user_key_tbl ;
244   l_entity_name1   := l_entity_name1   MULTISET UNION ALL l_entity_name  ;
245   l_reject_reason1 := l_reject_reason1 MULTISET UNION ALL l_reject_reason;
246 
247   --Reject records if attributes mode is add, asl mode is create and
248   --attributes already exists for that org, i.e., duplicate input
249   SELECT  PAAGT.user_key                         ,
250           'po_asl_attributes_gt'                 ,
251           fnd_message.get_string('PO','DUPLICATE_ATTRIBUTES')
252     BULK  COLLECT INTO
253           l_user_key_tbl                         ,
254           l_entity_name                          ,
255           l_reject_reason
256     FROM  po_asl_attributes_gt PAAGT,
257           po_approved_supplier_list_gt ASLGT
258     WHERE 2 <=
259           (SELECT  Count(user_key)
260              FROM  po_asl_attributes_gt PAA
261              WHERE PAAGT.asl_id                    = PAA.asl_id
262                    AND PAAGT.using_organization_id = PAA.using_organization_id)
263           AND ASLGT.user_key       = PAAGT.user_key
264           AND ASLGT.process_action = PO_ASL_API_PUB.g_ACTION_CREATE
265           AND PAAGT.process_action = PO_ASL_API_PUB.g_ACTION_ADD;
266 
267   l_progress := 57;
268   l_user_key_tbl1  := l_user_key_tbl1  MULTISET UNION ALL l_user_key_tbl ;
269   l_entity_name1   := l_entity_name1   MULTISET UNION ALL l_entity_name  ;
270   l_reject_reason1 := l_reject_reason1 MULTISET UNION ALL l_reject_reason;
271 
272   --Reject records if attributes mode is delete, asl mode is update and
273   --attributes doesn't exists for that org
274   SELECT  PAAGT.user_key                         ,
275           'po_asl_attributes_gt'                 ,
276           fnd_message.get_string('PO','ATTRIBUTES_NOT_EXIST')
277     BULK  COLLECT INTO
278           l_user_key_tbl                         ,
279           l_entity_name                          ,
280           l_reject_reason
281     FROM  po_asl_attributes_gt PAAGT,
282           po_approved_supplier_list_gt ASLGT
283     WHERE NOT EXISTS
284           (SELECT  1
285              FROM  po_asl_attributes PAA
286              WHERE PAAGT.asl_id                    = PAA.asl_id
287                    AND PAAGT.using_organization_id = PAA.using_organization_id)
288           AND ASLGT.user_key       = PAAGT.user_key
289           AND ASLGT.process_action = PO_ASL_API_PUB.g_ACTION_UPDATE
290           AND PAAGT.process_action IN
291               (PO_ASL_API_PUB.g_ACTION_DELETE, PO_ASL_API_PUB.g_ACTION_UPDATE);
292 
293   l_progress := 60;
294   l_user_key_tbl1  := l_user_key_tbl1  MULTISET UNION ALL l_user_key_tbl ;
295   l_entity_name1   := l_entity_name1   MULTISET UNION ALL l_entity_name  ;
296   l_reject_reason1 := l_reject_reason1 MULTISET UNION ALL l_reject_reason;
297     --Reject records if document mode is add, asl mode is update and
298     --document already exists for that org
299   SELECT  DOCGT.user_key                         ,
300           'po_asl_documents_gt'                  ,
301           fnd_message.get_string('PO','DUPLICATE_DOCUMENT')
302     BULK  COLLECT INTO
303           l_user_key_tbl                         ,
304           l_entity_name                          ,
305           l_reject_reason
306     FROM  po_asl_documents_gt DOCGT,
307           po_approved_supplier_list_gt ASLGT
308     WHERE EXISTS
309           (SELECT  1
310              FROM  po_asl_documents PAD
311              WHERE DOCGT.document_header_id        = PAD.document_header_id
312                    AND DOCGT.asl_id                = PAD.asl_id
313                    AND DOCGT.using_organization_id = PAD.using_organization_id)
314           AND ASLGT.user_key       = DOCGT.user_key
315           AND ASLGT.process_action = PO_ASL_API_PUB.g_ACTION_UPDATE
316           AND DOCGT.process_action = PO_ASL_API_PUB.g_ACTION_ADD;
317 
318   l_progress := 62;
319   l_user_key_tbl1  := l_user_key_tbl1  MULTISET UNION ALL l_user_key_tbl ;
320   l_entity_name1   := l_entity_name1   MULTISET UNION ALL l_entity_name  ;
321   l_reject_reason1 := l_reject_reason1 MULTISET UNION ALL l_reject_reason;
322     --Reject records if document mode is delete, asl mode is update and
323     --document doesn't exists for that org
324   SELECT  DOCGT.user_key                         ,
325           'po_asl_documents_gt'                  ,
326           fnd_message.get_string('PO','DOCUMENT_NOT_EXIST')
327     BULK  COLLECT INTO
328           l_user_key_tbl                         ,
329           l_entity_name                          ,
330           l_reject_reason
331     FROM  po_asl_documents_gt DOCGT,
332           po_approved_supplier_list_gt ASLGT
333     WHERE NOT EXISTS
334           (SELECT  1
335              FROM  po_asl_documents PAD
336              WHERE DOCGT.document_header_id        = PAD.document_header_id
337                    AND DOCGT.asl_id                = PAD.asl_id
338                    AND DOCGT.using_organization_id = PAD.using_organization_id)
339           AND ASLGT.user_key       = DOCGT.user_key
340           AND ASLGT.process_action = PO_ASL_API_PUB.g_ACTION_UPDATE
341           AND DOCGT.process_action IN
342               (PO_ASL_API_PUB.g_ACTION_DELETE, PO_ASL_API_PUB.g_ACTION_UPDATE);
343 
344   l_progress := 65;
345   l_user_key_tbl1  := l_user_key_tbl1  MULTISET UNION ALL l_user_key_tbl ;
346   l_entity_name1   := l_entity_name1   MULTISET UNION ALL l_entity_name  ;
347   l_reject_reason1 := l_reject_reason1 MULTISET UNION ALL l_reject_reason;
348   --Reject records if document mode is add, asl mode is create and
349   --document already exists for that org
350   SELECT  DOCGT.user_key                         ,
351           'po_asl_documents_gt'                  ,
352           fnd_message.get_string('PO','DUPLICATE_DOCUMENT')
353     BULK  COLLECT INTO
354           l_user_key_tbl                         ,
355           l_entity_name                          ,
356           l_reject_reason
357     FROM  po_asl_documents_gt DOCGT,
358           po_approved_supplier_list_gt ASLGT
359     WHERE 2 <=
360           (SELECT  Count(user_key)
361              FROM  po_asl_documents_gt PAD
362              WHERE DOCGT.document_header_id        = PAD.document_header_id
363                    AND DOCGT.asl_id                = PAD.asl_id
364                    AND DOCGT.using_organization_id = PAD.using_organization_id)
365           AND ASLGT.user_key       = DOCGT.user_key
366           AND ASLGT.process_action = PO_ASL_API_PUB.g_ACTION_CREATE
367           AND DOCGT.process_action = PO_ASL_API_PUB.g_ACTION_ADD;
368 
369   l_progress := 70;
370   l_user_key_tbl1  := l_user_key_tbl1  MULTISET UNION ALL l_user_key_tbl ;
371   l_entity_name1   := l_entity_name1   MULTISET UNION ALL l_entity_name  ;
372   l_reject_reason1 := l_reject_reason1 MULTISET UNION ALL l_reject_reason;
373   --Reject records if authorization process mode is add, asl mode is update
374   --and authorization code or sequence already exists for that org
375   SELECT  CHVGT.user_key                         ,
376           'chv_authorizations_gt'                ,
377           fnd_message.get_string('PO','DUPLICATE_AUTHORIZATION')
378     BULK  COLLECT INTO
379           l_user_key_tbl                         ,
380           l_entity_name                          ,
381           l_reject_reason
382     FROM  chv_authorizations_gt CHVGT,
383           po_approved_supplier_list_gt ASLGT
384     WHERE EXISTS
385           (SELECT  1
386              FROM  chv_authorizations CHV
387              WHERE CHVGT.reference_id              = CHV.reference_id
388                    AND CHVGT.using_organization_id = CHV.using_organization_id
389                    AND (CHVGT.authorization_code   = CHV.authorization_code
390                         OR
391                     CHVGT.authorization_sequence_dsp=CHV.authorization_sequence)
392           )
393           AND CHVGT.user_key       = ASLGT.user_key
394           AND ASLGT.process_action = PO_ASL_API_PUB.g_ACTION_UPDATE
395           AND CHVGT.process_action = PO_ASL_API_PUB.g_ACTION_ADD;
396 
397   l_progress := 72;
398   l_user_key_tbl1  := l_user_key_tbl1  MULTISET UNION ALL l_user_key_tbl ;
399   l_entity_name1   := l_entity_name1   MULTISET UNION ALL l_entity_name  ;
400   l_reject_reason1 := l_reject_reason1 MULTISET UNION ALL l_reject_reason;
401   --Reject records if authorization process mode is delete, asl mode is update
402   --and authorization code and sequence not exists for that org
403   SELECT  CHVGT.user_key                         ,
404           'chv_authorizations_gt'                ,
405           fnd_message.get_string('PO','AUTHORIZATION_NOT_EXIST')
406     BULK  COLLECT INTO
407           l_user_key_tbl                         ,
408           l_entity_name                          ,
409           l_reject_reason
410     FROM  chv_authorizations_gt CHVGT,
411           po_approved_supplier_list_gt ASLGT
412     WHERE NOT EXISTS
413           (SELECT  1
414              FROM  chv_authorizations CHV
415              WHERE CHVGT.reference_id              = CHV.reference_id
416                    AND CHVGT.using_organization_id = CHV.using_organization_id
417                    AND CHVGT.authorization_code    = CHV.authorization_code
418                    AND CHVGT.authorization_sequence_dsp=CHV.authorization_sequence
419           )
420           AND CHVGT.user_key       = ASLGT.user_key
421           AND ASLGT.process_action = PO_ASL_API_PUB.g_ACTION_UPDATE
422           AND CHVGT.process_action IN
423               (PO_ASL_API_PUB.g_ACTION_DELETE, PO_ASL_API_PUB.g_ACTION_UPDATE);
424 
425   l_progress := 75;
426   l_user_key_tbl1  := l_user_key_tbl1  MULTISET UNION ALL l_user_key_tbl ;
427   l_entity_name1   := l_entity_name1   MULTISET UNION ALL l_entity_name  ;
428   l_reject_reason1 := l_reject_reason1 MULTISET UNION ALL l_reject_reason;
429   --Reject records if authorization process mode is add, asl mode is create
430   --and authorization code or sequence already exists for that org
431   SELECT  CHVGT.user_key                         ,
432           'chv_authorizations_gt'                ,
433           fnd_message.get_string('PO','DUPLICATE_AUTHORIZATION')
434     BULK  COLLECT INTO
435           l_user_key_tbl                         ,
436           l_entity_name                          ,
437           l_reject_reason
438     FROM  chv_authorizations_gt CHVGT            ,
439           po_approved_supplier_list_gt ASLGT
440     WHERE 2 <=
441           (SELECT  Count(user_key)
442              FROM  chv_authorizations_gt CHV
443              WHERE CHVGT.reference_id              = CHV.reference_id
444                    AND CHVGT.using_organization_id = CHV.using_organization_id
445                    AND (CHVGT.authorization_code   = CHV.authorization_code
446                         OR CHVGT.authorization_sequence_dsp =
447                            CHV.authorization_sequence_dsp)
448            )
449           AND CHVGT.user_key       = ASLGT.user_key
450           AND ASLGT.process_action = PO_ASL_API_PUB.g_ACTION_CREATE
451           AND CHVGT.process_action = PO_ASL_API_PUB.g_ACTION_ADD;
452 
453   --*************************************************************************
454   --Duplicate check is not required for po_supplier_item_capacity_gt
455   --as there is a check in the validation for dates overlapping. That check
456   --covers the duplication as well
457   --*************************************************************************
458 
459   l_progress := 78;
460   l_user_key_tbl1  := l_user_key_tbl1  MULTISET UNION ALL l_user_key_tbl ;
461   l_entity_name1   := l_entity_name1   MULTISET UNION ALL l_entity_name  ;
462   l_reject_reason1 := l_reject_reason1 MULTISET UNION ALL l_reject_reason;
463   --Reject records if capacity process mode is delete, asl mode is update
464   --and record does not exist for that org
465   SELECT  CAPGT.user_key                         ,
466           'po_supplier_item_capacity_gt'        ,
467           fnd_message.get_string('PO','CAPACITY_NOT_EXIST')
468     BULK  COLLECT INTO
469           l_user_key_tbl                         ,
470           l_entity_name                          ,
471           l_reject_reason
472     FROM  po_supplier_item_capacity_gt CAPGT     ,
473           po_approved_supplier_list_gt ASLGT
474     WHERE NOT EXISTS
475           (SELECT  1
476              FROM  po_supplier_item_capacity CAP
477              WHERE CAPGT.asl_id                    = CAP.asl_id
478                    AND CAPGT.using_organization_id = CAP.using_organization_id
479                    AND Nvl(CAPGT.to_date_dsp, SYSDATE) =
480                        Nvl(CAP.to_date, SYSDATE)
481                    AND CAPGT.from_date_dsp         = CAP.from_date
482                    AND CAPGT.capacity_per_day_dsp  = CAP.capacity_per_day
483           )
484           AND CAPGT.user_key       = ASLGT.user_key
485           AND ASLGT.process_action = PO_ASL_API_PUB.g_ACTION_UPDATE
486           AND CAPGT.process_action IN
487               (PO_ASL_API_PUB.g_ACTION_DELETE, PO_ASL_API_PUB.g_ACTION_UPDATE);
488 
489   l_progress := 80;
490   l_user_key_tbl1  := l_user_key_tbl1  MULTISET UNION ALL l_user_key_tbl ;
491   l_entity_name1   := l_entity_name1   MULTISET UNION ALL l_entity_name  ;
492   l_reject_reason1 := l_reject_reason1 MULTISET UNION ALL l_reject_reason;
493   --Reject records if tolerance process mode is add, asl mode is update
494   --and record already exists for that org
495   SELECT  TOLGT.user_key                         ,
496           'po_supplier_item_tolerance_gt'        ,
497           fnd_message.get_string('PO','DUPLICATE_TOLERANCE')
498     BULK  COLLECT INTO
499           l_user_key_tbl                         ,
500           l_entity_name                          ,
501           l_reject_reason
502     FROM  po_supplier_item_tolerance_gt TOLGT,
503           po_approved_supplier_list_gt ASLGT
504     WHERE EXISTS
505           (SELECT  1
506              FROM  po_supplier_item_tolerance TOL
507              WHERE TOLGT.asl_id                    = TOL.asl_id
508                    AND TOLGT.using_organization_id = TOL.using_organization_id
509                    AND TOLGT.number_of_days_dsp    = TOL.number_of_days
510           )
511           AND TOLGT.user_key       = ASLGT.user_key
512           AND ASLGT.process_action = PO_ASL_API_PUB.g_ACTION_UPDATE
513           AND TOLGT.process_action = PO_ASL_API_PUB.g_ACTION_ADD;
514 
515   l_progress := 82;
516   l_user_key_tbl1  := l_user_key_tbl1  MULTISET UNION ALL l_user_key_tbl ;
517   l_entity_name1   := l_entity_name1   MULTISET UNION ALL l_entity_name  ;
518   l_reject_reason1 := l_reject_reason1 MULTISET UNION ALL l_reject_reason;
519   --Reject records if tolerance process mode is delete, asl mode is update
520   --and record does not exist for that org
521   SELECT  TOLGT.user_key                         ,
522           'po_supplier_item_tolerance_gt'        ,
523           fnd_message.get_string('PO','TOLERANCE_NOT_EXIST')
524     BULK  COLLECT INTO
525           l_user_key_tbl                         ,
526           l_entity_name                          ,
527           l_reject_reason
528     FROM  po_supplier_item_tolerance_gt TOLGT,
529           po_approved_supplier_list_gt ASLGT
530     WHERE NOT EXISTS
531           (SELECT  1
532              FROM  po_supplier_item_tolerance TOL
533              WHERE TOLGT.asl_id                    = TOL.asl_id
534                    AND TOLGT.using_organization_id = TOL.using_organization_id
535                    AND TOLGT.number_of_days_dsp    = TOL.number_of_days
536           )
537           AND TOLGT.user_key       = ASLGT.user_key
538           AND ASLGT.process_action = PO_ASL_API_PUB.g_ACTION_UPDATE
539           AND TOLGT.process_action IN
540               (PO_ASL_API_PUB.g_ACTION_DELETE, PO_ASL_API_PUB.g_ACTION_UPDATE);
541 
542   l_progress := 85;
543   l_user_key_tbl1  := l_user_key_tbl1  MULTISET UNION ALL l_user_key_tbl ;
544   l_entity_name1   := l_entity_name1   MULTISET UNION ALL l_entity_name  ;
545   l_reject_reason1 := l_reject_reason1 MULTISET UNION ALL l_reject_reason;
546   --Reject records if tolerance process mode is add, asl mode is create
547   --and authorization code or sequence already exists for that org
548   SELECT  TOLGT.user_key                         ,
549           'po_supplier_item_tolerance_gt'        ,
550           fnd_message.get_string('PO','DUPLICATE_TOLERANCE')
551     BULK  COLLECT INTO
552           l_user_key_tbl                         ,
553           l_entity_name                          ,
554           l_reject_reason
555     FROM  po_supplier_item_tolerance_gt TOLGT,
556           po_approved_supplier_list_gt ASLGT
557     WHERE 2 <=
558           (SELECT  Count(user_key)
559              FROM  po_supplier_item_tolerance_gt TOL
560              WHERE TOLGT.asl_id                    = TOL.asl_id
561                    AND TOLGT.using_organization_id = TOL.using_organization_id
562                    AND TOLGT.number_of_days_dsp    = TOL.number_of_days_dsp
563           )
564           AND TOLGT.user_key       = ASLGT.user_key
565           AND ASLGT.process_action = PO_ASL_API_PUB.g_ACTION_CREATE
566           AND TOLGT.process_action = PO_ASL_API_PUB.g_ACTION_ADD;
567 
568   l_progress := 90;
569   l_user_key_tbl1  := l_user_key_tbl1  MULTISET UNION ALL l_user_key_tbl ;
570   l_entity_name1   := l_entity_name1   MULTISET UNION ALL l_entity_name  ;
571   l_reject_reason1 := l_reject_reason1 MULTISET UNION ALL l_reject_reason;
572 
573   po_asl_api_pvt.log('PO_ASL_API_GRP Rejected Rec count:'
574                       || l_user_key_tbl1.count);
575 
576   --call po_asl_api_pvt.reject_asl_record for above rejected records
577   IF l_user_key_tbl1.Count > 0
578   THEN
579     po_asl_api_pvt.reject_asl_record(
580       p_user_key_tbl       =>  l_user_key_tbl1,
581       p_rejection_reason   =>  l_reject_reason1,
582       p_entity_name        =>  l_entity_name1,
583       p_session_key        =>  g_session_key,
584       x_return_status      =>  x_return_status,
585       x_return_msg         =>  x_return_msg
586     );
587   END IF;
588   l_progress := 91;
589   --Peform validation on fields data
590   validate_asl_gt(
591     x_return_status      =>  x_return_status,
592     x_return_msg         =>  x_return_msg
593   );
594   l_progress := 92;
595   validate_asl_attr_gt(
596     x_return_status      =>  x_return_status,
597     x_return_msg         =>  x_return_msg
598   );
599   l_progress := 95;
600   validate_asl_doc_gt(
601     x_return_status      =>  x_return_status,
602     x_return_msg         =>  x_return_msg
603   );
604   l_progress := 96;
605   validate_chv_auth_gt(
606     x_return_status      =>  x_return_status,
607     x_return_msg         =>  x_return_msg
608   );
609   l_progress := 97;
610   validate_supp_item_cap_gt(
611     x_return_status      =>  x_return_status,
612     x_return_msg         =>  x_return_msg
613   );
614   l_progress := 98;
615   validate_supp_item_tol_gt(
616     x_return_status      =>  x_return_status,
617     x_return_msg         =>  x_return_msg
618   );
619   l_progress := 99;
620   --call the po_asl_api_pub.process for the next steps.
621   po_asl_api_pvt.process(
622     p_session_key        => p_session_key,
623     x_return_status      => x_return_status,
624     x_return_msg         => x_return_msg
625   );
626   l_progress := 100;
627   po_asl_api_pvt.log('END ::: po_asl_api_grp.process');
628 
629 EXCEPTION
630 
631   WHEN OTHERS THEN
632 
633     po_asl_api_pvt.log('po_asl_api_grp.process : when others exception at '
634                        || l_progress || ';' || SQLERRM );
635     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
636     x_return_msg := SQLERRM;
637 
638 END process;
639 
640 --------------------------------------------------------------------------------
641   --Start of Comments
642 
643   --Name: validate_asl_gt
644 
645   --Function:
646   --  This will validate data in po_approved_supplier_list_gt table
647 
648   --Parameters:
649 
650   --OUT:
651   --  x_return_status   VARCHAR2
652   --  x_return_msg      VARCHAR2
653 
654   --End of Comments
655 --------------------------------------------------------------------------------
656 
657 PROCEDURE validate_asl_gt(
658   x_return_status   OUT NOCOPY VARCHAR2
659 , x_return_msg      OUT NOCOPY VARCHAR2
660 )
661 IS
662   l_progress          NUMBER := 0;
663 
664   l_user_key_tbl      po_tbl_number;
665   l_entity_name       po_tbl_varchar30;
666   l_reject_reason  po_tbl_varchar2000;
667   l_user_key_tbl1     po_tbl_number;
668   l_entity_name1      po_tbl_varchar30;
669   l_reject_reason1 po_tbl_varchar2000;
670 
671 BEGIN
672   po_asl_api_pvt.log('START ::: po_asl_api_grp.validate_asl_gt');
673   SELECT user_key                                    ,
674          entity                                      ,
675          msg
676   BULK   COLLECT INTO
677          l_user_key_tbl                              ,
678          l_entity_name                               ,
679          l_reject_reason
680   FROM (
681     --Reject records if item and category both exists for the same ASL
682     SELECT  user_key                                 ,
683             'po_approved_supplier_list_gt' AS entity ,
684             fnd_message.get_string('PO','ITEM_CATEGORY_BOTH_EXIST') AS msg
685       FROM  po_approved_supplier_list_gt ASLGT
686       WHERE ASLGT.item_id         IS NOT NULL
687             AND ASLGT.category_id IS NOT NULL
688 
689     UNION ALL
690     --Reject records if item and category both empty
691     SELECT  user_key                                 ,
692             'po_approved_supplier_list_gt' AS entity ,
693             fnd_message.get_string('PO','ITEM_CATEGORY_BOTH_EMPTY') AS msg
694       FROM  po_approved_supplier_list_gt ASLGT
695       WHERE (ASLGT.item_id         IS NULL
696              AND ASLGT.category_id IS NULL)
697             OR (Trim(ASLGT.item_id)      IS NULL
698              AND Trim(ASLGT.category_id) IS NULL)
699 
700     UNION ALL
701     --Reject records if vendor business type is empty or null
702     SELECT  user_key                                 ,
703             'po_approved_supplier_list_gt' AS entity ,
704             fnd_message.get_string('PO','INVALID_BUSINESS_TYPE') AS msg
705       FROM  po_approved_supplier_list_gt ASLGT
706       WHERE ASLGT.vendor_business_type IS NULL
707             OR Upper(ASLGT.vendor_business_type) NOT IN
708             (SELECT  lookup_code
709                FROM  po_lookup_codes
710                WHERE lookup_type  = 'ASL_VENDOR_BUSINESS_TYPE')
711 
712     UNION ALL
713     --Reject records if vendor_id is empty
714     SELECT  user_key                                 ,
715            'po_approved_supplier_list_gt' AS entity  ,
716            fnd_message.get_string('PO','VENDOR_EMPTY') AS msg
717      FROM  po_approved_supplier_list_gt ASLGT
718      WHERE ASLGT.vendor_id IS NULL
719            AND  Upper(vendor_business_type) <> 'MANUFACTURER'
720 
721     UNION ALL
722     --Reject records if status_id is empty
723     SELECT  user_key                                 ,
724            'po_approved_supplier_list_gt' AS entity  ,
725            fnd_message.get_string('PO','STATUS_EMPTY') AS msg
726      FROM  po_approved_supplier_list_gt ASLGT
727      WHERE ASLGT.asl_status_id IS NULL
728   );
729 
730   l_progress := 30;
731 
732   SELECT user_key                                    ,
733          entity                                      ,
734          msg
735   BULK   COLLECT INTO
736          l_user_key_tbl1                             ,
737          l_entity_name1                              ,
738          l_reject_reason1
739   FROM (
740     --Reject records if manufacturer_asl_id is empty when business type is
741     --'DISTRIBUTOR'
742     SELECT  user_key                                 ,
743            'po_approved_supplier_list_gt' AS entity  ,
744            fnd_message.get_string('PO','MANUFACTURER_ASL_MANDATORY') AS msg
745      FROM  po_approved_supplier_list_gt ASLGT
746      WHERE ASLGT.manufacturer_asl_id IS NULL
747            AND Upper(ASLGT.vendor_business_type) = 'DISTRIBUTOR'
748 
749     UNION ALL
750     --Reject records if review date entered and is past date
751     SELECT  user_key                                 ,
752            'po_approved_supplier_list_gt' AS entity  ,
753            fnd_message.get_string('PO','INVALID_REVIEW_DATE') AS msg
754      FROM  po_approved_supplier_list_gt ASLGT
755      WHERE ASLGT.review_by_date     IS NOT NULL
756            AND ASLGT.review_by_date < SYSDATE
757 
758     UNION ALL
759     --During update ASL, business type can't be editable if the value is DB is
760     --'MANUFACTURER'
761     SELECT  user_key                                 ,
762            'po_approved_supplier_list_gt' AS entity  ,
763            fnd_message.get_string('PO','BUSINESS_TYPE_NOT_EDITABLE') AS msg
764      FROM  po_approved_supplier_list_gt ASLGT
765      WHERE ASLGT.process_action = PO_ASL_API_PUB.g_ACTION_UPDATE
766            AND
767            EXISTS (SELECT  asl_id
768                      FROM  po_approved_supplier_list ASL
769                      WHERE ASL.asl_id                      = ASLGT.asl_id
770                            AND Upper(ASL.vendor_business_type) = 'MANUFACTURER')
771            AND Upper(ASLGT.vendor_business_type)  <> 'MANUFACTURER'
772 
773     UNION ALL
774     --Reject records if business type is MANUFACTURER and manufacter id doesn't
775     --exist also reject if vendor exists for the same case
776     SELECT  user_key                                 ,
777            'po_approved_supplier_list_gt' AS entity  ,
778            fnd_message.get_string('PO','VENDOR_INVALID_EXP_MANUFACTUR') AS msg
779      FROM  po_approved_supplier_list_gt ASLGT
780      WHERE Upper(ASLGT.vendor_business_type) = 'MANUFACTURER'
781            AND (ASLGT.manufacturer_id IS NULL
782              OR ASLGT.vendor_id       IS NOT NULL)
783   );
784 
785   l_progress := 80;
786 
787   l_user_key_tbl1  := l_user_key_tbl1  MULTISET UNION ALL l_user_key_tbl ;
788   l_entity_name1   := l_entity_name1   MULTISET UNION ALL l_entity_name  ;
789   l_reject_reason1 := l_reject_reason1 MULTISET UNION ALL l_reject_reason;
790 
791   SELECT user_key                                    ,
792          entity                                      ,
793          msg
794   BULK   COLLECT INTO
795          l_user_key_tbl                              ,
796          l_entity_name                               ,
797          l_reject_reason
798   FROM (
799     --Reject records when business type is MANUFACTURER and if there are any
800     --child records exist
801     SELECT  user_key                                 ,
802             'po_approved_supplier_list_gt' AS entity ,
803             fnd_message.get_string('PO','MANUFAC_INVALID_AUTH_ENTRY') AS msg
804       FROM  po_approved_supplier_list_gt ASLGT
805       WHERE Upper(ASLGT.vendor_business_type) = 'MANUFACTURER'
806             AND
807             (EXISTS
808              (SELECT  1
809                 FROM  po_asl_attributes_gt PAA
810                 WHERE PAA.asl_id                = ASLGT.asl_id
811                       AND PAA.user_key          = ASLGT.user_key)
812             OR
813              EXISTS
814              (SELECT  1
815                 FROM  chv_authorizations_gt CHV
816                 WHERE CHV.reference_id          = ASLGT.asl_id
817                       AND CHV.user_key          = ASLGT.user_key)
818             OR
819              EXISTS
820              (SELECT  1
821                 FROM  po_asl_documents_gt PAD
822                 WHERE PAD.asl_id                = ASLGT.asl_id
823                       AND PAD.user_key          = ASLGT.user_key)
824             OR
825              EXISTS
826              (SELECT  1
827                 FROM  po_supplier_item_capacity_gt PSIC
828                 WHERE PSIC.asl_id               = ASLGT.asl_id
829                       AND PSIC.user_key         = ASLGT.user_key)
830             OR
831              EXISTS
832              (SELECT  1
833                 FROM  po_supplier_item_tolerance_gt PSIT
834                 WHERE PSIT.asl_id               = ASLGT.asl_id
835                       AND PSIT.user_key         = ASLGT.user_key)));
836 
837   l_progress := 90;
838 
839   l_user_key_tbl1  := l_user_key_tbl1  MULTISET UNION ALL l_user_key_tbl ;
840   l_entity_name1   := l_entity_name1   MULTISET UNION ALL l_entity_name  ;
841   l_reject_reason1 := l_reject_reason1 MULTISET UNION ALL l_reject_reason;
842   --call po_asl_api_pvt.reject_asl_record for above rejected records
843   po_asl_api_pvt.log('validate_asl_gt: reject count:' || l_user_key_tbl1.Count);
844   IF l_user_key_tbl1.Count > 0
845   THEN
846     po_asl_api_pvt.reject_asl_record(
847       p_user_key_tbl    => l_user_key_tbl1 ,
848       p_rejection_reason=> l_reject_reason1,
849       p_entity_name     => l_entity_name1  ,
850       p_session_key     => g_session_key   ,
851       x_return_status   => x_return_status ,
852       x_return_msg      => x_return_msg
853     );
854   END IF;
855 
856   l_progress := 100;
857   po_asl_api_pvt.log('END ::: po_asl_api_grp.validate_asl_gt');
858 
859 EXCEPTION
860 
861   WHEN OTHERS THEN
862 
863     po_asl_api_pvt.log('validate_asl_gt : when others exception at '
864                        || l_progress || ';' || SQLERRM );
865     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
866     x_return_msg := SQLERRM;
867 
868 END validate_asl_gt;
869 
870 
871 --------------------------------------------------------------------------------
872   --Start of Comments
873 
874   --Name: validate_asl_attr_gt
875 
876   --Function:
877   --  This will validate data in po_asl_attributes_gt table
878 
879   --Parameters:
880 
881   --OUT:
882   --  x_return_status   VARCHAR2
883   --  x_return_msg      VARCHAR2
884 
885   --End of Comments
886 --------------------------------------------------------------------------------
887 
888 PROCEDURE validate_asl_attr_gt(
889   x_return_status   OUT NOCOPY VARCHAR2
890 , x_return_msg      OUT NOCOPY VARCHAR2
891 )
892 IS
893   l_progress          NUMBER := 0;
894   l_msg_count         NUMBER;
895   l_msg_data          VARCHAR2(2000);
896   l_validation_error_name  VARCHAR2(30) ;
897 
898   l_user_key_tbl      po_tbl_number;
899   l_entity_name       po_tbl_varchar30;
900   l_reject_reason     po_tbl_varchar2000;
901   l_user_key_tbl1     po_tbl_number;
902   l_entity_name1      po_tbl_varchar30;
903   l_reject_reason1    po_tbl_varchar2000;
904 
905 BEGIN
906   po_asl_api_pvt.log('START ::: po_asl_api_grp.validate_asl_attr_gt');
907   SELECT user_key                                ,
908          entity                                  ,
909          msg
910   BULK   COLLECT INTO
911          l_user_key_tbl                          ,
912          l_entity_name                           ,
913          l_reject_reason
914   FROM (
915     --Reject records if item or site is null and country code is not null
916     SELECT  user_key                             ,
917             'po_asl_attributes_gt' AS entity     ,
918             fnd_message.get_string('PO','COUNTRY_CODE_NOT_EMPTY') AS msg
919       FROM  po_asl_attributes_gt PAAGT
920       WHERE (PAAGT.item_id           IS NULL
921              OR PAAGT.vendor_site_id IS NULL)
922             AND PAAGT.country_of_origin_code_dsp IS NOT NULL
923 
924     UNION ALL
925     --Reject records if Purchasing UOM empty and enable_plan_schedule_flag or
926     --enable_ship_schedule_flag is checked
927     SELECT  user_key                             ,
928             'po_asl_attributes_gt' AS entity     ,
929             fnd_message.get_string('PO','PURCHASING_UOM_MANDATORY') AS msg
930       FROM  po_asl_attributes_gt PAAGT
931       WHERE (PAAGT.enable_plan_schedule_flag_dsp    = 'Y'
932              OR PAAGT.enable_ship_schedule_flag_dsp = 'Y')
933             AND (PAAGT.purchasing_unit_of_measure_dsp IS NULL
934                  OR Trim(PAAGT.purchasing_unit_of_measure_dsp) = '')
935 
936     UNION ALL
937     --Reject records if enable_autoschedule_flag is Y when
938     --enable_plan_schedule_flag_dsp and enable_ship_schedule_flag_dsp
939     --are unchecked.
940     SELECT  user_key                             ,
941             'po_asl_attributes_gt' AS entity     ,
942             fnd_message.get_string('PO','INVALID_AUTOSCHEDULE_FLAG') AS msg
943       FROM  po_asl_attributes_gt PAAGT
944       WHERE Nvl(PAAGT.enable_plan_schedule_flag_dsp,'N')     <> 'Y'
945             AND Nvl(PAAGT.enable_ship_schedule_flag_dsp,'N') <> 'Y'
946             AND PAAGT.enable_autoschedule_flag_dsp = 'Y'
947 
948     UNION ALL
949     --Reject records if plan bucket pattern empty if enable_autoschedule_flag
950     --and enable_plan_schedule_flag enabled
951     SELECT  user_key                             ,
952             'po_asl_attributes_gt' AS entity     ,
953             fnd_message.get_string('PO','PLAN_BUCKET_MANDATORY') AS msg
954       FROM  po_asl_attributes_gt PAAGT
955       WHERE PAAGT.enable_plan_schedule_flag_dsp     = 'Y'
956             AND PAAGT.enable_autoschedule_flag_dsp  = 'Y'
957             AND PAAGT.plan_bucket_pattern_id IS NULL
958 
959     UNION ALL
960     --Reject records if plan schedule type empty if enable_autoschedule_flag
961     --and enable_plan_schedule_flag enabled
962     SELECT  user_key                             ,
963             'po_asl_attributes_gt' AS entity     ,
964             fnd_message.get_string('PO','PLAN_SCHEDULE_MANDATORY') AS msg
965       FROM  po_asl_attributes_gt PAAGT
966       WHERE PAAGT.enable_plan_schedule_flag_dsp     = 'Y'
967             AND PAAGT.enable_autoschedule_flag_dsp  = 'Y'
968             AND (PAAGT.plan_schedule_type IS NULL
969                 OR Trim(PAAGT.plan_schedule_type) = ''));
970 
971   l_progress := 10;
972   l_user_key_tbl1  := l_user_key_tbl;
973   l_entity_name1   := l_entity_name;
974   l_reject_reason1 := l_reject_reason;
975 
976   SELECT user_key                                ,
977          entity                                  ,
978          msg
979   BULK   COLLECT INTO
980          l_user_key_tbl                          ,
981          l_entity_name                           ,
982          l_reject_reason
983   FROM (
984     --Reject records if ship bucket pattern empty if enable_autoschedule_flag
985     --and enable_ship_schedule_flag enabled
986     SELECT  user_key                             ,
987             'po_asl_attributes_gt' AS entity     ,
988             fnd_message.get_string('PO','SHIP_BUCKET_MANDATORY') AS msg
989       FROM  po_asl_attributes_gt PAAGT
990       WHERE  PAAGT.enable_ship_schedule_flag_dsp    = 'Y'
991              AND PAAGT.enable_autoschedule_flag_dsp = 'Y'
992              AND PAAGT.ship_bucket_pattern_id IS NULL
993 
994     UNION ALL
995     --Reject records if ship schedule type empty if enable_autoschedule_flag
996     --and enable_ship_schedule_flag enabled
997     SELECT  user_key                             ,
998             'po_asl_attributes_gt' AS entity     ,
999             fnd_message.get_string('PO','SHIP_SCHEDULE_MANDATORY') AS msg
1000       FROM  po_asl_attributes_gt PAAGT
1001       WHERE  PAAGT.enable_ship_schedule_flag_dsp    = 'Y'
1002              AND PAAGT.enable_autoschedule_flag_dsp = 'Y'
1003              AND (PAAGT.ship_schedule_type IS NULL
1004                  OR Trim(PAAGT.ship_schedule_type) = '')
1005 
1006     UNION ALL
1007     --Reject records if there is an entry in po_supplier_item_capacity_gt
1008     -- when global_flag is N and VMI flag is not checked
1009     SELECT  PAAGT.user_key                             ,
1010             'po_asl_attributes_gt' AS entity     ,
1011             fnd_message.get_string('PO','INVALID_SUPP_ITEM_CAP_ENTRY') AS msg
1012       FROM  po_asl_attributes_gt PAAGT,
1013             po_approved_supplier_list_gt ASLGT
1014       WHERE PAAGT.user_key                         = ASLGT.user_key
1015             AND ASLGT.using_organization_id        <> -1
1016             AND Nvl(PAAGT.enable_vmi_flag_dsp,'N') <> 'Y'
1017             AND EXISTS
1018             (SELECT  1
1019                FROM  po_supplier_item_capacity_gt PSIC
1020                WHERE PSIC.asl_id                   = PAAGT.asl_id
1021                      AND PSIC.using_organization_id= PAAGT.using_organization_id
1022                      AND PSIC.user_key             = PAAGT.user_key
1023                      AND PSIC.process_action       = PO_ASL_API_PUB.g_ACTION_ADD)
1024 
1025   );
1026 
1027   l_progress := 20;
1028   l_user_key_tbl1  := l_user_key_tbl1  MULTISET UNION ALL l_user_key_tbl ;
1029   l_entity_name1   := l_entity_name1   MULTISET UNION ALL l_entity_name  ;
1030   l_reject_reason1 := l_reject_reason1 MULTISET UNION ALL l_reject_reason;
1031 
1032   SELECT user_key                                ,
1033          entity                                  ,
1034          msg
1035   BULK   COLLECT INTO
1036          l_user_key_tbl                          ,
1037          l_entity_name                           ,
1038          l_reject_reason
1039   FROM (
1040     --Reject records if plan bucket pattern is not empty if
1041     --enable_autoschedule_flag or enable_plan_schedule_flag disabled
1042     SELECT  user_key                             ,
1043             'po_asl_attributes_gt' AS entity     ,
1044             fnd_message.get_string('PO','INVALID_PLAN_BUCKET') AS msg
1045       FROM  po_asl_attributes_gt PAAGT
1046       WHERE (Nvl(PAAGT.enable_plan_schedule_flag_dsp,   'N')  <> 'Y'
1047              OR Nvl(PAAGT.enable_autoschedule_flag_dsp, 'N')  <> 'Y')
1048             AND PAAGT.plan_bucket_pattern_id IS NOT NULL
1049 
1050     UNION ALL
1051     --Reject records if plan schedule type not empty if
1052     --enable_autoschedule_flag or enable_plan_schedule_flag disabled
1053     SELECT  user_key                             ,
1054             'po_asl_attributes_gt' AS entity     ,
1055             fnd_message.get_string('PO','INVALID_PLAN_SCHEDULE') AS msg
1056       FROM  po_asl_attributes_gt PAAGT
1057       WHERE (Nvl(PAAGT.enable_plan_schedule_flag_dsp,   'N')  <> 'Y'
1058              OR Nvl(PAAGT.enable_autoschedule_flag_dsp, 'N')  <> 'Y')
1059             AND PAAGT.plan_schedule_type IS NOT NULL
1060 
1061     UNION ALL
1062     --Reject records if ship bucket pattern not empty if
1063     --enable_autoschedule_flag or enable_ship_schedule_flag disabled
1064     SELECT  user_key                             ,
1065             'po_asl_attributes_gt' AS entity     ,
1066             fnd_message.get_string('PO','INVALID_SHIP_BUCKET') AS msg
1067       FROM  po_asl_attributes_gt PAAGT
1068       WHERE (Nvl(PAAGT.enable_ship_schedule_flag_dsp,   'N')  <> 'Y'
1069              OR Nvl(PAAGT.enable_autoschedule_flag_dsp, 'N')  <> 'Y')
1070             AND PAAGT.ship_bucket_pattern_id IS NOT NULL
1071 
1072     UNION ALL
1073     --Reject records if ship schedule type not empty if
1074     --enable_autoschedule_flag or enable_ship_schedule_flag disabled
1075     SELECT  user_key                             ,
1076             'po_asl_attributes_gt' AS entity     ,
1077             fnd_message.get_string('PO','INVALID_SHIP_SCHEDULE') AS msg
1078       FROM  po_asl_attributes_gt PAAGT
1079       WHERE (Nvl(PAAGT.enable_ship_schedule_flag_dsp,   'N')  <> 'Y'
1080              OR Nvl(PAAGT.enable_autoschedule_flag_dsp, 'N')  <> 'Y')
1081             AND PAAGT.ship_schedule_type IS NOT NULL
1082   );
1083 
1084   l_progress := 30;
1085   l_user_key_tbl1  := l_user_key_tbl1  MULTISET UNION ALL l_user_key_tbl ;
1086   l_entity_name1   := l_entity_name1   MULTISET UNION ALL l_entity_name  ;
1087   l_reject_reason1 := l_reject_reason1 MULTISET UNION ALL l_reject_reason;
1088 
1089   SELECT user_key                                ,
1090          entity                                  ,
1091          msg
1092   BULK   COLLECT INTO
1093          l_user_key_tbl                          ,
1094          l_entity_name                           ,
1095          l_reject_reason
1096   FROM (
1097     --Reject records if authorization flag is not checked and
1098     --there is an entry for chv_authorizations  in case of CREATE
1099     SELECT  user_key                             ,
1100             'po_asl_attributes_gt' AS entity     ,
1101             fnd_message.get_string('PO','INVALID_AUTHORIZATION_ENTRY') AS msg
1102       FROM  po_asl_attributes_gt PAAGT
1103       WHERE NVL(PAAGT.enable_authorizations_flag_dsp,'N') <> 'Y'
1104             AND EXISTS
1105             (SELECT  1
1106                FROM  chv_authorizations_gt CHV
1107                WHERE CHV.reference_id              = PAAGT.asl_id
1108                      AND CHV.using_organization_id = PAAGT.using_organization_id
1109                      AND CHV.user_key              = PAAGT.user_key
1110                      AND CHV.process_action        = PO_ASL_API_PUB.g_ACTION_ADD)
1111             AND PAAGT.process_action     <> PO_ASL_API_PUB.g_ACTION_DELETE
1112     UNION ALL
1113     --Reject records if there is an entry in po_supplier_item_tolerance_gt
1114     -- when global_flag is N and VMI flag is not checked
1115     SELECT  PAAGT.user_key                             ,
1116             'po_asl_attributes_gt' AS entity     ,
1117             fnd_message.get_string('PO','INVALID_SUPP_ITEM_TOL_ENTRY') AS msg
1118       FROM  po_asl_attributes_gt PAAGT,
1119             po_approved_supplier_list_gt ASLGT
1120       WHERE PAAGT.user_key                         =  ASLGT.user_key
1121             AND ASLGT.using_organization_id        <> -1
1122             AND Nvl(PAAGT.enable_vmi_flag_dsp,'N') <> 'Y'
1123             AND EXISTS
1124             (SELECT  1
1125                FROM  po_supplier_item_tolerance_gt PSIT
1126                WHERE PSIT.asl_id                   = PAAGT.asl_id
1127                      AND PSIT.using_organization_id= PAAGT.using_organization_id
1128                      AND PSIT.user_key             = PAAGT.user_key
1129                      AND PSIT.process_action      = PO_ASL_API_PUB.g_ACTION_ADD)
1130 
1131     UNION ALL
1132     --Reject records if Price Update tolerance is -ve number
1133     SELECT  user_key                             ,
1134             'po_asl_attributes_gt' AS entity     ,
1135             fnd_message.get_string('PO','INVALID_PRICE_UPDATE_TOLERANCE') AS msg
1136       FROM  po_asl_attributes_gt PAAGT
1137       WHERE PAAGT.price_update_tolerance_dsp < 0);
1138 
1139   l_progress := 40;
1140   l_user_key_tbl1  := l_user_key_tbl1  MULTISET UNION ALL l_user_key_tbl ;
1141   l_entity_name1   := l_entity_name1   MULTISET UNION ALL l_entity_name  ;
1142   l_reject_reason1 := l_reject_reason1 MULTISET UNION ALL l_reject_reason;
1143 
1144   SELECT user_key                                ,
1145          entity                                  ,
1146          msg
1147   BULK   COLLECT INTO
1148          l_user_key_tbl                          ,
1149          l_entity_name                           ,
1150          l_reject_reason
1151   FROM (
1152     --Reject records if delivery calendar code is entered when global_flag is N
1153     --or VMI flag is not checked
1154     SELECT  user_key                             ,
1155             'po_asl_attributes_gt' AS entity     ,
1156             fnd_message.get_string('PO','DELIVERY_CALENDAR_NOT_NULL') AS msg
1157       FROM  po_asl_attributes_gt PAAGT
1158       WHERE PAAGT.delivery_calendar_dsp     IS NOT NULL
1159             AND PAAGT.using_organization_id        <> -1
1160             AND Nvl(PAAGT.enable_vmi_flag_dsp,'N') <> 'Y'
1161 
1162     UNION ALL
1163     --Reject records if delivery calendar code is entered and not valid
1164     SELECT  user_key                             ,
1165             'po_asl_attributes_gt' AS entity     ,
1166             fnd_message.get_string('PO','INVALID_DELIVERY_CALENDAR_CODE') AS msg
1167       FROM  po_asl_attributes_gt PAAGT
1168       WHERE PAAGT.delivery_calendar_dsp IS NOT NULL
1169             AND NOT EXISTS
1170             (SELECT  1
1171                FROM  bom_calendars BOM
1172                WHERE Nvl(BOM.calendar_end_date, SYSDATE+1) > SYSDATE
1173                      AND BOM.calendar_code = PAAGT.delivery_calendar_dsp)
1174 
1175     UNION ALL
1176     --Reject records if delivery calendar code is entered when global_flag is N
1177     --or VMI flag is not checked
1178     SELECT  user_key                             ,
1179             'po_asl_attributes_gt' AS entity     ,
1180             fnd_message.get_string('PO','PROCESSING_LEAD_TIME_NOT_NULL') AS msg
1181       FROM  po_asl_attributes_gt PAAGT
1182       WHERE PAAGT.processing_lead_time_dsp IS NOT NULL
1183             AND PAAGT.using_organization_id        <> -1
1184             AND Nvl(PAAGT.enable_vmi_flag_dsp,'N') <> 'Y'
1185 
1186     UNION ALL
1187     --Reject records if Processing lead time is -ve number or zero
1188     SELECT  user_key                             ,
1189             'po_asl_attributes_gt' AS entity     ,
1190             fnd_message.get_string('PO','INVALID_PROCESSING_LEAD_TIME') AS msg
1191       FROM  po_asl_attributes_gt PAAGT
1192       WHERE PAAGT.processing_lead_time_dsp <= 0);
1193 
1194   l_progress := 50;
1195   l_user_key_tbl1  := l_user_key_tbl1  MULTISET UNION ALL l_user_key_tbl ;
1196   l_entity_name1   := l_entity_name1   MULTISET UNION ALL l_entity_name  ;
1197   l_reject_reason1 := l_reject_reason1 MULTISET UNION ALL l_reject_reason;
1198 
1199   SELECT user_key                                ,
1200          entity                                  ,
1201          msg
1202   BULK   COLLECT INTO
1203          l_user_key_tbl                          ,
1204          l_entity_name                           ,
1205          l_reject_reason
1206   FROM (
1207     --Reject records if Min Order Qty is -ve number or zero
1208     SELECT  user_key                             ,
1209             'po_asl_attributes_gt' AS entity     ,
1210             fnd_message.get_string('PO','INVALID_MIN_ORDER_QTY') AS msg
1211       FROM  po_asl_attributes_gt PAAGT
1212       WHERE PAAGT.min_order_qty_dsp <= 0
1213 
1214     UNION ALL
1215     --Reject records if fixed lot multiple is -ve number or zero
1216     SELECT  user_key                             ,
1217             'po_asl_attributes_gt' AS entity     ,
1218             fnd_message.get_string('PO','INVALID_FIXED_LOT_MULTIPLE') AS msg
1219       FROM  po_asl_attributes_gt PAAGT
1220       WHERE PAAGT.fixed_lot_multiple_dsp <= 0
1221 
1222     UNION ALL
1223     --Reject records if enable_vmi_flag is checked when site is null or
1224     --ASL created for commodity or PO_THIRD_PARTY_STOCK_GRP.validate_local_asl
1225     --retunrs false
1226     SELECT  user_key                             ,
1227             'po_asl_attributes_gt' AS entity     ,
1228             fnd_message.get_string('PO','INVALID_VMI_FLAG') AS msg
1229       FROM  po_asl_attributes_gt PAAGT
1230       WHERE PAAGT.enable_vmi_flag_dsp = 'Y'
1231             AND (PAAGT.vendor_site_id IS NULL
1232                  OR PAAGT.item_id     IS NULL
1233              OR validate_vmi(
1234                  p_item_id               => PAAGT.item_id
1235                 ,p_vendor_site_id        => PAAGT.vendor_site_id
1236                 ,p_using_organization_id => PAAGT.using_organization_id) = 'F'));
1237 
1238   l_progress := 60;
1239   l_user_key_tbl1  := l_user_key_tbl1  MULTISET UNION ALL l_user_key_tbl ;
1240   l_entity_name1   := l_entity_name1   MULTISET UNION ALL l_entity_name  ;
1241   l_reject_reason1 := l_reject_reason1 MULTISET UNION ALL l_reject_reason;
1242 
1243   SELECT user_key                                ,
1244          entity                                  ,
1245          msg
1246   BULK   COLLECT INTO
1247          l_user_key_tbl                          ,
1248          l_entity_name                           ,
1249          l_reject_reason
1250   FROM (
1251     --Reject records if vmi_flag is not checked and automatic allowed is checked
1252     SELECT  user_key                             ,
1253             'po_asl_attributes_gt' AS entity     ,
1254             fnd_message.get_string('PO','INVALID_AUTO_REPLENISH_FLAG') AS msg
1255       FROM  po_asl_attributes_gt PAAGT
1256       WHERE Nvl(PAAGT.enable_vmi_flag_dsp,'N')      <> 'Y'
1257             AND PAAGT.enable_vmi_auto_replenish_flag = 'Y'
1258 
1259     UNION ALL
1260     --Reject records if vmi_flag is not checked and replenishment
1261     --method is entered
1262     SELECT  user_key                             ,
1263             'po_asl_attributes_gt' AS entity     ,
1264             fnd_message.get_string('PO','INVALID_REPLENISH_METHOD') AS msg
1265       FROM  po_asl_attributes_gt PAAGT
1266       WHERE Nvl(PAAGT.enable_vmi_flag_dsp,'N')  <> 'Y'
1267             AND PAAGT.replenishment_method      IS NOT NULL
1268 
1269     UNION ALL
1270     --Reject records if automatic allowed is not checked and replenishment
1271     --approval is not 'SUPPLIER_OR_BUYER'
1272     SELECT  user_key                             ,
1273             'po_asl_attributes_gt' AS entity     ,
1274             fnd_message.get_string('PO','INVALID_REPLENISH_APPROVAL') AS msg
1275       FROM  po_asl_attributes_gt PAAGT
1276       WHERE Nvl(PAAGT.enable_vmi_auto_replenish_flag,'N') <> 'Y'
1277             AND PAAGT.vmi_replenishment_approval <>'SUPPLIER_OR_BUYER'
1278             AND PAAGT.vmi_replenishment_approval IS NOT NULL
1279 
1280     UNION ALL
1281     --Reject records if vmi_flag, automatic allowed is checked and
1282     --replenishment approval is empty
1283     SELECT  user_key                             ,
1284             'po_asl_attributes_gt' AS entity     ,
1285             fnd_message.get_string('PO','REPLENISH_APPROVAL_REQUIRED') AS msg
1286       FROM  po_asl_attributes_gt PAAGT
1287       WHERE PAAGT.enable_vmi_flag_dsp                = 'Y'
1288             AND PAAGT.enable_vmi_auto_replenish_flag = 'Y'
1289             AND PAAGT.vmi_replenishment_approval     IS NULL
1290 
1291 
1292     UNION ALL
1293     --Reject records if vmi_flag is checked and replenishment method is empty
1294     SELECT  user_key                             ,
1295             'po_asl_attributes_gt' AS entity     ,
1296             fnd_message.get_string('PO','REPLENISH_METHOD_REQUIRED') AS msg
1297       FROM  po_asl_attributes_gt PAAGT
1298       WHERE PAAGT.enable_vmi_flag_dsp            = 'Y'
1299             AND PAAGT.replenishment_method       IS NULL
1300 
1301     UNION ALL
1302     --Reject records if forecast horizon is not +ve integer or zero
1303     SELECT  user_key                             ,
1304             'po_asl_attributes_gt' AS entity     ,
1305             fnd_message.get_string('PO','INVALID_FORECAST_HORIZON') AS msg
1306       FROM  po_asl_attributes_gt PAAGT
1307       WHERE PAAGT.forecast_horizon_dsp <= 0
1308             OR Round(PAAGT.forecast_horizon_dsp) <> PAAGT.forecast_horizon_dsp
1309             OR (PAAGT.forecast_horizon_dsp IS NOT NULL
1310                 AND Nvl(PAAGT.enable_vmi_flag_dsp,'N') <> 'Y'));
1311 
1312   l_progress := 70;
1313   l_user_key_tbl1  := l_user_key_tbl1  MULTISET UNION ALL l_user_key_tbl ;
1314   l_entity_name1   := l_entity_name1   MULTISET UNION ALL l_entity_name  ;
1315   l_reject_reason1 := l_reject_reason1 MULTISET UNION ALL l_reject_reason;
1316 
1317   SELECT user_key                                ,
1318          entity                                  ,
1319          msg
1320   BULK   COLLECT INTO
1321          l_user_key_tbl                          ,
1322          l_entity_name                           ,
1323          l_reject_reason
1324   FROM (
1325     --Reject records if VMI Min Qty is -ve number  or is entered when
1326     --vmi_flag is not checked or replenishment method is 2/4
1327     SELECT  user_key                             ,
1328             'po_asl_attributes_gt' AS entity     ,
1329             fnd_message.get_string('PO','INVALID_VIM_MIN_QTY') AS msg
1330       FROM  po_asl_attributes_gt PAAGT
1331       WHERE PAAGT.vmi_min_qty_dsp < 0
1332             OR (PAAGT.vmi_min_qty_dsp                  <> 0
1333                 AND Nvl(PAAGT.enable_vmi_flag_dsp,'N') <> 'Y')
1334             OR (PAAGT.vmi_min_qty_dsp          <> 0
1335                 AND PAAGT.replenishment_method IN (2,4))
1336 
1337     UNION ALL
1338     --Reject records if VMI Max Qty is -ve number or is entered when
1339     --vmi flag is not checked or replenishment method is 2/3/4  or
1340     --this qty is less than vmi min qty
1341     SELECT  user_key                             ,
1342             'po_asl_attributes_gt' AS entity     ,
1343             fnd_message.get_string('PO','INVALID_VIM_MAX_QTY') AS msg
1344       FROM  po_asl_attributes_gt PAAGT
1345       WHERE PAAGT.vmi_max_qty_dsp     < 0
1346             OR (PAAGT.vmi_max_qty_dsp < PAAGT.vmi_min_qty_dsp)
1347             OR (PAAGT.vmi_max_qty_dsp                  <> 0
1348                 AND Nvl(PAAGT.enable_vmi_flag_dsp,'N') <> 'Y')
1349             OR (PAAGT.vmi_max_qty_dsp <> 0 AND PAAGT.replenishment_method
1350                 IN (2,3,4))
1351 
1352     UNION ALL
1353     --Reject records if VMI Min Days is not +ve integer or is entered when
1354     --vmi flag is not checked or replenishment method is 1/3
1355     SELECT  user_key                             ,
1356             'po_asl_attributes_gt' AS entity     ,
1357             fnd_message.get_string('PO','INVALID_VIM_MIN_DAYS') AS msg
1358       FROM  po_asl_attributes_gt PAAGT
1359       WHERE PAAGT.vmi_min_days_dsp < 0
1360             OR Round(PAAGT.vmi_min_days_dsp) <> PAAGT.vmi_min_days_dsp
1361             OR (PAAGT.vmi_min_days_dsp                 <>  0
1362                 AND Nvl(PAAGT.enable_vmi_flag_dsp,'N') <> 'Y')
1363             OR (PAAGT.vmi_min_days_dsp         <>  0
1364                 AND PAAGT.replenishment_method IN (1,3))
1365 
1366     UNION ALL
1367     --Reject records if VMI Max Days is not +ve integer or is entered when
1368     --vmi flag is not checked or replenishment method is 1/3/4
1369     SELECT  user_key                             ,
1370             'po_asl_attributes_gt' AS entity     ,
1371             fnd_message.get_string('PO','INVALID_VIM_MAXS_DAYS') AS msg
1372       FROM  po_asl_attributes_gt PAAGT
1373       WHERE PAAGT.vmi_max_days_dsp < 0
1374             OR Round(PAAGT.vmi_max_days_dsp) <> PAAGT.vmi_max_days_dsp
1375             OR (PAAGT.vmi_max_days_dsp < PAAGT.vmi_min_days_dsp)
1376             OR (PAAGT.vmi_max_days_dsp                 <>  0
1377                 AND Nvl(PAAGT.enable_vmi_flag_dsp,'N') <> 'Y')
1378             OR (PAAGT.vmi_max_days_dsp         <>  0
1379                 AND PAAGT.replenishment_method IN (1,3,4))
1380 
1381     UNION ALL
1382     --Reject records if Fixed Order Quantity is -ve number or is entered when
1383     --vmi flag is not checked or replenishment method is 1/2
1384     SELECT  user_key                             ,
1385             'po_asl_attributes_gt' AS entity     ,
1386             fnd_message.get_string('PO','INVALID_FIXED_ORDER_QTY') AS msg
1387       FROM  po_asl_attributes_gt PAAGT
1388       WHERE PAAGT.fixed_order_quantity_dsp       <  0
1389             OR (PAAGT.fixed_order_quantity_dsp         <>  0
1390                 AND Nvl(PAAGT.enable_vmi_flag_dsp,'N') <> 'Y')
1391             OR (PAAGT.fixed_order_quantity_dsp    <> 0
1392                 AND PAAGT.replenishment_method IN (1,2)));
1393 
1394   l_progress := 80;
1395   l_user_key_tbl1  := l_user_key_tbl1  MULTISET UNION ALL l_user_key_tbl ;
1396   l_entity_name1   := l_entity_name1   MULTISET UNION ALL l_entity_name  ;
1397   l_reject_reason1 := l_reject_reason1 MULTISET UNION ALL l_reject_reason;
1398   SELECT user_key                                ,
1399          entity                                  ,
1400          msg
1401   BULK   COLLECT INTO
1402          l_user_key_tbl                          ,
1403          l_entity_name                           ,
1404          l_reject_reason
1405   FROM (
1406     --Reject records if consigned from supplier is checked when site is null or
1407     --ASL created for commodity or PO_THIRD_PARTY_STOCK_GRP.validate_local_asl
1408     --retunrs false
1409     SELECT  user_key                             ,
1410             'po_asl_attributes_gt' AS entity     ,
1411             fnd_message.get_string('PO','INVALID_CONSIGNED_FLAG') AS msg
1412       FROM  po_asl_attributes_gt PAAGT
1413       WHERE PAAGT.consigned_from_supp_flag_dsp = 'Y'
1414             AND (PAAGT.vendor_site_id IS NULL
1415                  OR PAAGT.item_id     IS NULL
1416                  OR validate_vmi(
1417                       p_item_id               => PAAGT.item_id
1418                      ,p_vendor_site_id        => PAAGT.vendor_site_id
1419                      ,p_using_organization_id=>PAAGT.using_organization_id)='F')
1420 
1421     UNION ALL
1422     --Reject records if Consigned billing cycle is -ve number
1423     SELECT  user_key                             ,
1424             'po_asl_attributes_gt' AS entity     ,
1425             fnd_message.get_string('PO','INVALID_CONSIGN_BILL_CYCLE') AS msg
1426       FROM  po_asl_attributes_gt PAAGT
1430 
1427       WHERE PAAGT.consigned_billing_cycle_dsp < 0
1428             OR (PAAGT.consigned_billing_cycle_dsp IS NOT NULL
1429                 AND Nvl(PAAGT.consigned_from_supp_flag_dsp,'N') <> 'Y')
1431     UNION ALL
1432     --Reject records if Consume on Aging flag is checked when Consigned flag
1433     --is not checked
1434     SELECT  user_key                             ,
1435             'po_asl_attributes_gt' AS entity     ,
1436             fnd_message.get_string('PO','INVALID_CONSUME_AGING_FLAG') AS msg
1437       FROM  po_asl_attributes_gt PAAGT
1438       WHERE PAAGT.consume_on_aging_flag_dsp = 'Y'
1439             AND Nvl(PAAGT.consigned_from_supp_flag_dsp,'N') <> 'Y'
1440 
1441     UNION ALL
1442     --Reject records if ageing period is not +ve number or zero or is entered
1443     --when consume of ageing flag is not checked
1444     SELECT  user_key                             ,
1445             'po_asl_attributes_gt' AS entity     ,
1446             fnd_message.get_string('PO','INVALID_AGEING_PERIOD') AS msg
1447       FROM  po_asl_attributes_gt PAAGT
1448       WHERE PAAGT.aging_period_dsp <= 0
1449             OR Round(PAAGT.aging_period_dsp) <> PAAGT.aging_period_dsp
1450             OR (Nvl(PAAGT.consume_on_aging_flag_dsp,'N') <> 'Y'
1451                 AND PAAGT.aging_period_dsp IS NOT NULL)
1452 
1453     UNION ALL
1454     --Reject records if vendor site is null and supplier scheduling tab details
1455     --are given
1456     SELECT  user_key                             ,
1457             'po_asl_attributes_gt' AS entity     ,
1458             fnd_message.get_string('PO','SUPPLIER_SCHEDULING_DISABLED') AS msg
1459       FROM  po_asl_attributes_gt PAAGT
1460       WHERE PAAGT.vendor_site_id     IS NULL
1461             AND PAAGT.process_action <> PO_ASL_API_PUB.g_ACTION_DELETE
1462             AND (PAAGT.enable_plan_schedule_flag_dsp    = 'Y'
1463                  OR PAAGT.enable_ship_schedule_flag_dsp = 'Y'
1464                  OR PAAGT.enable_autoschedule_flag_dsp  = 'Y'
1465                  OR PAAGT.scheduler_id IS NOT NULL
1466                  OR PAAGT.enable_authorizations_flag_dsp = 'Y'
1467                  OR EXISTS
1468             (SELECT  1
1469                FROM  chv_authorizations_gt CHV
1470                WHERE CHV.reference_id              = PAAGT.asl_id
1471                      AND CHV.using_organization_id = PAAGT.using_organization_id
1472                      AND CHV.user_key              = PAAGT.user_key))
1473 
1474   );
1475 
1476   l_progress := 90;
1477   l_user_key_tbl1  := l_user_key_tbl1  MULTISET UNION ALL l_user_key_tbl ;
1478   l_entity_name1   := l_entity_name1   MULTISET UNION ALL l_entity_name  ;
1479   l_reject_reason1 := l_reject_reason1 MULTISET UNION ALL l_reject_reason;
1480 
1481   --call po_asl_api_pvt.reject_asl_record for above rejected records
1482   po_asl_api_pvt.log('validate_asl_attr_gt: reject count:' ||
1483                       l_user_key_tbl1.Count);
1484   IF l_user_key_tbl1.Count > 0
1485   THEN
1486     po_asl_api_pvt.reject_asl_record(
1487       p_user_key_tbl       =>  l_user_key_tbl1,
1488       p_rejection_reason   =>  l_reject_reason1,
1489       p_entity_name        =>  l_entity_name1,
1490       p_session_key        =>  g_session_key,
1491       x_return_status      =>  x_return_status,
1492       x_return_msg         =>  x_return_msg
1493     );
1494   END IF;
1495 
1496   l_progress := 100;
1497   po_asl_api_pvt.log('END ::: po_asl_api_grp.validate_asl_attr_gt');
1498 
1499 EXCEPTION
1500 
1501   WHEN OTHERS THEN
1502 
1503     po_asl_api_pvt.log('validate_asl_attr_gt : when others exception at '
1504                        || l_progress || ';' || SQLERRM );
1505     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1506     x_return_msg := SQLERRM;
1507 
1508 END validate_asl_attr_gt;
1509 
1510 --------------------------------------------------------------------------------
1511   --Start of Comments
1512 
1513   --Name: validate_asl_doc_gt
1514 
1515   --Function:
1516   --  This will validate data in po_asl_documents_gt table
1517 
1518   --Parameters:
1519 
1520   --OUT:
1521   --  x_return_status   VARCHAR2
1522   --  x_return_msg      VARCHAR2
1523 
1524   --End of Comments
1525 --------------------------------------------------------------------------------
1526 
1527 PROCEDURE validate_asl_doc_gt(
1528   x_return_status   OUT NOCOPY VARCHAR2
1529 , x_return_msg      OUT NOCOPY VARCHAR2
1530 )
1531 IS
1532   l_progress         NUMBER := 0;
1533 
1534   l_user_key_tbl     po_tbl_number;
1535   l_entity_name      po_tbl_varchar30;
1536   l_reject_reason    po_tbl_varchar2000;
1537 
1538 BEGIN
1539   po_asl_api_pvt.log('START ::: po_asl_api_grp.validate_asl_doc_gt');
1540   SELECT user_key                                ,
1541          entity                                  ,
1542          msg
1543   BULK   COLLECT INTO
1544          l_user_key_tbl                          ,
1545          l_entity_name                           ,
1546          l_reject_reason
1547   FROM (
1548     --Reject records if sequence number is empty or lessthan 1
1549     SELECT  user_key                             ,
1550             'po_asl_documents_gt' AS entity      ,
1551             fnd_message.get_string('PO','INVALID_DOC_SEQUENCE') AS msg
1552       FROM  po_asl_documents_gt DOCGT
1553       WHERE DOCGT.sequence_num    IS NULL
1554             OR DOCGT.sequence_num < 1
1555 
1556     UNION ALL
1557     --Reject records if document type is null
1558     SELECT  user_key                             ,
1559             'po_asl_documents_gt' AS entity      ,
1560             fnd_message.get_string('PO','DOC_TYPE_MANDATORY') AS msg
1561       FROM  po_asl_documents_gt DOCGT
1562       WHERE DOCGT.document_type_code IS NULL
1563 
1564     UNION ALL
1565     --Reject records if header id is null
1566     SELECT  user_key                             ,
1567             'po_asl_documents_gt' AS entity      ,
1568             fnd_message.get_string('PO','DOC_HEADER_MANDATORY') AS msg
1569       FROM  po_asl_documents_gt DOCGT
1570       WHERE DOCGT.document_header_id IS NULL
1571 
1572     UNION ALL
1573     --Reject records if document type is Not CONTRACT, 'LINE_NUM' is null
1574     SELECT  user_key                             ,
1575             'po_asl_documents_gt' AS entity      ,
1576             fnd_message.get_string('PO','LINE_NUM_MANDATORY') AS msg
1577       FROM  po_asl_documents_gt DOCGT
1578       WHERE DOCGT.document_type_code     <> 'CONTRACT'
1579             AND DOCGT.document_line_id   IS NULL
1580             AND DOCGT.process_action     <> PO_ASL_API_PUB.g_ACTION_DELETE
1581   );
1582 
1583   l_progress := 50;
1584   --call po_asl_api_pvt.reject_asl_record for above rejected records
1585   po_asl_api_pvt.log('validate_asl_doc_gt: reject count:' ||
1586                       l_user_key_tbl.Count);
1587   IF l_user_key_tbl.Count > 0
1588   THEN
1589     po_asl_api_pvt.reject_asl_record(
1590       p_user_key_tbl       =>  l_user_key_tbl,
1591       p_rejection_reason   =>  l_reject_reason,
1592       p_entity_name        =>  l_entity_name,
1593       p_session_key        =>  g_session_key,
1594       x_return_status      =>  x_return_status,
1595       x_return_msg         =>  x_return_msg
1596     );
1597    END if;
1598 
1599   l_progress := 100;
1600   po_asl_api_pvt.log('END ::: po_asl_api_grp.validate_asl_doc_gt');
1601 
1602 EXCEPTION
1603 
1604   WHEN OTHERS THEN
1605 
1606     po_asl_api_pvt.log('validate_asl_doc_gt : when others exception at '
1607                        || l_progress || ';' || SQLERRM );
1608     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1609     x_return_msg := SQLERRM;
1610 
1611 END validate_asl_doc_gt;
1612 
1613 --------------------------------------------------------------------------------
1614   --Start of Comments
1615 
1616   --Name: validate_chv_auth_gt
1617 
1618   --Function:
1619   --  This will validate data in chv_authorizations_gt table
1620 
1621   --Parameters:
1622 
1623   --OUT:
1624   --  x_return_status   VARCHAR2
1625   --  x_return_msg      VARCHAR2
1626 
1627   --End of Comments
1628 --------------------------------------------------------------------------------
1629 
1630 PROCEDURE validate_chv_auth_gt(
1631   x_return_status   OUT NOCOPY VARCHAR2
1632 , x_return_msg      OUT NOCOPY VARCHAR2
1633 )
1634 IS
1635   l_progress         NUMBER := 0;
1636 
1637   l_user_key_tbl     po_tbl_number;
1638   l_entity_name      po_tbl_varchar30;
1639   l_reject_reason    po_tbl_varchar2000;
1640 
1641 BEGIN
1642   po_asl_api_pvt.log('START ::: po_asl_api_grp.validate_chv_auth_gt');
1643   SELECT user_key                                ,
1644          entity                                  ,
1645          msg
1646   BULK   COLLECT INTO
1647          l_user_key_tbl                          ,
1648          l_entity_name                           ,
1649          l_reject_reason
1650   FROM (
1651     --Reject records if sequence number is empty or not in 1,2,3,4
1652     SELECT  user_key                             ,
1653             'chv_authorizations_gt' AS entity    ,
1654             fnd_message.get_string('PO','INVALID_AUTH_SEQUENCE') AS msg
1655       FROM  chv_authorizations_gt CHVGT
1656       WHERE CHVGT.authorization_sequence_dsp    IS NULL
1657             OR CHVGT.authorization_sequence_dsp NOT IN (1,2,3,4)
1658 
1659     UNION ALL
1660      --Reject records if timefence days is less than 1
1661      SELECT user_key                             ,
1662             'chv_authorizations_gt' AS entity    ,
1663             fnd_message.get_string('PO','INVALID_TIMEFENCE_DAYS') AS msg
1664       FROM  chv_authorizations_gt CHVGT
1665       WHERE CHVGT.timefence_days_dsp IS NULL
1666             OR CHVGT.timefence_days_dsp <= 0
1667 
1668   );
1669 
1670 
1671   l_progress := 50;
1672   --call po_asl_api_pvt.reject_asl_record for above rejected records
1673   po_asl_api_pvt.log('validate_chv_auth_gt: reject count:' ||
1674                       l_user_key_tbl.Count);
1675   IF l_user_key_tbl.Count > 0
1676   THEN
1677     po_asl_api_pvt.reject_asl_record(
1678       p_user_key_tbl       =>  l_user_key_tbl,
1679       p_rejection_reason   =>  l_reject_reason,
1680       p_entity_name        =>  l_entity_name,
1681       p_session_key        =>  g_session_key,
1682       x_return_status      =>  x_return_status,
1683       x_return_msg         =>  x_return_msg
1684     );
1685   END IF;
1686 
1687   l_progress := 100;
1688   po_asl_api_pvt.log('END ::: po_asl_api_grp.validate_chv_auth_gt');
1689 
1690 EXCEPTION
1691 
1692   WHEN OTHERS THEN
1693 
1694     po_asl_api_pvt.log('validate_chv_auth_gt : when others exception at '
1695                        || l_progress || ';' || SQLERRM );
1696     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1697     x_return_msg := SQLERRM;
1698 
1699 END validate_chv_auth_gt;
1700 
1701 --------------------------------------------------------------------------------
1702   --Start of Comments
1703 
1704   --Name: validate_supp_item_cap_gt
1705 
1706   --Function:
1707   --  This will validate data in po_supplier_item_capacity_gt table
1708 
1709   --Parameters:
1710 
1711   --OUT:
1712   --  x_return_status   VARCHAR2
1713   --  x_return_msg      VARCHAR2
1714 
1715   --End of Comments
1716 --------------------------------------------------------------------------------
1717 
1718 PROCEDURE validate_supp_item_cap_gt(
1719   x_return_status   OUT NOCOPY VARCHAR2
1720 , x_return_msg      OUT NOCOPY VARCHAR2
1721 )
1722 IS
1723   l_progress         NUMBER := 0;
1724 
1725   l_user_key_tbl     po_tbl_number;
1726   l_entity_name      po_tbl_varchar30;
1727   l_reject_reason    po_tbl_varchar2000;
1728   l_user_key_tbl1    po_tbl_number;
1729   l_entity_name1     po_tbl_varchar30;
1730   l_reject_reason1   po_tbl_varchar2000;
1731 
1732 BEGIN
1733   po_asl_api_pvt.log('START ::: po_asl_api_grp.validate_supp_item_cap_gt');
1734   SELECT user_key                                    ,
1735          entity                                      ,
1736          msg
1737   BULK   COLLECT INTO
1738          l_user_key_tbl                              ,
1739          l_entity_name                               ,
1740          l_reject_reason
1741   FROM (
1742     --Reject records if from_date is less than current date
1743     SELECT  user_key                                 ,
1744             'po_supplier_item_capacity_gt' AS entity ,
1745             fnd_message.get_string('PO','INVALID_FROM_DATE') AS msg
1746       FROM  po_supplier_item_capacity_gt PSICGT
1747       WHERE (PSICGT.from_date_dsp    IS NULL
1748              OR PSICGT.from_date_dsp < SYSDATE)
1749             AND PSICGT.process_action <> PO_ASL_API_PUB.g_ACTION_DELETE
1750 
1751     UNION ALL
1752      --Reject records if to_date is less than current date or from_date
1753     SELECT  user_key                                 ,
1754             'po_supplier_item_capacity_gt' AS entity ,
1755             fnd_message.get_string('PO','INVALID_TO_DATE') AS msg
1756       FROM  po_supplier_item_capacity_gt PSICGT
1757       WHERE PSICGT.to_date_dsp    < SYSDATE
1758             OR PSICGT.to_date_dsp < PSICGT.from_date_dsp
1759 
1760     UNION ALL
1761      --Reject records if capacity is less than 1
1762      SELECT user_key                             ,
1763             'po_supplier_item_capacity_gt'       ,
1764             fnd_message.get_string('PO','INVALID_CAPACITY_PER_DAY') AS msg
1765       FROM  po_supplier_item_capacity_gt PSICGT
1766       WHERE PSICGT.capacity_per_day_dsp IS NULL
1767             OR PSICGT.capacity_per_day_dsp <= 0);
1768 
1769   l_progress := 20;
1770   l_user_key_tbl1  := l_user_key_tbl;
1771   l_entity_name1   := l_entity_name;
1772   l_reject_reason1 := l_reject_reason;
1773 
1774   SELECT PSICGT.user_key                             ,
1775          'po_supplier_item_capacity_gt' AS entity    ,
1776          fnd_message.get_string('PO','DATES_OVERLAPPED') AS msg
1777     BULK COLLECT INTO
1778          l_user_key_tbl                              ,
1779          l_entity_name                               ,
1780          l_reject_reason
1781     FROM  po_supplier_item_capacity_gt PSICGT        ,
1782           po_approved_supplier_list_gt ASLGT
1783     WHERE 2 <= (SELECT  Count(user_key)
1784                  FROM  po_supplier_item_capacity_gt PSIC
1785                  WHERE (PSICGT.from_date_dsp
1786                        BETWEEN PSIC.from_date_dsp AND PSIC.to_date_dsp
1787                        OR PSICGT.to_date_dsp
1788                        BETWEEN PSIC.from_date_dsp AND PSIC.to_date_dsp)
1789                        AND PSICGT.user_key              = PSIC.user_key
1790                        AND PSICGT.using_organization_id = PSIC.using_organization_id)
1791           AND PSICGT.user_key       = ASLGT.user_key
1792           AND ASLGT.process_action  = PO_ASL_API_PUB.g_ACTION_CREATE
1793           AND PSICGT.process_action = PO_ASL_API_PUB.g_ACTION_ADD;
1794 
1795   l_progress := 40;
1796   l_user_key_tbl1  := l_user_key_tbl1  MULTISET UNION ALL l_user_key_tbl ;
1797   l_entity_name1   := l_entity_name1   MULTISET UNION ALL l_entity_name  ;
1798   l_reject_reason1 := l_reject_reason1 MULTISET UNION ALL l_reject_reason;
1799      --Reject records if dates overlapped when update
1800   SELECT  PSICGT.user_key                            ,
1801           'po_supplier_item_capacity_gt' AS entity   ,
1802           fnd_message.get_string('PO','DATES_OVERLAPPED') AS msg
1803     BULK COLLECT INTO
1804          l_user_key_tbl                              ,
1805          l_entity_name                               ,
1806          l_reject_reason
1807     FROM  po_supplier_item_capacity_gt PSICGT        ,
1808           po_approved_supplier_list_gt ASLGT
1809     WHERE EXISTS
1810           (SELECT  1
1811              FROM  po_supplier_item_capacity PSIC
1812              WHERE (PSICGT.from_date_dsp
1813                    BETWEEN PSIC.from_date AND PSIC.To_Date
1814                    OR PSICGT.to_date_dsp
1815                    BETWEEN PSIC.from_date AND PSIC.To_Date)
1816                    AND PSICGT.asl_id               =PSIC.asl_id
1817                    AND PSICGT.using_organization_id=PSIC.using_organization_id)
1818           AND PSICGT.user_key       = ASLGT.user_key
1819           AND ASLGT.process_action  = PO_ASL_API_PUB.g_ACTION_UPDATE
1820           AND PSICGT.process_action = PO_ASL_API_PUB.g_ACTION_ADD;
1821 
1822   l_progress := 60;
1823   l_user_key_tbl1  := l_user_key_tbl1  MULTISET UNION ALL l_user_key_tbl ;
1824   l_entity_name1   := l_entity_name1   MULTISET UNION ALL l_entity_name  ;
1825   l_reject_reason1 := l_reject_reason1 MULTISET UNION ALL l_reject_reason;
1826 
1827   --call po_asl_api_pvt.reject_asl_record for above rejected records
1828   po_asl_api_pvt.log('validate_supp_item_cap_gt: reject count:' ||
1829                       l_user_key_tbl1.Count);
1830   IF l_user_key_tbl1.Count > 0
1831   THEN
1832     po_asl_api_pvt.reject_asl_record(
1833       p_user_key_tbl       =>  l_user_key_tbl1,
1834       p_rejection_reason   =>  l_reject_reason1,
1835       p_entity_name        =>  l_entity_name1,
1836       p_session_key        =>  g_session_key,
1837       x_return_status      =>  x_return_status,
1838       x_return_msg         =>  x_return_msg
1839     );
1840   END IF;
1841 
1842   l_progress := 100;
1843   po_asl_api_pvt.log('END ::: po_asl_api_grp.validate_supp_item_cap_gt');
1844 
1845 EXCEPTION
1846 
1847   WHEN OTHERS THEN
1848 
1849     po_asl_api_pvt.log('validate_supp_item_cap_gt : when others exception at '
1850                        || l_progress || ';' || SQLERRM );
1851     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1852     x_return_msg := SQLERRM;
1853 
1854 END validate_supp_item_cap_gt;
1855 
1856 --------------------------------------------------------------------------------
1857   --Start of Comments
1858 
1859   --Name: validate_supp_item_tol_gt
1860 
1861   --Function:
1862   --  This will validate data in po_supplier_item_tolerance_gt table
1863 
1864   --Parameters:
1865 
1866   --OUT:
1867   --  x_return_status   VARCHAR2
1868   --  x_return_msg      VARCHAR2
1869 
1870   --End of Comments
1871 --------------------------------------------------------------------------------
1872 
1873 PROCEDURE validate_supp_item_tol_gt(
1874   x_return_status   OUT NOCOPY VARCHAR2
1875 , x_return_msg      OUT NOCOPY VARCHAR2
1876 )
1877 IS
1878   l_progress         NUMBER := 0;
1879 
1880   l_user_key_tbl     po_tbl_number;
1881   l_entity_name      po_tbl_varchar30;
1882   l_reject_reason po_tbl_varchar2000;
1883 
1884 BEGIN
1885   po_asl_api_pvt.log('START ::: po_asl_api_grp.validate_supp_item_tol_gt');
1886   SELECT user_key                                    ,
1887          entity                                      ,
1888          msg
1889   BULK   COLLECT INTO
1890          l_user_key_tbl                              ,
1891          l_entity_name                               ,
1892          l_reject_reason
1893   FROM (
1894     --Reject records if number_of_days_dsp is less than 1
1895     SELECT  user_key                                 ,
1896             'po_supplier_item_tolerance_gt' AS entity,
1897             fnd_message.get_string('PO','INVALID_NUM_OF_DAYS') AS msg
1898       FROM  po_supplier_item_tolerance_gt PSITGT
1899       WHERE PSITGT.number_of_days_dsp    IS NULL
1900             OR PSITGT.number_of_days_dsp <= 0
1901 
1902     UNION ALL
1903     --Reject records if tolerance_dsp is less than 1
1904     SELECT  user_key                                 ,
1905             'po_supplier_item_tolerance_gt' AS entity,
1906             fnd_message.get_string('PO','INVALID_TOLERANCE') AS msg
1907       FROM  po_supplier_item_tolerance_gt PSITGT
1908       WHERE PSITGT.tolerance_dsp    IS NULL
1909             OR PSITGT.tolerance_dsp <= 0
1910   );
1911 
1912   l_progress := 50;
1913   --call po_asl_api_pvt.reject_asl_record for above rejected records
1914   po_asl_api_pvt.log('validate_supp_item_tol_gt: reject count:' ||
1915                       l_user_key_tbl.Count);
1916   IF l_user_key_tbl.Count > 0
1917   THEN
1918     po_asl_api_pvt.reject_asl_record(
1919       p_user_key_tbl       =>  l_user_key_tbl,
1920       p_rejection_reason   =>  l_reject_reason,
1921       p_entity_name        =>  l_entity_name,
1922       p_session_key        =>  g_session_key,
1923       x_return_status      =>  x_return_status,
1924       x_return_msg         =>  x_return_msg
1925     );
1926   END IF;
1927 
1928   l_progress := 100;
1929   po_asl_api_pvt.log('END ::: po_asl_api_grp.validate_supp_item_tol_gt');
1930 
1931 EXCEPTION
1932 
1933   WHEN OTHERS THEN
1934 
1935     po_asl_api_pvt.log('validate_supp_item_tol_gt : when others exception at '
1936                        || l_progress || ';' || SQLERRM );
1937     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1938     x_return_msg := SQLERRM;
1939 
1940 END validate_supp_item_tol_gt;
1941 
1942 
1943 --------------------------------------------------------------------------------
1944   --Start of Comments
1945 
1946   --Name: determine_action
1947 
1948   --Function:
1949   --  This will determine the process action based on item/category, orgId,
1950   --  vendor, site.
1951 
1952   --Parameters:
1953 
1954   --IN:
1955   --  p_item_id                NUMBER
1956   --  p_category_id            NUMBER
1957   --  p_using_organization_id  NUMBER
1958   --  p_vendor_id              NUMBER
1959   --  p_vendor_site_id         NUMBER
1960 
1961   --OUT:
1962   --  x_return_status          VARCHAR2
1963   --  x_return_msg             VARCHAR2
1964 
1965   --RETURN
1966   -- varchar2(20)
1967 
1968   --End of Comments
1969 --------------------------------------------------------------------------------
1970 
1971 FUNCTION determine_action(
1972   p_item_id                IN  NUMBER
1973 , p_category_id            IN  NUMBER
1974 , p_using_organization_id  IN  NUMBER
1975 , p_vendor_id              IN  NUMBER
1976 , p_vendor_site_id         IN  NUMBER
1977 )
1978 RETURN VARCHAR2
1979 IS
1980   l_process_action VARCHAR2(20);
1981   l_found          NUMBER;
1982 
1983 BEGIN
1984   po_asl_api_pvt.log('START ::: determine_action');
1985   po_asl_api_pvt.log('p_item_id'               || p_item_id);
1986   po_asl_api_pvt.log('p_category_id'           || p_category_id);
1987   po_asl_api_pvt.log('p_using_organization_id' || p_using_organization_id);
1988   po_asl_api_pvt.log('p_vendor_id'             || p_vendor_id);
1989   po_asl_api_pvt.log('p_vendor_site_id'        || p_vendor_site_id);
1990   l_found := 0;
1991   l_process_action := PO_ASL_API_PUB.g_ACTION_CREATE;
1992 
1993   SELECT 1 INTO l_found
1994   FROM dual
1995   WHERE EXISTS
1996   (SELECT  asl_id
1997      FROM  po_approved_supplier_list PASL
1998      WHERE (PASL.item_id                   = p_item_id
1999             OR PASL.category_id            = p_category_id)
2000            AND PASL.using_organization_id  = p_using_organization_id
2001            AND PASL.vendor_id              = p_vendor_id
2002            AND Nvl(PASL.vendor_site_id,-1) = Nvl(p_vendor_site_id,-1));
2003 
2004   IF l_found = 1
2005   THEN
2006      l_process_action := PO_ASL_API_PUB.g_ACTION_UPDATE;
2007   END IF;
2008 
2009   po_asl_api_pvt.log('process_action:' || l_process_action);
2010   po_asl_api_pvt.log('END ::: determine_action');
2011 
2012   RETURN(l_process_action);
2013 EXCEPTION
2014   WHEN NO_DATA_FOUND THEN
2015     po_asl_api_pvt.log('determine_action : when NO_DATA_FOUND at '
2016                        || SQLERRM );
2017     RETURN(l_process_action);
2018 
2019   WHEN OTHERS THEN
2020 
2021     po_asl_api_pvt.log('determine_action : when others exception at '
2022                        || SQLERRM );
2023     RETURN(l_process_action);
2024 
2025 END determine_action;
2026 
2027 --------------------------------------------------------------------------------
2028   --Start of Comments
2029 
2030   --Name: validate_vmi
2031 
2032   --Function:
2033   --  This will validate the vmi flag based on item, orgId, vendor site.
2034 
2035   --Parameters:
2036 
2037   --IN:
2038   --  p_item_id                NUMBER
2039   --  p_using_organization_id  NUMBER
2040   --  p_vendor_site_id         NUMBER
2041 
2042   --OUT:
2043   --  x_return_status          VARCHAR2
2044   --  x_return_msg             VARCHAR2
2045 
2046   --RETURN
2047   -- varchar2(20)
2048 
2049   --End of Comments
2050 --------------------------------------------------------------------------------
2051 
2052 FUNCTION validate_vmi(
2053   p_item_id                IN  NUMBER
2054 , p_using_organization_id  IN  NUMBER
2055 , p_vendor_site_id         IN  NUMBER
2056 )
2057 RETURN VARCHAR2
2058 IS
2059   l_result                 BOOLEAN;
2060   l_msg_count              NUMBER;
2061   l_msg_data               VARCHAR2(2000);
2062   l_validation_error_name  VARCHAR2(30);
2063   l_return_status          VARCHAR2(10);
2064 
2065 
2066 BEGIN
2067   po_asl_api_pvt.log('START ::: validate_vmi');
2068   po_asl_api_pvt.log('p_item_id:'               || p_item_id);
2069   po_asl_api_pvt.log('p_using_organization_id:' || p_using_organization_id);
2070   po_asl_api_pvt.log('p_vendor_site_id:'        || p_vendor_site_id);
2071 
2072   IF  p_using_organization_id <> -1
2073   THEN
2074     l_result := PO_THIRD_PARTY_STOCK_GRP.validate_local_asl(
2075                    p_api_version           => 1.0
2076                  , p_init_msg_list         => NULL
2077                  , p_commit                => NULL
2078                  , p_validation_level      => NULL
2079                  , x_return_status         => l_return_status
2080                  , x_msg_count             => l_msg_count
2081                  , x_msg_data              => l_msg_data
2082                  , p_inventory_item_id     => p_item_id
2083                  , p_supplier_site_id      => p_vendor_site_id
2084                  , p_inventory_org_id      => p_using_organization_id
2085                  , p_validation_type       => 'VMI'
2086                  , x_validation_error_name => l_validation_error_name);
2087    ELSE
2088      l_result := PO_THIRD_PARTY_STOCK_GRP.validate_global_asl(
2089                    p_api_version           => 1.0
2090                  , p_init_msg_list         => NULL
2091                  , p_commit                => NULL
2092                  , p_validation_level      => NULL
2093                  , x_return_status         => l_return_status
2094                  , x_msg_count             => l_msg_count
2095                  , x_msg_data              => l_msg_data
2096                  , p_inventory_item_id     => p_item_id
2097                  , p_supplier_site_id      => p_vendor_site_id
2098                  , p_validation_type       => 'VMI'
2099                  , x_validation_error_name => l_validation_error_name) ;
2100 
2101    END IF;
2102 
2103   IF l_result = TRUE
2104   THEN
2105      po_asl_api_pvt.log('END ::: validate_vmi -> Result:' || 'T');
2106      RETURN 'T';
2107   ELSE
2108      po_asl_api_pvt.log('END ::: validate_vmi -> Result:' || 'F');
2109      RETURN 'F';
2110   END IF;
2111 
2112 EXCEPTION
2113 
2114   WHEN OTHERS THEN
2115     po_asl_api_pvt.log('validate_vmi : when others exception at ' || SQLERRM );
2116     RETURN 'F';
2117 
2118 END validate_vmi;
2119 
2120 END PO_ASL_API_GRP;