DBA Data[Home] [Help]

PACKAGE BODY: APPS.MSD_CL_PRE_PROCESS

Source


1 PACKAGE BODY MSD_CL_PRE_PROCESS AS -- Package Body
2 /* $Header: MSDCLPPB.pls 120.13.12010000.1 2008/05/01 18:19:41 appldev ship $ */
3 
4 
5 v_sql_stmt            PLS_INTEGER;--Holds the DML statement no used for error logging.
6 v_plan_per_profile    NUMBER:=nvl(fnd_profile.value('MSD_PLANNING_PERCENTAGE'), G_NO_PLAN_PERCENTAGE);
7 v_null_pk             NUMBER := msd_sr_util.get_null_pk; --Use this variable to assign SR_LEVEL_PK for the level value 'Others' in ALL DIMENSIONS.
8 
9 
10   --========================PROCEDURES/FUNCTION=================
11 
12  /*==========================================================================+
13   | DESCRIPTION  : This function accepts the concurrent program request id as|
14   |                input parameter and returns the status of the request.    |
15   |                SYS_NO  - Request Completed                               |
16   |                SYS_YES - Request in Running/Pending status               |
17   |                                                                          |
18   |                Added to fix the bug#2402527                              |
19   +==========================================================================*/
20 
21    FUNCTION is_request_status_valid( p_request_id      IN Number)
22      RETURN NUMBER
23    IS
24       l_call_status      boolean;
25       l_phase            varchar2(80);
26       l_status           varchar2(80);
27       l_dev_phase        varchar2(80);
28       l_dev_status       varchar2(80);
29       l_message          varchar2(2048);
30       l_request_id        Number;
31    BEGIN
32      l_request_id :=  p_request_id;
33      l_call_status:= FND_CONCURRENT.GET_REQUEST_STATUS
34                               ( l_request_id,
35                                 NULL,
36                                 NULL,
37                                 l_phase,
38                                 l_status,
39                                 l_dev_phase,
40                                 l_dev_status,
41                                 l_message);
42 
43      IF l_call_status=FALSE THEN
44        msc_St_util.log_message( l_message);
45        RETURN SYS_NO;
46      END IF;
47 
48      IF l_dev_phase NOT IN ( 'PENDING','RUNNING') THEN
49        RETURN SYS_NO;
50      END IF;
51 
52      RETURN SYS_YES;
53    END is_request_status_valid;
54 
55  /*==========================================================================+
56   | DESCRIPTION  : This function returns OEM's company name                  |
57   +==========================================================================*/
58 
59    FUNCTION GET_MY_COMPANY return VARCHAR2 IS
60        p_my_company    msc_companies.company_name%TYPE;
61    BEGIN
62 
63       /* Get the name of the own Company */
64       /* This name is seeded with company_is = 1 in msc_companies */
65       BEGIN
66          select company_name into p_my_company
67          from msc_companies
68          where company_id = 1;
69       EXCEPTION
70          WHEN OTHERS THEN
71          return 'My Company';
72       END;
73 
74       return p_my_company;
75 
76    END GET_MY_COMPANY;
77 
78  /*==========================================================================+
79   | DESCRIPTION  : This function performs the validation and loads the data   |
80   |                for business object organization and customer              |
81   +==========================================================================*/
82 
83   PROCEDURE  LOAD_ORG_CUST  (ERRBUF          OUT NOCOPY VARCHAR,
84                              RETCODE         OUT NOCOPY NUMBER,
85                              p_instance_id  IN NUMBER,
86                              p_batch_id     IN NUMBER)
87   IS
88   lv_sql_stmt VARCHAR2(4000);
89   lv_error_text VARCHAR2(250);
90   lv_debug BOOLEAN := msc_cl_pre_process.v_debug;
91 
92   BEGIN
93 
94     v_sql_stmt := 01;
95     lv_sql_stmt :=
96        ' INSERT INTO MSD_ST_LEVEL_VALUES '
97        ||' (INSTANCE , '
98        ||'  LEVEL_ID, '
99        ||'  LEVEL_VALUE, '
100        ||'  SR_LEVEL_PK, '
101        ||'  LEVEL_VALUE_DESC, '
102        ||'  ATTRIBUTE1, '
103        ||'  ATTRIBUTE2, '
104        ||'  ATTRIBUTE3, '
105        ||'  ATTRIBUTE4, '
106        ||'  ATTRIBUTE5, '
107        ||'  LAST_UPDATE_DATE, '
108        ||'  LAST_UPDATED_BY, '
109        ||'  CREATION_DATE, '
110        ||'  CREATED_BY, '
111        ||'  LAST_UPDATE_LOGIN, '
112        ||'  REQUEST_ID, '
113        ||'  PROGRAM_APPLICATION_ID, '
114        ||'  PROGRAM_ID, '
115        ||'  PROGRAM_UPDATE_DATE ) '
116        ||'  SELECT DISTINCT'
117        ||'  sr_instance_id,'
118        ||'  DECODE(partner_type,3,7,2,15),'
119        ||'  partner_name, '
120        ||'  sr_tp_id, '
121        ||'  DECODE(partner_type,3,substr(organization_code,instr(organization_code,'':'')+1,length(organization_code))||'''||':'||'''||substr(partner_name,instr(partner_name,'':'')+1,length(partner_name)),2,'''',''''), '
122        ||'  NULL,'
123        ||'  NULL,'
124        ||'  NULL,'
125        ||'  NULL,'
126        ||'  NULL,'
127        ||'  last_update_date,'
128        ||'  last_updated_by,'
129        ||'  creation_date,'
130        ||'  created_by, '
131        ||'  last_update_login, '
132        ||'  request_id , '
133        ||'  program_application_id, '
134        ||'  program_id , '
135        ||'  program_update_date '
136        ||'  FROM    msc_st_trading_partners'
137        ||'  WHERE   sr_instance_id = :p_instance_id'
138        ||'  AND     process_flag          = '||G_VALID
139        ||'  AND     batch_id       = :p_batch_id'
140        ||'  AND     partner_type IN (2,3)';
141 
142       IF lv_debug THEN
143         msc_st_util.log_message(lv_sql_stmt);
144       END IF;
145 
146       EXECUTE IMMEDIATE lv_sql_stmt
147               USING     p_instance_id,
148                         p_batch_id;
149 
150     v_sql_stmt := 02;
151 
152    lv_sql_stmt :=
153          ' INSERT INTO MSD_ST_ORG_CALENDARS '
154        ||' (INSTANCE , '
155        ||'  SR_ORG_PK, '
156        ||'  CALENDAR_TYPE, '
157        ||'  CALENDAR_CODE, '
158        ||'  CREATION_DATE, '
159        ||'  CREATED_BY, '
160        ||'  LAST_UPDATE_DATE, '
161        ||'  LAST_UPDATED_BY, '
162        ||'  LAST_UPDATE_LOGIN, '
163        ||'  REQUEST_ID, '
164        ||'  PROGRAM_APPLICATION_ID, '
165        ||'  PROGRAM_ID, '
166        ||'  PROGRAM_UPDATE_DATE ) '
167        ||'  SELECT DISTINCT'
168        ||'  sr_instance_id,'
169        ||'  sr_tp_id,'
170        ||   G_MFG_CAL||','
171        ||'  calendar_code, '
172        ||'  creation_date,'
173        ||'  created_by, '
174        ||'  last_update_date,'
175        ||'  last_updated_by,'
176        ||'  last_update_login, '
177        ||'  request_id , '
178        ||'  program_application_id, '
179        ||'  program_id , '
180        ||'  program_update_date '
181        ||'  FROM    msc_st_trading_partners mstp'
182        ||'  WHERE  EXISTS (  SELECT  1'
183        ||'                   FROM msd_st_time mst '
184        ||'                   WHERE mstp.calendar_code=mst.calendar_code '
185        ||'                   AND mst.calendar_type='||G_MFG_CAL
186        ||'                   AND mstp.sr_instance_code=mst.sr_instance_code'
187        ||'                   UNION '
188        ||'                   SELECT 1'
189        ||'                   FROM msd_time mt'
190        ||'                   WHERE mstp.calendar_code=mt.calendar_code'
191        ||'                   AND mt.calendar_type='||G_MFG_CAL
192        ||'                   AND mstp.sr_instance_id=mt.instance)'
193        ||'  AND     mstp.sr_instance_id = :p_instance_id'
194        ||'  AND     mstp.process_flag          = '||G_VALID
195        ||'  AND     mstp.batch_id       = :p_batch_id'
196        ||'  AND     mstp.partner_type=3 ';
197 
198 
199       IF lv_debug THEN
200         msc_st_util.log_message(lv_sql_stmt);
201       END IF;
202 
203       EXECUTE IMMEDIATE lv_sql_stmt
204               USING     p_instance_id,
205                         p_batch_id;
206 
207 
208   --RETURN(lv_status);
209 
210    EXCEPTION
211     WHEN OTHERS THEN
212     ROLLBACK;
213 
214     lv_error_text    := substr('MSD_CL_PRE_PROCESS.LOAD_ORG_CUST '||'('
215                        ||v_sql_stmt||')'|| SQLERRM, 1, 240);
216       msc_st_util.log_message(lv_error_text);
217       ERRBUF := lv_error_text;
218       RETCODE := G_WARNING;
219 
220   END LOAD_ORG_CUST;
221 
222   /*==========================================================================+
223   | DESCRIPTION  : This function performs the validation and loads the data   |
224   |                for business object items.                                 |
225   +==========================================================================*/
226   PROCEDURE LOAD_ITEMS (ERRBUF          OUT NOCOPY VARCHAR,
227                        RETCODE         OUT NOCOPY NUMBER,
228                        p_instance_id  IN NUMBER,
229                        p_batch_id     IN NUMBER)
230   IS
231   lv_sql_stmt VARCHAR2(6000);
232   lv_error_text VARCHAR2(250);
233   lv_debug BOOLEAN := msc_cl_pre_process.v_debug;
234 
235   cursor c1 (p_instance varchar2) is
236   select count(*) from MSD_LEVEL_VALUES
237   where LEVEL_ID = 2
238   and   instance = p_instance
239   and   SR_LEVEL_PK = to_char(v_null_pk); --Using global variable v_null_pk insteda of hardcoding -777 at multiple places.
240 
241   cursor c2 (p_instance_code varchar2) is
242   select local_id from msd_local_id_setup
243   where char1    = p_instance_code
244   -- and   char2    = 'All Products'
245   and   level_id = 28;
246 
247   cursor c3 (p_instance_id number) is
248   select instance_code
249   from msc_apps_instances
250   where instance_id=p_instance_id;
251 
252   lv_other_exist     PLS_INTEGER   := 0;
253   lv_instance_code   VARCHAR2(5)   :='';
254   lv_all_prd_pk      NUMBER        := 0;  --Renamed 'lv_sr_level_pk' to 'lv_all_prd_pk'.Also initialized this to 0 instead of -1.
255 
256   lv_other_desc   varchar2(240) := NULL;  --Adding this to insert level value - 'Others'
257   lv_all_prd_desc varchar2(240) := NULL;  --Adding this to insert level value - 'All Products'
258 
259   BEGIN
260 
261     v_sql_stmt := 01;
262     lv_sql_stmt :=
263        ' INSERT INTO MSD_ST_LEVEL_VALUES '
264        ||' (INSTANCE , '
265        ||'  LEVEL_ID, '
266        ||'  LEVEL_VALUE, '
267        ||'  SR_LEVEL_PK, '
268        ||'  LEVEL_VALUE_DESC, '
269        ||'  ATTRIBUTE1, '
270        ||'  ATTRIBUTE2, '
271        ||'  ATTRIBUTE3, '
272        ||'  ATTRIBUTE4, '
273        ||'  ATTRIBUTE5, '
274        ||'  LAST_UPDATE_DATE, '
275        ||'  LAST_UPDATED_BY, '
276        ||'  CREATION_DATE, '
277        ||'  CREATED_BY, '
278        ||'  LAST_UPDATE_LOGIN, '
279        ||'  REQUEST_ID, '
280        ||'  PROGRAM_APPLICATION_ID, '
281        ||'  PROGRAM_ID, '
282        ||'  PROGRAM_UPDATE_DATE ) '
283        ||'  SELECT '
284        ||'  sr_instance_id,'
285        ||'  DECODE(bom_item_type,5,3,1,1,1),'
286        ||'  item_name, '
287        ||'  sr_inventory_item_id, '
288        ||'  mssi.DESCRIPTION, '
289        ||'  NULL,'
290        ||'  NULL,'
291        ||'  NULL,'
292        ||'  NULL,'
293        ||'  NULL,'
294        ||'  mssi.last_update_date,'
295        ||'  mssi.last_updated_by,'
296        ||'  mssi.creation_date,'
297        ||'  mssi.created_by ,'
298        ||'  mssi.last_update_login, '
299        ||'  mssi.request_id , '
300        ||'  mssi.program_application_id, '
301        ||'  mssi.program_id , '
302        ||'  mssi.program_update_date '
303        ||'  FROM    msc_st_system_items mssi'
304        ||'  WHERE mssi.rowid                          = ( select max(mssi1.rowid) '
305        ||'              		 from msc_st_system_items mssi1,msc_local_id_item lid '
306        ||'                   WHERE    mssi1.sr_instance_code          = lid.char1'
307        ||'                   AND NVL(mssi1.company_name, '||''''||-1||''''||') = '
308        ||'                    NVL(lid.char2,'||''''||-1||''''||') '
309        ||'                    AND     mssi1.organization_code          = lid.char3'
310        ||'                    AND     mssi1.item_name                  = lid.char4'
311        ||'   									AND     mssi1.process_flag               = '||G_VALID
312        ||'                  AND     ((mssi1.mrp_planning_code          <> 6) OR (mssi1.pick_components_flag =''Y'')) '
313        ||'                  AND    (('||v_plan_per_profile||'= 4) OR (mssi1.ato_forecast_control <> 3))'
314        ||'                  AND     mssi1.sr_instance_id 	    = :p_instance_id'
315        ||'                   AND     lid.entity_name    		    = ''SR_INVENTORY_ITEM_ID'''
316        ||'                   AND     mssi.item_name                  = mssi1.item_name '
317        ||'                   group by mssi1.item_name )'
318        ||' AND mssi.process_flag                      = '||G_VALID
319        ||' AND mssi.batch_id                          = :p_batch_id'
320        ||' AND mssi.sr_instance_id                    = :p_instance_id';
321 
322       IF lv_debug THEN
323         msc_st_util.log_message(lv_sql_stmt);
324       END IF;
325 
326       EXECUTE IMMEDIATE lv_sql_stmt
327               USING     p_instance_id,
328                         p_batch_id,
329                         p_instance_id;
330 
331 
332     v_sql_stmt := 02;
333     lv_sql_stmt :=
334        ' INSERT INTO MSD_ST_LEVEL_ORG_ASSCNS '
335        ||' (INSTANCE , '
336        ||'  LEVEL_ID, '
337        ||'  LEVEL_VALUE, '
338        ||'  SR_LEVEL_PK, '
339        ||'  ORG_LEVEL_ID, '
340        ||'  ORG_LEVEL_VALUE, '
341        ||'  ORG_SR_LEVEL_PK, '
342        ||'  LAST_UPDATE_DATE, '
343        ||'  LAST_UPDATED_BY, '
344        ||'  CREATION_DATE, '
345        ||'  CREATED_BY, '
346        ||'  LAST_UPDATE_LOGIN, '
347        ||'  REQUEST_ID, '
348        ||'  PROGRAM_APPLICATION_ID, '
349        ||'  PROGRAM_ID, '
350        ||'  PROGRAM_UPDATE_DATE ) '
351        ||'  SELECT '
352        ||'  mssi.sr_instance_id,'
353        ||'  1,'
354        ||'  mssi.item_name, '
355        ||'  mssi.sr_inventory_item_id, '
356        ||'  7,'
357        ||'  NULL,'
358        ||'  mssi.organization_id,'
359        ||'  mssi.last_update_date,'
360        ||'  mssi.last_updated_by,'
361        ||'  mssi.creation_date,'
362        ||'  mssi.created_by ,'
363        ||'  mssi.last_update_login, '
364        ||'  mssi.request_id , '
365        ||'  mssi.program_application_id, '
366        ||'  mssi.program_id , '
367        ||'  mssi.program_update_date '
368        ||'  FROM    msc_st_system_items mssi'
369        ||'  WHERE  mssi.bom_item_type                     <> 5 ' -- excluding the Product Families
370        ||'  AND    mssi.process_flag                      = '||G_VALID
371        ||'  AND    mssi.batch_id                          = :p_batch_id'
372        ||'  AND    mssi.sr_instance_id                    = :p_instance_id';
373 
374 
375       IF lv_debug THEN
376          msc_st_util.log_message(lv_sql_stmt);
377       END IF;
378 
379 
380       EXECUTE IMMEDIATE lv_sql_stmt
381               USING     p_batch_id,
382                         p_instance_id;
383 
384 
385     v_sql_stmt := 03;
386     lv_sql_stmt :=
387        'INSERT INTO MSD_ST_ITEM_LIST_PRICE '
388        ||' (INSTANCE ,'
389        ||'  ITEM ,'
390        ||'  LIST_PRICE ,'
391        ||'  AVG_DISCOUNT ,'
392        ||'  BASE_UOM ,'
393        ||'  SR_ITEM_PK ,'
394        ||'  ITEM_TYPE_ID ,'
395        ||'  FORECAST_TYPE_ID ,'
396        ||'  SR_INSTANCE_CODE, '
397        ||'  LAST_UPDATE_DATE, '
398        ||'  LAST_UPDATED_BY, '
399        ||'  CREATION_DATE, '
400        ||'  CREATED_BY, '
401        ||'  LAST_UPDATE_LOGIN, '
402        ||'  REQUEST_ID, '
403        ||'  PROGRAM_APPLICATION_ID, '
404        ||'  PROGRAM_ID, '
405        ||'  PROGRAM_UPDATE_DATE ) '
406        ||'  Select '
407        ||'  SR_INSTANCE_ID ,'
408        ||'  ITEM_NAME ,'
409        ||'  LIST_PRICE ,'
410        ||'  AVERAGE_DISCOUNT ,'
411        ||'  UOM_CODE ,'
412        ||'  SR_INVENTORY_ITEM_ID ,'
413        ||'  BOM_ITEM_TYPE ,'
414        ||'  ATO_FORECAST_CONTROL ,'
415        ||'  SR_INSTANCE_CODE,'
416        ||'  mssi.last_update_date,'
417        ||'  mssi.last_updated_by,'
418        ||'  mssi.creation_date,'
419        ||'  mssi.created_by ,'
420        ||'  mssi.last_update_login, '
421        ||'  mssi.request_id , '
422        ||'  mssi.program_application_id, '
423        ||'  mssi.program_id , '
424        ||'  mssi.program_update_date '
425        ||'  FROM    msc_st_system_items mssi'
426        ||'  WHERE mssi.rowid                          = ( select max(mssi1.rowid) '
427        ||'                           FROM msc_st_system_items mssi1,msc_local_id_item lid '
428        ||'                           WHERE    mssi1.sr_instance_code          = lid.char1'
429        ||'                           AND NVL(mssi1.company_name, '||''''||-1||''''||') = '
430        ||'                           NVL(lid.char2,'||''''||-1||''''||') '
431        ||'                           AND     mssi1.organization_code          = lid.char3'
432        ||'                           AND     mssi1.item_name                  = lid.char4'
433        ||'                           AND     mssi1.process_flag               = '||G_VALID
434        ||'                            AND     ((mssi1.mrp_planning_code          <> 6) OR (mssi1.pick_components_flag =''Y'')) '
435        ||'                            AND    (('||v_plan_per_profile||'= 4) OR (mssi1.ato_forecast_control <> 3))'
436        ||'                            AND     mssi1.sr_instance_id 	    = :p_instance_id'
437        ||'                            AND     lid.entity_name    		    = ''SR_INVENTORY_ITEM_ID'''
438        ||'                            AND     mssi.item_name                  = mssi1.item_name '
439        ||'                            group by mssi1.item_name )'
440        ||' AND mssi.process_flag                      = '||G_VALID
441        ||' AND mssi.batch_id                          = :p_batch_id'
442        ||' AND mssi.sr_instance_id                    = :p_instance_id';
443 
444       IF lv_debug THEN
445         msc_st_util.log_message(lv_sql_stmt);
446       END IF;
447 
448       EXECUTE IMMEDIATE lv_sql_stmt
449               USING     p_instance_id,
450                         p_batch_id,
451                         p_instance_id;
452 
453 
454     OPEN c1(p_instance_id);
455        FETCH c1 into lv_other_exist;
456     CLOSE c1;
457 
458     IF  lv_other_exist = 0 THEN
459 
460         lv_other_desc    := msd_sr_util.get_null_desc;       --Calling fuction - msd_sr_util.get_null_desc, to fetch the level value 'Others'
461         lv_all_prd_desc  := msd_sr_util.get_all_prd_desc;    --Calling fuction - msd_sr_util.get_all_prd_desc, to fetch the level value 'All Products'
462 
463         INSERT INTO MSD_ST_LEVEL_VALUES
464         (INSTANCE   ,
465         LEVEL_ID,
466         LEVEL_VALUE,
467         SR_LEVEL_PK,
468         ATTRIBUTE1,
469         ATTRIBUTE2,
470         ATTRIBUTE3,
471         ATTRIBUTE4,
472         ATTRIBUTE5,
473         LAST_UPDATE_DATE,
474         LAST_UPDATED_BY,
475         CREATION_DATE,
476         CREATED_BY,
477         LAST_UPDATE_LOGIN,
478         REQUEST_ID,
479         PROGRAM_APPLICATION_ID,
480         PROGRAM_ID,
481         PROGRAM_UPDATE_DATE )
482         VALUES
483         (p_instance_id,
484         2,
485         lv_other_desc, --Using the value fetched from function - msd_sr_util.get_null_desc
486         to_char(v_null_pk),   --Using global variable v_null_pk insteda of hardcoding -777 at multiple places.
487         NULL,
488         NULL,
489         NULL,
490         NULL,
491         NULL,
492         sysdate,
493         -1,
494         sysdate,
495         -1,
496         -1,
497         -1,
498         -1,
499         -1,
500         sysdate);
501 
502    END IF;
503 
504   OPEN c3(p_instance_id);
505     FETCH c3 into lv_instance_code;
506   CLOSE c3;
507 
508   OPEN c2(lv_instance_code);
509      FETCH c2 into lv_all_prd_pk;  --Renamed 'lv_sr_level_pk' to 'lv_all_prd_pk'.
510   CLOSE c2;
511 
512      IF lv_all_prd_pk = 0  THEN  --Renamed 'lv_sr_level_pk' to 'lv_all_prd_pk'.
513 
514          lv_all_prd_pk := msd_sr_util.get_all_prd_pk;  -- Inserting 'All Products' records with sr_level_pk using function msd_sr_util.get_all_prd_pk(lv_all_prd_pk= -1)
515 
516   --  insert into msd_local_id_setup
517 
518       INSERT INTO  msd_local_id_setup
519           (local_id,
520            instance_id,
521            level_id,
522            char1,
523            char2,
524            last_update_date,
525            last_updated_by,
526            creation_date,
527            created_by  )
528            VALUES
529            (lv_all_prd_pk,  --Using the value lv_all_prd_pk fetched above.
530             p_instance_id,
531             28,
532             lv_instance_code,
533             lv_all_prd_desc,   --Using the value fetched from function - msd_sr_util.get_all_prd_desc
534             sysdate,
535             -1,
536             sysdate,
537             -1);
538 
539 
540       --Inserting into MSD_ST_LEVEL_VALUES
541 
542      INSERT INTO MSD_ST_LEVEL_VALUES
543        (INSTANCE   ,
544         LEVEL_ID,
545         LEVEL_VALUE,
546         SR_LEVEL_PK,
547         ATTRIBUTE1,
548         ATTRIBUTE2,
549         ATTRIBUTE3,
550         ATTRIBUTE4,
551         ATTRIBUTE5,
552         LAST_UPDATE_DATE,
553         LAST_UPDATED_BY,
554         CREATION_DATE,
555         CREATED_BY,
556         LAST_UPDATE_LOGIN,
557         REQUEST_ID,
558         PROGRAM_APPLICATION_ID,
559         PROGRAM_ID,
560         PROGRAM_UPDATE_DATE )
561         VALUES
562         (p_instance_id,
563         28,
564         lv_all_prd_desc, --Using the value fetched from function - msd_sr_util.get_all_prd_desc
565         lv_all_prd_pk,   --Inserting lv_all_prd_pk(-1) as sr_level_pk instead of '-7771'.
566         NULL,
567         NULL,
568         NULL,
569         NULL,
570         NULL,
571         sysdate,
572         -1,
573         sysdate,
574         -1,
575         -1,
576         -1,
577         -1,
578         -1,
579         sysdate);
580 
581 
582      --   Insert into msd_st_level_associations.
583 
584       INSERT INTO MSD_ST_LEVEL_ASSOCIATIONS
585         (INSTANCE   ,
586         LEVEL_ID,
587         SR_LEVEL_PK,
588         PARENT_LEVEL_ID,
589         SR_PARENT_LEVEL_PK,
590         ATTRIBUTE1,
591         ATTRIBUTE2,
592         ATTRIBUTE3,
593         ATTRIBUTE4,
594         ATTRIBUTE5,
595         LAST_UPDATE_DATE,
596         LAST_UPDATED_BY,
597         CREATION_DATE,
598         CREATED_BY,
599         LAST_UPDATE_LOGIN,
600         REQUEST_ID,
601         PROGRAM_APPLICATION_ID,
602         PROGRAM_ID,
603         PROGRAM_UPDATE_DATE )
604         VALUES
605         (p_instance_id,
606         2,
607         to_char(v_null_pk),  --Using global variable v_null_pk insteda of hardcoding -777 at multiple places.
608         28,
609         lv_all_prd_pk,  --Renamed 'lv_sr_level_pk' to 'lv_all_prd_pk'.
610         NULL,
611         NULL,
612         NULL,
613         NULL,
614         NULL,
615         sysdate,
616         -1,
617         sysdate,
618         -1,
619         -1,
620         -1,
621         -1,
622         -1,
623         sysdate);
624 
625 
626      END IF;
627 
628 
629 
630 /*   v_sql_stmt := 04; -- bug 5586170
631 
632       lv_sql_stmt :=
633        ' INSERT INTO MSD_ST_LEVEL_ASSOCIATIONS'
634        ||' (INSTANCE , '
635        ||'  LEVEL_ID, '
636        ||'  SR_LEVEL_PK, '
637        ||'  PARENT_LEVEL_ID,'
638        ||'  SR_PARENT_LEVEL_PK,'
639        ||'  ATTRIBUTE1, '
640        ||'  ATTRIBUTE2, '
641        ||'  ATTRIBUTE3, '
642        ||'  ATTRIBUTE4, '
643        ||'  ATTRIBUTE5, '
644        ||'  LAST_UPDATE_DATE, '
645        ||'  LAST_UPDATED_BY, '
646        ||'  CREATION_DATE, '
647        ||'  CREATED_BY, '
648        ||'  LAST_UPDATE_LOGIN, '
649        ||'  REQUEST_ID, '
650        ||'  PROGRAM_APPLICATION_ID, '
651        ||'  PROGRAM_ID, '
652        ||'  PROGRAM_UPDATE_DATE ) '
653        ||'  SELECT DISTINCT'
654        ||'  mssi.sr_instance_id,'
655        ||'  1 ,'
656        ||'  mssi.sr_inventory_item_id, '
657        ||'  2 ,'
658        ||   to_char(v_null_pk)||','  --Using global variable v_null_pk insteda of hardcoding -777 at multiple places.
659        ||'  NULL,'
660        ||'  NULL,'
661        ||'  NULL,'
662        ||'  NULL,'
663        ||'  NULL,'
664        ||'  mssi.last_update_date,'
665        ||'  mssi.last_updated_by,'
666        ||'  mssi.creation_date,'
667        ||'  mssi.created_by, '
668        ||'  mssi.last_update_login, '
669        ||'  mssi.request_id , '
670        ||'  mssi.program_application_id, '
671        ||'  mssi.program_id , '
672        ||'  mssi.program_update_date '
673        ||'  FROM    msc_st_system_items mssi'
674        ||'  WHERE mssi.rowid                          = ( select max(mssi1.rowid) '
675        ||'                   from msc_st_system_items mssi1,msc_local_id_item lid '
676        ||'                    WHERE    mssi1.sr_instance_code          = lid.char1'
677        ||'                   AND NVL(mssi1.company_name, '||''''||-1||''''||') = '
678        ||'                    NVL(lid.char2,'||''''||-1||''''||') '
679        ||'                    AND     mssi1.organization_code          = lid.char3'
680        ||'                    AND     mssi1.item_name                  = lid.char4'
681        ||'                    AND     mssi1.process_flag               = '||G_VALID
682        ||'                    AND    ((mssi1.mrp_planning_code          <> 6) OR (mssi1.pick_components_flag =''Y'')) '
683        ||'                    AND    (('||v_plan_per_profile||'= 4) OR (mssi1.ato_forecast_control <> 3))'
684        ||'                    AND     mssi1.sr_instance_id 	    = :p_instance_id'
685        ||'                    AND     lid.entity_name    		    = ''SR_INVENTORY_ITEM_ID'''
686        ||'                     AND     mssi.item_name                  = mssi1.item_name '
687        ||'                    group by mssi1.item_name )'
688        ||' AND mssi.process_flag                      = '||G_VALID
689        ||' AND mssi.batch_id                          = :p_batch_id'
690        ||' AND mssi.sr_instance_id                    = :p_instance_id'
691        ||' AND NOT EXISTS ( select 1'
692        ||'                  from msc_st_system_items mssi2, msd_setup_parameters par'
693        ||'                  where mssi.item_name =mssi2.item_name'
694        ||'                  and mssi2.organization_code = par.PARAMETER_VALUE'
695        ||'                  and ((mssi2.mrp_planning_code          <> 6) OR (mssi2.pick_components_flag =''Y''))'
696        ||'                  and (('||v_plan_per_profile||'= 4) OR (mssi2.ato_forecast_control <> 3))'
697        ||'                  and     mssi2.process_flag    = '||G_VALID
698        ||'                  and     mssi2.sr_instance_id  = :p_instance_id'
699        ||'                  and     par.parameter_name  = ''MSD_MASTER_ORG_LEGACY'''
700        ||'                  and     par.instance_id     =  mssi2.sr_instance_id'
701        ||'                  UNION'
702        ||'                  select 1'
703        ||'                  from msc_system_items msi, msd_setup_parameters par'
704        ||'                  where mssi.item_name = msi.item_name'
705        ||'                  and msi.organization_code = par.PARAMETER_VALUE'
706        ||'                  and ((msi.mrp_planning_code          <> 6) OR (msi.pick_components_flag =''Y''))'
707        ||'                  and (('||v_plan_per_profile||'= 4) OR (msi.ato_forecast_control <> 3))'
708        ||'                  and msi.sr_instance_id     = :p_instance_id'
709        ||'                  and msi.plan_id            = -1'
710        ||'                  and par.parameter_name     = ''MSD_MASTER_ORG_LEGACY'''
711        ||'                  and par.instance_id        =  msi.sr_instance_id ) ';
712 
713 
714       IF lv_debug THEN
715         msc_st_util.log_message(lv_sql_stmt);
716        END IF;
717 
718       EXECUTE IMMEDIATE lv_sql_stmt
719               USING     p_instance_id,
720                         p_batch_id,
721                         p_instance_id,
722                         p_instance_id,
723                         p_instance_id;
724    */
725 
726   EXCEPTION
727    WHEN OTHERS THEN
728     ROLLBACK;
729 
730    lv_error_text    := substr('MSD_CL_PRE_PROCESS.LOAD_ITEMS '||'('
731                        ||v_sql_stmt||')'|| SQLERRM, 1, 240);
732       msc_st_util.log_message(SQLERRM);
733       msc_st_util.log_message(lv_error_text);
734       ERRBUF := lv_error_text;
735       RETCODE := G_WARNING;
736 
737   END LOAD_ITEMS;
738 
739  /*==========================================================================+
740   | DESCRIPTION  : This function performs the validation and loads the data   |
741   |                for business object category                               |
742   +==========================================================================*/
743   PROCEDURE LOAD_CATEGORY (ERRBUF          OUT NOCOPY VARCHAR,
744                           RETCODE         OUT NOCOPY NUMBER,
745                           p_instance_id  IN NUMBER,
746                           p_batch_id     IN NUMBER,
747                           p_link         IN NUMBER)
748   IS
749   lv_sql_stmt VARCHAR2(4000);
750   lv_error_text VARCHAR2(250);
751   lv_debug BOOLEAN := msc_cl_pre_process.v_debug;
752 
753   BEGIN
754 
755 
756 
757       v_sql_stmt := 01;
758 
759       lv_sql_stmt :=
760        ' INSERT INTO MSD_ST_LEVEL_VALUES '
761        ||' (INSTANCE , '
762        ||'  LEVEL_ID, '
763        ||'  LEVEL_VALUE, '
764        ||'  SR_LEVEL_PK, '
765        ||'  LEVEL_VALUE_DESC, '
766        ||'  ATTRIBUTE1, '
767        ||'  ATTRIBUTE2, '
768        ||'  ATTRIBUTE3, '
769        ||'  ATTRIBUTE4, '
770        ||'  ATTRIBUTE5, '
771        ||'  LAST_UPDATE_DATE, '
772        ||'  LAST_UPDATED_BY, '
773        ||'  CREATION_DATE, '
774        ||'  CREATED_BY, '
775        ||'  LAST_UPDATE_LOGIN, '
776        ||'  REQUEST_ID, '
777        ||'  PROGRAM_APPLICATION_ID, '
778        ||'  PROGRAM_ID, '
779        ||'  PROGRAM_UPDATE_DATE ) '
780        ||'  SELECT DISTINCT'
781        ||'  mic.sr_instance_id,'
782        ||'  2 ,'
783        ||'  mic.category_name, '
784        ||'  mic.sr_category_id, '
785        ||'  mic.DESCRIPTION, '
786        ||'  NULL,'
787        ||'  NULL,'
788        ||'  NULL,'
789        ||'  NULL,'
790        ||'  NULL,'
791        ||'  mic.last_update_date,'
792        ||'  mic.last_updated_by,'
793        ||'  mic.creation_date,'
794        ||'  mic.created_by, '
795        ||'  mic.last_update_login, '
796        ||'  mic.request_id , '
797        ||'  mic.program_application_id, '
798        ||'  mic.program_id , '
799        ||'  mic.program_update_date '
800        ||'  FROM    msc_st_item_categories mic,msc_st_system_items mssi'
801        ||'  WHERE   mic.sr_instance_id = :p_instance_id'
802        ||'  AND     mic.process_flag          = '||G_VALID
803        ||'  AND     mic.batch_id       = :p_batch_id'
804        ||'  AND     mic.organization_code = ( SELECT '
805        ||'      parameter_value from  msd_setup_parameters'
806        ||'      WHERE parameter_name = ''MSD_MASTER_ORG_LEGACY'''
807        ||'      AND   instance_id  = mic.sr_instance_id)'
808        ||'  AND     mic.category_set_name = ( SELECT '
809        ||'      parameter_value from  msd_setup_parameters'
810        ||'      WHERE parameter_name = ''MSD_CATEGORY_SET_NAME_LEGACY'' '
811        ||'      AND   instance_id  = mic.sr_instance_id)'
812        ||'  AND  (('||v_plan_per_profile||'= 4) OR (mssi.ato_forecast_control <> 3))'
813        ||'  AND mssi.mrp_planning_code <> 6'
814        ||'  AND mic.sr_instance_id =mssi.sr_instance_id'
815        ||'  AND mic.organization_id= mssi.organization_id'
816        ||'  AND mic.item_name = mssi.item_name'
817        ||'  UNION '
818        ||'  SELECT DISTINCT'
819        ||'  mic.sr_instance_id,'
820        ||'  2 ,'
821        ||'  mic.category_name, '
822        ||'  mic.sr_category_id, '
823        ||'  mic.DESCRIPTION, '
824        ||'  NULL,'
825        ||'  NULL,'
826        ||'  NULL,'
827        ||'  NULL,'
828        ||'  NULL,'
829        ||'  mic.last_update_date,'
830        ||'  mic.last_updated_by,'
831        ||'  mic.creation_date,'
832        ||'  mic.created_by, '
833        ||'  mic.last_update_login, '
834        ||'  mic.request_id , '
835        ||'  mic.program_application_id, '
836        ||'  mic.program_id , '
837        ||'  mic.program_update_date '
838        ||'  FROM    msc_st_item_categories mic,msc_system_items msi'
839        ||'  WHERE   mic.sr_instance_id = :p_instance_id'
840        ||'  AND     mic.process_flag          = '||G_VALID
841        ||'  AND     mic.batch_id       = :p_batch_id'
842        ||'  AND     mic.organization_code = ( SELECT '
843        ||'      parameter_value from  msd_setup_parameters'
844        ||'      WHERE parameter_name = ''MSD_MASTER_ORG_LEGACY'''
845        ||'      AND   instance_id  = mic.sr_instance_id)'
846        ||'  AND     mic.category_set_name = ( SELECT '
847        ||'      parameter_value from  msd_setup_parameters'
848        ||'      WHERE parameter_name = ''MSD_CATEGORY_SET_NAME_LEGACY'' '
849        ||'      AND   instance_id  = mic.sr_instance_id)'
850        ||'  AND  (('||v_plan_per_profile||'= 4) OR (msi.ato_forecast_control <> 3))'
851        ||'  AND msi.mrp_planning_code <> 6'
852        ||'  AND mic.sr_instance_id =msi.sr_instance_id'
853        ||'  AND mic.organization_id= msi.organization_id'
854        ||'  AND mic.item_name = msi.item_name'
855        ||'  AND msi.plan_id   = -1';
856 
857 
858       IF lv_debug THEN
859         msc_st_util.log_message(lv_sql_stmt);
860       END IF;
861       EXECUTE IMMEDIATE lv_sql_stmt
862               USING     p_instance_id,
863                         p_batch_id,
864                         p_instance_id,
865                         p_batch_id;
866 
867 
868    IF (p_link = 1) THEN
869 
870    v_sql_stmt := 02;
871 
872       lv_sql_stmt :=
873        ' INSERT INTO MSD_ST_LEVEL_ASSOCIATIONS'
874        ||' (INSTANCE , '
875        ||'  LEVEL_ID, '
876        ||'  SR_LEVEL_PK, '
877        ||'  PARENT_LEVEL_ID,'
878        ||'  SR_PARENT_LEVEL_PK,'
879        ||'  ATTRIBUTE1, '
880        ||'  ATTRIBUTE2, '
881        ||'  ATTRIBUTE3, '
882        ||'  ATTRIBUTE4, '
883        ||'  ATTRIBUTE5, '
884        ||'  LAST_UPDATE_DATE, '
885        ||'  LAST_UPDATED_BY, '
886        ||'  CREATION_DATE, '
887        ||'  CREATED_BY, '
888        ||'  LAST_UPDATE_LOGIN, '
889        ||'  REQUEST_ID, '
890        ||'  PROGRAM_APPLICATION_ID, '
891        ||'  PROGRAM_ID, '
892        ||'  PROGRAM_UPDATE_DATE ) '
893        ||'  SELECT DISTINCT'
894        ||'  mic.sr_instance_id,'
895        ||'  1 ,'
896        ||'  mic.inventory_item_id, '
897        ||'  2 ,'
898        ||'  mic.sr_category_id,'
899        ||'  NULL,'
900        ||'  NULL,'
901        ||'  NULL,'
902        ||'  NULL,'
903        ||'  NULL,'
904        ||'  mic.last_update_date,'
905        ||'  mic.last_updated_by,'
906        ||'  mic.creation_date,'
907        ||'  mic.created_by, '
908        ||'  mic.last_update_login, '
909        ||'  mic.request_id , '
910        ||'  mic.program_application_id, '
911        ||'  mic.program_id , '
912        ||'  mic.program_update_date '
913        ||'  FROM    msc_st_item_categories mic,msc_st_system_items mssi'
914        ||'  WHERE   mic.sr_instance_id = :p_instance_id'
915        ||'  AND     mic.process_flag          = '||G_VALID
916        ||'  AND     mic.batch_id       = :p_batch_id'
917        ||'  AND     mic.organization_code = ( SELECT '
918        ||'      parameter_value from  msd_setup_parameters'
919        ||'      WHERE parameter_name = ''MSD_MASTER_ORG_LEGACY'''
920        ||'      AND   instance_id  = mic.sr_instance_id)'
921        ||'  AND     mic.category_set_name = ( SELECT '
922        ||'      parameter_value from  msd_setup_parameters'
923        ||'      WHERE parameter_name = ''MSD_CATEGORY_SET_NAME_LEGACY'' '
924        ||'      AND   instance_id  = mic.sr_instance_id)'
925        ||'  AND  (('||v_plan_per_profile||'= 4) OR (mssi.ato_forecast_control <> 3))'
926        ||'  AND mssi.mrp_planning_code <> 6'
927        ||'  AND mic.sr_instance_id =mssi.sr_instance_id'
928        ||'  AND mic.organization_id= mssi.organization_id'
929        ||'  AND mic.item_name = mssi.item_name'
930        ||'  UNION '
931        ||'  SELECT DISTINCT'
932        ||'  mic.sr_instance_id,'
933        ||'  1 ,'
934        ||'  mic.inventory_item_id, '
935        ||'  2 ,'
936        ||'  mic.sr_category_id,'
937        ||'  NULL,'
938        ||'  NULL,'
939        ||'  NULL,'
940        ||'  NULL,'
941        ||'  NULL,'
942        ||'  mic.last_update_date,'
943        ||'  mic.last_updated_by,'
944        ||'  mic.creation_date,'
945        ||'  mic.created_by, '
946        ||'  mic.last_update_login, '
947        ||'  mic.request_id , '
948        ||'  mic.program_application_id, '
949        ||'  mic.program_id , '
950        ||'  mic.program_update_date '
951        ||'  FROM    msc_st_item_categories mic,msc_system_items msi'
952        ||'  WHERE   mic.sr_instance_id = :p_instance_id'
953        ||'  AND     mic.process_flag          = '||G_VALID
954        ||'  AND     mic.batch_id       = :p_batch_id'
955        ||'  AND     mic.organization_code = ( SELECT '
956        ||'      parameter_value from  msd_setup_parameters'
957        ||'      WHERE parameter_name = ''MSD_MASTER_ORG_LEGACY'''
958        ||'      AND   instance_id  = mic.sr_instance_id)'
959        ||'  AND     mic.category_set_name = ( SELECT '
960        ||'      parameter_value from  msd_setup_parameters'
961        ||'      WHERE parameter_name = ''MSD_CATEGORY_SET_NAME_LEGACY'' '
962        ||'      AND   instance_id  = mic.sr_instance_id)'
963        ||'  AND  (('||v_plan_per_profile||'= 4) OR (msi.ato_forecast_control <> 3))'
964        ||'  AND msi.mrp_planning_code <> 6'
965        ||'  AND mic.sr_instance_id =msi.sr_instance_id'
966        ||'  AND mic.organization_id= msi.organization_id'
967        ||'  AND mic.item_name = msi.item_name'
968        ||'  AND msi.plan_id   = -1';
969 
970 
971       IF lv_debug THEN
972         msc_st_util.log_message(lv_sql_stmt);
973       END IF;
974 
975       EXECUTE IMMEDIATE lv_sql_stmt
976               USING     p_instance_id,
977                         p_batch_id,
978                         p_instance_id,
979                         p_batch_id;
980 
981     END IF ; --p_link
982 
983   EXCEPTION
984     WHEN OTHERS THEN
985      ROLLBACK;
986 
987     lv_error_text    := substr('MSD_CL_PRE_PROCESS.LOAD_CATEGORY '||'('
988                        ||v_sql_stmt||')'|| SQLERRM, 1, 240);
989       msc_st_util.log_message(lv_error_text);
990       ERRBUF := lv_error_text;
991       RETCODE := G_WARNING;
992 
993   END LOAD_CATEGORY;
994  /*==========================================================================+
995   | DESCRIPTION  : This function performs the validation and loads the data   |
996   |                for business object ship to location of customer           |
997   +==========================================================================*/
998 
999   PROCEDURE LOAD_SITE (ERRBUF          OUT NOCOPY VARCHAR,
1000                        RETCODE         OUT NOCOPY NUMBER,
1001                        p_instance_id  IN NUMBER,
1002                        p_batch_id     IN NUMBER)
1003   IS
1004   lv_sql_stmt VARCHAR2(4000);
1005   lv_error_text VARCHAR2(250);
1006   lv_debug BOOLEAN := msc_cl_pre_process.v_debug;
1007   cursor c1 is select count(*) from MSD_HIERARCHY_LEVELS
1008   where LEVEL_ID = 11
1009   AND PARENT_LEVEL_ID = 15 ;
1010 
1011   lv_other_exist   PLS_INTEGER := 0;
1012 
1013   BEGIN
1014     v_sql_stmt := 01;
1015    lv_sql_stmt :=
1016        ' INSERT INTO MSD_ST_LEVEL_VALUES '
1017        ||' (INSTANCE , '
1018        ||'  LEVEL_ID, '
1019        ||'  LEVEL_VALUE, '
1020        ||'  SR_LEVEL_PK, '
1021        ||'  ATTRIBUTE1, '
1022        ||'  ATTRIBUTE2, '
1023        ||'  ATTRIBUTE3, '
1024        ||'  ATTRIBUTE4, '
1025        ||'  ATTRIBUTE5, '
1026        ||'  LAST_UPDATE_DATE, '
1027        ||'  LAST_UPDATED_BY, '
1028        ||'  CREATION_DATE, '
1029        ||'  CREATED_BY, '
1030        ||'  LAST_UPDATE_LOGIN, '
1031        ||'  REQUEST_ID, '
1032        ||'  PROGRAM_APPLICATION_ID, '
1033        ||'  PROGRAM_ID, '
1034        ||'  PROGRAM_UPDATE_DATE ) '
1035        ||'  SELECT DISTINCT'
1036        ||'  sr_instance_id,'
1037        ||'  11 ,'
1038        ||'  tp_site_code, '
1039        ||'  sr_tp_site_id, '
1040        ||'  NULL,'
1041        ||'  NULL,'
1042        ||'  NULL,'
1043        ||'  NULL,'
1044        ||'  NULL,'
1045        ||'  last_update_date,'
1046        ||'  last_updated_by,'
1047        ||'  creation_date,'
1048        ||'  created_by , '
1049        ||'  last_update_login, '
1050        ||'  request_id , '
1051        ||'  program_application_id, '
1052        ||'  program_id , '
1053        ||'  program_update_date '
1054        ||'  FROM    msc_st_trading_partner_sites'
1055        ||'  WHERE   partner_type   = 2' -- customer site
1056        ||'  AND     process_flag          = '||G_VALID
1057        ||'  AND     sr_instance_id = :p_instance_id'
1058        ||'  AND     batch_id       = :p_batch_id';
1059 
1060       IF lv_debug THEN
1061         msc_st_util.log_message(lv_sql_stmt);
1062       END IF;
1063      EXECUTE IMMEDIATE lv_sql_stmt
1064               USING     p_instance_id,
1065                         p_batch_id;
1066 
1067 
1068     OPEN c1;
1069     FETCH c1 into lv_other_exist;
1070     CLOSE c1;
1071 
1072     IF  lv_other_exist >= 1 THEN
1073 
1074     v_sql_stmt := 02;
1075       lv_sql_stmt :=
1076        ' INSERT INTO MSD_ST_LEVEL_ASSOCIATIONS'
1077        ||' (INSTANCE , '
1078        ||'  LEVEL_ID, '
1079        ||'  SR_LEVEL_PK, '
1080        ||'  PARENT_LEVEL_ID,'
1081        ||'  SR_PARENT_LEVEL_PK,'
1082        ||'  ATTRIBUTE1, '
1083        ||'  ATTRIBUTE2, '
1084        ||'  ATTRIBUTE3, '
1085        ||'  ATTRIBUTE4, '
1086        ||'  ATTRIBUTE5, '
1087        ||'  LAST_UPDATE_DATE, '
1088        ||'  LAST_UPDATED_BY, '
1089        ||'  CREATION_DATE, '
1090        ||'  CREATED_BY, '
1091        ||'  LAST_UPDATE_LOGIN, '
1092        ||'  REQUEST_ID, '
1093        ||'  PROGRAM_APPLICATION_ID, '
1094        ||'  PROGRAM_ID, '
1095        ||'  PROGRAM_UPDATE_DATE ) '
1096        ||'  SELECT DISTINCT'
1097        ||'  sr_instance_id,'
1098        ||'  11 ,'
1099        ||'  sr_tp_site_id,'
1100        ||'  15 ,'
1101        ||'  sr_tp_id, '
1102        ||'  NULL,'
1103        ||'  NULL,'
1104        ||'  NULL,'
1105        ||'  NULL,'
1106        ||'  NULL,'
1107        ||'  last_update_date,'
1108        ||'  last_updated_by,'
1109        ||'  creation_date,'
1110        ||'  created_by, '
1111        ||'  last_update_login, '
1112        ||'  request_id , '
1113        ||'  program_application_id, '
1114        ||'  program_id , '
1115        ||'  program_update_date '
1116        ||'  FROM    msc_st_trading_partner_sites tps'
1117        ||'  WHERE   sr_instance_id = :p_instance_id'
1118        ||'  AND     partner_type = 2'
1119        ||'  AND     process_flag          = '||G_VALID
1120        ||'  AND     batch_id       = :p_batch_id';
1121 
1122       IF lv_debug THEN
1123         msc_st_util.log_message(lv_sql_stmt);
1124       END IF;
1125 
1126       EXECUTE IMMEDIATE lv_sql_stmt
1127               USING     p_instance_id,
1128                         p_batch_id;
1129 
1130   END IF;
1131 
1132   EXCEPTION
1133    WHEN OTHERS THEN
1134     ROLLBACK;
1135 
1136     lv_error_text    := substr('MSD_CL_PRE_PROCESS.LOAD_SITE '||'('
1137                        ||v_sql_stmt||')'|| SQLERRM, 1, 240);
1138       msc_st_util.log_message(lv_error_text);
1139       ERRBUF := lv_error_text;
1140       RETCODE := G_WARNING;
1141 
1142   END LOAD_SITE;
1143 
1144   /*==========================================================================+
1145   | DESCRIPTION  : This function performs the validation and loads the data   |
1146   |                for business object demand_classes                         |
1147   +==========================================================================*/
1148   PROCEDURE LOAD_DEMAND_CLASS  ( ERRBUF          OUT NOCOPY VARCHAR,
1149                                  RETCODE         OUT NOCOPY NUMBER,
1150                                  p_instance_code IN VARCHAR,
1151                                  p_instance_id  IN NUMBER,
1152                                  p_batch_id     IN NUMBER)
1153   IS
1154 
1155   lv_sql_stmt VARCHAR2(4000);
1156   lv_error_text VARCHAR2(250);
1157   lv_debug BOOLEAN := msc_cl_pre_process.v_debug;
1158 
1159   cursor c1 (p_instance_code varchar2) is
1160     select local_id from msd_local_id_setup
1161     where char1    = p_instance_code
1162     -- and   char2    = 'All Demand Classes'
1163     and   level_id = 40;
1164 
1165   lv_all_dcs_pk NUMBER :=0;   --Renamed 'lv_sr_level_pk' to 'lv_all_dcs_pk'.
1166 
1167   lv_all_dcs_desc varchar2(240) := NULL; --Adding this to insert level value - 'All Demand Classes'
1168 
1169   BEGIN
1170 
1171       v_sql_stmt := 01;
1172 
1173       lv_sql_stmt :=
1174        ' INSERT INTO MSD_ST_LEVEL_VALUES '
1175        ||' (INSTANCE , '
1176        ||'  LEVEL_ID, '
1177        ||'  LEVEL_VALUE, '
1178        ||'  SR_LEVEL_PK, '
1179        ||'  LEVEL_VALUE_DESC, '
1180        ||'  ATTRIBUTE1, '
1181        ||'  ATTRIBUTE2, '
1182        ||'  ATTRIBUTE3, '
1183        ||'  ATTRIBUTE4, '
1184        ||'  ATTRIBUTE5, '
1185        ||'  LAST_UPDATE_DATE, '
1186        ||'  LAST_UPDATED_BY, '
1187        ||'  CREATION_DATE, '
1188        ||'  CREATED_BY, '
1189        ||'  LAST_UPDATE_LOGIN, '
1190        ||'  REQUEST_ID, '
1191        ||'  PROGRAM_APPLICATION_ID, '
1192        ||'  PROGRAM_ID, '
1193        ||'  PROGRAM_UPDATE_DATE ) '
1194        ||'  SELECT '
1195        ||'  sr_instance_id,'
1196        ||'  34 ,'
1197        ||'  meaning, '
1198        ||'  demand_class, '
1199        ||'  DESCRIPTION, '
1200        ||'  NULL,'
1201        ||'  NULL,'
1202        ||'  NULL,'
1203        ||'  NULL,'
1204        ||'  NULL,'
1205        ||'  last_update_date,'
1206        ||'  last_updated_by,'
1207        ||'  creation_date,'
1208        ||'  created_by, '
1209        ||'  last_update_login, '
1210        ||'  request_id , '
1211        ||'  program_application_id, '
1212        ||'  program_id , '
1213        ||'  program_update_date '
1214        ||'  FROM  msc_st_demand_classes '
1215        ||'  WHERE sr_instance_id  = :p_instance_id'
1216        ||'  AND   process_flag    = '||G_VALID
1217        ||'  AND   batch_id        = :p_batch_id';
1218 
1219 
1220       IF lv_debug THEN
1221         msc_st_util.log_message(lv_sql_stmt);
1222       END IF;
1223 
1224       EXECUTE IMMEDIATE lv_sql_stmt
1225               USING     p_instance_id,
1226                         p_batch_id;
1227 
1228 
1229     OPEN c1(p_instance_code);
1230        FETCH c1 into lv_all_dcs_pk;  --Renamed 'lv_sr_level_pk' to 'lv_all_dcs_pk'.
1231     CLOSE c1;
1232 
1233      IF lv_all_dcs_pk = 0  THEN  --Renamed 'lv_sr_level_pk' to 'lv_all_dcs_pk'.
1234 
1235         lv_all_dcs_pk    := msd_sr_util.get_all_dcs_pk;     -- Insert 'All Demand Classes' records with sr_level_pk as -6
1236         lv_all_dcs_desc  := msd_sr_util.get_all_dcs_desc;   -- Calling fuction - msd_sr_util.get_all_dcs_desc, to fetch the level value 'All Demand Classes'
1237 
1238         INSERT INTO  msd_local_id_setup   --  insert into msd_local_id_setup
1239           (local_id,
1240            instance_id,
1241            level_id,
1242            char1,
1243            char2,
1244            last_update_date,
1245            last_updated_by,
1246            creation_date,
1247            created_by  )
1248            VALUES
1249            (lv_all_dcs_pk,    --Renamed 'lv_sr_level_pk' to 'lv_all_dcs_pk'.
1250             p_instance_id,
1251             40,
1252             p_instance_code,
1253             lv_all_dcs_desc,    --Using the value fetched from function - msd_sr_util.get_all_dcs_desc
1254             sysdate,
1255             -1,
1256             sysdate,
1257             -1);
1258 
1259         INSERT INTO MSD_ST_LEVEL_VALUES   --insert into msd_st_level_values
1260           (INSTANCE   ,
1261            LEVEL_ID,
1262            LEVEL_VALUE,
1263            SR_LEVEL_PK,
1264            ATTRIBUTE1,
1265            ATTRIBUTE2,
1266            ATTRIBUTE3,
1267            ATTRIBUTE4,
1268            ATTRIBUTE5,
1269            LAST_UPDATE_DATE,
1270            LAST_UPDATED_BY,
1271            CREATION_DATE,
1272            CREATED_BY,
1273            LAST_UPDATE_LOGIN,
1274            REQUEST_ID,
1275            PROGRAM_APPLICATION_ID,
1276            PROGRAM_ID,
1277            PROGRAM_UPDATE_DATE )
1278            VALUES
1279            (p_instance_id,
1280             40,
1281             lv_all_dcs_desc,       --Using the value fetched from function - msd_sr_util.get_all_dcs_desc
1282             lv_all_dcs_pk,         --Renamed 'lv_sr_level_pk' to 'lv_all_dcs_pk'.
1283             NULL,
1284             NULL,
1285             NULL,
1286             NULL,
1287             NULL,
1288             sysdate,
1289             -1,
1290             sysdate,
1291             -1,
1292             -1,
1293             -1,
1294             -1,
1295             -1,
1296             sysdate);
1297 
1298    END IF;
1299 
1300    v_sql_stmt := 02;
1301 
1302       lv_sql_stmt :=
1303        ' INSERT INTO MSD_ST_LEVEL_ASSOCIATIONS'
1304        ||' (INSTANCE , '
1305        ||'  LEVEL_ID, '
1306        ||'  SR_LEVEL_PK, '
1307        ||'  PARENT_LEVEL_ID,'
1308        ||'  SR_PARENT_LEVEL_PK,'
1309        ||'  ATTRIBUTE1, '
1310        ||'  ATTRIBUTE2, '
1311        ||'  ATTRIBUTE3, '
1312        ||'  ATTRIBUTE4, '
1313        ||'  ATTRIBUTE5, '
1314        ||'  LAST_UPDATE_DATE, '
1315        ||'  LAST_UPDATED_BY, '
1316        ||'  CREATION_DATE, '
1317        ||'  CREATED_BY, '
1318        ||'  LAST_UPDATE_LOGIN, '
1319        ||'  REQUEST_ID, '
1320        ||'  PROGRAM_APPLICATION_ID, '
1321        ||'  PROGRAM_ID, '
1322        ||'  PROGRAM_UPDATE_DATE ) '
1323        ||'  SELECT DISTINCT'
1324        ||'  sr_instance_id,'
1325        ||'  34 ,'
1326        ||'  demand_class, '
1327        ||'  40 ,'
1328        ||'  :lv_all_dcs_pk, '   --Renamed 'lv_sr_level_pk' to 'lv_all_dcs_pk'.
1329        ||'  NULL,'
1330        ||'  NULL,'
1331        ||'  NULL,'
1332        ||'  NULL,'
1333        ||'  NULL,'
1334        ||'  last_update_date,'
1335        ||'  last_updated_by,'
1336        ||'  creation_date,'
1337        ||'  created_by, '
1338        ||'  last_update_login, '
1339        ||'  request_id , '
1340        ||'  program_application_id, '
1341        ||'  program_id , '
1342        ||'  program_update_date '
1343        ||'  FROM  msc_st_demand_classes '
1344        ||'  WHERE sr_instance_id  = :p_instance_id'
1345        ||'  AND   process_flag    = '||G_VALID
1346        ||'  AND   batch_id        = :p_batch_id';
1347 
1348       IF lv_debug THEN
1349         msc_st_util.log_message(lv_sql_stmt);
1350       END IF;
1351 
1352       EXECUTE IMMEDIATE lv_sql_stmt
1353               USING     lv_all_dcs_pk,   --Renamed 'lv_sr_level_pk' to 'lv_all_dcs_pk'.
1354                         p_instance_id,
1355                         p_batch_id;
1356 
1357   EXCEPTION
1358     WHEN OTHERS THEN
1359      ROLLBACK;
1360 
1361     lv_error_text    := substr('MSD_CL_PRE_PROCESS.LOAD_DEMAND_CLASS '||'('
1362                        ||v_sql_stmt||')'|| SQLERRM, 1, 240);
1363       msc_st_util.log_message(lv_error_text);
1364       ERRBUF := lv_error_text;
1365       RETCODE := G_WARNING;
1366 
1367   END LOAD_DEMAND_CLASS;
1368 
1369   /*==========================================================================+
1370   | DESCRIPTION  : This function performs the validation and loads the data   |
1371   |                for business object level_values                           |
1372   +==========================================================================*/
1373   PROCEDURE LOAD_LEVEL_VALUE(ERRBUF          OUT NOCOPY VARCHAR,
1374                            RETCODE         OUT NOCOPY NUMBER,
1375                            p_instance_code IN VARCHAR,
1376                            p_instance_id   IN NUMBER,
1377                            p_batch_id      IN NUMBER)
1378   IS
1379   TYPE RowidTab IS TABLE OF ROWID INDEX BY BINARY_INTEGER;
1380   TYPE LevelValueTab IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
1381   TYPE SrLevelPk IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
1382   v_index           NUMBER  :=0;
1383   lb_rowid          RowidTab;
1384   lb_level_value    LevelValueTab;
1385   lb_sr_level_pk    SrLevelPk;
1386   lv_sql_stmt       VARCHAR2(4000);
1387   lv_batch_id       msd_st_level_values.batch_id%TYPE;
1388   lv_message_text   msc_errors.error_text%TYPE;
1389   lv_error_text     VARCHAR2(250);
1390   lv_debug          BOOLEAN   := msc_cl_pre_process.v_debug;
1391   lv_batch_size     NUMBER    := msc_cl_pre_process.v_batch_size;
1392   lv_current_user   NUMBER    := msc_cl_pre_process.v_current_user;
1393   lv_current_date   DATE      := msc_cl_pre_process.v_current_date;
1394   lv_return         NUMBER := 0;
1395 /*  lv_master_org_id  NUMBER := 0; */
1396   lv_column_names   VARCHAR2(5000);
1397   ex_logging_err    EXCEPTION;
1398 
1399   CURSOR c1(p_batch_id NUMBER)IS
1400     SELECT rowid
1401     FROM   msd_st_level_values
1402     WHERE  process_flag      IN (G_IN_PROCESS,G_ERROR_FLG)
1403     AND    sr_instance_code = p_instance_code
1404     AND    batch_id         = p_batch_id;
1405 
1406   CURSOR c2(p_batch_id NUMBER) IS
1407     SELECT rowid
1408     FROM   msd_st_level_values
1409     WHERE  process_flag                  = G_IN_PROCESS
1410     AND    sr_instance_code              = p_instance_code
1411     AND    batch_id                      = p_batch_id
1412     AND    NVL(sr_level_pk,NULL_CHAR)    = NULL_CHAR ;
1413 
1414     lv_instance_type  msc_apps_instances.instance_type%TYPE;
1415 
1416   CURSOR instance_type IS
1417    SELECT instance_type
1418    FROM msc_apps_instances
1419    WHERE instance_id=p_instance_id;
1420 /*
1421   CURSOR master_org(p_instance_id NUMBER) IS
1422    SELECT parameter_value
1423    FROM   msd_setup_parameters
1424    WHERE  parameter_name = 'MSD_MASTER_ORG'
1425    AND    instance_id = p_instance_id;
1426 */
1427  CURSOR c3(p_batch_id NUMBER)IS
1428     SELECT level_value
1429     FROM   msd_st_level_values
1430     WHERE  process_flag      IN (G_IN_PROCESS,G_ERROR_FLG)
1431     AND    sr_instance_code = p_instance_code
1432     AND    level_id         = 1
1433     AND    batch_id         = p_batch_id;
1434 
1435   BEGIN
1436 
1437       lv_batch_id := p_batch_id;
1438 
1439       lv_column_names :=
1440 
1441         'SR_INSTANCE_CODE||''~''||'
1442 	||'LEVEL_NAME||''~''||'
1443 	||'LEVEL_VALUE||''~''||'
1444 	||'LEVEL_VALUE_DESC||''~''||'
1445 	||'ATTRIBUTE1||''~''||'
1446 	||'ATTRIBUTE2||''~''||'
1447 	||'ATTRIBUTE3||''~''||'
1448 	||'ATTRIBUTE4||''~''||'
1449 	||'ATTRIBUTE5 ';
1450 
1451       OPEN  c1(lv_batch_id);
1452       FETCH c1 BULK COLLECT INTO lb_rowid;
1453       CLOSE c1;
1454 
1455       v_sql_stmt := 01;
1456 
1457       FORALL j IN 1..lb_rowid.COUNT
1458       UPDATE msd_st_level_values
1459       SET  st_transaction_id = msd_st_level_values_s.NEXTVAL,
1460            last_update_date  = lv_current_date,
1461            last_updated_by   = lv_current_user,
1462            creation_date     = lv_current_date,
1463            created_by        = lv_current_user
1464       WHERE  rowid           = lb_rowid(j);
1465 
1466 
1467       -- Error out the records where level_name is invalid
1468         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
1469                      (p_app_short_name    => 'MSC',
1470                       p_error_code        => 'MSC_PP_INVALID_VALUE',
1471                       p_message_text      => lv_message_text,
1472                       p_error_text        => lv_error_text,
1473                       p_token1            => 'COLUMN_NAME',
1474                       p_token_value1      => 'LEVEL_NAME');
1475 
1476       IF lv_return <> 0 THEN
1477         RAISE ex_logging_err;
1478       END IF;
1479 
1480      -- Derive LEVEL_ID from msd_levels
1481        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_ID
1482                     (p_table_name     => 'MSD_ST_LEVEL_VALUES',
1483                      p_level_name_col => 'LEVEL_NAME',
1484                      p_level_id_col   => 'LEVEL_ID',
1485                      p_severity      => G_SEV_ERROR,
1486                      p_message_text   => lv_message_text,
1487                      p_instance_code  => p_instance_code,
1488                      p_batch_id       => lv_batch_id,
1489                      p_error_text     => lv_error_text);
1490 
1491 
1492       IF lv_return <> 0 THEN
1493         RAISE ex_logging_err;
1494       END IF;
1495 
1496 
1497 
1498      OPEN instance_type;
1499       FETCH instance_type into lv_instance_type;
1500      CLOSE instance_type;
1501 
1502 
1503 
1504 
1505    IF (lv_instance_type = G_INS_OTHER) THEN
1506 
1507        -- Error out the records where level_name is invalid
1508         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
1509                      (p_app_short_name    => 'MSC',
1510                       p_error_code        => 'MSC_PP_INVALID_VALUE',
1511                       p_message_text      => lv_message_text,
1512                       p_error_text        => lv_error_text,
1513                       p_token1            => 'COLUMN_NAME',
1514                       p_token_value1      => 'LEVEL_NAME');
1515 
1516       IF lv_return <> 0 THEN
1517         RAISE ex_logging_err;
1518       END IF;
1519 
1520     -- Error out the records if Level_id is IN (1,2,3,7,11,15,34) ASCP/DP common
1521     -- level values to be collected via MSC flat file
1522 
1523       lv_sql_stmt :=
1524       'UPDATE    msd_st_level_values'
1525       ||' SET    process_flag            = '||G_ERROR_FLG||','
1526       ||'        error_text   =   '||''''||lv_message_text||''''
1527       ||' WHERE  level_id IN (1,2,3,7,11,15,34)'
1528       ||' AND    process_flag            = '||G_IN_PROCESS
1529       ||' AND    batch_id                = :lv_batch_id'
1530       ||' AND    sr_instance_code        = :p_instance_code';
1531 
1532       IF lv_debug THEN
1533         msc_st_util.log_message(lv_sql_stmt);
1534       END IF;
1535       EXECUTE IMMEDIATE lv_sql_stmt
1536               USING     lv_batch_id,
1537                         p_instance_code;
1538 
1539    END IF;
1540 
1541      -- Error out the record if level value is NULL
1542       lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
1543                      (p_app_short_name    => 'MSC',
1544                       p_error_code        => 'MSC_PP_COL_VAL_NULL',
1545                       p_message_text      => lv_message_text,
1546                       p_error_text        => lv_error_text,
1547                       p_token1            => 'COLUMN_NAME',
1548                       p_token_value1      => 'LEVEL_VALUE');
1549 
1550       IF lv_return <> 0 THEN
1551         RAISE ex_logging_err;
1552       END IF;
1553 
1554       v_sql_stmt := 03;
1555       lv_sql_stmt :=
1556       'UPDATE    msd_st_level_values'
1557       ||' SET    process_flag            = '||G_ERROR_FLG||','
1558       ||'        error_text      = '||''''||lv_message_text||''''
1559       ||' WHERE  NVL(level_value, '||''''||NULL_CHAR||''''||') '
1560       ||'        =                 '||''''||NULL_CHAR||''''
1561       ||' AND    batch_id                = :lv_batch_id'
1562       ||' AND    process_flag            = '||G_IN_PROCESS
1563       ||' AND    sr_instance_code        = :p_instance_code';
1564 
1565       IF lv_debug THEN
1566         msc_st_util.log_message(lv_sql_stmt);
1567       END IF;
1568       EXECUTE IMMEDIATE lv_sql_stmt
1569               USING     lv_batch_id,
1570                         p_instance_code;
1571 
1572 
1573 
1574 
1575    IF (lv_instance_type <> G_INS_OTHER) THEN
1576 
1577       -- Now derive sr_level_pk from the ASCP tables if Level Values are loaded forERP data.
1578        v_sql_stmt := 05;
1579        lv_return := MSC_ST_UTIL.DERIVE_SETUP_SR_LEVEL_PK
1580                     (p_table_name        => 'MSD_ST_LEVEL_VALUES',
1581                      p_level_val_col     => 'LEVEL_VALUE',
1582                      p_level_pk_col      => 'SR_LEVEL_PK',
1583                      p_level_id_col      => 'LEVEL_ID',
1584                      p_instance_code     => p_instance_code,
1585                      p_instance_id       => p_instance_id,
1586                      p_error_text        => lv_error_text,
1587                      p_batch_id          => lv_batch_id);
1588 
1589       IF lv_return <> 0 THEN
1590         RAISE ex_logging_err;
1591       END IF;
1592 
1593 
1594 
1595      v_sql_stmt := 06;
1596      OPEN  c3(lv_batch_id);
1597       FETCH c3 BULK COLLECT INTO lb_level_value ;
1598 
1599       IF c3%ROWCOUNT > 0  THEN
1600         -- Insert into the Item List Price table the UOM for the Master orgs
1601 /*
1602         OPEN master_org(p_instance_id);
1603            FETCH master_org into lv_master_org_id;
1604         CLOSE master_org;
1605 */
1606         v_sql_stmt := 07;
1607         FORALL j IN 1..lb_level_value.COUNT
1608         INSERT INTO  MSD_ST_ITEM_LIST_PRICE
1609          (INSTANCE ,
1610           ITEM ,
1611           LIST_PRICE ,
1612           AVG_DISCOUNT ,
1613           BASE_UOM ,
1614           SR_ITEM_PK ,
1615           ITEM_TYPE_ID ,
1616           FORECAST_TYPE_ID ,
1617           SR_INSTANCE_CODE,
1618           LAST_UPDATE_DATE,
1619           LAST_UPDATED_BY,
1620           CREATION_DATE,
1621           CREATED_BY,
1622           LAST_UPDATE_LOGIN,
1623           REQUEST_ID,
1624           PROGRAM_APPLICATION_ID,
1625           PROGRAM_ID,
1626           PROGRAM_UPDATE_DATE )
1627           SELECT
1628            SR_INSTANCE_ID ,
1629            ITEM_NAME ,
1630            LIST_PRICE ,
1631            AVERAGE_DISCOUNT ,
1632            UOM_CODE ,
1633            SR_INVENTORY_ITEM_ID ,
1634            BOM_ITEM_TYPE ,
1635            ATO_FORECAST_CONTROL ,
1636            p_instance_code,
1637            last_update_date,
1638            last_updated_by,
1639            creation_date,
1640            created_by ,
1641            last_update_login,
1642            request_id ,
1643            program_application_id,
1644            program_id ,
1645            program_update_date
1646            FROM    MSC_SYSTEM_ITEMS
1647            WHERE item_name       = lb_level_value(j)
1648            AND   sr_instance_id  = p_instance_id
1649            AND   plan_id         = -1
1650            AND   organization_id =   (select mtp.sr_tp_id
1651 	                              from msc_trading_partners mtp,msd_setup_parameters msp
1652 	                              where msp.parameter_name     ='MSD_MASTER_ORG_LEGACY'
1653 	                              and   msp.instance_id        = p_instance_id
1654 	                              and   msp.parameter_value    = substr(mtp.organization_code,instr(mtp.organization_code,':')+1,length(mtp.organization_code))
1655 	                              and   nvl(mtp.company_id,-1) = -1
1656 	                              and   mtp.sr_instance_id     = msp.instance_id);
1657 /*           AND   organization_id    = lv_master_org_id; */
1658 
1659 
1660       END IF ;  --IF c3%ROWCOUNT > 0  THEN
1661      CLOSE c3;
1662 
1663    END IF;   --IF (lv_instance_type <> G_INS_OTHER) THEN
1664 
1665       -- Now derive sr_level_pk from the msd_local_id_setup
1666      v_sql_stmt := 08;
1667      lv_return := MSC_ST_UTIL.DERIVE_SR_LEVEL_PK
1668                     (p_table_name        => 'MSD_ST_LEVEL_VALUES',
1669                      p_level_val_col     => 'LEVEL_VALUE',
1670                      p_level_pk_col      => 'SR_LEVEL_PK',
1671                      p_level_id_col      => 'LEVEL_ID',
1672                      p_instance_code     => p_instance_code,
1673                      p_error_text        => lv_error_text,
1674                      p_batch_id          => lv_batch_id);
1675 
1676       IF lv_return <> 0 THEN
1677         RAISE ex_logging_err;
1678       END IF;
1679 
1680       --Call to customised validation.
1681       MSC_CL_PRE_PROCESS_HOOK.ENTITY_VALIDATION
1682         (ERRBUF         => lv_error_text,
1683          RETCODE        => lv_return,
1684          pBatchID       => lv_batch_id,
1685          pInstanceCode  => p_instance_code,
1686          pEntityName    => 'MSD_ST_LEVEL_VALUES',
1687          pInstanceID    => p_instance_id);
1688 
1689       IF NVL(lv_return,0) <> 0 THEN
1690         RAISE ex_logging_err;
1691       END IF;
1692 
1693    -- Generate the sr_level_pk
1694 
1695     OPEN  c2(lv_batch_id);
1696     FETCH c2 BULK COLLECT INTO lb_rowid ;
1697 
1698       IF c2%ROWCOUNT > 0  THEN
1699 
1700 /*      FORALL j IN 1..lb_rowid.COUNT
1701         UPDATE msd_st_level_values
1702         SET    sr_level_pk  =  msd_common_utilities.get_sr_level_pk(p_instance_id,p_instance_code)
1703         WHERE  rowid        =  lb_rowid(j);
1704 */
1705 
1706        LOOP
1707          v_index :=v_index + 1;
1708             lb_sr_level_pk(v_index) := msd_common_utilities.get_sr_level_pk(p_instance_id,p_instance_code);
1709             EXIT WHEN v_index = lb_rowid.COUNT;
1710        END LOOP;
1711 
1712         FORALL j IN 1..lb_rowid.COUNT
1713         UPDATE msd_st_level_values
1714         SET    sr_level_pk  =  lb_sr_level_pk(j)
1715         WHERE  rowid        =  lb_rowid(j);
1716 
1717 
1718         -- Insert into the LID table this new level_value
1719 
1720         FORALL j IN lb_rowid.FIRST..lb_rowid.LAST
1721         INSERT INTO  msd_local_id_setup
1722           (local_id,
1723            instance_id,
1724            level_id,
1725            data_source_type,
1726            char1,
1727            char2,
1728            last_update_date,
1729            last_updated_by,
1730            creation_date,
1731            created_by  )
1732         SELECT
1733            TO_NUMBER(sr_level_pk),
1734            p_instance_id,
1735            level_id,
1736            data_source_type,
1737            p_instance_code,
1738            level_value,
1739            last_update_date,
1740            last_updated_by,
1741            creation_date,
1742            created_by
1743          FROM msd_st_level_values
1744          WHERE rowid = lb_rowid(j);
1745 
1746       END IF ;
1747 
1748     CLOSE c2;
1749 
1750      -- Set the process flag as Valid and populate instance_id
1751       lv_return := MSC_ST_UTIL.SET_PROCESS_FLAG
1752                         (p_table_name     => 'MSD_ST_LEVEL_VALUES',
1753                          p_instance_id    => p_instance_id,
1754                          p_instance_code  => p_instance_code,
1755                          p_process_flag   => G_VALID,
1756                          p_error_text     => lv_error_text,
1757                          p_batch_id       => lv_batch_id,
1758                          p_instance_id_col=> 'INSTANCE');
1759 
1760       IF lv_return <> 0 THEN
1761         RAISE ex_logging_err;
1762       END IF;
1763 
1764   -- Inserting all the errored out records into MSC_ERRORS
1765 
1766       lv_return := MSC_ST_UTIL.LOG_ERROR
1767                    (p_table_name        => 'MSD_ST_LEVEL_VALUES',
1768                     p_instance_code     => p_instance_code,
1769                     p_row               => lv_column_names,
1770                     p_severity          => G_SEV_ERROR,
1771                     p_error_text        => lv_error_text,
1772                     p_message_text      => NULL,
1773                     p_batch_id          => lv_batch_id);
1774 
1775   IF(lv_return <> 0) THEN
1776       msc_st_util.log_message(lv_error_text);
1777   END IF;
1778 
1779 
1780      LOAD_LEVEL_ORG_ASSCNS ( p_instance_code,
1781                              p_instance_id );
1782 
1783      LOAD_ITEM_RELATIONSHIP ( p_instance_code,
1784                               p_instance_id);
1785 
1786 
1787    COMMIT;
1788 
1789     EXCEPTION
1790       WHEN ex_logging_err THEN
1791         ROLLBACK;
1792 
1793         ERRBUF := lv_error_text;
1794         RETCODE := G_WARNING;
1795         msc_st_util.log_message(lv_error_text);
1796 
1797      WHEN OTHERS THEN
1798       ROLLBACK;
1799 
1800       lv_error_text    := substr('MSD_CL_PRE_PROCESS.LOAD_LEVEL_VALUE '||'('
1801                        ||v_sql_stmt||')'|| SQLERRM, 1, 240);
1802       msc_st_util.log_message(lv_error_text);
1803       ERRBUF := lv_error_text;
1804       RETCODE := G_WARNING;
1805 
1806   END LOAD_LEVEL_VALUE ;
1807 
1808   /*==========================================================================+
1809   | DESCRIPTION  : This function performs the validation and loads the data   |
1810   |                for business object level_value_associations               |
1811   +==========================================================================*/
1812   PROCEDURE LOAD_LEVEL_ASSOC( ERRBUF          OUT NOCOPY VARCHAR,
1813                               RETCODE         OUT NOCOPY VARCHAR,
1814                               p_instance_code IN VARCHAR,
1815                               p_instance_id   IN NUMBER,
1816                               p_batch_id      IN NUMBER)
1817   IS
1818   TYPE RowidTab IS TABLE OF ROWID INDEX BY BINARY_INTEGER;
1819   lb_rowid          RowidTab;
1820   lv_sql_stmt       VARCHAR2(4000);
1821   lv_batch_id       msd_st_level_associations.batch_id%TYPE;
1822   lv_message_text   msc_errors.error_text%TYPE;
1823   lv_error_text     VARCHAR2(250);
1824   lv_debug          BOOLEAN   := msc_cl_pre_process.v_debug;
1825   lv_batch_size     NUMBER    := msc_cl_pre_process.v_batch_size;
1826   lv_current_user   NUMBER    := msc_cl_pre_process.v_current_user;
1827   lv_current_date   DATE      := msc_cl_pre_process.v_current_date;
1828   lv_return         NUMBER := 0;
1829   ex_logging_err    EXCEPTION;
1830   lv_column_names   VARCHAR2(5000);
1831 
1832   CURSOR c1(p_batch_id NUMBER)IS
1833     SELECT rowid
1834     FROM   msd_st_level_associations
1835     WHERE  process_flag      IN (G_IN_PROCESS,G_ERROR_FLG)
1836     AND    sr_instance_code = p_instance_code
1837     AND    batch_id         = p_batch_id;
1838 
1839    BEGIN
1840 
1841       lv_batch_id := p_batch_id;
1842 
1843       lv_column_names :=
1844 
1845       '	SR_INSTANCE_CODE		||''~''||'
1846     ||'	LEVEL_NAME		||''~''||'
1847     ||'	SR_LEVEL_VALUE		||''~''||'
1848     ||'	PARENT_LEVEL_NAME	||''~''||'
1849     ||'	SR_PARENT_LEVEL_VALUE	||''~''||'
1850     ||'	ATTRIBUTE1		||''~''||'
1851     ||'	ATTRIBUTE2		||''~''||'
1852     ||'	ATTRIBUTE3		||''~''||'
1853     ||'	ATTRIBUTE4		||''~''||'
1854     ||'	ATTRIBUTE5';
1855 
1856 
1857       OPEN  c1(lv_batch_id);
1858       FETCH c1 BULK COLLECT INTO lb_rowid;
1859       CLOSE c1;
1860 
1861       v_sql_stmt := 04;
1862       FORALL j IN lb_rowid.FIRST..lb_rowid.LAST
1863       UPDATE msd_st_level_associations
1864       SET  st_transaction_id = msd_st_level_associations_s.NEXTVAL,
1865            last_update_date  = lv_current_date,
1866            last_updated_by   = lv_current_user,
1867            creation_date     = lv_current_date,
1868            created_by        = lv_current_user
1869       WHERE  rowid           = lb_rowid(j);
1870 
1871 
1872       -- Error out the records where level_name is invalid
1873         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
1874                      (p_app_short_name    => 'MSC',
1875                       p_error_code        => 'MSC_PP_INVALID_VALUE',
1876                       p_message_text      => lv_message_text,
1877                       p_error_text        => lv_error_text,
1878                       p_token1            => 'COLUMN_NAME',
1879                       p_token_value1      => 'LEVEL_NAME');
1880 
1881       IF lv_return <> 0 THEN
1882         RAISE ex_logging_err;
1883       END IF;
1884 
1885      -- Derive LEVEL_ID from msd_levels
1886        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_ID
1887                     (p_table_name     => 'MSD_ST_LEVEL_ASSOCIATIONS',
1888                      p_level_name_col => 'LEVEL_NAME',
1889                      p_level_id_col   => 'LEVEL_ID',
1890                      p_severity      => G_SEV_ERROR,
1891                      p_message_text   => lv_message_text,
1892                      p_instance_code  => p_instance_code,
1893                      p_batch_id       => lv_batch_id,
1894                      p_error_text     => lv_error_text);
1895 
1896       IF lv_return <> 0 THEN
1897         RAISE ex_logging_err;
1898       END IF;
1899 
1900       -- Error out the records where parent_level_name is invalid
1901         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
1902                      (p_app_short_name    => 'MSC',
1903                       p_error_code        => 'MSC_PP_INVALID_VALUE',
1904                       p_message_text      => lv_message_text,
1905                       p_error_text        => lv_error_text,
1906                       p_token1            => 'COLUMN_NAME',
1907                       p_token_value1      => 'PARENT_LEVEL_NAME');
1908 
1909       IF lv_return <> 0 THEN
1910         RAISE ex_logging_err;
1911       END IF;
1912 
1913      -- Derive PARENT_LEVEL_ID from msd_levels
1914        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_ID
1915                     (p_table_name     => 'MSD_ST_LEVEL_ASSOCIATIONS',
1916                      p_level_name_col => 'PARENT_LEVEL_NAME',
1917                      p_level_id_col   => 'PARENT_LEVEL_ID',
1918                      p_severity      => G_SEV_ERROR,
1919                      p_message_text   => lv_message_text,
1920                      p_instance_code  => p_instance_code,
1921                      p_batch_id       => lv_batch_id,
1922                      p_error_text     => lv_error_text);
1923 
1924       IF lv_return <> 0 THEN
1925         RAISE ex_logging_err;
1926       END IF;
1927 
1928       -- set the message, sr_level_value  is invalid
1929 
1930         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
1931                      (p_app_short_name    => 'MSC',
1932                       p_error_code        => 'MSC_PP_INVALID_VALUE',
1933                       p_message_text      => lv_message_text,
1934                       p_error_text        => lv_error_text,
1935                       p_token1            => 'COLUMN_NAME',
1936                       p_token_value1      => 'SR_LEVEL_VALUE');
1937 
1938       IF lv_return <> 0 THEN
1939         RAISE ex_logging_err;
1940       END IF;
1941 
1942      -- Derive SR_LEVEL_PK from msd_level_value or msd_st_level_values
1943 
1944        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_PK
1945                     (p_table_name      => 'MSD_ST_LEVEL_ASSOCIATIONS',
1946                      p_level_val_col   => 'SR_LEVEL_VALUE',
1947                      p_level_name_col    => 'LEVEL_NAME',
1948                      p_level_pk_col => 'SR_LEVEL_PK',
1949                      p_instance_code   => p_instance_code,
1950                      p_instance_id     => p_instance_id,
1951                      p_message_text    => lv_message_text,
1952                      p_batch_id        => lv_batch_id,
1953                      p_error_text      => lv_error_text);
1954 
1955       IF lv_return <> 0 THEN
1956         RAISE ex_logging_err;
1957       END IF;
1958 
1959       -- set the message, sr_parent_level_value  is invalid
1960 
1961         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
1962                      (p_app_short_name    => 'MSC',
1963                       p_error_code        => 'MSC_PP_INVALID_VALUE',
1964                       p_message_text      => lv_message_text,
1965                       p_error_text        => lv_error_text,
1966                       p_token1            => 'COLUMN_NAME',
1967                       p_token_value1      => 'SR_PARENT_LEVEL_VALUE');
1968 
1969       IF lv_return <> 0 THEN
1970         RAISE ex_logging_err;
1971       END IF;
1972 
1973      -- Derive SR_PARENT_LEVEL_PK from msd_level_values or msd_st_level_values
1974 
1975        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_PK
1976                     (p_table_name      => 'MSD_ST_LEVEL_ASSOCIATIONS',
1977                      p_level_val_col   => 'SR_PARENT_LEVEL_VALUE',
1978                      p_level_name_col    => 'PARENT_LEVEL_NAME',
1979                      p_level_pk_col => 'SR_PARENT_LEVEL_PK',
1980                      p_instance_code   => p_instance_code,
1981                      p_instance_id     => p_instance_id,
1982                      p_message_text    => lv_message_text,
1983                      p_batch_id        => lv_batch_id,
1984                      p_error_text      => lv_error_text);
1985       IF lv_return <> 0 THEN
1986         RAISE ex_logging_err;
1987       END IF;
1988 
1989      -- Validate whether the child and parent level exist in msd_level_hierarchies
1990      -- This can exist under any hierarhcy
1991      -- Set the message,
1992 
1993       lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
1994                      (p_app_short_name    => 'MSC',
1995                       p_error_code        => 'MSD_PP_ASSOC_INVALID',
1996                       p_message_text      => lv_message_text,
1997                       p_error_text        => lv_error_text,
1998                       p_token1            => 'COLUMN_NAME',
1999                       p_token_value1      => 'LEVEL_NAME',
2000                       p_token2            => 'COLUMN_NAME',
2001                       p_token_value2      => 'PARENT_LEVEL_NAME');
2002 
2003       IF lv_return <> 0 THEN
2004         RAISE ex_logging_err;
2005       END IF;
2006 
2007      --Error out if parent child-association not there in any hierarchy
2008     v_sql_stmt := 07;
2009 
2010     lv_sql_Stmt:=
2011     'UPDATE     msd_st_level_associations mla'
2012     ||' SET     process_flag              ='||G_ERROR_FLG||','
2013     ||'         error_text   = '||''''||lv_message_text||''''
2014     ||' WHERE   NOT EXISTS ( SELECT 1'
2015     ||'         FROM   msd_hierarchy_levels mhl'
2016     ||'         WHERE  mla.level_id          = mhl.level_id'
2017     ||'         AND    mla.parent_level_id   = mhl.parent_level_id)'
2018     ||' AND     process_flag              ='|| G_IN_PROCESS
2019     ||' AND     batch_id                  = :lv_batch_id'
2020     ||' AND     sr_instance_code          = :p_instance_code';
2021 
2022     IF lv_debug THEN
2023            msc_st_util.log_message(lv_sql_stmt);
2024     END IF;
2025 
2026    EXECUTE IMMEDIATE lv_sql_stmt
2027                USING lv_batch_id,
2028                      p_instance_code ;
2029 
2030 
2031       --Call to customised validation.
2032       MSC_CL_PRE_PROCESS_HOOK.ENTITY_VALIDATION
2033         (ERRBUF         => lv_error_text,
2034          RETCODE        => lv_return,
2035          pBatchID       => null,
2036          pInstanceCode  => p_instance_code,
2037          pEntityName    => 'MSD_ST_LEVEL_ASSOCIATIONS',
2038          pInstanceID    => p_instance_id);
2039 
2040       IF lv_return <> 0 THEN
2041         RAISE ex_logging_err;
2042       END IF;
2043 
2044      -- Set the process flag as Valid and populate instance_id
2045       lv_return := MSC_ST_UTIL.SET_PROCESS_FLAG
2046                         (p_table_name     => 'MSD_ST_LEVEL_ASSOCIATIONS',
2047                          p_instance_id    => p_instance_id,
2048                          p_instance_code  => p_instance_code,
2049                          p_process_flag   => G_VALID,
2050                          p_error_text     => lv_error_text,
2051                          p_batch_id       => lv_batch_id,
2052                          p_instance_id_col=> 'INSTANCE');
2053 
2054       IF lv_return <> 0 THEN
2055         RAISE ex_logging_err;
2056       END IF;
2057 
2058     -- Inserting all the errored out records into MSC_ERRORS:
2059 
2060       lv_return := MSC_ST_UTIL.LOG_ERROR
2061                    (p_table_name        => 'MSD_ST_LEVEL_ASSOCIATIONS',
2062                     p_instance_code     => p_instance_code,
2063                     p_row               => lv_column_names,
2064                     p_severity          => G_SEV_ERROR,
2065                     p_error_text        => lv_error_text,
2066                     p_message_text      => NULL,
2067                     p_batch_id          => lv_batch_id);
2068 
2069       IF(lv_return <> 0) THEN
2070         msc_st_util.log_message(lv_error_text);
2071       END IF;
2072       COMMIT;
2073 
2074     EXCEPTION
2075       WHEN ex_logging_err THEN
2076         ROLLBACK;
2077 
2078         ERRBUF := lv_error_text;
2079         RETCODE := G_WARNING;
2080         msc_st_util.log_message(lv_error_text);
2081 
2082      WHEN OTHERS THEN
2083       ROLLBACK;
2084 
2085       lv_error_text    := substr('MSD_CL_PRE_PROCESS.LOAD_LEVEL_ASSOC'||'('
2086                        ||v_sql_stmt||')'|| SQLERRM, 1, 240);
2087       msc_st_util.log_message(lv_error_text);
2088       ERRBUF := lv_error_text;
2089       RETCODE := G_WARNING;
2090 
2091   END LOAD_LEVEL_ASSOC ;
2092 
2093   /*==========================================================================+
2094   | DESCRIPTION  : This function performs the validation and loads the data   |
2095   |                for business object booking data                           |
2096   +==========================================================================*/
2097 
2098   PROCEDURE LOAD_BOOKING_DATA(ERRBUF          OUT NOCOPY VARCHAR,
2099                               RETCODE         OUT NOCOPY NUMBER,
2100                               p_instance_code IN VARCHAR,
2101                               p_instance_id   IN NUMBER,
2102                               p_batch_id      IN NUMBER)
2103   IS
2104   TYPE RowidTab IS TABLE OF ROWID INDEX BY BINARY_INTEGER;
2105   lb_rowid          RowidTab;
2106 /*  lb_rowid1         RowidTab;  Bug3749959 */
2107   lv_sql_stmt       VARCHAR2(4000);
2108   lv_batch_id       msd_st_booking_data.batch_id%TYPE;
2109   lv_message_text   msc_errors.error_text%TYPE;
2110   lv_my_company     msc_companies.company_name%TYPE := GET_MY_COMPANY;
2111   lv_error_text     VARCHAR2(250);
2112   lv_debug          BOOLEAN   := msc_cl_pre_process.v_debug;
2113   lv_batch_size     NUMBER    := msc_cl_pre_process.v_batch_size;
2114   lv_current_user   NUMBER    := msc_cl_pre_process.v_current_user;
2115   lv_current_date   DATE      := msc_cl_pre_process.v_current_date;
2116   lv_return         NUMBER := 0;
2117   ex_logging_err    EXCEPTION;
2118   lv_column_names   VARCHAR2(5000);
2119 /*
2120   lv_other_desc   varchar2(240) := NULL;  --Adding this to insert level value - 'Others'
2121   lv_all_dcs_desc varchar2(240) := NULL;  --Adding this to insert level value - 'All Demand Classes'
2122 Bug3749959 */
2123 
2124   lv_instance_type  msc_apps_instances.instance_type%TYPE;
2125 /*  lv_other_exist NUMBER :=0;
2126     lv_all_dcs_pk  NUMBER :=0;  --Renamed 'lv_sr_level_pk' to 'lv_all_dcs_pk'.
2127 Bug3749959 */
2128 
2129   CURSOR instance_type IS
2130    SELECT instance_type
2131    FROM msc_apps_instances
2132    WHERE instance_id=p_instance_id;
2133 
2134   CURSOR c1(p_batch_id NUMBER)IS
2135     SELECT rowid
2136     FROM   msd_st_booking_data
2137     WHERE  process_flag      IN (G_IN_PROCESS,G_ERROR_FLG)
2138     AND    sr_instance_code = p_instance_code
2139     AND    batch_id         = p_batch_id;
2140 /*
2141    CURSOR c2(p_batch_id NUMBER)IS
2142     SELECT rowid
2143     FROM   msd_st_booking_data
2144     WHERE  process_flag      IN (G_IN_PROCESS,G_ERROR_FLG)
2145     AND    nvl(DEMAND_CLASS_LVL_VAL,'-1') = '-1'
2146     AND    sr_instance_code = p_instance_code
2147     AND    batch_id         = p_batch_id;
2148 
2149    cursor c3 (p_instance varchar2) is
2150     select count(*) from MSD_LEVEL_VALUES
2151     where LEVEL_ID = 34
2152     and   instance = p_instance
2153     and   SR_LEVEL_PK = to_char(v_null_pk);  --Using global variable v_null_pk insteda of hardcoding -777 at multiple places.
2154 
2155    cursor c4 (p_instance_code varchar2) is
2156     select local_id from msd_local_id_setup
2157     where char1    = p_instance_code
2158     -- and   char2    = 'All Demand Classes'
2159     and   level_id = 40;
2160 Bug3749959 */
2161 
2162 
2163    BEGIN
2164 
2165      lv_batch_id := p_batch_id;
2166      lv_column_names :=
2167 	'	SR_INSTANCE_CODE	||''~''||'
2168 	||'	INV_ORG			||''~''||'
2169 	||'	ITEM			||''~''||'
2170 	||'	CUSTOMER		||''~''||'
2171 	||'	SALES_CHANNEL		||''~''||'
2172 	||'	SALES_REP		||''~''||'
2173 	||'	SHIP_TO_LOC		||''~''||'
2174 	||'	PARENT_ITEM		||''~''||'
2175 	||'	USER_DEFINED_LEVEL1	||''~''||'
2176 	||'	USER_DEFINED1		||''~''||'
2177 	||'	USER_DEFINED_LEVEL2	||''~''||'
2178 	||'	USER_DEFINED2		||''~''||'
2179 	||'	BOOKED_DATE		||''~''||'
2180 	||'	REQUESTED_DATE		||''~''||'
2181 	||'	PROMISED_DATE		||''~''||'
2182 	||'	SCHEDULED_DATE		||''~''||'
2183 	||'	AMOUNT			||''~''||'
2184 	||'	QTY_ORDERED		||''~''||'
2185 	||'	ORIGINAL_ITEM ';
2186 
2187       OPEN  c1(lv_batch_id);
2188       FETCH c1 BULK COLLECT INTO lb_rowid;
2189       CLOSE c1;
2190 
2191       v_sql_stmt := 04;
2192       FORALL j IN lb_rowid.FIRST..lb_rowid.LAST
2193       UPDATE msd_st_booking_data
2194       SET  st_transaction_id = msd_st_booking_data_s.NEXTVAL,
2195            last_update_date  = lv_current_date,
2196            last_updated_by   = lv_current_user,
2197            creation_date     = lv_current_date,
2198            created_by        = lv_current_user
2199       WHERE  rowid           = lb_rowid(j);
2200 
2201 /*
2202       OPEN  c2(lv_batch_id);
2203        FETCH c2 BULK COLLECT INTO lb_rowid1;
2204       CLOSE c2;
2205 
2206    IF ( lb_rowid1.COUNT <> 0 ) THEN
2207 
2208      lv_other_desc    := msd_sr_util.get_null_desc;      --Calling fuction - msd_sr_util.get_null_desc, to fetch the level value 'Others'
2209      lv_all_dcs_desc  := msd_sr_util.get_all_dcs_desc;   --Calling fuction - msd_sr_util.get_all_dcs_desc, to fetch the level value 'All Demand Classes'
2210 
2211       v_sql_stmt := 05;
2212       FORALL j IN lb_rowid1.FIRST..lb_rowid1.LAST
2213       UPDATE msd_st_booking_data
2214       SET  DEMAND_CLASS_LVL_VAL  = lv_other_desc  --Using the value fetched from function - msd_sr_util.get_null_desc
2215       WHERE  rowid               = lb_rowid1(j);
2216 
2217 
2218       OPEN c3(p_instance_id);
2219        FETCH c3 into lv_other_exist;
2220       CLOSE c3;
2221 
2222       IF  lv_other_exist = 0 THEN
2223         INSERT INTO MSD_ST_LEVEL_VALUES
2224         (INSTANCE   ,
2225         LEVEL_ID,
2226         LEVEL_VALUE,
2227         SR_LEVEL_PK,
2228         ATTRIBUTE1,
2229         ATTRIBUTE2,
2230         ATTRIBUTE3,
2231         ATTRIBUTE4,
2232         ATTRIBUTE5,
2233         LAST_UPDATE_DATE,
2234         LAST_UPDATED_BY,
2235         CREATION_DATE,
2236         CREATED_BY,
2237         LAST_UPDATE_LOGIN,
2238         REQUEST_ID,
2239         PROGRAM_APPLICATION_ID,
2240         PROGRAM_ID,
2241         PROGRAM_UPDATE_DATE )
2242         VALUES
2243         (p_instance_id,
2244         34,
2245         lv_other_desc,   --Using the value fetched from function - msd_sr_util.get_null_desc
2246         to_char(v_null_pk),   --Using global variable v_null_pk insteda of hardcoding -777 at multiple places.
2247         NULL,
2248         NULL,
2249         NULL,
2250         NULL,
2251         NULL,
2252         sysdate,
2253         -1,
2254         sysdate,
2255         -1,
2256         -1,
2257         -1,
2258         -1,
2259         -1,
2260         sysdate);
2261 
2262       END IF;
2263 
2264     OPEN c4(p_instance_code);
2265      FETCH c4 into lv_all_dcs_pk;  --Renamed 'lv_sr_level_pk' to 'lv_all_dcs_pk'.
2266     CLOSE c4;
2267 
2268      IF lv_all_dcs_pk = 0  THEN  --Renamed 'lv_sr_level_pk' to 'lv_all_dcs_pk'.
2269 
2270         lv_all_dcs_pk := msd_sr_util.get_all_dcs_pk; -- Fetching the SR_LEVEL_PK for 'ALL Demand Classes' level value from function - msd_sr_util.get_all_dcs_pk
2271 
2272         INSERT INTO  msd_local_id_setup   --  insert into msd_local_id_setup
2273           (local_id,
2274            instance_id,
2275            level_id,
2276            char1,
2277            char2,
2278            last_update_date,
2279            last_updated_by,
2280            creation_date,
2281            created_by  )
2282            VALUES
2283            (lv_all_dcs_pk,  --Renamed 'lv_sr_level_pk' to 'lv_all_dcs_pk'.
2284             p_instance_id,
2285             40,
2286             p_instance_code,
2287             lv_all_dcs_desc,   --Using the value fetched from function - msd_sr_util.get_all_dcs_desc
2288             sysdate,
2289             -1,
2290             sysdate,
2291             -1);
2292 
2293  --    lv_sr_level_pk := -6;     -- Inserting 'All Demand Classes' records with sr_level_pk as -6
2294 
2295 
2296      INSERT INTO MSD_ST_LEVEL_VALUES   --Inserting into MSD_ST_LEVEL_VALUES
2297        (INSTANCE   ,
2298         LEVEL_ID,
2299         LEVEL_VALUE,
2300         SR_LEVEL_PK,
2301         ATTRIBUTE1,
2302         ATTRIBUTE2,
2303         ATTRIBUTE3,
2304         ATTRIBUTE4,
2305         ATTRIBUTE5,
2306         LAST_UPDATE_DATE,
2307         LAST_UPDATED_BY,
2308         CREATION_DATE,
2309         CREATED_BY,
2310         LAST_UPDATE_LOGIN,
2311         REQUEST_ID,
2312         PROGRAM_APPLICATION_ID,
2313         PROGRAM_ID,
2314         PROGRAM_UPDATE_DATE )
2315         VALUES
2316         (p_instance_id,
2317         40,
2318         lv_all_dcs_desc,       --Using the value fetched from function - msd_sr_util.get_all_dcs_desc
2319         lv_all_dcs_pk,         --Renamed 'lv_sr_level_pk' to 'lv_all_dcs_pk'.
2320         NULL,
2321         NULL,
2322         NULL,
2323         NULL,
2324         NULL,
2325         sysdate,
2326         -1,
2327         sysdate,
2328         -1,
2329         -1,
2330         -1,
2331         -1,
2332         -1,
2333         sysdate);
2334 
2335 
2336           --   Insert into msd_st_level_associations.
2337 
2338       INSERT INTO MSD_ST_LEVEL_ASSOCIATIONS
2339         (INSTANCE   ,
2340         LEVEL_ID,
2341         SR_LEVEL_PK,
2342         PARENT_LEVEL_ID,
2343         SR_PARENT_LEVEL_PK,
2344         ATTRIBUTE1,
2345         ATTRIBUTE2,
2346         ATTRIBUTE3,
2347         ATTRIBUTE4,
2348         ATTRIBUTE5,
2349         LAST_UPDATE_DATE,
2350         LAST_UPDATED_BY,
2351         CREATION_DATE,
2352         CREATED_BY,
2353         LAST_UPDATE_LOGIN,
2354         REQUEST_ID,
2355         PROGRAM_APPLICATION_ID,
2356         PROGRAM_ID,
2357         PROGRAM_UPDATE_DATE )
2358         VALUES
2359         (p_instance_id,
2360         34,
2361         to_char(v_null_pk),  --Using global variable v_null_pk insteda of hardcoding -777 at multiple places.
2362         40,
2363         lv_all_dcs_pk,   --Renamed 'lv_sr_level_pk' to 'lv_all_dcs_pk'.
2364         NULL,
2365         NULL,
2366         NULL,
2367         NULL,
2368         NULL,
2369         sysdate,
2370         -1,
2371         sysdate,
2372         -1,
2373         -1,
2374         -1,
2375         -1,
2376         -1,
2377         sysdate);
2378 
2379 
2380      END IF;
2381 
2382   END IF;
2383 Bug3749959 */
2384 
2385      OPEN instance_type;
2386       FETCH instance_type into lv_instance_type;
2387      CLOSE instance_type;
2388 
2389     IF (lv_instance_type = G_INS_OTHER) THEN
2390 
2391        -- Set the message to validate customer-ship to location combination
2392       lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
2393                      (p_app_short_name    => 'MSC',
2394                       p_error_code        => 'MSC_PP_COL_REF_NOT_EXIST',
2395                       p_message_text      => lv_message_text,
2396                       p_error_text        => lv_error_text,
2397                       p_token1            => 'COLUMN_NAMES',
2398                       p_token_value1      => 'SR_INSTANCE_CODE AND'
2399                                              ||' CUSTOMER AND SHIP_TO_LOC',
2400                       p_token2            => 'MASTER_TABLE',
2401                       p_token_value2      => 'MSC_TRADING_PARTNER_SITES',
2402                       p_token3            => 'CHILD_TABLE',
2403                       p_token_value3      => 'MSD_ST_BOOKING_DATA');
2404 
2405       IF lv_return <> 0 THEN
2406         RAISE ex_logging_err;
2407       END IF;
2408 
2409       -- Validate customer-ship to location combination
2410       v_sql_stmt := 06;
2411       UPDATE msd_st_booking_data mbd
2412       SET    process_flag = G_ERROR_FLG,
2413              error_text   = lv_message_text
2414       WHERE NOT EXISTS(SELECT 1
2415                        FROM   msc_local_id_setup mls
2416                        WHERE  mls.char1                   =  mbd.sr_instance_code
2417                        AND    nvl(mls.char2,lv_my_company) = lv_my_company
2418                        AND    mls.char3                   = mbd.customer
2419                        AND    mls.char4                   = mbd.ship_to_loc
2420                        AND    mls.number1                 = 2                --customer
2421                        AND    mls.entity_name             = 'SR_TP_SITE_ID')
2422       AND    mbd.process_flag               = G_IN_PROCESS
2423       AND    mbd.sr_instance_code           = p_instance_code
2424       AND    mbd.batch_id                   = p_batch_id;
2425 
2426    END IF;
2427 
2428         -- Set the message
2429         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
2430                      (p_app_short_name    => 'MSC',
2431                       p_error_code        => 'MSC_PP_INVALID_VALUE',
2432                       p_message_text      => lv_message_text,
2433                       p_error_text        => lv_error_text,
2434                       p_token1            => 'COLUMN_NAME',
2435                       p_token_value1      => 'ITEM');
2436 
2437       IF lv_return <> 0 THEN
2438         RAISE ex_logging_err;
2439       END IF;
2440 
2441      -- Derive sr_item_pk from msd_st_level_values and msd_level_values
2442 
2443        lv_return :=  MSC_ST_UTIL.DERIVE_SR_PK
2444                        (p_table_name         => 'MSD_ST_BOOKING_DATA',
2445                         p_column_name        => 'ITEM',
2446                         p_pk_col_name        => 'SR_ITEM_PK',
2447                         p_level_id           => 1,
2448                         p_instance_code      => p_instance_code,
2449                         p_instance_id        => p_instance_id,
2450                         p_message_text       => lv_message_text,
2451                         p_batch_id           => lv_batch_id,
2452                         p_severity           => G_SEV_ERROR,	-- Against Bug#2415379
2453                         p_error_text         => lv_error_text);
2454 
2455         IF lv_return <> 0 THEN
2456             RAISE ex_logging_err;
2457         END IF;
2458 
2459       -- Code generated against the bug number : 2357511
2460       v_sql_stmt := 07;
2461 
2462       lv_sql_Stmt:=
2463       'UPDATE     msd_st_booking_data '
2464       ||' SET     ORIGINAL_ITEM      =ITEM '
2465       ||' WHERE   ORIGINAL_ITEM IS NULL '
2466       ||' AND     process_flag              ='|| G_IN_PROCESS
2467       ||' AND     batch_id                  = :lv_batch_id'
2468       ||' AND     sr_instance_code          = :p_instance_code';
2469 
2470       IF lv_debug THEN
2471           msc_st_util.log_message(lv_sql_stmt);
2472       END IF;
2473 
2474      EXECUTE IMMEDIATE lv_sql_stmt
2475                USING lv_batch_id,
2476                      p_instance_code ;
2477 
2478         -- Set the message
2479         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
2480                      (p_app_short_name    => 'MSC',
2481                       p_error_code        => 'MSC_PP_INVALID_VALUE',
2482                       p_message_text      => lv_message_text,
2483                       p_error_text        => lv_error_text,
2484                       p_token1            => 'COLUMN_NAME',
2485                       p_token_value1      => 'ORIGINAL_ITEM');
2486 
2487       IF lv_return <> 0 THEN
2488         RAISE ex_logging_err;
2489       END IF;
2490 
2491      -- Derive SR_ORIGINAL_ITEM_PK from msd_st_level_values and msd_level_values
2492 
2493        lv_return :=  MSC_ST_UTIL.DERIVE_SR_PK
2494                        (p_table_name         => 'MSD_ST_BOOKING_DATA',
2495                         p_column_name        => 'ORIGINAL_ITEM',
2496                         p_pk_col_name        => 'SR_ORIGINAL_ITEM_PK',
2497                         p_level_id           => 1,
2498                         p_instance_code      => p_instance_code,
2499                         p_instance_id        => p_instance_id,
2500                         p_message_text       => lv_message_text,
2501                         p_batch_id           => lv_batch_id,
2502                         p_severity           => G_SEV_ERROR,	-- Against Bug#2415379
2503                         p_error_text         => lv_error_text);
2504 
2505         IF lv_return <> 0 THEN
2506             RAISE ex_logging_err;
2507         END IF;
2508 
2509          -- Set the message
2510         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
2511                      (p_app_short_name    => 'MSC',
2512                       p_error_code        => 'MSC_PP_INVALID_VALUE',
2513                       p_message_text      => lv_message_text,
2514                       p_error_text        => lv_error_text,
2515                       p_token1            => 'COLUMN_NAME',
2516                       p_token_value1      => 'INV_ORG');
2517 
2518       IF lv_return <> 0 THEN
2519         RAISE ex_logging_err;
2520       END IF;
2521 
2522      -- Derive sr_inv_org_pk from msd_st_level_values and msd_level_values
2523 
2524        lv_return :=  MSC_ST_UTIL.DERIVE_SR_PK
2525                        (p_table_name         => 'MSD_ST_BOOKING_DATA',
2526                         p_column_name        => 'INV_ORG',
2527                         p_pk_col_name        => 'SR_INV_ORG_PK',
2528                         p_level_id           => 7,
2529                         p_instance_code      => p_instance_code,
2530                         p_instance_id        => p_instance_id,
2531                         p_message_text       => lv_message_text,
2532                         p_batch_id           => lv_batch_id,
2533                         p_severity           => G_SEV_ERROR,	-- Against Bug#2415379
2534                         p_error_text         => lv_error_text);
2535 
2536         IF lv_return <> 0 THEN
2537             RAISE ex_logging_err;
2538         END IF;
2539 
2540   IF (lv_instance_type = G_INS_OTHER) THEN
2541 
2542         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
2543                      (p_app_short_name    => 'MSC',
2544                       p_error_code        => 'MSC_PP_COL_REF_NOT_EXIST',
2545                       p_message_text      => lv_message_text,
2546                       p_error_text        => lv_error_text,
2547                       p_token1            => 'COLUMN_NAMES',
2548                       p_token_value1      => 'SR_INSTANCE_CODE AND'
2549                                              ||' INV_ORG AND ITEM AND ITEM.ATO_FORECAST_CONTROL'
2550                                              ||' AND ITEM.MRP_PLANNING_CODE',
2551                       p_token2            => 'MASTER_TABLE',
2552                       p_token_value2      => 'MSC_SYSTEM_ITEMS',
2553                       p_token3            => 'CHILD_TABLE',
2554                       p_token_value3      => 'MSD_ST_BOOKING_DATA');
2555 
2556       IF lv_return <> 0 THEN
2557         RAISE ex_logging_err;
2558       END IF;
2559 
2560       -- Validate item-org combination
2561       v_sql_stmt := 15;
2562 
2563       UPDATE msd_st_booking_data mbd
2564       SET    process_flag = G_ERROR_FLG,
2565              error_text   = lv_message_text
2566       WHERE NOT EXISTS(SELECT 1
2567                        FROM   msc_st_system_items msi
2568                        WHERE  msi.sr_instance_id                  = p_instance_id
2569                        AND    nvl(msi.company_name,lv_my_company) = lv_my_company
2570                        AND    msi.organization_id                 = mbd.sr_inv_org_pk
2571                        AND    msi.item_name                       = mbd.item
2572                        AND   ((v_plan_per_profile = 4) OR (msi.ato_forecast_control <> 3))        --forecast control - none
2573                        AND   ((msi.mrp_planning_code                <> 6 ) OR (msi.pick_components_flag='Y' ))                          --Not planned item
2574                        UNION
2575                        SELECT 1
2576                        FROM   msc_system_items mls
2577                        WHERE  mls.sr_instance_id                  = p_instance_id
2578                        AND    mls.organization_id                 = mbd.sr_inv_org_pk
2579                        AND    mls.item_name                       = mbd.item
2580                        AND    mls.plan_id                         = -1
2581                        AND   ((v_plan_per_profile = 4) OR (mls.ato_forecast_control <> 3))          --forecast control - none
2582                        AND   ((mls.mrp_planning_code                <> 6 ) OR (mls.pick_components_flag='Y' )))                           --Not planned item
2583       AND    mbd.process_flag           = G_IN_PROCESS
2584       AND    mbd.sr_instance_code       = p_instance_code
2585       AND    mbd.batch_id               = p_batch_id;
2586 
2587   END IF;
2588 
2589 
2590         -- Set the message
2591         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
2592                      (p_app_short_name    => 'MSC',
2593                       p_error_code        => 'MSC_PP_INVALID_VALUE',
2594                       p_message_text      => lv_message_text,
2595                       p_error_text        => lv_error_text,
2596                       p_token1            => 'COLUMN_NAME',
2597                       p_token_value1      => 'CUSTOMER');
2598 
2599       IF lv_return <> 0 THEN
2600         RAISE ex_logging_err;
2601       END IF;
2602 
2603      -- Derive sr_customer_pk from msd_st_level_values and msd_level_values
2604 
2605        lv_return :=  MSC_ST_UTIL.DERIVE_SR_PK
2606                        (p_table_name         => 'MSD_ST_BOOKING_DATA',
2607                         p_column_name        => 'CUSTOMER',
2608                         p_pk_col_name        => 'SR_CUSTOMER_PK',
2609                         p_level_id           => 15,
2610                         p_instance_code      => p_instance_code,
2611                         p_instance_id        => p_instance_id,
2612                         p_message_text       => lv_message_text,
2613                         p_batch_id           => lv_batch_id,
2614                         p_error_text         => lv_error_text);
2615 
2616         IF lv_return <> 0 THEN
2617             RAISE ex_logging_err;
2618         END IF;
2619 
2620         -- Set the message
2621         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
2622                      (p_app_short_name    => 'MSC',
2623                       p_error_code        => 'MSC_PP_INVALID_VALUE',
2624                       p_message_text      => lv_message_text,
2625                       p_error_text        => lv_error_text,
2626                       p_token1            => 'COLUMN_NAME',
2627                       p_token_value1      => 'SHIP_TO_LOC');
2628 
2629       IF lv_return <> 0 THEN
2630         RAISE ex_logging_err;
2631       END IF;
2632      -- Derive sr_ship_to_loc_pk from msd_st_level_values and msd_level_values
2633 
2634        lv_return :=  MSC_ST_UTIL.DERIVE_SR_PK
2635                        (p_table_name         => 'MSD_ST_BOOKING_DATA',
2636                         p_column_name        => 'SHIP_TO_LOC',
2637                         p_pk_col_name        => 'SR_SHIP_TO_LOC_PK',
2638                         p_level_id           =>  11,
2639                         p_instance_code      => p_instance_code,
2640                         p_instance_id        => p_instance_id,
2641                         p_message_text       => lv_message_text,
2642                         p_batch_id           => lv_batch_id,
2643                         p_severity           => G_SEV_ERROR,	-- Against Bug#2415379
2644                         p_error_text         => lv_error_text);
2645 
2646         IF lv_return <> 0 THEN
2647             RAISE ex_logging_err;
2648         END IF;
2649 
2650    IF (lv_instance_type <> G_INS_OTHER) THEN
2651 
2652        -- Set the message to validate customer-ship to location combination for ERP Data
2653       lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
2654                      (p_app_short_name    => 'MSC',
2655                       p_error_code        => 'MSC_PP_COL_REF_NOT_EXIST',
2656                       p_message_text      => lv_message_text,
2657                       p_error_text        => lv_error_text,
2658                       p_token1            => 'COLUMN_NAMES',
2659                       p_token_value1      => 'SR_INSTANCE_CODE AND'
2660                                              ||' CUSTOMER AND SHIP_TO_LOC',
2661                       p_token2            => 'MASTER_TABLE',
2662                       p_token_value2      => 'MSD_LEVEL_ASSOCIATIONS',
2663                       p_token3            => 'CHILD_TABLE',
2664                       p_token_value3      => 'MSD_ST_BOOKING_DATA');
2665 
2666       IF lv_return <> 0 THEN
2667         RAISE ex_logging_err;
2668       END IF;
2669 
2670 
2671       -- Validate customer-ship to location combination for ERP Data
2672       UPDATE msd_st_booking_data mbd
2673       SET    process_flag = G_ERROR_FLG,
2674              error_text   = lv_message_text
2675       WHERE NOT EXISTS(SELECT 1
2676                        FROM   msd_st_level_associations msla
2677                        WHERE  msla.level_id         = 11
2678                        AND    msla.parent_level_id  = 15
2679                        AND    mbd.sr_customer_pk    = msla.sr_parent_level_pk
2680                        AND    mbd.sr_ship_to_loc_pk = msla.sr_level_pk
2681                        AND    msla.instance      = p_instance_id
2682                        UNION ALL
2683                        SELECT 1
2684                        FROM   msd_level_associations mla
2685                        WHERE  mla.level_id          = 11
2686                        AND    mla.parent_level_id   = 15
2687                        AND    mbd.sr_customer_pk    = mla.sr_parent_level_pk
2688                        AND    mbd.sr_ship_to_loc_pk = mla.sr_level_pk
2689                        AND    mla.instance       = p_instance_id)
2690       AND    mbd.process_flag                    = G_IN_PROCESS
2691       AND    mbd.sr_instance_code                = p_instance_code
2692       AND    mbd.batch_id                        = p_batch_id;
2693 
2694 
2695    END IF;
2696 
2697 
2698         -- Set the message
2699         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
2700                      (p_app_short_name    => 'MSC',
2701                       p_error_code        => 'MSC_PP_INVALID_VALUE',
2702                       p_message_text      => lv_message_text,
2703                       p_error_text        => lv_error_text,
2704                       p_token1            => 'COLUMN_NAME',
2705                       p_token_value1      => 'SALES_CHANNEL');
2706 
2707       IF lv_return <> 0 THEN
2708         RAISE ex_logging_err;
2709       END IF;
2710 
2711      -- Derive sr_sales_channel_pk from msd_st_level_values and msd_level_values
2712 
2713        lv_return :=  MSC_ST_UTIL.DERIVE_SR_PK
2714                        (p_table_name         => 'MSD_ST_BOOKING_DATA',
2715                         p_column_name        => 'SALES_CHANNEL',
2716                         p_pk_col_name        => 'SR_SALES_CHANNEL_PK',
2717                         p_level_id           =>  27,
2718                         p_instance_code      => p_instance_code,
2719                         p_instance_id        => p_instance_id,
2720                         p_message_text       => lv_message_text,
2721                         p_batch_id           => lv_batch_id,
2722                         p_severity           => G_SEV_ERROR,	-- Against Bug#2415379
2723                         p_error_text         => lv_error_text);
2724 
2725         IF lv_return <> 0 THEN
2726             RAISE ex_logging_err;
2727         END IF;
2728 
2729         -- Set the message
2730         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
2731                      (p_app_short_name    => 'MSC',
2732                       p_error_code        => 'MSC_PP_INVALID_VALUE',
2733                       p_message_text      => lv_message_text,
2734                       p_error_text        => lv_error_text,
2735                       p_token1            => 'COLUMN_NAME',
2736                       p_token_value1      => 'SALES_REP');
2737 
2738       IF lv_return <> 0 THEN
2739         RAISE ex_logging_err;
2740       END IF;
2741      -- Derive sr_sales_rep_pk from msd_st_level_values and msd_level_values
2742 
2743        lv_return :=  MSC_ST_UTIL.DERIVE_SR_PK
2744                        (p_table_name         => 'MSD_ST_BOOKING_DATA',
2745                         p_column_name        => 'SALES_REP',
2746                         p_pk_col_name        => 'SR_SALES_REP_PK',
2747                         p_level_id           =>  18,
2748                         p_instance_code      =>  p_instance_code,
2749                         p_instance_id        =>  p_instance_id,
2750                         p_message_text       => lv_message_text,
2751                         p_batch_id           => lv_batch_id,
2752                         p_severity           => G_SEV_ERROR,	-- Against Bug#2415379
2753                         p_error_text         => lv_error_text);
2754 
2755         IF lv_return <> 0 THEN
2756             RAISE ex_logging_err;
2757         END IF;
2758 
2759 -- Demand Class changes for Booking Data starts
2760       -- Set the message
2761         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
2762                      (p_app_short_name    => 'MSC',
2763                       p_error_code        => 'MSC_PP_INVALID_VALUE',
2764                       p_message_text      => lv_message_text,
2765                       p_error_text        => lv_error_text,
2766                       p_token1            => 'COLUMN_NAME',
2767                       p_token_value1      => 'DEMAND_CLASS_LVL_VAL');
2768 
2769       IF lv_return <> 0 THEN
2770         RAISE ex_logging_err;
2771       END IF;
2772 
2773      -- Derive sr_sales_channel_pk from msd_st_level_values and msd_level_values
2774 
2775        lv_return :=  MSC_ST_UTIL.DERIVE_SR_PK
2776                        (p_table_name         => 'MSD_ST_BOOKING_DATA',
2777                         p_column_name        => 'DEMAND_CLASS_LVL_VAL',
2778                         p_pk_col_name        => 'SR_DEMAND_CLASS_PK',
2779                         p_level_id           =>  34,
2780                         p_instance_code      => p_instance_code,
2781                         p_instance_id        => p_instance_id,
2782                         p_message_text       => lv_message_text,
2783                         p_batch_id           => lv_batch_id,
2784                         p_severity           => G_SEV3_ERROR,	-- Against Bug#2415379
2785                         p_error_text         => lv_error_text);
2786 
2787         IF lv_return <> 0 THEN
2788             RAISE ex_logging_err;
2789         END IF;
2790 
2791  -- Demand Class changes for Booking Data ends
2792 
2793           -- Set the message
2794         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
2795                      (p_app_short_name    => 'MSC',
2796                       p_error_code        => 'MSC_PP_INVALID_VALUE',
2797                       p_message_text      => lv_message_text,
2798                       p_error_text        => lv_error_text,
2799                       p_token1            => 'COLUMN_NAME',
2800                       p_token_value1      => 'PARENT_ITEM');
2801 
2802       IF lv_return <> 0 THEN
2803         RAISE ex_logging_err;
2804       END IF;
2805 
2806      -- Derive sr_parent_item_pk from msd_st_level_values and msd_level_values
2807 
2808        lv_return :=  MSC_ST_UTIL.DERIVE_SR_PK
2809                        (p_table_name         => 'MSD_ST_BOOKING_DATA',
2810                         p_column_name        => 'PARENT_ITEM',
2811                         p_pk_col_name        => 'SR_PARENT_ITEM_PK',
2812                         p_level_id           =>  1,
2813                         p_instance_code      =>  p_instance_code,
2814                         p_instance_id        =>  p_instance_id,
2815                         p_message_text       => lv_message_text,
2816                         p_batch_id           => lv_batch_id,
2817                         p_severity           => G_SEV3_ERROR,    -- Against Bug#2415379
2818                         p_error_text         => lv_error_text);
2819 
2820         IF lv_return <> 0 THEN
2821             RAISE ex_logging_err;
2822         END IF;
2823 
2824 
2825       -- set the message, USER_DEFINED1 is invalid
2826 
2827         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
2828                      (p_app_short_name    => 'MSC',
2829                       p_error_code        => 'MSC_PP_INVALID_VALUE',
2830                       p_message_text      => lv_message_text,
2831                       p_error_text        => lv_error_text,
2832                       p_token1            => 'COLUMN_NAME',
2833                       p_token_value1      => 'USER_DEFINED1');
2834 
2835       IF lv_return <> 0 THEN
2836         RAISE ex_logging_err;
2837       END IF;
2838 
2839      -- Derive SR_USER_DEFINED1_LVL_PK
2840 
2841        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_PK
2842                     (p_table_name      => 'MSD_ST_BOOKING_DATA',
2843                      p_level_val_col   => 'USER_DEFINED1',
2844                      p_level_name_col  => 'USER_DEFINED_LEVEL1',
2845                      p_level_pk_col    => 'SR_USER_DEFINED1_PK',
2846                      p_instance_code   => p_instance_code,
2847                      p_instance_id     => p_instance_id,
2848                      p_message_text    => lv_message_text,
2849                      p_batch_id        => lv_batch_id,
2850                      p_error_text      => lv_error_text);
2851 
2852       IF lv_return <> 0 THEN
2853         RAISE ex_logging_err;
2854       END IF;
2855 
2856       -- set the message, USER_DEFINED2 is invalid
2857 
2858         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
2859                      (p_app_short_name    => 'MSC',
2860                       p_error_code        => 'MSC_PP_INVALID_VALUE',
2861                       p_message_text      => lv_message_text,
2862                       p_error_text        => lv_error_text,
2863                       p_token1            => 'COLUMN_NAME',
2864                       p_token_value1      => 'USER_DEFINED2');
2865 
2866       IF lv_return <> 0 THEN
2867         RAISE ex_logging_err;
2868       END IF;
2869 
2870      -- Derive SR_USER_DEFINED2_LVL_PK
2871 
2872        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_PK
2873                     (p_table_name      => 'MSD_ST_BOOKING_DATA',
2874                      p_level_val_col   => 'USER_DEFINED2',
2875                      p_level_name_col  => 'USER_DEFINED_LEVEL2',
2876                      p_level_pk_col    => 'SR_USER_DEFINED2_PK',
2877                      p_instance_code   => p_instance_code,
2878                      p_instance_id     => p_instance_id,
2879                      p_message_text    => lv_message_text,
2880                      p_batch_id        => lv_batch_id,
2881                      p_error_text      => lv_error_text);
2882 
2883       IF lv_return <> 0 THEN
2884         RAISE ex_logging_err;
2885       END IF;
2886 
2887      -- Set the message
2888         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
2889                      (p_app_short_name    => 'MSC',
2890                       p_error_code        => 'MSC_PP_COL_VAL_NULL',
2891                       p_message_text      => lv_message_text,
2892                       p_error_text        => lv_error_text,
2893                       p_token1            => 'COLUMN_NAME',
2894                       p_token_value1      => 'BOOKED_DATE');
2895 
2896       IF lv_return <> 0 THEN
2897         RAISE ex_logging_err;
2898       END IF;
2899 
2900        --booked_date cannot be null.
2901       v_sql_stmt := 07;
2902 
2903     lv_sql_Stmt:=
2904     'UPDATE     msd_st_booking_data '
2905     ||' SET     process_flag              ='||G_ERROR_FLG||','
2906     ||'         error_text   = '||''''||lv_message_text||''''
2907     ||' WHERE   NVL(booked_date,(sysdate-36500))  = (sysdate-36500)'
2908     ||' AND     process_flag              ='|| G_IN_PROCESS
2909     ||' AND     batch_id                  = :lv_batch_id'
2910     ||' AND     sr_instance_code          = :p_instance_code';
2911 
2912     IF lv_debug THEN
2913            msc_st_util.log_message(lv_sql_stmt);
2914     END IF;
2915 
2916    EXECUTE IMMEDIATE lv_sql_stmt
2917                USING lv_batch_id,
2918                      p_instance_code ;
2919 
2920       --Call to customised validation.
2921       MSC_CL_PRE_PROCESS_HOOK.ENTITY_VALIDATION
2922         (ERRBUF         => lv_error_text,
2923          RETCODE        => lv_return,
2924          pBatchID       => null,
2925          pInstanceCode  => p_instance_code,
2926          pEntityName    => 'MSD_ST_BOOKING_DATA',
2927          pInstanceID    => p_instance_id);
2928 
2929       IF lv_return <> 0 THEN
2930         RAISE ex_logging_err;
2931       END IF;
2932 
2933      -- Set the process flag as Valid and populate instance_id
2934       lv_return := MSC_ST_UTIL.SET_PROCESS_FLAG
2935                         (p_table_name     => 'MSD_ST_BOOKING_DATA',
2936                          p_instance_id    => p_instance_id,
2937                          p_instance_code  => p_instance_code,
2938                          p_process_flag   => G_VALID,
2939                          p_error_text     => lv_error_text,
2940                          p_batch_id       => lv_batch_id,
2941                          p_instance_id_col=> 'INSTANCE');
2942 
2943       IF lv_return <> 0 THEN
2944         RAISE ex_logging_err;
2945       END IF;
2946 
2947     -- Inserting all the errored out records into MSC_ERRORS:
2948 
2949       lv_return := MSC_ST_UTIL.LOG_ERROR
2950                    (p_table_name        => 'MSD_ST_BOOKING_DATA',
2951                     p_instance_code     => p_instance_code,
2952                     p_row               => lv_column_names,
2953                     p_severity          => G_SEV_ERROR,
2954                     p_error_text        => lv_error_text,
2955                     p_message_text      => NULL,
2956                     p_batch_id          => lv_batch_id);
2957 
2958       IF(lv_return <> 0) THEN
2959         msc_st_util.log_message(lv_error_text);
2960       END IF;
2961       COMMIT;
2962 
2963     EXCEPTION
2964      WHEN ex_logging_err THEN
2965         ROLLBACK;
2966 
2967         ERRBUF := lv_error_text;
2968         RETCODE := G_WARNING;
2969         msc_st_util.log_message(lv_error_text);
2970 
2971     WHEN OTHERS THEN
2972       ROLLBACK;
2973 
2974       lv_error_text    := substr('MSD_CL_PRE_PROCESS.LOAD_BOOKING_DATA '||'('
2975                        ||v_sql_stmt||')'|| SQLERRM, 1, 240);
2976       msc_st_util.log_message(lv_error_text);
2977       ERRBUF := lv_error_text;
2978       RETCODE := G_WARNING;
2979 
2980   END LOAD_BOOKING_DATA ;
2981 
2982   /*==========================================================================+
2983   | DESCRIPTION  : This function performs the validation and loads the data   |
2984   |                for business object shipment  data                         |
2985   +==========================================================================*/
2986 
2987   PROCEDURE LOAD_SHIPMENT_DATA(ERRBUF          OUT NOCOPY VARCHAR,
2988                                RETCODE         OUT NOCOPY NUMBER,
2989                                p_instance_code IN VARCHAR,
2990                                p_instance_id   IN NUMBER,
2991                                p_batch_id      IN NUMBER)
2992   IS
2993   TYPE RowidTab IS TABLE OF ROWID INDEX BY BINARY_INTEGER;
2994   lb_rowid          RowidTab;
2995 /*  lb_rowid1         RowidTab;  Bug3749959 */
2996   lv_sql_stmt       VARCHAR2(4000);
2997   lv_batch_id       msd_st_shipment_data.batch_id%TYPE;
2998   lv_message_text   msc_errors.error_text%TYPE;
2999   lv_my_company     msc_companies.company_name%TYPE := GET_MY_COMPANY;
3000   lv_error_text     VARCHAR2(250);
3001   lv_debug          BOOLEAN   := msc_cl_pre_process.v_debug;
3002   lv_batch_size     NUMBER    := msc_cl_pre_process.v_batch_size;
3003   lv_current_user   NUMBER    := msc_cl_pre_process.v_current_user;
3004   lv_current_date   DATE      := msc_cl_pre_process.v_current_date;
3005   lv_return         NUMBER := 0;
3006   ex_logging_err    EXCEPTION;
3007   lv_column_names   VARCHAR2(5000);
3008 /*
3009   lv_other_desc   varchar2(240) := NULL;   --Adding this to insert level value - 'Others'
3010   lv_all_dcs_desc varchar2(240) := NULL;   --Adding this to insert level value - 'All Demand Classes'
3011 Bug3749959 */
3012   lv_instance_type  msc_apps_instances.instance_type%TYPE;
3013 
3014 /*  lv_other_exist NUMBER :=0;
3015   lv_all_dcs_pk NUMBER :=0;    --Renamed 'lv_sr_level_pk' to 'lv_all_dcs_pk'.
3016 Bug3749959 */
3017 
3018   CURSOR instance_type IS
3019    SELECT instance_type
3020    FROM msc_apps_instances
3021    WHERE instance_id=p_instance_id;
3022 
3023   CURSOR c1(p_batch_id NUMBER)IS
3024     SELECT rowid
3025     FROM   msd_st_shipment_data
3026     WHERE  process_flag      IN (G_IN_PROCESS,G_ERROR_FLG)
3027     AND    sr_instance_code = p_instance_code
3028     AND    batch_id         = p_batch_id;
3029 /*
3030   CURSOR c2(p_batch_id NUMBER)IS
3031     SELECT rowid
3032     FROM   msd_st_shipment_data
3033     WHERE  process_flag      IN (G_IN_PROCESS,G_ERROR_FLG)
3034     AND    nvl(DEMAND_CLASS_LVL_VAL,'-1') = '-1'
3035     AND    sr_instance_code = p_instance_code
3036     AND    batch_id         = p_batch_id;
3037 
3038    cursor c3 (p_instance varchar2) is
3039     select count(*) from MSD_LEVEL_VALUES
3040     where LEVEL_ID = 34
3041     and   instance = p_instance
3042     and   SR_LEVEL_PK = to_char(v_null_pk);  --Using global variable v_null_pk insteda of hardcoding -777 at multiple places.
3043 
3044    cursor c4 (p_instance_code varchar2) is
3045     select local_id from msd_local_id_setup
3046     where char1    = p_instance_code
3047     -- and   char2    = 'All Demand Classes'
3048     and   level_id = 40;
3049 Bug3749959 */
3050 
3051    BEGIN
3052 
3053       lv_batch_id := p_batch_id;
3054 
3055       lv_column_names :=
3056 
3057 		'       SR_INSTANCE_CODE	||''~''||'
3058 		||'	INV_ORG			||''~''||'
3059 		||'	ITEM			||''~''||'
3060 		||'	CUSTOMER		||''~''||'
3061 		||'	SALES_CHANNEL		||''~''||'
3062 		||'	SALES_REP		||''~''||'
3063 		||'	SHIP_TO_LOC		||''~''||'
3064 		||'	PARENT_ITEM		||''~''||'
3065 		||'	USER_DEFINED_LEVEL1	||''~''||'
3066 		||'	USER_DEFINED1		||''~''||'
3067 		||'	USER_DEFINED_LEVEL2	||''~''||'
3068 		||'	USER_DEFINED2		||''~''||'
3069 		||'	BOOKED_DATE		||''~''||'
3070 		||'	REQUESTED_DATE		||''~''||'
3071 		||'	PROMISED_DATE		||''~''||'
3072 		||'	SHIPPED_DATE		||''~''||'
3073 		||'	AMOUNT			||''~''||'
3074 		||'	QTY_SHIPPED		||''~''||'
3075 		||'	ORIGINAL_ITEM';
3076 
3077       OPEN  c1(lv_batch_id);
3078       FETCH c1 BULK COLLECT INTO lb_rowid;
3079       CLOSE c1;
3080 
3081       v_sql_stmt := 04;
3082       FORALL j IN lb_rowid.FIRST..lb_rowid.LAST
3083       UPDATE msd_st_shipment_data
3084       SET  st_transaction_id = msd_st_shipment_data_s.NEXTVAL,
3085            last_update_date  = lv_current_date,
3086            last_updated_by   = lv_current_user,
3087            creation_date     = lv_current_date,
3088            created_by        = lv_current_user
3089       WHERE  rowid           = lb_rowid(j);
3090 /*
3091       OPEN  c2(lv_batch_id);
3092        FETCH c2 BULK COLLECT INTO lb_rowid1;
3093       CLOSE c2;
3094 
3095    IF ( lb_rowid1.COUNT <> 0 ) THEN
3096 
3097       lv_other_desc    := msd_sr_util.get_null_desc;    --Calling fuction - msd_sr_util.get_null_desc, to fetch the level value 'Others'
3098       lv_all_dcs_desc  := msd_sr_util.get_all_dcs_desc; --Calling fuction - msd_sr_util.get_all_dcs_desc, to fetch the level value 'All Demand Classes'
3099 
3100       v_sql_stmt := 05;
3101       FORALL j IN lb_rowid1.FIRST..lb_rowid1.LAST
3102       UPDATE msd_st_shipment_data
3103       SET  DEMAND_CLASS_LVL_VAL  = lv_other_desc  --Using the value fetched from function - msd_sr_util.get_null_desc
3104       WHERE  rowid               = lb_rowid1(j);
3105 
3106 
3107 
3108       OPEN c3(p_instance_id);
3109        FETCH c3 into lv_other_exist;
3110       CLOSE c3;
3111 
3112       IF  lv_other_exist = 0 THEN
3113         INSERT INTO MSD_ST_LEVEL_VALUES
3114         (INSTANCE   ,
3115         LEVEL_ID,
3116         LEVEL_VALUE,
3117         SR_LEVEL_PK,
3118         ATTRIBUTE1,
3119         ATTRIBUTE2,
3120         ATTRIBUTE3,
3121         ATTRIBUTE4,
3122         ATTRIBUTE5,
3123         LAST_UPDATE_DATE,
3124         LAST_UPDATED_BY,
3125         CREATION_DATE,
3126         CREATED_BY,
3127         LAST_UPDATE_LOGIN,
3128         REQUEST_ID,
3129         PROGRAM_APPLICATION_ID,
3130         PROGRAM_ID,
3131         PROGRAM_UPDATE_DATE )
3132         VALUES
3133         (p_instance_id,
3134         34,
3135         lv_other_desc,   --Using the value fetched from function - msd_sr_util.get_null_desc
3136         to_char(v_null_pk), --Using global variable v_null_pk insteda of hardcoding -777 at multiple places.
3137         NULL,
3138         NULL,
3139         NULL,
3140         NULL,
3141         NULL,
3142         sysdate,
3143         -1,
3144         sysdate,
3145         -1,
3146         -1,
3147         -1,
3148         -1,
3149         -1,
3150         sysdate);
3151 
3152       END IF;
3153 
3154     OPEN c4(p_instance_code);
3155      FETCH c4 into lv_all_dcs_pk;  --Renamed 'lv_sr_level_pk' to 'lv_all_dcs_pk'.
3156     CLOSE c4;
3157 
3158      IF lv_all_dcs_pk = 0  THEN  --Renamed 'lv_sr_level_pk' to 'lv_all_dcs_pk'.
3159 
3160         lv_all_dcs_pk := msd_sr_util.get_all_dcs_pk; -- Fetching the SR_LEVEL_PK for 'ALL Demand Classes' level value from function - msd_sr_util.get_all_dcs_pk
3161 
3162         INSERT INTO  msd_local_id_setup   --  insert into msd_local_id_setup
3163           (local_id,
3164            instance_id,
3165            level_id,
3166            char1,
3167            char2,
3168            last_update_date,
3169            last_updated_by,
3170            creation_date,
3171            created_by  )
3172            VALUES
3173            (lv_all_dcs_pk,  --Renamed 'lv_sr_level_pk' to 'lv_all_dcs_pk'.
3174             p_instance_id,
3175             40,
3176             p_instance_code,
3177             lv_all_dcs_desc,   --Using the value fetched from function - msd_sr_util.get_all_dcs_desc
3178             sysdate,
3179             -1,
3180             sysdate,
3181             -1);
3182 
3183     -- lv_sr_level_pk := -6;     -- Inserting 'All Demand Classes' records with sr_level_pk as -6
3184 
3185 
3186      INSERT INTO MSD_ST_LEVEL_VALUES   --Inserting into MSD_ST_LEVEL_VALUES
3187        (INSTANCE   ,
3188         LEVEL_ID,
3189         LEVEL_VALUE,
3190         SR_LEVEL_PK,
3191         ATTRIBUTE1,
3192         ATTRIBUTE2,
3193         ATTRIBUTE3,
3194         ATTRIBUTE4,
3195         ATTRIBUTE5,
3196         LAST_UPDATE_DATE,
3197         LAST_UPDATED_BY,
3198         CREATION_DATE,
3199         CREATED_BY,
3200         LAST_UPDATE_LOGIN,
3201         REQUEST_ID,
3202         PROGRAM_APPLICATION_ID,
3203         PROGRAM_ID,
3204         PROGRAM_UPDATE_DATE )
3205         VALUES
3206         (p_instance_id,
3207         40,
3208         lv_all_dcs_desc,   --Using the value fetched from function - msd_sr_util.get_all_dcs_desc
3209         lv_all_dcs_pk,     --Renamed 'lv_sr_level_pk' to 'lv_all_dcs_pk'.
3210         NULL,
3211         NULL,
3212         NULL,
3213         NULL,
3214         NULL,
3215         sysdate,
3216         -1,
3217         sysdate,
3218         -1,
3219         -1,
3220         -1,
3221         -1,
3222         -1,
3223         sysdate);
3224 
3225 
3226           --   Insert into msd_st_level_associations.
3227 
3228       INSERT INTO MSD_ST_LEVEL_ASSOCIATIONS
3229         (INSTANCE   ,
3230         LEVEL_ID,
3231         SR_LEVEL_PK,
3232         PARENT_LEVEL_ID,
3233         SR_PARENT_LEVEL_PK,
3234         ATTRIBUTE1,
3235         ATTRIBUTE2,
3236         ATTRIBUTE3,
3237         ATTRIBUTE4,
3238         ATTRIBUTE5,
3239         LAST_UPDATE_DATE,
3240         LAST_UPDATED_BY,
3241         CREATION_DATE,
3242         CREATED_BY,
3243         LAST_UPDATE_LOGIN,
3244         REQUEST_ID,
3245         PROGRAM_APPLICATION_ID,
3246         PROGRAM_ID,
3247         PROGRAM_UPDATE_DATE )
3248         VALUES
3249         (p_instance_id,
3250         34,
3251         to_char(v_null_pk),  --Using global variable v_null_pk insteda of hardcoding -777 at multiple places.
3252         40,
3253         lv_all_dcs_pk,   --Renamed 'lv_sr_level_pk' to 'lv_all_dcs_pk'.
3254         NULL,
3255         NULL,
3256         NULL,
3257         NULL,
3258         NULL,
3259         sysdate,
3260         -1,
3261         sysdate,
3262         -1,
3263         -1,
3264         -1,
3265         -1,
3266         -1,
3267         sysdate);
3268 
3269      END IF;
3270 
3271   END IF;
3272 Bug3749959 */
3273 
3274       OPEN instance_type;
3275         FETCH instance_type into lv_instance_type;
3276       CLOSE instance_type;
3277 
3278     IF (lv_instance_type = G_INS_OTHER) THEN
3279 
3280       -- Set the message to validate customer-ship to location combination
3281       lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
3282                      (p_app_short_name    => 'MSC',
3283                       p_error_code        => 'MSC_PP_COL_REF_NOT_EXIST',
3284                       p_message_text      => lv_message_text,
3285                       p_error_text        => lv_error_text,
3286                       p_token1            => 'COLUMN_NAMES',
3287                       p_token_value1      => 'SR_INSTANCE_CODE AND'
3288                                              ||' CUSTOMER AND SHIP_TO_LOC',
3289                       p_token2            => 'MASTER_TABLE',
3290                       p_token_value2      => 'MSC_TRADING_PARTNER_SITES',
3291                       p_token3            => 'CHILD_TABLE',
3292                       p_token_value3      => 'MSD_ST_SHIPMENT_DATA');
3293 
3294       IF lv_return <> 0 THEN
3295         RAISE ex_logging_err;
3296       END IF;
3297 
3298       -- Validate customer-ship to location combination
3299       v_sql_stmt := 15;
3300       UPDATE msd_st_shipment_data msd
3301       SET    process_flag = G_ERROR_FLG,
3302              error_text   = lv_message_text
3303       WHERE NOT EXISTS(SELECT 1
3304                        FROM   msc_local_id_setup mls
3305                        WHERE  mls.char1                   =  msd.sr_instance_code
3306                        AND    nvl(mls.char2,lv_my_company) = lv_my_company
3307                        AND    mls.char3                   = msd.customer
3308                        AND    mls.char4                   = msd.ship_to_loc
3309                        AND    mls.number1                 = 2                --customer
3310                        AND    mls.entity_name             = 'SR_TP_SITE_ID')
3311       AND    msd.process_flag               = G_IN_PROCESS
3312       AND    msd.sr_instance_code           = p_instance_code
3313       AND    msd.batch_id                   = p_batch_id;
3314 
3315    END IF;
3316 
3317 
3318         -- Set the message
3319         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
3320                      (p_app_short_name    => 'MSC',
3321                       p_error_code        => 'MSC_PP_INVALID_VALUE',
3322                       p_message_text      => lv_message_text,
3323                       p_error_text        => lv_error_text,
3324                       p_token1            => 'COLUMN_NAME',
3325                       p_token_value1      => 'ITEM');
3326 
3327       IF lv_return <> 0 THEN
3328         RAISE ex_logging_err;
3329       END IF;
3330 
3331      -- Derive sr_item_pk from msd_st_level_values and msd_level_values
3332 
3333        lv_return :=  MSC_ST_UTIL.DERIVE_SR_PK
3334                        (p_table_name         => 'MSD_ST_SHIPMENT_DATA',
3335                         p_column_name        => 'ITEM',
3336                         p_pk_col_name        => 'SR_ITEM_PK',
3337                         p_level_id           => 1,
3338                         p_instance_code      => p_instance_code,
3339                         p_instance_id        => p_instance_id,
3340                         p_message_text       => lv_message_text,
3341                         p_batch_id           => lv_batch_id,
3342                         p_severity           => G_SEV_ERROR,	-- Against Bug#2415379
3343                         p_error_text         => lv_error_text);
3344 
3345         IF lv_return <> 0 THEN
3346             RAISE ex_logging_err;
3347         END IF;
3348 
3349       -- Code generated against the bug number : 2357511
3350 
3351       v_sql_stmt := 07;
3352 
3353       lv_sql_Stmt:=
3354       'UPDATE     MSD_ST_SHIPMENT_DATA '
3355       ||' SET     ORIGINAL_ITEM      =ITEM '
3356       ||' WHERE   ORIGINAL_ITEM IS NULL '
3357       ||' AND     process_flag              ='|| G_IN_PROCESS
3358       ||' AND     batch_id                  = :lv_batch_id'
3359       ||' AND     sr_instance_code          = :p_instance_code';
3360 
3361       IF lv_debug THEN
3362           msc_st_util.log_message(lv_sql_stmt);
3363       END IF;
3364 
3365      EXECUTE IMMEDIATE lv_sql_stmt
3366                USING lv_batch_id,
3367                      p_instance_code ;
3368 
3369 
3370         -- Set the message
3371         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
3372                      (p_app_short_name    => 'MSC',
3373                       p_error_code        => 'MSC_PP_INVALID_VALUE',
3374                       p_message_text      => lv_message_text,
3375                       p_error_text        => lv_error_text,
3376                       p_token1            => 'COLUMN_NAME',
3377                       p_token_value1      => 'ORIGINAL_ITEM');
3378 
3379       IF lv_return <> 0 THEN
3380         RAISE ex_logging_err;
3381       END IF;
3382 
3383      -- Derive sr_original_item_pk from msd_st_level_values and msd_level_values
3384 
3385        lv_return :=  MSC_ST_UTIL.DERIVE_SR_PK
3386                        (p_table_name         => 'MSD_ST_SHIPMENT_DATA',
3387                         p_column_name        => 'ORIGINAL_ITEM',
3388                         p_pk_col_name        => 'SR_ORIGINAL_ITEM_PK',
3389                         p_level_id           => 1,
3390                         p_instance_code      => p_instance_code,
3391                         p_instance_id        => p_instance_id,
3392                         p_message_text       => lv_message_text,
3393                         p_batch_id           => lv_batch_id,
3394                         p_severity           => G_SEV_ERROR,	-- Against Bug#2415379
3395                         p_error_text         => lv_error_text);
3396 
3397         IF lv_return <> 0 THEN
3398             RAISE ex_logging_err;
3399         END IF;
3400 
3401          -- Set the message
3402         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
3403                      (p_app_short_name    => 'MSC',
3404                       p_error_code        => 'MSC_PP_INVALID_VALUE',
3405                       p_message_text      => lv_message_text,
3406                       p_error_text        => lv_error_text,
3407                       p_token1            => 'COLUMN_NAME',
3408                       p_token_value1      => 'INV_ORG');
3409 
3410       IF lv_return <> 0 THEN
3411         RAISE ex_logging_err;
3412       END IF;
3413 
3414      -- Derive sr_inv_org_pk from msd_st_level_values and msd_level_values
3415 
3416        lv_return :=  MSC_ST_UTIL.DERIVE_SR_PK
3417                        (p_table_name         => 'MSD_ST_SHIPMENT_DATA',
3418                         p_column_name        => 'INV_ORG',
3419                         p_pk_col_name        => 'SR_INV_ORG_PK',
3420                         p_level_id           => 7,
3421                         p_instance_code      => p_instance_code,
3422                         p_instance_id        =>  p_instance_id,
3423                         p_message_text       => lv_message_text,
3424                         p_batch_id           => lv_batch_id,
3425                         p_severity           => G_SEV_ERROR,	-- Against Bug#2415379
3426                         p_error_text         => lv_error_text);
3427 
3428         IF lv_return <> 0 THEN
3429             RAISE ex_logging_err;
3430         END IF;
3431 
3432   IF (lv_instance_type = G_INS_OTHER) THEN
3433 
3434       lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
3435                      (p_app_short_name    => 'MSC',
3436                       p_error_code        => 'MSC_PP_COL_REF_NOT_EXIST',
3437                       p_message_text      => lv_message_text,
3438                       p_error_text        => lv_error_text,
3439                       p_token1            => 'COLUMN_NAMES',
3440                       p_token_value1      => 'SR_INSTANCE_CODE AND'
3441                                              ||' INV_ORG AND ITEM AND ITEM.ATO_FORECAST_CONTROL'
3442                                              ||' AND ITEM.MRP_PLANNING_CODE',
3443                       p_token2            => 'MASTER_TABLE',
3444                       p_token_value2      => 'MSC_SYSTEM_ITEMS',
3445                       p_token3            => 'CHILD_TABLE',
3446                       p_token_value3      => 'MSD_ST_SHIPMENT_DATA');
3447 
3448       IF lv_return <> 0 THEN
3449         RAISE ex_logging_err;
3450       END IF;
3451 
3452       -- Validate item-org combination
3453       v_sql_stmt := 15;
3454 
3455       UPDATE msd_st_shipment_data msd
3456       SET    process_flag = G_ERROR_FLG,
3457              error_text   = lv_message_text
3458       WHERE NOT EXISTS(SELECT 1
3459                        FROM   msc_st_system_items msi
3460                        WHERE  msi.sr_instance_id                  = p_instance_id
3461                        AND    nvl(msi.company_name,lv_my_company) = lv_my_company
3462                        AND    msi.organization_id                 = msd.sr_inv_org_pk
3463                        AND    msi.item_name                       = msd.item
3464                        AND   ((v_plan_per_profile = 4) OR (msi.ato_forecast_control <> 3))        --forecast control - none
3465                        AND   ((msi.mrp_planning_code                <> 6 ) OR (msi.pick_components_flag='Y' ))                         --Not planned item
3466                        UNION
3467                        SELECT 1
3468                        FROM   msc_system_items mls
3469                        WHERE  mls.sr_instance_id                  = p_instance_id
3470                        AND    mls.organization_id                 = msd.sr_inv_org_pk
3471                        AND    mls.item_name                       = msd.item
3472                        AND    mls.plan_id                         = -1
3473                        AND   ((v_plan_per_profile = 4) OR (mls.ato_forecast_control <> 3))        --forecast control - none
3474                        AND   ((mls.mrp_planning_code                <> 6 ) OR (mls.pick_components_flag='Y' )) )                        --Not planned item
3475       AND    msd.process_flag            = G_IN_PROCESS
3476       AND    msd.sr_instance_code        = p_instance_code
3477       AND    msd.batch_id                = p_batch_id;
3478 
3479    END IF;
3480 
3481         -- Set the message
3482         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
3483                      (p_app_short_name    => 'MSC',
3484                       p_error_code        => 'MSC_PP_INVALID_VALUE',
3485                       p_message_text      => lv_message_text,
3486                       p_error_text        => lv_error_text,
3487                       p_token1            => 'COLUMN_NAME',
3488                       p_token_value1      => 'CUSTOMER');
3489 
3490       IF lv_return <> 0 THEN
3491         RAISE ex_logging_err;
3492       END IF;
3493 
3494      -- Derive sr_customer_pk from msd_st_level_values and msd_level_values
3495 
3496        lv_return :=  MSC_ST_UTIL.DERIVE_SR_PK
3497                        (p_table_name         => 'MSD_ST_SHIPMENT_DATA',
3498                         p_column_name        => 'CUSTOMER',
3499                         p_pk_col_name        => 'SR_CUSTOMER_PK',
3500                         p_level_id           =>  15,
3501                         p_instance_code      => p_instance_code,
3502                         p_instance_id        => p_instance_id,
3503                         p_message_text       => lv_message_text,
3504                         p_batch_id           => lv_batch_id,
3505                         p_error_text         => lv_error_text);
3506 
3507         IF lv_return <> 0 THEN
3508             RAISE ex_logging_err;
3509         END IF;
3510 
3511         -- Set the message
3512         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
3513                      (p_app_short_name    => 'MSC',
3514                       p_error_code        => 'MSC_PP_INVALID_VALUE',
3515                       p_message_text      => lv_message_text,
3516                       p_error_text        => lv_error_text,
3517                       p_token1            => 'COLUMN_NAME',
3518                       p_token_value1      => 'SHIP_TO_LOC');
3519 
3520       IF lv_return <> 0 THEN
3521         RAISE ex_logging_err;
3522       END IF;
3523 
3524      -- Derive sr_ship_to_loc_pk from msd_st_level_values and msd_level_values
3525 
3526        lv_return :=  MSC_ST_UTIL.DERIVE_SR_PK
3527                        (p_table_name         => 'MSD_ST_SHIPMENT_DATA',
3528                         p_column_name        => 'SHIP_TO_LOC',
3529                         p_pk_col_name        => 'SR_SHIP_TO_LOC_PK',
3530                         p_level_id           =>  11,
3531                         p_instance_code      => p_instance_code,
3532                         p_instance_id        => p_instance_id,
3533                         p_message_text       => lv_message_text,
3534                         p_batch_id           => lv_batch_id,
3535                         p_severity           => G_SEV_ERROR,	-- Against Bug#2415379
3536                         p_error_text         => lv_error_text);
3537 
3538         IF lv_return <> 0 THEN
3539             RAISE ex_logging_err;
3540         END IF;
3541 
3542     IF (lv_instance_type <> G_INS_OTHER) THEN
3543 
3544        -- Set the message to validate customer-ship to location combination for ERP data
3545       lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
3546                      (p_app_short_name    => 'MSC',
3547                       p_error_code        => 'MSC_PP_COL_REF_NOT_EXIST',
3548                       p_message_text      => lv_message_text,
3549                       p_error_text        => lv_error_text,
3550                       p_token1            => 'COLUMN_NAMES',
3551                       p_token_value1      => 'SR_INSTANCE_CODE AND'
3552                                              ||' CUSTOMER AND SHIP_TO_LOC',
3553                       p_token2            => 'MASTER_TABLE',
3554                       p_token_value2      => 'MSD_LEVEL_ASSOCIATIONS',
3555                       p_token3            => 'CHILD_TABLE',
3556                       p_token_value3      => 'MSD_ST_SHIPMENT_DATA');
3557 
3558       IF lv_return <> 0 THEN
3559         RAISE ex_logging_err;
3560       END IF;
3561 
3562      -- Validate customer-ship to location combination for ERP data
3563       UPDATE msd_st_shipment_data msd
3564       SET    process_flag = G_ERROR_FLG,
3565              error_text   = lv_message_text
3566       WHERE NOT EXISTS(SELECT 1
3567                        FROM   msd_st_level_associations msla
3568                        WHERE  msla.level_id         = 11
3569                        AND    msla.parent_level_id  = 15
3570                        AND    msd.sr_customer_pk    = msla.sr_parent_level_pk
3571                        AND    msd.sr_ship_to_loc_pk = msla.sr_level_pk
3572                        AND    msla.instance         = p_instance_id
3573                        UNION ALL
3574                        SELECT 1
3575                        FROM   msd_level_associations mla
3576                        WHERE  mla.level_id          = 11
3577                        AND    mla.parent_level_id   = 15
3578                        AND    msd.sr_customer_pk    = mla.sr_parent_level_pk
3579                        AND    msd.sr_ship_to_loc_pk = mla.sr_level_pk
3580                        AND    mla.instance          = p_instance_id)
3581       AND    msd.process_flag                    = G_IN_PROCESS
3582       AND    msd.sr_instance_code                = p_instance_code
3583       AND    msd.batch_id                        = p_batch_id;
3584 
3585    END IF;
3586 
3587         -- Set the message
3588         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
3589                      (p_app_short_name    => 'MSC',
3590                       p_error_code        => 'MSC_PP_INVALID_VALUE',
3591                       p_message_text      => lv_message_text,
3592                       p_error_text        => lv_error_text,
3593                       p_token1            => 'COLUMN_NAME',
3594                       p_token_value1      => 'SALES_CHANNEL');
3595 
3596       IF lv_return <> 0 THEN
3597         RAISE ex_logging_err;
3598       END IF;
3599 
3600      -- Derive sr_sales_channel_pk from msd_st_level_values and msd_level_values
3601 
3602        lv_return :=  MSC_ST_UTIL.DERIVE_SR_PK
3603                        (p_table_name         => 'MSD_ST_SHIPMENT_DATA',
3604                         p_column_name        => 'SALES_CHANNEL',
3605                         p_pk_col_name        => 'SR_SALES_CHANNEL_PK',
3606                         p_level_id           =>  27,
3607                         p_instance_code      => p_instance_code,
3608                         p_instance_id        =>  p_instance_id,
3609                         p_message_text       => lv_message_text,
3610                         p_batch_id           => lv_batch_id,
3611                         p_severity           => G_SEV_ERROR,	-- Against Bug#2415379
3612                         p_error_text         => lv_error_text);
3613 
3614         IF lv_return <> 0 THEN
3615             RAISE ex_logging_err;
3616         END IF;
3617 
3618         -- Set the message
3619         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
3620                      (p_app_short_name    => 'MSC',
3621                       p_error_code        => 'MSC_PP_INVALID_VALUE',
3622                       p_message_text      => lv_message_text,
3623                       p_error_text        => lv_error_text,
3624                       p_token1            => 'COLUMN_NAME',
3625                       p_token_value1      => 'SALES_REP');
3626 
3627       IF lv_return <> 0 THEN
3628         RAISE ex_logging_err;
3629       END IF;
3630      -- Derive sr_sales_rep_pk from msd_st_level_values and msd_level_values
3631 
3632        lv_return :=  MSC_ST_UTIL.DERIVE_SR_PK
3633                        (p_table_name         => 'MSD_ST_SHIPMENT_DATA',
3634                         p_column_name        => 'SALES_REP',
3635                         p_pk_col_name        => 'SR_SALES_REP_PK',
3636                         p_level_id           =>  18,
3637                         p_instance_code      => p_instance_code,
3638                         p_instance_id        =>  p_instance_id,
3639                         p_message_text       => lv_message_text,
3640                         p_batch_id           => lv_batch_id,
3641                         p_severity           => G_SEV_ERROR,	-- Against Bug#2415379
3642                         p_error_text         => lv_error_text);
3643 
3644         IF lv_return <> 0 THEN
3645             RAISE ex_logging_err;
3646         END IF;
3647 
3648   -- Demand Class changes for Shipment Data starts
3649    -- Set the message
3650         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
3651                      (p_app_short_name    => 'MSC',
3652                       p_error_code        => 'MSC_PP_INVALID_VALUE',
3653                       p_message_text      => lv_message_text,
3654                       p_error_text        => lv_error_text,
3655                       p_token1            => 'COLUMN_NAME',
3656                       p_token_value1      => 'DEMAND_CLASS_LVL_VAL');
3657 
3658       IF lv_return <> 0 THEN
3659         RAISE ex_logging_err;
3660       END IF;
3661      -- Derive sr_sales_rep_pk from msd_st_level_values and msd_level_values
3662 
3663        lv_return :=  MSC_ST_UTIL.DERIVE_SR_PK
3664                        (p_table_name         => 'MSD_ST_SHIPMENT_DATA',
3665                         p_column_name        => 'DEMAND_CLASS_LVL_VAL',
3666                         p_pk_col_name        => 'SR_DEMAND_CLASS_PK',
3667                         p_level_id           =>  34,
3668                         p_instance_code      => p_instance_code,
3669                         p_instance_id        =>  p_instance_id,
3670                         p_message_text       => lv_message_text,
3671                         p_batch_id           => lv_batch_id,
3672                         p_severity           => G_SEV3_ERROR,	-- Against Bug#2415379
3673                         p_error_text         => lv_error_text);
3674 
3675         IF lv_return <> 0 THEN
3676             RAISE ex_logging_err;
3677         END IF;
3678 
3679   -- Demand Class changes for Shipment Data ends
3680                    -- Set the message
3681         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
3682                      (p_app_short_name    => 'MSC',
3683                       p_error_code        => 'MSC_PP_INVALID_VALUE',
3684                       p_message_text      => lv_message_text,
3685                       p_error_text        => lv_error_text,
3686                       p_token1            => 'COLUMN_NAME',
3687                       p_token_value1      => 'PARENT_ITEM');
3688 
3689       IF lv_return <> 0 THEN
3690         RAISE ex_logging_err;
3691       END IF;
3692      -- Derive sr_sales_rep_pk from msd_st_level_values and msd_level_values
3693 
3694        lv_return :=  MSC_ST_UTIL.DERIVE_SR_PK
3695                        (p_table_name         => 'MSD_ST_SHIPMENT_DATA',
3696                         p_column_name        => 'PARENT_ITEM',
3697                         p_pk_col_name        => 'SR_PARENT_ITEM_PK',
3698                         p_level_id           =>  1,
3699                         p_instance_code      => p_instance_code,
3700                         p_instance_id        =>  p_instance_id,
3701                         p_message_text       => lv_message_text,
3702                         p_batch_id           => lv_batch_id,
3703                         p_severity           => G_SEV3_ERROR,    -- Against Bug#2415379
3704                         p_error_text         => lv_error_text);
3705 
3706         IF lv_return <> 0 THEN
3707             RAISE ex_logging_err;
3708         END IF;
3709 
3710 
3711 
3712 
3713       -- set the message, USER_DEFINED1 is invalid
3714 
3715         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
3716                      (p_app_short_name    => 'MSC',
3717                       p_error_code        => 'MSC_PP_INVALID_VALUE',
3718                       p_message_text      => lv_message_text,
3719                       p_error_text        => lv_error_text,
3720                       p_token1            => 'COLUMN_NAME',
3721                       p_token_value1      => 'USER_DEFINED1');
3722 
3723       IF lv_return <> 0 THEN
3724         RAISE ex_logging_err;
3725       END IF;
3726 
3727      -- Derive SR_USER_DEFINED1_LVL_PK
3728 
3729        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_PK
3730                     (p_table_name      => 'MSD_ST_SHIPMENT_DATA',
3731                      p_level_val_col   => 'USER_DEFINED1',
3732                      p_level_name_col  => 'USER_DEFINED_LEVEL1',
3733                      p_level_pk_col    => 'SR_USER_DEFINED1_PK',
3734                      p_instance_code   => p_instance_code,
3735                      p_instance_id     => p_instance_id,
3736                      p_message_text    => lv_message_text,
3737                      p_batch_id        => lv_batch_id,
3738                      p_error_text      => lv_error_text);
3739 
3740       IF lv_return <> 0 THEN
3741         RAISE ex_logging_err;
3742       END IF;
3743 
3744       -- set the message, USER_DEFINED2 is invalid
3745 
3746         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
3747                      (p_app_short_name    => 'MSC',
3748                       p_error_code        => 'MSC_PP_INVALID_VALUE',
3749                       p_message_text      => lv_message_text,
3750                       p_error_text        => lv_error_text,
3751                       p_token1            => 'COLUMN_NAME',
3752                       p_token_value1      => 'USER_DEFINED2');
3753 
3754       IF lv_return <> 0 THEN
3755         RAISE ex_logging_err;
3756       END IF;
3757 
3758      -- Derive SR_USER_DEFINED2_LVL_PK
3759 
3760        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_PK
3761                     (p_table_name      => 'MSD_ST_SHIPMENT_DATA',
3762                      p_level_val_col   => 'USER_DEFINED2',
3763                      p_level_name_col  => 'USER_DEFINED_LEVEL2',
3764                      p_level_pk_col    => 'SR_USER_DEFINED2_PK',
3765                      p_instance_code   => p_instance_code,
3766                      p_instance_id     => p_instance_id,
3767                      p_message_text    => lv_message_text,
3768                      p_batch_id        => lv_batch_id,
3769                      p_error_text      => lv_error_text);
3770 
3771       IF lv_return <> 0 THEN
3772         RAISE ex_logging_err;
3773       END IF;
3774      -- Set the message
3775         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
3776                      (p_app_short_name    => 'MSC',
3777                       p_error_code        => 'MSC_PP_COL_VAL_NULL',
3778                       p_message_text      => lv_message_text,
3779                       p_error_text        => lv_error_text,
3780                       p_token1            => 'COLUMN_NAME',
3781                       p_token_value1      => 'SHIPPED_DATE');
3782 
3783       IF lv_return <> 0 THEN
3784         RAISE ex_logging_err;
3785       END IF;
3786 
3787      --shipped_date cannot be null.
3788       v_sql_stmt := 07;
3789 
3790     lv_sql_Stmt:=
3791     'UPDATE     msd_st_shipment_data '
3792     ||' SET     process_flag              ='||G_ERROR_FLG||','
3793     ||'         error_text   = '||''''||lv_message_text||''''
3794     ||' WHERE   NVL(shipped_date,(sysdate-36500))  = (sysdate-36500)'
3795     ||' AND     process_flag              ='|| G_IN_PROCESS
3796     ||' AND     batch_id                  = :lv_batch_id'
3797     ||' AND     sr_instance_code          = :p_instance_code';
3798 
3799     IF lv_debug THEN
3800            msc_st_util.log_message(lv_sql_stmt);
3801     END IF;
3802 
3803    EXECUTE IMMEDIATE lv_sql_stmt
3804                USING lv_batch_id,
3805                      p_instance_code ;
3806 
3807 
3808       --Call to customised validation.
3809       MSC_CL_PRE_PROCESS_HOOK.ENTITY_VALIDATION
3810         (ERRBUF         => lv_error_text,
3811          RETCODE        => lv_return,
3812          pBatchID       => lv_batch_id,
3813          pInstanceCode  => p_instance_code,
3814          pEntityName    => 'MSD_ST_SHIPMENT_DATA',
3815          pInstanceID    => p_instance_id);
3816 
3817       IF NVL(lv_return,0) <> 0 THEN
3818         RAISE ex_logging_err;
3819       END IF;
3820 
3821      -- Set the process flag as Valid and populate instance_id
3822       lv_return := MSC_ST_UTIL.SET_PROCESS_FLAG
3823                         (p_table_name     => 'MSD_ST_SHIPMENT_DATA',
3824                          p_instance_id    => p_instance_id,
3825                          p_instance_code  => p_instance_code,
3826                          p_process_flag   => G_VALID,
3827                          p_error_text     => lv_error_text,
3828                          p_batch_id       => lv_batch_id,
3829                          p_instance_id_col=> 'INSTANCE');
3830 
3831       IF lv_return <> 0 THEN
3832         RAISE ex_logging_err;
3833       END IF;
3834 
3835     -- Inserting all the errored out records into MSC_ERRORS:
3836 
3837       lv_return := MSC_ST_UTIL.LOG_ERROR
3838                    (p_table_name        => 'MSD_ST_SHIPMENT_DATA',
3839                     p_instance_code     => p_instance_code,
3840                     p_row               => lv_column_names,
3841                     p_severity          => G_SEV_ERROR,
3842                     p_error_text        => lv_error_text,
3843                     p_message_text      => NULL,
3844                     p_batch_id          => lv_batch_id);
3845 
3846       IF(lv_return <> 0) THEN
3847         msc_st_util.log_message(lv_error_text);
3848       END IF;
3849       COMMIT;
3850 
3851     EXCEPTION
3852       WHEN ex_logging_err THEN
3853           ROLLBACK;
3854 
3855         ERRBUF := lv_error_text;
3856         RETCODE := G_WARNING;
3857         msc_st_util.log_message(lv_error_text);
3858 
3859       WHEN OTHERS THEN
3860         ROLLBACK;
3861 
3862       lv_error_text    := substr('MSD_CL_PRE_PROCESS.LOAD_SHIPMENT_DATA '||'('
3863                        ||v_sql_stmt||')'|| SQLERRM, 1, 240);
3864       msc_st_util.log_message(lv_error_text);
3865       ERRBUF := lv_error_text;
3866       RETCODE := G_WARNING;
3867 
3868   END LOAD_SHIPMENT_DATA ;
3869 
3870   /*==========================================================================+
3871   | DESCRIPTION  : This function performs the validation and loads the data   |
3872   |                for business object mfg forecast                           |
3873   +==========================================================================*/
3874   PROCEDURE LOAD_MFG_FORECAST(ERRBUF          OUT NOCOPY VARCHAR,
3875                               RETCODE         OUT NOCOPY NUMBER,
3876                               p_instance_code IN VARCHAR,
3877                               p_instance_id   IN NUMBER,
3878                               p_batch_id      IN NUMBER)
3879 
3880   IS
3881   TYPE RowidTab IS TABLE OF ROWID INDEX BY BINARY_INTEGER;
3882   lb_rowid          RowidTab;
3883 /*  lb_rowid1         RowidTab;          Bug3749959 */
3884   lv_sql_stmt       VARCHAR2(4000);
3885   lv_batch_id       msd_st_mfg_forecast.batch_id%TYPE;
3886   lv_my_company     msc_companies.company_name%TYPE := GET_MY_COMPANY;
3887   lv_message_text   msc_errors.error_text%TYPE;
3888   lv_error_text     VARCHAR2(250);
3889   lv_debug          BOOLEAN   := msc_cl_pre_process.v_debug;
3890   lv_batch_size     NUMBER    := msc_cl_pre_process.v_batch_size;
3891   lv_current_user   NUMBER    := msc_cl_pre_process.v_current_user;
3892   lv_current_date   DATE      := msc_cl_pre_process.v_current_date;
3893   lv_return         NUMBER := 0;
3894   ex_logging_err    EXCEPTION;
3895   lv_column_names   VARCHAR2(5000);
3896 
3897   CURSOR c1(p_batch_id NUMBER)IS
3898     SELECT rowid
3899     FROM   msd_st_mfg_forecast
3900     WHERE  process_flag      IN (G_IN_PROCESS,G_ERROR_FLG)
3901     AND    sr_instance_code = p_instance_code
3902     AND    batch_id         = p_batch_id;
3903 
3904   CURSOR instance_type IS
3905    SELECT instance_type
3906    FROM msc_apps_instances
3907    WHERE instance_id=p_instance_id;
3908 /*
3909    lv_other_desc   varchar2(240) := NULL;   --Adding this to insert level value - 'Others' -Bug 3749959
3910    lv_all_dcs_desc varchar2(240) := NULL;   --Adding this to insert level value - 'All Demand Classes' -Bug 3749959
3911 Bug3749959 */
3912 
3913    lv_instance_type  msc_apps_instances.instance_type%TYPE;
3914 
3915 /*   lv_other_exist NUMBER :=0;  --Bug 3749959
3916      lv_all_dcs_pk NUMBER :=0;   --Bug 3749959
3917 
3918    CURSOR c2(p_batch_id NUMBER)IS --This cursor is used to fetch all records which doesn't have any level value for demand class dimension. --Bug 3749959
3919     SELECT rowid
3920     FROM   msd_st_mfg_forecast
3921     WHERE  process_flag      IN (G_IN_PROCESS,G_ERROR_FLG)
3922     AND    nvl(DEMAND_CLASS_LVL_VAL,'-1') = '-1'
3923     AND    sr_instance_code = p_instance_code
3924     AND    batch_id         = p_batch_id;
3925 
3926    cursor c3 (p_instance varchar2) is  -- This cursor is added to find whether the level value 'Others' exist at 'Demand Class' Level. --Bug 3749959
3927     select count(*) from MSD_LEVEL_VALUES
3928     where LEVEL_ID = 34
3929     and   instance = p_instance
3930     and   SR_LEVEL_PK = to_char(v_null_pk);
3931 
3932    cursor c4 (p_instance_code varchar2) is  -- This cursor is added to find whether the level value 'All Demand Classes' exist alreday or not. --Bug 3749959
3933     select local_id from msd_local_id_setup
3934     where char1    = p_instance_code
3935     -- and   char2    = 'All Demand Classes'
3936     and   level_id = 40;
3937 Bug3749959 */
3938 
3939    BEGIN
3940 
3941       lv_batch_id := p_batch_id;
3942       lv_column_names :=
3943 	'	SR_INSTANCE_CODE	||''~''||'
3944 	||'	FORECAST_SET		||''~''||'
3945 	||'	FORECAST_DESIGNATOR	||''~''||'
3946 	||'	CUSTOMER		||''~''||'
3947 	||'	ITEM			||''~''||'
3948 	||'	INV_ORG			||''~''||'
3949 	||'	SALES_CHANNEL		||''~''||'
3950 	||'	SHIP_TO_LOC		||''~''||'
3951 	||'	USER_DEFINED_LEVEL1	||''~''||'
3952 	||'	USER_DEFINED1		||''~''||'
3953 	||'	USER_DEFINED_LEVEL2	||''~''||'
3954 	||'	USER_DEFINED2		||''~''||'
3955 	||'	BUCKET_TYPE		||''~''||'
3956 	||'	FORECAST_DATE		||''~''||'
3957 	||'	RATE_END_DATE		||''~''||'
3958 	||'	ORIGINAL_QUANTITY	||''~''||'
3959 	||'	CURRENT_QUANTITY ';
3960 
3961       OPEN  c1(lv_batch_id);
3962       FETCH c1 BULK COLLECT INTO lb_rowid;
3963       CLOSE c1;
3964 
3965       v_sql_stmt := 04;
3966       FORALL j IN lb_rowid.FIRST..lb_rowid.LAST
3967       UPDATE msd_st_mfg_forecast
3968       SET  st_transaction_id = msd_st_mfg_forecast_s.NEXTVAL,
3969            last_update_date  = lv_current_date,
3970            last_updated_by   = lv_current_user,
3971            creation_date     = lv_current_date,
3972            created_by        = lv_current_user
3973       WHERE  rowid           = lb_rowid(j);
3974 
3975   -- Changes for Bug 3749959, STARTS.
3976 /*
3977       OPEN  c2(lv_batch_id);
3978        FETCH c2 BULK COLLECT INTO lb_rowid1;
3979       CLOSE c2;
3980 
3981    IF ( lb_rowid1.COUNT <> 0 ) THEN  -- If records exist for which, demand class level values is not provided.
3982 
3983       lv_other_desc    := msd_sr_util.get_null_desc;      --Calling fuction - msd_sr_util.get_null_desc, to fetch the level value 'Others'
3984       lv_all_dcs_desc  := msd_sr_util.get_all_dcs_desc;   --Calling fuction - msd_sr_util.get_all_dcs_desc, to fetch the level value 'All Demand Classes'
3985 
3986       v_sql_stmt := 05;
3987       FORALL j IN lb_rowid1.FIRST..lb_rowid1.LAST     -- Update the demand class level value column with 'Other' as Demand Class Level Value.
3988       UPDATE msd_st_mfg_forecast
3989       SET  DEMAND_CLASS_LVL_VAL  = lv_other_desc   --Using the value fetched from function - msd_sr_util.get_null_desc
3990       WHERE  rowid               = lb_rowid1(j);
3991 
3992 
3993       OPEN c3(p_instance_id);
3994        FETCH c3 into lv_other_exist;
3995       CLOSE c3;
3996 
3997       IF  lv_other_exist = 0 THEN
3998 
3999         INSERT INTO MSD_ST_LEVEL_VALUES --Inserting the level value 'Others' at 'Demand Class' level in MSD_ST_LEVEL_VALUES.
4000         (INSTANCE   ,
4001         LEVEL_ID,
4002         LEVEL_VALUE,
4003         SR_LEVEL_PK,
4004         ATTRIBUTE1,
4005         ATTRIBUTE2,
4006         ATTRIBUTE3,
4007         ATTRIBUTE4,
4008         ATTRIBUTE5,
4009         LAST_UPDATE_DATE,
4010         LAST_UPDATED_BY,
4011         CREATION_DATE,
4012         CREATED_BY,
4013         LAST_UPDATE_LOGIN,
4014         REQUEST_ID,
4015         PROGRAM_APPLICATION_ID,
4016         PROGRAM_ID,
4017         PROGRAM_UPDATE_DATE )
4018         VALUES
4019         (p_instance_id,
4020         34,
4021         lv_other_desc,  --Using the value fetched from function - msd_sr_util.get_null_desc
4022         to_char(v_null_pk),
4023         NULL,
4024         NULL,
4025         NULL,
4026         NULL,
4027         NULL,
4028         sysdate,
4029         -1,
4030         sysdate,
4031         -1,
4032         -1,
4033         -1,
4034         -1,
4035         -1,
4036         sysdate);
4037 
4038       END IF;
4039 
4040     OPEN c4(p_instance_code);
4041      FETCH c4 into lv_all_dcs_pk;
4042     CLOSE c4;
4043 
4044      IF lv_all_dcs_pk = 0  THEN
4045 
4046         lv_all_dcs_pk := msd_sr_util.get_all_dcs_pk; -- Fetching the SR_LEVEL_PK for 'ALL Demand Classes' level value from function - msd_sr_util.get_all_dcs_pk
4047 
4048         INSERT INTO  msd_local_id_setup   --Inserting the level value 'All Demand Classes' in MSD_LOCAL_ID_SETUP.
4049           (local_id,
4050            instance_id,
4051            level_id,
4052            char1,
4053            char2,
4054            last_update_date,
4055            last_updated_by,
4056            creation_date,
4057            created_by  )
4058            VALUES
4059            (lv_all_dcs_pk,
4060             p_instance_id,
4061             40,
4062             p_instance_code,
4063             lv_all_dcs_desc,    --Using the value fetched from function - msd_sr_util.get_all_dcs_desc
4064             sysdate,
4065             -1,
4066             sysdate,
4067             -1);
4068 
4069    --  lv_sr_level_pk := -6;     -- Inserting 'All Demand Classes' records with sr_level_pk as -6
4070 
4071 
4072      INSERT INTO MSD_ST_LEVEL_VALUES   --Inserting the level value 'All Demand Classes' in MSD_ST_LEVEL_VALUES.
4073        (INSTANCE   ,
4074         LEVEL_ID,
4075         LEVEL_VALUE,
4076         SR_LEVEL_PK,
4077         ATTRIBUTE1,
4078         ATTRIBUTE2,
4079         ATTRIBUTE3,
4080         ATTRIBUTE4,
4081         ATTRIBUTE5,
4082         LAST_UPDATE_DATE,
4083         LAST_UPDATED_BY,
4084         CREATION_DATE,
4085         CREATED_BY,
4086         LAST_UPDATE_LOGIN,
4087         REQUEST_ID,
4088         PROGRAM_APPLICATION_ID,
4089         PROGRAM_ID,
4090         PROGRAM_UPDATE_DATE )
4091         VALUES
4092         (p_instance_id,
4093         40,
4094         lv_all_dcs_desc,   --Using the value fetched from function - msd_sr_util.get_all_dcs_desc
4095         lv_all_dcs_pk,
4096         NULL,
4097         NULL,
4098         NULL,
4099         NULL,
4100         NULL,
4101         sysdate,
4102         -1,
4103         sysdate,
4104         -1,
4105         -1,
4106         -1,
4107         -1,
4108         -1,
4109         sysdate);
4110 
4111 
4112           --Inserting the level value 'Others' rolling to 'All Demand Classes' in MSD_ST_LEVEL_ASSOCIATIONS
4113 
4114       INSERT INTO MSD_ST_LEVEL_ASSOCIATIONS
4115         (INSTANCE   ,
4116         LEVEL_ID,
4117         SR_LEVEL_PK,
4118         PARENT_LEVEL_ID,
4119         SR_PARENT_LEVEL_PK,
4120         ATTRIBUTE1,
4121         ATTRIBUTE2,
4122         ATTRIBUTE3,
4123         ATTRIBUTE4,
4124         ATTRIBUTE5,
4125         LAST_UPDATE_DATE,
4126         LAST_UPDATED_BY,
4127         CREATION_DATE,
4128         CREATED_BY,
4129         LAST_UPDATE_LOGIN,
4130         REQUEST_ID,
4131         PROGRAM_APPLICATION_ID,
4132         PROGRAM_ID,
4133         PROGRAM_UPDATE_DATE )
4134         VALUES
4135         (p_instance_id,
4136         34,
4137         to_char(v_null_pk),
4138         40,
4139         lv_all_dcs_pk,
4140         NULL,
4141         NULL,
4142         NULL,
4143         NULL,
4144         NULL,
4145         sysdate,
4146         -1,
4147         sysdate,
4148         -1,
4149         -1,
4150         -1,
4151         -1,
4152         -1,
4153         sysdate);
4154 
4155 
4156      END IF;
4157 
4158   END IF;
4159 Bug3749959 */
4160  -- Changes for Bug 3749959, ENDS.
4161 
4162         -- Set the message
4163         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
4164                      (p_app_short_name    => 'MSC',
4165                       p_error_code        => 'MSC_PP_INVALID_VALUE',
4166                       p_message_text      => lv_message_text,
4167                       p_error_text        => lv_error_text,
4168                       p_token1            => 'COLUMN_NAME',
4169                       p_token_value1      => 'ITEM');
4170 
4171       IF lv_return <> 0 THEN
4172         RAISE ex_logging_err;
4173       END IF;
4174 
4175      -- Derive sr_item_pk from msd_st_level_values and msd_level_values
4176 
4177        lv_return :=  MSC_ST_UTIL.DERIVE_SR_PK
4178                        (p_table_name         => 'MSD_ST_MFG_FORECAST',
4179                         p_column_name        => 'ITEM',
4180                         p_pk_col_name        => 'SR_ITEM_PK',
4181                         p_level_id           => 1,
4182                         p_instance_code      => p_instance_code,
4183                         p_instance_id        =>  p_instance_id,
4184                         p_message_text       => lv_message_text,
4185                         p_batch_id           => lv_batch_id,
4186                         p_error_text         => lv_error_text);
4187 
4188         IF lv_return <> 0 THEN
4189             RAISE ex_logging_err;
4190         END IF;
4191          -- Set the message
4192         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
4193                      (p_app_short_name    => 'MSC',
4194                       p_error_code        => 'MSC_PP_INVALID_VALUE',
4195                       p_message_text      => lv_message_text,
4196                       p_error_text        => lv_error_text,
4197                       p_token1            => 'COLUMN_NAME',
4198                       p_token_value1      => 'INV_ORG');
4199 
4200       IF lv_return <> 0 THEN
4201         RAISE ex_logging_err;
4202       END IF;
4203 
4204      -- Derive sr_inv_org_pk from msd_st_level_values and msd_level_values
4205 
4206        lv_return :=  MSC_ST_UTIL.DERIVE_SR_PK
4207                        (p_table_name         => 'MSD_ST_MFG_FORECAST',
4208                         p_column_name        => 'INV_ORG',
4209                         p_pk_col_name        => 'SR_INV_ORG_PK',
4210                         p_level_id           => 7,
4211                         p_instance_code      => p_instance_code,
4212                         p_instance_id        =>  p_instance_id,
4213                         p_message_text       => lv_message_text,
4214                         p_batch_id           => lv_batch_id,
4215                         p_error_text         => lv_error_text);
4216 
4217         IF lv_return <> 0 THEN
4218             RAISE ex_logging_err;
4219         END IF;
4220 
4221         -- Set the message
4222         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
4223                      (p_app_short_name    => 'MSC',
4224                       p_error_code        => 'MSC_PP_INVALID_VALUE',
4225                       p_message_text      => lv_message_text,
4226                       p_error_text        => lv_error_text,
4227                       p_token1            => 'COLUMN_NAME',
4228                       p_token_value1      => 'CUSTOMER');
4229 
4230       IF lv_return <> 0 THEN
4231         RAISE ex_logging_err;
4232       END IF;
4233 
4234      -- Derive sr_customer_pk from msd_st_level_values and msd_level_values
4235 
4236        lv_return :=  MSC_ST_UTIL.DERIVE_SR_PK
4237                        (p_table_name         => 'MSD_ST_MFG_FORECAST',
4238                         p_column_name        => 'CUSTOMER',
4239                         p_pk_col_name        => 'SR_CUSTOMER_PK',
4240                         p_level_id           =>  15,
4241                         p_instance_code      => p_instance_code,
4242                         p_instance_id        =>  p_instance_id,
4243                         p_message_text       => lv_message_text,
4244                         p_batch_id           => lv_batch_id,
4245                         p_error_text         => lv_error_text);
4246 
4247         IF lv_return <> 0 THEN
4248             RAISE ex_logging_err;
4249         END IF;
4250 
4251         -- Set the message
4252         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
4253                      (p_app_short_name    => 'MSC',
4254                       p_error_code        => 'MSC_PP_INVALID_VALUE',
4255                       p_message_text      => lv_message_text,
4256                       p_error_text        => lv_error_text,
4257                       p_token1            => 'COLUMN_NAME',
4258                       p_token_value1      => 'SHIP_TO_LOC');
4259 
4260       IF lv_return <> 0 THEN
4261         RAISE ex_logging_err;
4262       END IF;
4263      -- Derive sr_ship_to_loc_pk from msd_st_level_values and msd_level_values
4264 
4265        lv_return :=  MSC_ST_UTIL.DERIVE_SR_PK
4266                        (p_table_name         => 'MSD_ST_MFG_FORECAST',
4267                         p_column_name        => 'SHIP_TO_LOC',
4268                         p_pk_col_name        => 'SR_SHIP_TO_LOC_PK',
4269                         p_level_id           =>  11,
4270                         p_instance_code      =>  p_instance_code,
4271                         p_instance_id        =>  p_instance_id,
4272                         p_message_text       => lv_message_text,
4273                         p_batch_id           => lv_batch_id,
4274                         p_error_text         => lv_error_text);
4275 
4276         IF lv_return <> 0 THEN
4277             RAISE ex_logging_err;
4278         END IF;
4279 
4280         -- Set the message
4281         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
4282                      (p_app_short_name    => 'MSC',
4283                       p_error_code        => 'MSC_PP_INVALID_VALUE',
4284                       p_message_text      => lv_message_text,
4285                       p_error_text        => lv_error_text,
4286                       p_token1            => 'COLUMN_NAME',
4287                       p_token_value1      => 'SALES_CHANNEL');
4288 
4289       IF lv_return <> 0 THEN
4290         RAISE ex_logging_err;
4291       END IF;
4292 
4293      -- Derive sr_sales_channel_pk from msd_st_level_values and msd_level_values
4294 
4295        lv_return :=  MSC_ST_UTIL.DERIVE_SR_PK
4296                        (p_table_name         => 'MSD_ST_MFG_FORECAST',
4297                         p_column_name        => 'SALES_CHANNEL',
4298                         p_pk_col_name        => 'SR_SALES_CHANNEL_PK',
4299                         p_level_id           =>  27,
4300                         p_instance_code      => p_instance_code,
4301                         p_instance_id        =>  p_instance_id,
4302                         p_message_text       => lv_message_text,
4303                         p_batch_id           => lv_batch_id,
4304                         p_error_text         => lv_error_text);
4305 
4306         IF lv_return <> 0 THEN
4307             RAISE ex_logging_err;
4308         END IF;
4309 
4310 -- Demand Class Changes for Mfg Forecast starts
4311        -- Set the message
4312         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
4313                      (p_app_short_name    => 'MSC',
4314                       p_error_code        => 'MSC_PP_INVALID_VALUE',
4315                       p_message_text      => lv_message_text,
4316                       p_error_text        => lv_error_text,
4317                       p_token1            => 'COLUMN_NAME',
4318                       p_token_value1      => 'DEMAND_CLASS_LVL_VAL');
4319 
4320       IF lv_return <> 0 THEN
4321         RAISE ex_logging_err;
4322       END IF;
4323 
4324      -- Derive sr_sales_channel_pk from msd_st_level_values and msd_level_values
4325 
4326        lv_return :=  MSC_ST_UTIL.DERIVE_SR_PK
4327                        (p_table_name         => 'MSD_ST_MFG_FORECAST',
4328                         p_column_name        => 'DEMAND_CLASS_LVL_VAL',
4329                         p_pk_col_name        => 'SR_DEMAND_CLASS_PK',
4330                         p_level_id           =>  34,
4331                         p_instance_code      => p_instance_code,
4332                         p_instance_id        =>  p_instance_id,
4333                         p_message_text       => lv_message_text,
4334                         p_batch_id           => lv_batch_id,
4335                         p_error_text         => lv_error_text);
4336 
4337         IF lv_return <> 0 THEN
4338             RAISE ex_logging_err;
4339         END IF;
4340 
4341 -- Demand Class Changes for Mfg Forecast ends
4342 
4343       -- set the message, USER_DEFINED1 is invalid
4344 
4345         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
4346                      (p_app_short_name    => 'MSC',
4347                       p_error_code        => 'MSC_PP_INVALID_VALUE',
4348                       p_message_text      => lv_message_text,
4349                       p_error_text        => lv_error_text,
4350                       p_token1            => 'COLUMN_NAME',
4351                       p_token_value1      => 'USER_DEFINED1');
4352 
4353       IF lv_return <> 0 THEN
4354         RAISE ex_logging_err;
4355       END IF;
4356 
4357      -- Derive SR_USER_DEFINED2_LVL_PK
4358 
4359        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_PK
4360                     (p_table_name      => 'MSD_ST_MFG_FORECAST',
4361                      p_level_val_col   => 'USER_DEFINED1',
4362                      p_level_name_col  => 'USER_DEFINED_LEVEL1',
4363                      p_level_pk_col    => 'SR_USER_DEFINED1_PK',
4364                      p_instance_code   => p_instance_code,
4365                      p_instance_id     => p_instance_id,
4366                      p_message_text    => lv_message_text,
4367                      p_batch_id        => lv_batch_id,
4368                      p_error_text      => lv_error_text);
4369 
4370       IF lv_return <> 0 THEN
4371         RAISE ex_logging_err;
4372       END IF;
4373 
4374       -- set the message, USER_DEFINED2 is invalid
4375 
4376         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
4377                      (p_app_short_name    => 'MSC',
4378                       p_error_code        => 'MSC_PP_INVALID_VALUE',
4379                       p_message_text      => lv_message_text,
4380                       p_error_text        => lv_error_text,
4381                       p_token1            => 'COLUMN_NAME',
4382                       p_token_value1      => 'USER_DEFINED2');
4383 
4384       IF lv_return <> 0 THEN
4385         RAISE ex_logging_err;
4386       END IF;
4387 
4388      -- Derive SR_USER_DEFINED2_LVL_PK
4389 
4390        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_PK
4391                     (p_table_name      => 'MSD_ST_MFG_FORECAST',
4392                      p_level_val_col   => 'USER_DEFINED2',
4393                      p_level_name_col  => 'USER_DEFINED_LEVEL2',
4394                      p_level_pk_col    => 'SR_USER_DEFINED2_PK',
4395                      p_instance_code   => p_instance_code,
4396                      p_instance_id     => p_instance_id,
4397                      p_message_text    => lv_message_text,
4398                      p_batch_id        => lv_batch_id,
4399                      p_error_text      => lv_error_text);
4400 
4401       IF lv_return <> 0 THEN
4402         RAISE ex_logging_err;
4403       END IF;
4404 
4405      -- Set the message
4406         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
4407                      (p_app_short_name    => 'MSC',
4408                       p_error_code        => 'MSC_PP_COL_VAL_NULL',
4409                       p_message_text      => lv_message_text,
4410                       p_error_text        => lv_error_text,
4411                       p_token1            => 'COLUMN_NAME',
4412                       p_token_value1      => 'FORECAST_DESIGNATOR');
4413 
4414       IF lv_return <> 0 THEN
4415         RAISE ex_logging_err;
4416       END IF;
4417 
4418     -- Error out the record if forecast_designator is NULL
4419       v_sql_stmt := 08;
4420       lv_sql_stmt :=
4421       'UPDATE    msd_st_mfg_forecast'
4422       ||' SET    process_flag            = '||G_ERROR_FLG||','
4423       ||'        error_text      = '||''''||lv_message_text||''''
4424       ||' WHERE NVL(forecast_designator, '||''''||NULL_CHAR||''''||') '
4425       ||'        =                 '||''''||NULL_CHAR||''''
4426       ||' AND    batch_id                = :lv_batch_id'
4427       ||' AND    process_flag            = '||G_IN_PROCESS
4428       ||' AND    sr_instance_code        = :p_instance_code';
4429 
4430       IF lv_debug THEN
4431         msc_st_util.log_message(lv_sql_stmt);
4432       END IF;
4433       EXECUTE IMMEDIATE lv_sql_stmt
4434               USING     lv_batch_id,
4435                         p_instance_code;
4436 
4437       -- Set the message
4438       lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
4439                      (p_app_short_name    => 'MSC',
4440                       p_error_code        => 'MSC_PP_COL_VAL_NULL',
4441                       p_message_text      => lv_message_text,
4442                       p_error_text        => lv_error_text,
4443                       p_token1            => 'COLUMN_NAME',
4444                       p_token_value1      => 'FORECAST_DATE');
4445 
4446       IF lv_return <> 0 THEN
4447         RAISE ex_logging_err;
4448       END IF;
4449 
4450     v_sql_stmt := 08;
4451     lv_sql_Stmt:=
4452     'UPDATE     msd_st_mfg_forecast '
4453     ||' SET     process_flag              ='||G_ERROR_FLG||','
4454     ||'         error_text   = '||''''||lv_message_text||''''
4455     ||' WHERE   NVL(forecast_date,(sysdate-36500))  = (sysdate-36500)'
4456     ||' AND     process_flag              ='|| G_IN_PROCESS
4457     ||' AND     batch_id                  = :lv_batch_id'
4458     ||' AND     sr_instance_code          = :p_instance_code';
4459 
4460     IF lv_debug THEN
4461            msc_st_util.log_message(lv_sql_stmt);
4462     END IF;
4463 
4464    EXECUTE IMMEDIATE lv_sql_stmt
4465                USING lv_batch_id,
4466                      p_instance_code ;
4467 
4468       -- Set the message
4469       lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
4470                      (p_app_short_name    => 'MSC',
4471                       p_error_code        => 'MSC_PP_COL_VAL_NULL',
4472                       p_message_text      => lv_message_text,
4473                       p_error_text        => lv_error_text,
4474                       p_token1            => 'COLUMN_NAME',
4475                       p_token_value1      => 'ORIGINAL_QUANTITY');
4476 
4477       IF lv_return <> 0 THEN
4478         RAISE ex_logging_err;
4479       END IF;
4480 
4481      -- Original quantity should not be NULL
4482       lv_sql_stmt :=
4483       'UPDATE    msd_st_mfg_forecast'
4484       ||' SET    process_flag            = '||G_ERROR_FLG||','
4485       ||'        error_text   =   '||''''||lv_message_text||''''
4486       ||' WHERE  NVL(original_quantity,'||NULL_VALUE||')= '||NULL_VALUE
4487       ||' AND    process_flag            = '||G_IN_PROCESS
4488       ||' AND    batch_id                = :lv_batch_id'
4489       ||' AND    sr_instance_code        = :p_instance_code';
4490 
4491       IF lv_debug THEN
4492         msc_st_util.log_message(lv_sql_stmt);
4493       END IF;
4494       EXECUTE IMMEDIATE lv_sql_stmt
4495               USING     lv_batch_id,
4496                         p_instance_code;
4497 
4498     -- Current quantity should be defaulted to original quantitty of NULL
4499 
4500       v_sql_stmt := 08;
4501       lv_sql_stmt :=
4502       ' UPDATE  msd_st_mfg_forecast'
4503       ||' SET   current_quantity      = original_quantity'
4504       ||' WHERE  NVL(current_quantity,'||NULL_VALUE||')= '||NULL_VALUE
4505       ||' AND   process_flag      = '||G_IN_PROCESS
4506       ||' AND   batch_id          = :lv_batch_id'
4507       ||' AND   sr_instance_code  = :p_instance_code';
4508 
4509       IF lv_debug THEN
4510         msc_st_util.log_message(lv_sql_stmt);
4511       END IF;
4512 
4513       EXECUTE IMMEDIATE lv_sql_stmt
4514               USING     lv_batch_id,
4515                         p_instance_code;
4516 
4517 
4518     -- BUCKET_TYPE value should be 1,2 or 3 if NULL default it to 1(daily)
4519        v_sql_stmt := 08;
4520       lv_sql_stmt :=
4521       ' UPDATE  msd_st_mfg_forecast'
4522       ||' SET   bucket_type       = '||G_BUCKET_TYPE
4523       ||' WHERE NVL(bucket_type,'||NULL_VALUE||') NOT IN(1,2,3)'
4524       ||' AND   process_flag      = '||G_IN_PROCESS
4525       ||' AND   batch_id          = :lv_batch_id'
4526       ||' AND   sr_instance_code  = :p_instance_code';
4527 
4528       IF lv_debug THEN
4529         msc_st_util.log_message(lv_sql_stmt);
4530       END IF;
4531 
4532       EXECUTE IMMEDIATE lv_sql_stmt
4533               USING     lv_batch_id,
4534                         p_instance_code;
4535 
4536    OPEN instance_type;
4537       FETCH instance_type into lv_instance_type;
4538    CLOSE instance_type;
4539 
4540 
4541    IF (lv_instance_type = G_INS_OTHER) THEN
4542 
4543     lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
4544                      (p_app_short_name    => 'MSC',
4545                       p_error_code        => 'MSC_PP_COL_REF_NOT_EXIST',
4546                       p_message_text      => lv_message_text,
4547                       p_error_text        => lv_error_text,
4548                       p_token1            => 'COLUMN_NAMES',
4549                       p_token_value1      => 'SR_INSTANCE_CODE AND'
4550                                              ||' INV_ORG AND ITEM AND ITEM.ATO_FORECAST_CONTROL'
4551                                              ||' AND ITEM.MRP_PLANNING_CODE',
4552                       p_token2            => 'MASTER_TABLE',
4553                       p_token_value2      => 'MSC_SYSTEM_ITEMS',
4554                       p_token3            => 'CHILD_TABLE',
4555                       p_token_value3      => 'MSD_ST_MFG_FORECAST');
4556 
4557       IF lv_return <> 0 THEN
4558         RAISE ex_logging_err;
4559       END IF;
4560 
4561       -- Validate item-org combination
4562       v_sql_stmt := 15;
4563 
4564       UPDATE msd_st_mfg_forecast mmf
4565       SET    process_flag = G_ERROR_FLG,
4566              error_text   = lv_message_text
4567       WHERE NOT EXISTS(SELECT 1
4568                        FROM   msc_st_system_items msi
4569                        WHERE  msi.sr_instance_id                  = p_instance_id
4570                        AND    nvl(msi.company_name,lv_my_company) = lv_my_company
4571                        AND    msi.organization_id                 = mmf.sr_inv_org_pk
4572                        AND    msi.item_name                       = mmf.item
4573                        AND   ((v_plan_per_profile = 4) OR (msi.ato_forecast_control <> 3))        --forecast control - none
4574                        AND   ((msi.mrp_planning_code                <> 6 ) OR (msi.pick_components_flag='Y' ))                         --Not planned item
4575                        UNION
4576                        SELECT 1
4577                        FROM   msc_system_items mls
4578                        WHERE  mls.sr_instance_id                  = p_instance_id
4579                        AND    mls.organization_id                 = mmf.sr_inv_org_pk
4580                        AND    mls.item_name                       = mmf.item
4581                        AND    mls.plan_id                         = -1
4582                        AND   ((v_plan_per_profile = 4) OR (mls.ato_forecast_control <> 3))        --forecast control - none
4583                        AND   ((mls.mrp_planning_code                <> 6 ) OR (mls.pick_components_flag='Y' )) )                        --Not planned item
4584       AND    mmf.process_flag            = G_IN_PROCESS
4585       AND    mmf.sr_instance_code        = p_instance_code
4586       AND    mmf.batch_id                = p_batch_id;
4587 
4588    END IF;
4589 
4590       --Call to customised validation.
4591       MSC_CL_PRE_PROCESS_HOOK.ENTITY_VALIDATION
4592         (ERRBUF         => lv_error_text,
4593          RETCODE        => lv_return,
4594          pBatchID       => lv_batch_id,
4595          pInstanceCode  => p_instance_code,
4596          pEntityName    => 'MSD_ST_MFG_FORECAST',
4597          pInstanceID    => p_instance_id);
4598 
4599       IF NVL(lv_return,0) <> 0 THEN
4600         RAISE ex_logging_err;
4601       END IF;
4602 
4603      -- Set the process flag as Valid and populate instance_id
4604       lv_return := MSC_ST_UTIL.SET_PROCESS_FLAG
4605                         (p_table_name     => 'MSD_ST_MFG_FORECAST',
4606                          p_instance_id    => p_instance_id,
4607                          p_instance_code  => p_instance_code,
4608                          p_process_flag   => G_VALID,
4609                          p_error_text     => lv_error_text,
4610                          p_batch_id       => lv_batch_id,
4611                          p_instance_id_col=> 'INSTANCE');
4612 
4613       IF lv_return <> 0 THEN
4614         RAISE ex_logging_err;
4615       END IF;
4616 
4617 
4618     -- Inserting all the errored out records into MSC_ERRORS:
4619 
4620       lv_return := MSC_ST_UTIL.LOG_ERROR
4621                    (p_table_name        => 'MSD_ST_MFG_FORECAST',
4622                     p_instance_code     => p_instance_code,
4623                     p_row               => lv_column_names,
4624                     p_severity          => G_SEV_ERROR,
4625                     p_error_text        => lv_error_text,
4626                     p_message_text      => NULL,
4627                     p_batch_id          => lv_batch_id);
4628 
4629       IF(lv_return <> 0) THEN
4630         msc_st_util.log_message(lv_error_text);
4631       END IF;
4632       COMMIT;
4633 
4634     EXCEPTION
4635       WHEN ex_logging_err THEN
4636         ROLLBACK;
4637 
4638         ERRBUF := lv_error_text;
4639         RETCODE := G_WARNING;
4640         msc_st_util.log_message(lv_error_text);
4641 
4642     WHEN OTHERS THEN
4643       ROLLBACK;
4644 
4645       lv_error_text    := substr('MSD_CL_PRE_PROCESS.LOAD_MFG_FORECAST '||'('
4646                        ||v_sql_stmt||')'|| SQLERRM, 1, 240);
4647       msc_st_util.log_message(lv_error_text);
4648       ERRBUF := lv_error_text;
4649       RETCODE := G_WARNING;
4650 
4651   END LOAD_MFG_FORECAST ;
4652 
4653 
4654  /*==========================================================================+
4655   | DESCRIPTION  : This function insert records for msd_st_time               |
4656   |                for manufacturing calendar                                 |
4657   +==========================================================================*/
4658   PROCEDURE LOAD_MFG_TIME (ERRBUF            OUT NOCOPY VARCHAR,
4659                            RETCODE           OUT NOCOPY NUMBER,
4660                            p_instance_id     IN NUMBER,
4661                            p_calendar_code   IN VARCHAR)
4662   IS
4663   lv_sql_stmt VARCHAR2(4000);
4664   lv_error_text VARCHAR2(250);
4665   lv_debug BOOLEAN := msc_cl_pre_process.v_debug;
4666   lv_return         NUMBER := 0;
4667   lv_cal_start_date  DATE;
4668   lv_cal_end_date  DATE;
4669 
4670   Cursor C is
4671   select max(day),min(day)
4672   from msd_st_time
4673   where calendar_code=p_calendar_code
4674   and instance=p_instance_id;
4675 
4676   BEGIN
4677 
4678 
4679     v_sql_stmt := 01;
4680     lv_sql_stmt :=
4681        ' INSERT INTO MSD_ST_TIME'
4682        ||' (INSTANCE , '
4683        ||'  CALENDAR_TYPE, '
4684        ||'  CALENDAR_CODE, '
4685        ||'  SEQ_NUM, '
4686        ||'  YEAR, '
4687        ||'  YEAR_DESCRIPTION, '
4688        ||'  YEAR_START_DATE, '
4689        ||'  YEAR_END_DATE, '
4690        ||'  QUARTER, '
4691        ||'  QUARTER_DESCRIPTION, '
4692        ||'  QUARTER_START_DATE,'
4693        ||'  QUARTER_END_DATE,'
4694        ||'  MONTH,'
4695        ||'  MONTH_DESCRIPTION,'
4696        ||'  MONTH_START_DATE,'
4697        ||'  MONTH_END_DATE,'
4698        ||'  WEEK ,'
4699        ||'  WEEK_DESCRIPTION ,'
4700        ||'  WEEK_START_DATE,'
4701        ||'  WEEK_END_DATE,'
4702        ||'  DAY,'
4703        ||'  DAY_DESCRIPTION,'
4704        ||'  LAST_UPDATE_DATE, '
4705        ||'  LAST_UPDATED_BY, '
4706        ||'  CREATION_DATE, '
4707        ||'  CREATED_BY, '
4708        ||'  LAST_UPDATE_LOGIN, '
4709        ||'  REQUEST_ID, '
4710        ||'  PROGRAM_APPLICATION_ID, '
4711        ||'  PROGRAM_ID, '
4712        ||'  PROGRAM_UPDATE_DATE ) '
4713        ||'  SELECT'
4714        ||'  mcd.sr_instance_id,'
4715        ||   G_MFG_CAL||','
4716        ||'  mcd.calendar_code, '
4717        ||'  mcd.seq_num, '
4718        ||'  NULL,'
4719        ||'  NULL,'
4720        ||'  NULL,'
4721        ||'  NULL,'
4722        ||'  NULL,'
4723        ||'  NULL,'
4724        ||'  NULL,'
4725        ||'  NULL,'
4726        ||'  mps.period_name'||'||''-''||'||'to_char(mps.period_start_date,''YYYY''),'
4727        ||'  mps.period_name'||'||''-''||'||'to_char(mps.period_start_date,''YYYY''),'
4728        ||'  mps.period_start_date,'
4729        ||'  DECODE(SIGN(mps.next_date-mps.period_start_date),1,(mps.next_date-1),'||'NULL'||'),'
4730        ||'  ''Week''||'||'mcws.seq_num ,'
4731        ||'  ''Week''||'||'mcws.seq_num ,'
4732        ||'  mcws.week_start_date ,'
4733        ||'  DECODE(SIGN(mcws.next_date-mcws.week_start_date),1,(mcws.next_date-1),'||'NULL'||'),'
4734        ||'  mcd.calendar_date,'
4735        ||'  mcd.calendar_date,'
4736        ||'  mcd.last_update_date,'
4737        ||'  mcd.last_updated_by,'
4738        ||'  mcd.creation_date,'
4739        ||'  mcd.created_by, '
4740        ||'  mcd.last_update_login, '
4741        ||'  mcd.request_id , '
4742        ||'  mcd.program_application_id, '
4743        ||'  mcd.program_id , '
4744        ||'  mcd.program_update_date '
4745        ||'  FROM    msc_period_start_dates mps,'
4746        ||'          msc_calendar_dates mcd,'
4747        ||'          msc_cal_week_start_dates mcws'
4748        ||'  WHERE   mcd.sr_instance_id = :p_instance_id'
4749        ||'  AND     mcd.calendar_code  = :p_calendar_code'
4750        ||'  AND     mcd.seq_num IS NOT NULL'
4751        ||'  AND     mcd.exception_set_id = -1'
4752        ||'  AND     mcws.calendar_code = mcd.calendar_code'
4753        ||'  AND     mcws.sr_instance_id = mcd.sr_instance_id'
4754        ||'  AND     mcws.exception_set_id = mcd.exception_set_id'
4755        ||'  AND     mcd.calendar_date BETWEEN mcws.week_start_date '
4756        ||'          AND  DECODE(SIGN(mcws.next_date- mcws.week_start_date),1,'
4757        ||'          (mcws.next_date-1),'||'NULL'||')'
4758        ||'  AND     mps.calendar_code = mcd.calendar_code'
4759        ||'  AND     mps.sr_instance_id = mcd.sr_instance_id'
4760        ||'  AND     mps.exception_set_id = mcd.exception_set_id'
4761        ||'  AND     mcd.calendar_date BETWEEN mps.period_start_date '
4762        ||'          AND  DECODE(SIGN(mps.next_date- mps.period_start_date),1,'
4763        ||'          (mps.next_date-1),'||'NULL'||')'   ;
4764 
4765       IF lv_debug THEN
4766         msc_st_util.log_message(lv_sql_stmt);
4767       END IF;
4768       EXECUTE IMMEDIATE lv_sql_stmt
4769               USING     p_instance_id,
4770                         p_calendar_code;
4771 
4772       IF lv_debug THEN
4773        OPEN C;
4774        FETCH C into lv_cal_end_date,lv_cal_start_date;
4775        msc_st_util.log_message('The Year Start Date is '||lv_cal_start_date||' and the Year End Date is '||lv_cal_end_date||' for the calendar with calendar code '||p_calendar_code);
4776        CLOSE C;
4777       END IF;
4778 
4779   EXCEPTION
4780    WHEN OTHERS THEN
4781      ROLLBACK;
4782 
4783     lv_error_text    := substr('MSD_CL_PRE_PROCESS.LOAD_MFG_TIME '||'('
4784                        ||v_sql_stmt||')'|| SQLERRM, 1, 240);
4785       msc_st_util.log_message(lv_error_text);
4786       ERRBUF := lv_error_text;
4787       RETCODE := G_WARNING;
4788 
4789   END LOAD_MFG_TIME;
4790 
4791   /*==========================================================================+
4792   | DESCRIPTION  : This function performs the validation and loads the data   |
4793   |                for business object fiscal calendar                        |
4794   +==========================================================================*/
4795 
4796   PROCEDURE LOAD_FISCAL_TIME (ERRBUF          OUT NOCOPY VARCHAR,
4797                               RETCODE         OUT NOCOPY NUMBER,
4798                               p_instance_code IN VARCHAR,
4799                               p_instance_id   IN NUMBER)
4800   IS
4801   TYPE RowidTab IS TABLE OF ROWID INDEX BY BINARY_INTEGER;
4802   TYPE Fiscal_Month_Cursor IS REF CURSOR;
4803   Fiscal_Month_Cur Fiscal_Month_Cursor ;
4804 
4805    lb_rowid          RowidTab;
4806    lv_sql_stmt       VARCHAR2(4000);
4807    lv_batch_id       msd_st_time.batch_id%TYPE;
4808    lv_message_text   msc_errors.error_text%TYPE;
4809    lv_error_text     VARCHAR2(250);
4810    lv_from_date      DATE ;
4811    lv_to_date        DATE ;
4812    lv_debug          BOOLEAN   := msc_cl_pre_process.v_debug;
4813    lv_batch_size     NUMBER    := msc_cl_pre_process.v_batch_size;
4814    lv_current_user   NUMBER    := msc_cl_pre_process.v_current_user;
4815    lv_current_date   DATE      := msc_cl_pre_process.v_current_date;
4816    lv_return         NUMBER := 0;
4817    lv_calendar_code                            varchar2(15);
4818    lv_SEQ_NUM                                  NUMBER;
4819    lv_YEAR                                     VARCHAR2(15);
4820    lv_YEAR_DESCRIPTION                         VARCHAR2(15);
4821    lv_YEAR_START_DATE                          DATE;
4822    lv_YEAR_END_DATE                            DATE;
4823    lv_QUARTER                                  VARCHAR2(15);
4824    lv_QUARTER_DESCRIPTION                      VARCHAR2(15);
4825    lv_QUARTER_START_DATE                       DATE;
4826    lv_QUARTER_END_DATE                         DATE;
4827    lv_MONTH                                    VARCHAR2(15);
4828    lv_MONTH_DESCRIPTION                        VARCHAR2(15);
4829    lv_MONTH_START_DATE                         DATE;
4830    lv_MONTH_END_DATE                           DATE;
4831    lv_instance_code			       VARCHAR2(3);
4832 
4833   ex_logging_err    EXCEPTION;
4834   lv_column_names   VARCHAR2(5000);
4835 
4836    CURSOR c1(p_batch_id NUMBER)IS
4837     SELECT rowid
4838     FROM   msd_st_time
4839     WHERE  process_flag      IN (G_IN_PROCESS,G_ERROR_FLG)
4840     AND    calendar_type    = G_FISCAL_CAL
4841     AND    sr_instance_code = p_instance_code
4842     AND    batch_id         = p_batch_id;
4843 
4844    CURSOR c2 IS
4845    SELECT  distinct calendar_code FROM  msd_st_time
4846    WHERE   calendar_type  = G_FISCAL_CAL
4847    AND     instance       = p_instance_id
4848    AND     process_flag   = G_VALID;
4849 
4850    BEGIN
4851 
4852      lv_instance_code := p_instance_code;
4853 
4854      lv_column_names :=
4855 	'       SR_INSTANCE_CODE	||''~''||'
4856 	||'	CALENDAR_CODE		||''~''||'
4857 	||'	YEAR			||''~''||'
4858 	||'	YEAR_DESCRIPTION	||''~''||'
4859 	||'	YEAR_START_DATE		||''~''||'
4860 	||'	YEAR_END_DATE		||''~''||'
4861 	||'	QUARTER			||''~''||'
4862 	||'	QUARTER_DESCRIPTION	||''~''||'
4863 	||'	QUARTER_START_DATE	||''~''||'
4864 	||'	QUARTER_END_DATE	||''~''||'
4865 	||'	MONTH			||''~''||'
4866 	||'	MONTH_DESCRIPTION	||''~''||'
4867 	||'	MONTH_START_DATE	||''~''||'
4868 	||'	MONTH_END_DATE ';
4869 
4870 -- Check for the valid calendar_type - 3 or 4 (G_FISCAL_CAL or G_COMPOSITE_CAL).
4871 
4872    -- set the message
4873 
4874         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
4875                      (p_app_short_name    => 'MSC',
4876                       p_error_code        => 'MSC_PP_INVALID_VALUE',
4877                       p_message_text      => lv_message_text,
4878                       p_error_text        => lv_error_text,
4879                       p_token1            => 'COLUMN_NAME',
4880                       p_token_value1      => 'CALENDAR_TYPE');
4881 
4882       IF lv_return <> 0 THEN
4883         RAISE ex_logging_err;
4884       END IF;
4885 
4886        v_sql_stmt := 05;
4887       lv_sql_stmt :=
4888       'UPDATE    msd_st_time'
4889       ||' SET    process_flag            = '||G_ERROR_FLG||','
4890       ||'        error_text      = '||''''||lv_message_text||''''
4891       ||' WHERE  calendar_type  not in ('||G_COMPOSITE_CAL||','||G_FISCAL_CAL||')'
4892       ||' AND    process_flag            = '||G_IN_PROCESS
4893       ||' AND    sr_instance_code        = :p_instance_code';
4894 
4895       IF lv_debug THEN
4896         msc_st_util.log_message(lv_sql_stmt);
4897       END IF;
4898       EXECUTE IMMEDIATE lv_sql_stmt
4899               USING     p_instance_code;
4900 
4901 
4902 
4903     -- Dividing records in batches based on batchsize
4904     LOOP
4905       v_sql_stmt := 02;
4906       SELECT       msd_st_batch_id_s.NEXTVAL
4907       INTO         lv_batch_id
4908       FROM         DUAL;
4909 
4910       v_sql_stmt := 03;
4911 
4912       lv_sql_stmt :=
4913       'UPDATE   msd_st_time'
4914       ||' SET   batch_id                       = :lv_batch_id '
4915       ||' WHERE process_flag  IN ('||G_IN_PROCESS||','||G_ERROR_FLG||')'
4916       ||' AND   sr_instance_code               = :lv_instance_code'
4917       ||' AND   calendar_type                  ='||G_FISCAL_CAL
4918       ||' AND   NVL(batch_id,'||NULL_VALUE||') = '||NULL_VALUE
4919       ||' AND   rownum                        <= '||lv_batch_size;
4920 
4921       IF lv_debug THEN
4922         msc_st_util.log_message(lv_sql_stmt);
4923       END IF;
4924 
4925       EXECUTE IMMEDIATE  lv_sql_stmt
4926               USING      lv_batch_id,
4927                          p_instance_code;
4928 
4929       EXIT WHEN SQL%NOTFOUND ;
4930 
4931       OPEN  c1(lv_batch_id);
4932       FETCH c1 BULK COLLECT INTO lb_rowid;
4933       CLOSE c1;
4934 
4935       v_sql_stmt := 04;
4936       FORALL j IN lb_rowid.FIRST..lb_rowid.LAST
4937       UPDATE msd_st_time
4938       SET  st_transaction_id = msd_st_time_s.NEXTVAL,
4939            last_update_date  = lv_current_date,
4940            last_updated_by   = lv_current_user,
4941            creation_date     = lv_current_date,
4942            created_by        = lv_current_user
4943       WHERE  rowid           = lb_rowid(j);
4944 
4945 
4946 
4947        -- set the message
4948 
4949         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
4950                      (p_app_short_name    => 'MSC',
4951                       p_error_code        => 'MSC_PP_COL_VAL_NULL',
4952                       p_message_text      => lv_message_text,
4953                       p_error_text        => lv_error_text,
4954                       p_token1            => 'COLUMN_NAME',
4955                       p_token_value1      =>   'YEAR OR '
4956                                              ||'YEAR_DESCRIPTION OR '
4957                                              ||'YEAR_START_DATE OR '
4958                                              ||'YEAR_END_DATE OR '
4959                                              ||'QUARTER OR '
4960                                              ||'QUARTER_DESCRIPTION OR '
4961                                              ||'QUARTER_START_DATE OR '
4962                                              ||'QUARTER_END_DATE OR '
4963                                              ||'MONTH OR '
4964                                              ||'MONTH_DESCRIPTION OR '
4965                                              ||'MONTH_ START DATE OR '
4966                                              ||'MONTH END DATE ');
4967 
4968       IF lv_return <> 0 THEN
4969         RAISE ex_logging_err;
4970       END IF;
4971 
4972       -- Error out the records if any of the details regarding Month, Year or
4973       -- Date is not provided.
4974 
4975       v_sql_stmt := 06;
4976       lv_sql_stmt :=
4977       'UPDATE    msd_st_time'
4978       ||' SET    process_flag            = '||G_ERROR_FLG||','
4979       ||'        error_text      = '||''''||lv_message_text||''''
4980       ||' WHERE  calendar_type   =        '||G_FISCAL_CAL
4981       ||' AND   ( year IS NULL'
4982       ||' OR    year_description IS NULL'
4983       ||' OR    year_start_date IS NULL'
4984       ||' OR    year_end_date   IS NULL'
4985       ||' OR    quarter IS NULL'
4986       ||' OR    quarter_description IS NULL'
4987       ||' OR    quarter_start_date  IS NULL'
4988       ||' OR    quarter_end_date   IS NULL'
4989       ||' OR    month IS NULL'
4990       ||' OR    month_description IS NULL'
4991       ||' OR    month_start_date IS NULL'
4992       ||' OR    month_end_date   IS NULL)'
4993       ||' AND    process_flag            = '||G_IN_PROCESS
4994       ||' AND    batch_id                = :lv_batch_id'
4995       ||' AND    sr_instance_code        = :p_instance_code';
4996 
4997       IF lv_debug THEN
4998         msc_st_util.log_message(lv_sql_stmt);
4999       END IF;
5000 
5001       EXECUTE IMMEDIATE lv_sql_stmt
5002               USING     lv_batch_id,
5003                         p_instance_code;
5004 
5005      -- set the message
5006 
5007         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
5008                      (p_app_short_name    => 'MSC',
5009                       p_error_code        => 'MSC_PP_END_GT_ST_DATE',
5010                       p_message_text      => lv_message_text,
5011                       p_error_text        => lv_error_text  );
5012 
5013 
5014       IF lv_return <> 0 THEN
5015         RAISE ex_logging_err;
5016       END IF;
5017 
5018     -- All the start date should be less than end date
5019 
5020       v_sql_stmt := 07;
5021       lv_sql_stmt :=
5022       'UPDATE    msd_st_time'
5023       ||' SET    process_flag            = '||G_ERROR_FLG||','
5024       ||'        error_text      = '||''''||lv_message_text||''''
5025       ||' WHERE  calendar_type   =        '||G_FISCAL_CAL
5026       ||' AND    (year_start_date    >= year_end_date'
5027       ||' OR      quarter_start_date >= quarter_end_date'
5028       ||' OR      month_start_date   >= month_end_date)'
5029       ||' AND    process_flag            = '||G_IN_PROCESS
5030       ||' AND    batch_id                = :lv_batch_id'
5031       ||' AND    sr_instance_code        = :p_instance_code';
5032 
5033       IF lv_debug THEN
5034         msc_st_util.log_message(lv_sql_stmt);
5035       END IF;
5036       EXECUTE IMMEDIATE lv_sql_stmt
5037               USING     lv_batch_id,
5038                         p_instance_code;
5039 
5040       --Call to customised validation.
5041       MSC_CL_PRE_PROCESS_HOOK.ENTITY_VALIDATION
5042         (ERRBUF         => lv_error_text,
5043          RETCODE        => lv_return,
5044          pBatchID       => lv_batch_id,
5045          pInstanceCode  => p_instance_code,
5046          pEntityName    => 'MSD_ST_TIME',
5047          pInstanceID    => p_instance_id);
5048 
5049       IF NVL(lv_return,0) <> 0 THEN
5050         RAISE ex_logging_err;
5051       END IF;
5052     -- Set the process flag as Valid and populate instance_id
5053       lv_return := MSC_ST_UTIL.SET_PROCESS_FLAG
5054                         (p_table_name     => 'MSD_ST_TIME',
5055                          p_instance_id    => p_instance_id,
5056                          p_instance_code  => p_instance_code,
5057                          p_process_flag   => G_VALID,
5058                          p_error_text     => lv_error_text,
5059                          p_batch_id       => lv_batch_id,
5060                          p_instance_id_col=> 'INSTANCE');
5061 
5062       IF lv_return <> 0 THEN
5063         RAISE ex_logging_err;
5064       END IF;
5065 
5066    	-- Inserting all the errored out records into MSC_ERRORS:
5067 
5068       lv_return := MSC_ST_UTIL.LOG_ERROR
5069 	                   (p_table_name        => 'MSD_ST_TIME',
5070 	                    p_instance_code     => p_instance_code,
5071 	                    p_row               => lv_column_names,
5072 	                    p_severity          => G_SEV_ERROR,
5073 	                    p_error_text        => lv_error_text,
5074 	                    p_message_text      => NULL,
5075 	                    p_batch_id          => lv_batch_id);
5076 
5077       IF(lv_return <> 0) THEN
5078 	RAISE ex_logging_err;
5079       END IF;
5080       COMMIT;
5081 
5082    END LOOP;
5083 
5084 
5085    FOR rec1 in c2
5086 
5087    LOOP
5088 
5089    v_sql_stmt := 08;
5090    lv_sql_stmt :=
5091    '   SELECT min(year_start_date),'
5092    ||'  max(year_end_date)'
5093    ||' FROM msd_st_time'
5094    ||' WHERE calendar_code = :calendar_code'
5095    ||' AND calendar_type ='||G_FISCAL_CAL
5096    ||' AND instance = '||p_instance_id ;
5097 
5098 
5099    IF lv_debug THEN
5100           msc_st_util.log_message(lv_sql_stmt);
5101    END IF;
5102 
5103    EXECUTE IMMEDIATE lv_sql_stmt
5104    INTO    lv_from_date,
5105            lv_to_date
5106    USING   rec1.calendar_code;
5107 
5108 
5109   IF lv_debug THEN
5110    msc_st_util.log_message( 'calendar'||rec1.calendar_code);
5111    msc_st_util.log_message('FROM DATE'||lv_from_date);
5112    msc_st_util.log_message('TO DATE '||lv_to_date);
5113   END IF;
5114 
5115 
5116    v_sql_stmt := 08;
5117    lv_sql_stmt :=      'SELECT  ' ||
5118                         ' calendar_code, '  ||
5119                         ' year, ' ||
5120                         ' year_description, ' ||
5121                         ' year_start_date, ' ||
5122                         ' year_end_date, ' ||
5123                         ' quarter, ' ||
5124                         ' quarter_description, ' ||
5125                         ' quarter_start_date, ' ||
5126                         ' quarter_end_date, ' ||
5127                         ' month, ' ||
5128                         ' month_description, ' ||
5129                         ' month_start_Date, ' ||
5130                         ' month_end_date  ' ||
5131                         ' from  msd_st_time' ||
5132                         ' where calendar_code = NVL(''' ||rec1.calendar_code || ''', calendar_code)'||
5133                         ' and calendar_type='||G_FISCAL_CAL||
5134                         ' and instance= '||p_instance_id||
5135                         ' order by month_start_date';
5136 
5137         IF lv_debug THEN
5138           msc_st_util.log_message(lv_sql_stmt);
5139         END IF;
5140 
5141        OPEN Fiscal_Month_Cur FOR lv_sql_stmt ;
5142 
5143 		       LOOP
5144 		              FETCH Fiscal_Month_Cur
5145 		              INTO    lv_calendar_code,
5146 		                      lv_YEAR,
5147 		                      lv_YEAR_DESCRIPTION,
5148 		                      lv_YEAR_START_DATE,
5149 		                      lv_YEAR_END_DATE,
5150 		                      lv_QUARTER,
5151 		                      lv_QUARTER_DESCRIPTION,
5152 		                      lv_QUARTER_START_DATE,
5153 		                      lv_QUARTER_END_DATE,
5154 		                      lv_MONTH,
5155 		                      lv_MONTH_DESCRIPTION,
5156 		                      lv_MONTH_START_DATE,
5157 		                      lv_MONTH_END_DATE;
5158 
5159 		        EXIT WHEN Fiscal_Month_Cur%NOTFOUND;
5160 
5161 		       MSD_TRANSLATE_TIME_DATA.Explode_Fiscal_Dates(    errbuf                  => errbuf,
5162 		                                retcode                 => retcode,
5163 		                                p_dest_table            => 'MSD_ST_TIME',
5164 		                                p_instance_id           => p_instance_id,
5165 		                                p_calendar_type_id      => G_FISCAL_CAL,
5166 		                                p_calendar_code         => lv_calendar_code,
5167 		                                p_seq_num               => null,
5168 		                                p_year                  => lv_year,
5169 		                                p_year_description      => lv_year_description,
5170 		                                p_year_start_date       => lv_year_start_date,
5171 		                                p_year_end_date         => lv_year_end_date,
5172 		                                p_quarter               => lv_quarter,
5173 		                                p_quarter_description   => lv_quarter_description,
5174 		                                p_quarter_start_date    => lv_quarter_start_date,
5175 		                                p_quarter_end_date      => lv_quarter_end_date,
5176 		                                p_month                 => lv_month,
5177 		                                p_month_description     => lv_month_description,
5178 		                                p_month_start_date      => lv_month_start_date,
5179 		                                p_month_end_date        => lv_month_end_date,
5180 		                                p_from_date             => lv_from_date,
5181 		                                p_to_date               => lv_to_date );
5182 
5183 		          END LOOP ;
5184        CLOSE Fiscal_Month_Cur;
5185 
5186         v_sql_stmt := 09;
5187         lv_sql_stmt:=
5188         '   DELETE  from MSD_ST_TIME '
5189         ||' WHERE   calendar_code = :calendar_code'
5190         ||' AND     process_flag  = '||G_VALID
5191         ||' AND     calendar_type = '||G_FISCAL_CAL
5192         ||' AND     sr_instance_code = :lv_instance_code  ';
5193 
5194         IF lv_debug THEN
5195           msc_st_util.log_message(lv_sql_stmt);
5196         END IF;
5197         EXECUTE IMMEDIATE lv_sql_stmt
5198               USING     rec1.calendar_code,
5199                         p_instance_code;
5200      COMMIT;
5201      END LOOP ;
5202 
5203 
5204     EXCEPTION
5205      WHEN ex_logging_err THEN
5206         ROLLBACK;
5207 
5208         ERRBUF := lv_error_text;
5209         RETCODE := G_WARNING;
5210         msc_st_util.log_message(lv_error_text);
5211 
5212      WHEN OTHERS THEN
5213       ROLLBACK;
5214 
5215       lv_error_text    := substr('MSD_CL_PRE_PROCESS.LOAD_FISCAL_TIME '||'('
5216                        ||v_sql_stmt||')'|| SQLERRM, 1, 240);
5217       msc_st_util.log_message(lv_error_text);
5218       ERRBUF := lv_error_text;
5219       RETCODE := G_WARNING;
5220 
5221   END LOAD_FISCAL_TIME ;
5222 
5223 
5224   /*==========================================================================+
5225   | DESCRIPTION  : This function performs the validation and loads the data   |
5226   |                for business object composite calendar                     |
5227   +==========================================================================*/
5228 
5229   PROCEDURE LOAD_COMPOSITE_TIME (ERRBUF          OUT NOCOPY VARCHAR,
5230                                  RETCODE         OUT NOCOPY NUMBER,
5231                                  p_instance_code IN VARCHAR,
5232                                  p_instance_id   IN NUMBER   )
5233   IS
5234 
5235   TYPE RowidTab IS TABLE OF ROWID INDEX BY BINARY_INTEGER;
5236   TYPE Composite_Week_Cursor IS REF CURSOR;
5237   Composite_Week_Cur Composite_Week_Cursor ;
5238 
5239    lb_rowid          RowidTab;
5240    lv_sql_stmt       VARCHAR2(4000);
5241    lv_batch_id       msd_st_time.batch_id%TYPE;
5242    lv_message_text   msc_errors.error_text%TYPE;
5243    lv_error_text     VARCHAR2(250);
5244    lv_from_date      DATE ;
5245    lv_to_date        DATE ;
5246    lv_debug          BOOLEAN   := msc_cl_pre_process.v_debug;
5247    lv_batch_size     NUMBER    := msc_cl_pre_process.v_batch_size;
5248    lv_current_user   NUMBER    := msc_cl_pre_process.v_current_user;
5249    lv_current_date   DATE      := msc_cl_pre_process.v_current_date;
5250    lv_return         NUMBER := 0;
5251 
5252    lv_calendar_code                            varchar2(15);
5253    lv_SEQ_NUM                                  NUMBER;
5254    lv_YEAR                                     VARCHAR2(15);
5255    lv_YEAR_DESCRIPTION                         VARCHAR2(15);
5256    lv_YEAR_START_DATE                          DATE;
5257    lv_YEAR_END_DATE                            DATE;
5258    lv_QUARTER                                  VARCHAR2(15);
5259    lv_QUARTER_DESCRIPTION                      VARCHAR2(15);
5260    lv_QUARTER_START_DATE                       DATE;
5261    lv_QUARTER_END_DATE                         DATE;
5262    lv_MONTH                                    VARCHAR2(15);
5263    lv_MONTH_DESCRIPTION                        VARCHAR2(15);
5264    lv_MONTH_START_DATE                         DATE;
5265    lv_MONTH_END_DATE                           DATE;
5266    lv_WEEK                                     VARCHAR2(15);
5267    lv_WEEK_DESCRIPTION                         VARCHAR2(15);
5268    lv_WEEK_START_DATE                          DATE;
5269    lv_WEEK_END_DATE                            DATE;
5270    lv_DAY                                      DATE;
5271    lv_DAY_DESCRIPTION                          VARCHAR2(15);
5272    lv_instance_code			       VARCHAR2(3);
5273 
5274    ex_logging_err    EXCEPTION;
5275    lv_column_names   VARCHAR2(5000);
5276 
5277    CURSOR c1(p_batch_id NUMBER)IS
5278     SELECT rowid
5279     FROM   msd_st_time
5280     WHERE  process_flag      IN (G_IN_PROCESS)
5281     AND    calendar_type    = G_COMPOSITE_CAL
5282     AND    sr_instance_code = p_instance_code
5283     AND    batch_id         = p_batch_id;
5284 
5285   CURSOR c2 IS
5286    SELECT  distinct calendar_code FROM  msd_st_time
5287    WHERE   calendar_type  = G_COMPOSITE_CAL
5288    AND     instance       = p_instance_id
5289    AND     process_flag   = G_VALID;
5290 
5291    BEGIN
5292 
5293      lv_instance_code := p_instance_code;
5294 
5295      lv_column_names :=
5296 	'       INSTANCE	        ||''~''||'
5297 	||'	CALENDAR_CODE		||''~''||'
5298 	||'	YEAR			||''~''||'
5299 	||'	YEAR_DESCRIPTION	||''~''||'
5300 	||'	YEAR_START_DATE		||''~''||'
5301 	||'	YEAR_END_DATE		||''~''||'
5302 	||'	QUARTER			||''~''||'
5303 	||'	QUARTER_DESCRIPTION	||''~''||'
5304 	||'	QUARTER_START_DATE	||''~''||'
5305 	||'	QUARTER_END_DATE	||''~''||'
5306 	||'	MONTH			||''~''||'
5307 	||'	MONTH_DESCRIPTION	||''~''||'
5308 	||'	MONTH_START_DATE	||''~''||'
5309 	||'	MONTH_END_DATE	        ||''~''||'
5310 	||'	WEEK			||''~''||'
5311 	||'	WEEK_DESCRIPTION	||''~''||'
5312 	||'	WEEK_START_DATE		||''~''||'
5313 	||'	WEEK_END_DATE	        ||''~''||'
5314 	||'	DAY	                ||''~''||'
5315 	||'	DAY_DESCRIPTION ';
5316 
5317 
5318    -- Check for the valid calendar_type value - 3 or 4 ( G_FISCAL_CAL ,G_COMPOSITE_CAL).
5319 
5320    -- set the message
5321 
5322         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
5323                      (p_app_short_name    => 'MSC',
5324                       p_error_code        => 'MSC_PP_INVALID_VALUE',
5325                       p_message_text      => lv_message_text,
5326                       p_error_text        => lv_error_text,
5327                       p_token1            => 'COLUMN_NAME',
5328                       p_token_value1      => 'CALENDAR_TYPE');
5329 
5330       IF lv_return <> 0 THEN
5331         RAISE ex_logging_err;
5332       END IF;
5333 
5334        v_sql_stmt := 01;
5335       lv_sql_stmt :=
5336       'UPDATE    msd_st_time'
5337       ||' SET    process_flag            = '||G_ERROR_FLG||','
5338       ||'        error_text      = '||''''||lv_message_text||''''
5339       ||' WHERE  calendar_type not in ('||G_COMPOSITE_CAL||','||G_FISCAL_CAL||')'
5340       ||' AND    process_flag            = '||G_IN_PROCESS
5341       ||' AND    sr_instance_code        = :p_instance_code';
5342 
5343       IF lv_debug THEN
5344         msc_st_util.log_message(lv_sql_stmt);
5345       END IF;
5346       EXECUTE IMMEDIATE lv_sql_stmt
5347               USING     p_instance_code;
5348 
5349 
5350     -- Dividing records in batches based on batchsize
5351     LOOP
5352       v_sql_stmt := 02;
5353       SELECT       msd_st_batch_id_s.NEXTVAL
5354       INTO         lv_batch_id
5355       FROM         DUAL;
5356 
5357       v_sql_stmt := 03;
5358 
5359       lv_sql_stmt :=
5360       'UPDATE   msd_st_time'
5361       ||' SET   batch_id                       = :lv_batch_id '
5362       ||' WHERE process_flag  IN ('||G_IN_PROCESS||')'
5363       ||' AND   sr_instance_code               = :lv_instance_code'
5364       ||' AND   calendar_type                  ='||G_COMPOSITE_CAL
5365       ||' AND   NVL(batch_id,'||NULL_VALUE||') = '||NULL_VALUE
5366       ||' AND   rownum                        <= '||lv_batch_size;
5367 
5368       IF lv_debug THEN
5369         msc_st_util.log_message(lv_sql_stmt);
5370       END IF;
5371 
5372       EXECUTE IMMEDIATE  lv_sql_stmt
5373               USING      lv_batch_id,
5374                          p_instance_code;
5375 
5376       EXIT WHEN SQL%NOTFOUND ;
5377 
5378       OPEN  c1(lv_batch_id);
5379       FETCH c1 BULK COLLECT INTO lb_rowid;
5380       CLOSE c1;
5381 
5382       v_sql_stmt := 04;
5383       FORALL j IN lb_rowid.FIRST..lb_rowid.LAST
5384       UPDATE msd_st_time
5385       SET  st_transaction_id = msd_st_time_s.NEXTVAL,
5386            last_update_date  = lv_current_date,
5387            last_updated_by   = lv_current_user,
5388            creation_date     = lv_current_date,
5389            created_by        = lv_current_user
5390       WHERE  rowid           = lb_rowid(j);
5391 
5392 
5393 
5394        -- set the message
5395 
5396         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
5397                      (p_app_short_name    => 'MSC',
5398                       p_error_code        => 'MSC_PP_COL_VAL_NULL',
5399                       p_message_text      => lv_message_text,
5400                       p_error_text        => lv_error_text,
5401                       p_token1            => 'COLUMN_NAME',
5402                        p_token_value1      =>   'YEAR OR '
5403                                              ||'YEAR_DESCRIPTION OR '
5404                                              ||'YEAR_START_DATE OR '
5405                                              ||'YEAR_END_DATE OR '
5406                                              ||'QUARTER OR '
5407                                              ||'QUARTER_DESCRIPTION OR '
5408                                              ||'QUARTER_START_DATE OR '
5409                                              ||'QUARTER_END_DATE OR '
5410                                              ||'MONTH OR '
5411                                              ||'MONTH_DESCRIPTION OR '
5412                                              ||'MONTH_ START DATE OR '
5413                                              ||'MONTH END DATE OR '
5414                                              ||'WEEK OR '
5415                                              ||'WEEK_DESCRIPTION OR '
5416                                              ||'WEEK_START_DATE OR '
5417                                              ||'WEEK_END_DATE ');
5418 
5419 
5420 
5421       IF lv_return <> 0 THEN
5422         RAISE ex_logging_err;
5423       END IF;
5424 
5425       -- Error out the records if any of the details regarding Week, Quarter, Month, Year or
5426       -- Date is not provided.
5427 
5428       v_sql_stmt := 05;
5429       lv_sql_stmt :=
5430       'UPDATE    msd_st_time'
5431       ||' SET    process_flag            = '||G_ERROR_FLG||','
5432       ||'        error_text      = '||''''||lv_message_text||''''
5433       ||' WHERE  calendar_type   =        '||G_COMPOSITE_CAL
5434       ||' AND   ( year IS NULL'
5435       ||' OR    year_description IS NULL'
5436       ||' OR    year_start_date IS NULL'
5437       ||' OR    year_end_date   IS NULL'
5438       ||' OR    quarter IS NULL'
5439       ||' OR    quarter_description IS NULL'
5440       ||' OR    quarter_start_date  IS NULL'
5441       ||' OR    quarter_end_date   IS NULL'
5442       ||' OR    month IS NULL'
5443       ||' OR    month_description IS NULL'
5444       ||' OR    month_start_date  IS NULL'
5445       ||' OR    month_end_date   IS NULL'
5446       ||' OR    week IS NULL'
5447       ||' OR    week_description IS NULL'
5448       ||' OR    week_start_date IS NULL'
5449       ||' OR    week_end_date   IS NULL )'
5450       ||' AND    process_flag            = '||G_IN_PROCESS
5451       ||' AND    batch_id                = :lv_batch_id'
5452       ||' AND    sr_instance_code        = :p_instance_code';
5453 
5454       IF lv_debug THEN
5455         msc_st_util.log_message(lv_sql_stmt);
5456       END IF;
5457 
5458       EXECUTE IMMEDIATE lv_sql_stmt
5459               USING     lv_batch_id,
5460                         p_instance_code;
5461 
5462 
5463 
5464 
5465 
5466      -- set the message
5467 
5468         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
5469                      (p_app_short_name    => 'MSC',
5470                       p_error_code        => 'MSC_PP_END_GT_ST_DATE',
5471                       p_message_text      => lv_message_text,
5472                       p_error_text        => lv_error_text );
5473 
5474 
5475       IF lv_return <> 0 THEN
5476         RAISE ex_logging_err;
5477       END IF;
5478 
5479     -- All the start date should be less than end date
5480 
5481       v_sql_stmt := 06;
5482       lv_sql_stmt :=
5483       'UPDATE    msd_st_time'
5484       ||' SET    process_flag            = '||G_ERROR_FLG||','
5485       ||'        error_text      = '||''''||lv_message_text||''''
5486       ||' WHERE  calendar_type   =        '||G_COMPOSITE_CAL
5487       ||' AND    (year_start_date    > year_end_date'
5488       ||' OR      quarter_start_date > quarter_end_date'
5489       ||' OR      month_start_date   > month_end_date'
5490       ||' OR      week_start_date    > week_end_date)'
5491       ||' AND    process_flag            = '||G_IN_PROCESS
5492       ||' AND    batch_id                = :lv_batch_id'
5493       ||' AND    sr_instance_code        = :p_instance_code';
5494 
5495       IF lv_debug THEN
5496         msc_st_util.log_message(lv_sql_stmt);
5497       END IF;
5498       EXECUTE IMMEDIATE lv_sql_stmt
5499               USING     lv_batch_id,
5500                         p_instance_code;
5501 
5502 
5503 
5504 
5505       --Call to customised validation.
5506       MSC_CL_PRE_PROCESS_HOOK.ENTITY_VALIDATION
5507         (ERRBUF         => lv_error_text,
5508          RETCODE        => lv_return,
5509          pBatchID       => lv_batch_id,
5510          pInstanceCode  => p_instance_code,
5511          pEntityName    => 'MSD_ST_TIME',
5512          pInstanceID    => p_instance_id);
5513 
5514       IF NVL(lv_return,0) <> 0 THEN
5515         RAISE ex_logging_err;
5516       END IF;
5517 
5518 
5519 
5520     -- Set the process flag as Valid and populate instance_id
5521       lv_return := MSC_ST_UTIL.SET_PROCESS_FLAG
5522                         (p_table_name     => 'MSD_ST_TIME',
5523                          p_instance_id    => p_instance_id,
5524                          p_instance_code  => p_instance_code,
5525                          p_process_flag   => G_VALID,
5526                          p_error_text     => lv_error_text,
5527                          p_batch_id       => lv_batch_id,
5528                          p_instance_id_col=> 'INSTANCE');
5529 
5530       IF lv_return <> 0 THEN
5531         RAISE ex_logging_err;
5532       END IF;
5533 
5534 
5535 
5536    	-- Inserting all the errored out records into MSC_ERRORS:
5537 
5538       lv_return := MSC_ST_UTIL.LOG_ERROR
5539 	                   (p_table_name        => 'MSD_ST_TIME',
5540 	                    p_instance_code     => p_instance_code,
5541 	                    p_row               => lv_column_names,
5542 	                    p_severity          => G_SEV_ERROR,
5543 	                    p_error_text        => lv_error_text,
5544 	                    p_message_text      => NULL,
5545 	                    p_batch_id          => lv_batch_id);
5546 
5547       IF(lv_return <> 0) THEN
5548 	RAISE ex_logging_err;
5549       END IF;
5550       COMMIT;
5551 
5552    END LOOP;
5553 
5554 
5555 FOR rec1 in c2
5556 
5557    LOOP
5558 
5559    v_sql_stmt := 08;
5560    lv_sql_stmt :=
5561    '   SELECT min(year_start_date),'
5562    ||'  max(year_end_date)'
5563    ||' FROM msd_st_time'
5564    ||' WHERE calendar_code = :calendar_code'
5565    ||' AND calendar_type ='||G_COMPOSITE_CAL
5566    ||' AND instance = '||p_instance_id ;
5567 
5568 
5569    IF lv_debug THEN
5570           msc_st_util.log_message(lv_sql_stmt);
5571    END IF;
5572 
5573    EXECUTE IMMEDIATE lv_sql_stmt
5574    INTO    lv_from_date,
5575            lv_to_date
5576    USING   rec1.calendar_code;
5577 
5578 
5579   IF lv_debug THEN
5580    msc_st_util.log_message( 'calendar'||rec1.calendar_code);
5581    msc_st_util.log_message('FROM DATE'||lv_from_date);
5582    msc_st_util.log_message('TO DATE '||lv_to_date);
5583   END IF;
5584 
5585 
5586    v_sql_stmt := 08;
5587    lv_sql_stmt :=      'SELECT  ' ||
5588                         ' calendar_code, '  ||
5589                         ' year, ' ||
5590                         ' year_description, ' ||
5591                         ' year_start_date, ' ||
5592                         ' year_end_date, ' ||
5593                         ' quarter, ' ||
5594                         ' quarter_description, ' ||
5595                         ' quarter_start_date, ' ||
5596                         ' quarter_end_date, ' ||
5597                         ' month, ' ||
5598                         ' month_description, ' ||
5599                         ' month_start_Date, ' ||
5600                         ' month_end_date,  ' ||
5601                         ' week, '||
5602                         ' week_description, '||
5603                         ' week_start_date, '||
5604                         ' week_end_date ' ||
5605                         ' from  msd_st_time' ||
5606                         ' where calendar_code = NVL(''' ||rec1.calendar_code || ''', calendar_code)'||
5607                         ' and calendar_type='||G_COMPOSITE_CAL ||
5608                         ' and instance= '||p_instance_id||
5609                         ' order by week_start_date';
5610 
5611         IF lv_debug THEN
5612           msc_st_util.log_message(lv_sql_stmt);
5613         END IF;
5614 
5615        OPEN Composite_Week_Cur FOR lv_sql_stmt ;
5616 
5617 		       LOOP
5618 		              FETCH Composite_Week_Cur
5619 		              INTO    lv_calendar_code,
5620 		                      lv_YEAR,
5621 		                      lv_YEAR_DESCRIPTION,
5622 		                      lv_YEAR_START_DATE,
5623 		                      lv_YEAR_END_DATE,
5624 		                      lv_QUARTER,
5625 		                      lv_QUARTER_DESCRIPTION,
5626 		                      lv_QUARTER_START_DATE,
5627 		                      lv_QUARTER_END_DATE,
5628 		                      lv_MONTH,
5629 		                      lv_MONTH_DESCRIPTION,
5630 		                      lv_MONTH_START_DATE,
5631 		                      lv_MONTH_END_DATE,
5632 		                      lv_WEEK,
5633 		                      lv_WEEK_DESCRIPTION,
5634 		                      lv_WEEK_START_DATE,
5635 		                      lv_WEEK_END_DATE;
5636 
5637 		        EXIT WHEN Composite_Week_Cur%NOTFOUND;
5638 
5639 		       MSC_ST_UTIL.Explode_Composite_Dates(    errbuf                  => errbuf,
5640 		                                retcode                 => retcode,
5641 		                                p_dest_table            => 'MSD_ST_TIME',
5642 		                                p_instance_id           => p_instance_id,
5643 		                                p_calendar_type_id      => G_COMPOSITE_CAL,
5644 		                                p_calendar_code         => lv_calendar_code,
5645 		                                p_seq_num               => null,
5646 		                                p_year                  => lv_year,
5647 		                                p_year_description      => lv_year_description,
5648 		                                p_year_start_date       => lv_year_start_date,
5649 		                                p_year_end_date         => lv_year_end_date,
5650 		                                p_quarter               => lv_quarter,
5651 		                                p_quarter_description   => lv_quarter_description,
5652 		                                p_quarter_start_date    => lv_quarter_start_date,
5653 		                                p_quarter_end_date      => lv_quarter_end_date,
5654 		                                p_month                 => lv_month,
5655 		                                p_month_description     => lv_month_description,
5656 		                                p_month_start_date      => lv_month_start_date,
5657 		                                p_month_end_date        => lv_month_end_date,
5658 		                                p_week                  => lv_week,
5659 		                                p_week_description      => lv_week_description,
5660 		                                p_week_start_date       => lv_week_start_date,
5661 		                                p_week_end_date         => lv_week_end_date);
5662 
5663 
5664 		          END LOOP ;
5665        CLOSE Composite_Week_Cur;
5666 
5667         v_sql_stmt := 09;
5668         lv_sql_stmt:=
5669         '   DELETE  from MSD_ST_TIME '
5670         ||' WHERE   calendar_code = :calendar_code'
5671         ||' AND     process_flag  = '||G_VALID
5672         ||' AND     calendar_type = '||G_COMPOSITE_CAL
5673         ||' AND     sr_instance_code = :lv_instance_code  ';
5674 
5675         IF lv_debug THEN
5676           msc_st_util.log_message(lv_sql_stmt);
5677         END IF;
5678         EXECUTE IMMEDIATE lv_sql_stmt
5679               USING     rec1.calendar_code,
5680                         p_instance_code;
5681      COMMIT;
5682      END LOOP ;
5683 
5684 
5685 EXCEPTION
5686     WHEN ex_logging_err THEN
5687         ROLLBACK;
5688 
5689         ERRBUF := lv_error_text;
5690         RETCODE := G_WARNING;
5691         msc_st_util.log_message(lv_error_text);
5692 
5693     WHEN OTHERS THEN
5694       ROLLBACK;
5695 
5696       lv_error_text    := substr('MSD_CL_PRE_PROCESS.LOAD_COMPOSITE_TIME '||'('
5697                        ||v_sql_stmt||')'|| SQLERRM, 1, 240);
5698       msc_st_util.log_message(lv_error_text);
5699       ERRBUF := lv_error_text;
5700       RETCODE := G_WARNING;
5701 
5702 END LOAD_COMPOSITE_TIME ;
5703 
5704 
5705 
5706   /*==========================================================================+
5707   | DESCRIPTION  : This function performs the validation and loads the data   |
5708   |                for business object currency conversion                    |
5709   +==========================================================================*/
5710 
5711   PROCEDURE LOAD_CURRENCY_CONV (ERRBUF          OUT NOCOPY VARCHAR,
5712                                 RETCODE         OUT NOCOPY NUMBER,
5713                                 p_instance_code IN VARCHAR,
5714                                 p_instance_id   IN NUMBER,
5715                                 p_batch_id      IN NUMBER)
5716 
5717   IS
5718   TYPE RowidTab IS TABLE OF ROWID INDEX BY BINARY_INTEGER;
5719   lb_rowid          RowidTab;
5720   lv_sql_stmt       VARCHAR2(4000);
5721   lv_batch_id       msd_st_currency_conversions.batch_id%TYPE;
5722   lv_message_text   msc_errors.error_text%TYPE;
5723   lv_error_text     VARCHAR2(250);
5724   lv_debug          BOOLEAN   := msc_cl_pre_process.v_debug;
5725   lv_batch_size     NUMBER    := msc_cl_pre_process.v_batch_size;
5726   lv_current_user   NUMBER    := msc_cl_pre_process.v_current_user;
5727   lv_current_date   DATE      := msc_cl_pre_process.v_current_date;
5728   lv_return         NUMBER := 0;
5729   ex_logging_err    EXCEPTION;
5730   lv_column_names   VARCHAR2(5000);
5731 
5732   CURSOR c1(p_batch_id NUMBER)IS
5733     SELECT rowid
5734     FROM   msd_st_currency_conversions
5735     WHERE  process_flag      IN (G_IN_PROCESS,G_ERROR_FLG)
5736     AND    sr_instance_code = p_instance_code
5737     AND    batch_id         = p_batch_id;
5738 
5739    BEGIN
5740 
5741       lv_batch_id := p_batch_id;
5742 
5743       lv_column_names :=
5744 	'       SR_INSTANCE_CODE	||''~''||'
5745 	||'	FROM_CURRENCY		||''~''||'
5746 	||'	TO_CURRENCY		||''~''||'
5747 	||'	CONVERSION_DATE		||''~''||'
5748 	||'	CONVERSION_RATE ';
5749 
5750       OPEN  c1(lv_batch_id);
5751       FETCH c1 BULK COLLECT INTO lb_rowid;
5752       CLOSE c1;
5753 
5754       v_sql_stmt := 04;
5755       FORALL j IN lb_rowid.FIRST..lb_rowid.LAST
5756       UPDATE msd_st_currency_conversions
5757       SET  st_transaction_id = msd_st_currency_conversions_s.NEXTVAL,
5758            last_update_date  = lv_current_date,
5759            last_updated_by   = lv_current_user,
5760            creation_date     = lv_current_date,
5761            created_by        = lv_current_user
5762       WHERE  rowid           = lb_rowid(j);
5763 
5764      -- set the message
5765 
5766       lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
5767                      (p_app_short_name    => 'MSC',
5768                       p_error_code        => 'MSC_PP_COL_VAL_NULL',
5769                       p_message_text      => lv_message_text,
5770                       p_error_text        => lv_error_text,
5771                       p_token1            => 'COLUMN_NAME',
5772                       p_token_value1      => 'FROM_CURRENCY OR'
5773                                              ||'TO_CURRENCY OR'
5774                                              ||'CONVERSION_DATE OR'
5775                                              ||'CONVERSION_RATE');
5776 
5777       IF lv_return <> 0 THEN
5778         RAISE ex_logging_err;
5779       END IF;
5780 
5781       -- error out if conversion rate, conversion dfate, from or to currency is null
5782       lv_sql_stmt :=
5783       'UPDATE    msd_st_currency_conversions'
5784       ||' SET    process_flag            = '||G_ERROR_FLG||','
5785       ||'        error_text      = '||''''||lv_message_text||''''
5786       ||' WHERE (NVL(from_currency, '||''''||NULL_CHAR||''''||') '
5787       ||'          =                 '||''''||NULL_CHAR||''''
5788       ||' OR   NVL(to_currency, '||''''||NULL_CHAR||''''||') '
5789       ||'          =                 '||''''||NULL_CHAR||''''
5790       ||' OR  NVL(conversion_date,(sysdate-36500))  = (sysdate-36500)'
5791       ||' OR  NVL(conversion_rate,'||NULL_VALUE||') = '||NULL_VALUE||')'
5792       ||' AND    process_flag            = '||G_IN_PROCESS
5793       ||' AND    batch_id                = :lv_batch_id'
5794       ||' AND    sr_instance_code        = :p_instance_code';
5795 
5796       IF lv_debug THEN
5797         msc_st_util.log_message(lv_sql_stmt);
5798       END IF;
5799       EXECUTE IMMEDIATE lv_sql_stmt
5800               USING     lv_batch_id,
5801                         p_instance_code;
5802 
5803       --Call to customised validation.
5804       MSC_CL_PRE_PROCESS_HOOK.ENTITY_VALIDATION
5805         (ERRBUF         => lv_error_text,
5806          RETCODE        => lv_return,
5807          pBatchID       => lv_batch_id,
5808          pInstanceCode  => p_instance_code,
5809          pEntityName    => 'MSD_ST_CURRENCY_CONVERSIONS',
5810          pInstanceID    => p_instance_id);
5811 
5812       IF NVL(lv_return,0) <> 0 THEN
5813         RAISE ex_logging_err;
5814       END IF;
5815 
5816      -- Set the process flag as Valid and populate instance_id
5817       lv_return := MSC_ST_UTIL.SET_PROCESS_FLAG
5818                         (p_table_name     => 'MSD_ST_CURRENCY_CONVERSIONS',
5819                          p_instance_id    => p_instance_id,
5820                          p_instance_code  => p_instance_code,
5821                          p_process_flag   => G_VALID,
5822                          p_error_text     => lv_error_text,
5823                          p_batch_id       => lv_batch_id,
5824                          p_instance_id_col=> 'INSTANCE');
5825 
5826       IF lv_return <> 0 THEN
5827         RAISE ex_logging_err;
5828       END IF;
5829 
5830     -- Inserting all the errored out records into MSC_ERRORS:
5831 
5832       lv_return := MSC_ST_UTIL.LOG_ERROR
5833                    (p_table_name        => 'MSD_ST_CURRENCY_CONVERSIONS',
5834                     p_instance_code     => p_instance_code,
5835                     p_row               => lv_column_names,
5836                     p_severity          => G_SEV_ERROR,
5837                     p_error_text        => lv_error_text,
5838                     p_message_text      => NULL,
5839                     p_batch_id          => lv_batch_id);
5840 
5841     IF(lv_return <> 0) THEN
5842       msc_st_util.log_message(lv_error_text);
5843     END IF;
5844     COMMIT;
5845 
5846     EXCEPTION
5847       WHEN ex_logging_err THEN
5848         ROLLBACK;
5849 
5850         ERRBUF := lv_error_text;
5851         RETCODE := G_WARNING;
5852         msc_st_util.log_message(lv_error_text);
5853 
5854      WHEN OTHERS THEN
5855       ROLLBACK;
5856 
5857       lv_error_text    := substr('MSD_CL_PRE_PROCESS.LOAD_CURRENCY_CONV '||'('
5858                        ||v_sql_stmt||')'|| SQLERRM, 1, 240);
5859       msc_st_util.log_message(lv_error_text);
5860       ERRBUF := lv_error_text;
5861       RETCODE := G_WARNING;
5862 
5863   END LOAD_CURRENCY_CONV ;
5864 
5865   /*==========================================================================+
5866   | DESCRIPTION  : This function performs the validation and loads the data   |
5867   |                for business object Custom Stream(CS)Data                  |
5868   +==========================================================================*/
5869 
5870   PROCEDURE LOAD_CS_DATA (ERRBUF          OUT NOCOPY VARCHAR,
5871                           RETCODE         OUT NOCOPY NUMBER,
5872                           p_instance_code IN VARCHAR,
5873                           p_instance_id   IN NUMBER,
5874                           p_batch_id      IN NUMBER)
5875   IS
5876   TYPE RowidTab IS TABLE OF ROWID INDEX BY BINARY_INTEGER;
5877   lb_rowid          RowidTab;
5878   lv_sql_stmt       VARCHAR2(4000);
5879   lv_batch_id       msd_st_cs_data.batch_id%TYPE;
5880   lv_message_text   msc_errors.error_text%TYPE;
5881   lv_my_company     msc_companies.company_name%TYPE := GET_MY_COMPANY;
5882   lv_error_text     VARCHAR2(250);
5883   lv_debug          BOOLEAN   := msc_cl_pre_process.v_debug;
5884   lv_batch_size     NUMBER    := msc_cl_pre_process.v_batch_size;
5885   lv_current_user   NUMBER    := msc_cl_pre_process.v_current_user;
5886   lv_current_date   DATE      := msc_cl_pre_process.v_current_date;
5887   lv_return         NUMBER := 0;
5888   ex_logging_err    EXCEPTION;
5889    lv_column_names   VARCHAR2(5000);
5890 
5891   CURSOR c1(p_batch_id NUMBER)IS
5892     SELECT rowid
5893     FROM   msd_st_cs_data
5894     WHERE  process_flag      IN (G_IN_PROCESS,G_ERROR_FLG)
5895     AND    sr_instance_code = p_instance_code
5896     AND    batch_id         = p_batch_id;
5897 
5898  CURSOR instance_type IS
5899    SELECT instance_type
5900    FROM msc_apps_instances
5901    WHERE instance_id=p_instance_id;
5902 
5903    lv_instance_type  msc_apps_instances.instance_type%TYPE;
5904 
5905    BEGIN
5906 
5907       lv_batch_id := p_batch_id;
5908 
5909       lv_column_names :=
5910 	'	SR_INSTANCE_CODE	||''~''||'
5911 	||'	CS_DEFINITION_NAME	||''~''||'
5912 	||'	CS_NAME	                ||''~''||'
5913 	||'	DELETE_FLAG		||''~''||'
5914 	||'	ATTRIBUTE_2_VAL		||''~''||'
5915 	||'	ATTRIBUTE_4		||''~''||'
5916 	||'	ATTRIBUTE_6_VAL		||''~''||'
5917 	||'	ATTRIBUTE_8		||''~''||'
5918 	||'	ATTRIBUTE_10_VAL	||''~''||'
5919 	||'	ATTRIBUTE_12		||''~''||'
5920 	||'	ATTRIBUTE_14_VAL	||''~''||'
5921 	||'	ATTRIBUTE_16		||''~''||'
5922 	||'	ATTRIBUTE_18_VAL	||''~''||'
5923 	||'	ATTRIBUTE_20		||''~''||'
5924 	||'	ATTRIBUTE_22_VAL	||''~''||'
5925 	||'	ATTRIBUTE_24		||''~''||'
5926 	||'	ATTRIBUTE_26_VAL	||''~''||'
5927 	||'	ATTRIBUTE_28		||''~''||'
5928 	||'	ATTRIBUTE_30_VAL	||''~''||'
5929 	||'	ATTRIBUTE_32		||''~''||'
5930 	||'	ATTRIBUTE_34		||''~''||'
5931 	||'	ATTRIBUTE_41		||''~''||'
5932 	||'	ATTRIBUTE_42		||''~''||'
5933 	||'	ATTRIBUTE_43		||''~''||'
5934 	||'	ATTRIBUTE_44		||''~''||'
5935 	||'	ATTRIBUTE_45 ';
5936 
5937       OPEN  c1(lv_batch_id);
5938       FETCH c1 BULK COLLECT INTO lb_rowid;
5939       CLOSE c1;
5940 
5941       v_sql_stmt := 04;
5942       FORALL j IN lb_rowid.FIRST..lb_rowid.LAST
5943       UPDATE msd_st_cs_data
5944       SET  st_transaction_id = cs_st_data_id,
5945            last_update_date  = lv_current_date,
5946            last_updated_by   = lv_current_user,
5947            creation_date     = lv_current_date,
5948            created_by        = lv_current_user
5949       WHERE  rowid           = lb_rowid(j);
5950 
5951 /*
5952 Earlier sql statement :
5953 UPDATE msd_st_cs_data
5954       SET  st_transaction_id = msd_st_cs_data_s.NEXTVAL,
5955            cs_st_data_id     = msd_st_cs_data_s.CURRVAL,  -- SEQUENCE
5956            last_update_date  = lv_current_date,
5957            last_updated_by   = lv_current_user,
5958            creation_date     = lv_current_date,
5959            created_by        = lv_current_user
5960       WHERE  rowid           = lb_rowid(j);
5961 */
5962      -- Derive the CS_DEFINITION_ID from msd_cs_definitions
5963 
5964     v_sql_stmt := 05;
5965     lv_sql_stmt :=
5966     '   UPDATE  msd_st_cs_data  mscd'
5967     ||' SET     cs_definition_id = NVL(( SELECT cs_definition_id'
5968     ||'         FROM   msd_cs_definitions mcd'
5969     ||'         WHERE mscd.cs_definition_name = mcd.name),'||NULL_VALUE||')'
5970     ||' WHERE  process_flag            = '||G_IN_PROCESS
5971     ||' AND    batch_id                = :lv_batch_id'
5972     ||' AND    sr_instance_code        = :p_instance_code';
5973 
5974       IF lv_debug THEN
5975         msc_st_util.log_message(lv_sql_stmt);
5976       END IF;
5977       EXECUTE IMMEDIATE lv_sql_stmt
5978               USING     lv_batch_id,
5979                         p_instance_code;
5980 
5981 
5982      -- Set the message
5983 
5984       lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
5985                      (p_app_short_name    => 'MSC',
5986                       p_error_code        => 'MSC_PP_INVALID_VALUE',
5987                       p_message_text      => lv_message_text,
5988                       p_error_text        => lv_error_text,
5989                       p_token1            => 'COLUMN_NAME',
5990                       p_token_value1      => 'CS_DEFINITION_NAME');
5991 
5992       IF lv_return <> 0 THEN
5993         RAISE ex_logging_err;
5994       END IF;
5995 
5996      -- Error out the records if the cs_definition_id is still null
5997      -- This indicates that this custom stream has not been defined via UI
5998 
5999       v_sql_stmt := 06;
6000       lv_sql_stmt :=
6001       'UPDATE    msd_st_cs_data'
6002       ||' SET    process_flag            = '||G_ERROR_FLG||','
6003       ||'        error_text      = '||''''||lv_message_text||''''
6004       ||' WHERE  NVL(cs_definition_id,'||NULL_VALUE||') = '||NULL_VALUE
6005       ||' AND    batch_id                = :lv_batch_id'
6006       ||' AND    process_flag            = '||G_IN_PROCESS
6007       ||' AND    sr_instance_code        = :p_instance_code';
6008 
6009       IF lv_debug THEN
6010         msc_st_util.log_message(lv_sql_stmt);
6011       END IF;
6012       EXECUTE IMMEDIATE lv_sql_stmt
6013               USING     lv_batch_id,
6014                         p_instance_code;
6015 
6016 
6017        -- This code is added for fix 3730302.
6018        -- Updating the two date columns REQUESTED_DATE and SCHEDULED_DATE for the 3 CMRO streams.
6019        /*
6020        UPDATE    msd_st_cs_data
6021        SET attribute_45 = attribute_43
6022        WHERE cs_definition_name IN ('MSD_CMRO_FIRM_MTL_REQUIREMENT','MSD_CMRO_UNPLANNED_HISTORY','MSD_CMRO_PLANNED_HISTORY')
6023        AND batch_id         =  lv_batch_id
6024        AND process_flag     =  G_IN_PROCESS
6025        AND sr_instance_code = p_instance_code;
6026 */
6027 
6028       -- Set the message
6029       lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
6030                      (p_app_short_name    => 'MSC',
6031                       p_error_code        => 'MSC_PP_COL_VAL_NULL',
6032                       p_message_text      => lv_message_text,
6033                       p_error_text        => lv_error_text,
6034                       p_token1            => 'COLUMN_NAME',
6035                       p_token_value1      => 'CS_NAME');
6036 
6037       IF lv_return <> 0 THEN
6038         RAISE ex_logging_err;
6039       END IF;
6040 
6041       v_sql_stmt := 07;
6042       lv_sql_stmt :=
6043       'UPDATE    msd_st_cs_data'
6044       ||' SET    process_flag            = '||G_ERROR_FLG||','
6045       ||'        error_text      = '||''''||lv_message_text||''''
6046       ||' WHERE  NVL(cs_name, '||''''||NULL_CHAR||''''||') '
6047       ||'        =               '||''''||NULL_CHAR||''''
6048       ||' AND    batch_id               = :lv_batch_id'
6049       ||' AND    process_flag            = '||G_IN_PROCESS
6050       ||' AND    sr_instance_code       = :p_instance_code';
6051 
6052       IF lv_debug THEN
6053         msc_st_util.log_message(lv_sql_stmt);
6054       END IF;
6055       EXECUTE IMMEDIATE lv_sql_stmt
6056               USING     lv_batch_id,
6057                         p_instance_code;
6058 
6059 
6060 
6061 
6062       -- Set the  message
6063 
6064         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
6065                      (p_app_short_name    => 'MSC',
6066                       p_error_code        => 'MSC_PP_INVALID_VALUE',
6067                       p_message_text      => lv_message_text,
6068                       p_error_text        => lv_error_text,
6069                       p_token1            => 'COLUMN_NAME',
6070                       p_token_value1      => 'PRODUCT LEVEL');
6071 
6072       IF lv_return <> 0 THEN
6073         RAISE ex_logging_err;
6074       END IF;
6075 
6076     -- Derive the level_id , error out if invalid level name
6077     --attribute_2 (prd_level_id)
6078 
6079       lv_return := MSC_ST_UTIL.DERIVE_LEVEL_ID
6080                     (p_table_name     => 'MSD_ST_CS_DATA',
6081                      p_level_name_col => 'ATTRIBUTE_2_VAL',
6082                      p_level_id_col   => 'ATTRIBUTE_2',
6083                      p_severity      => G_SEV3_ERROR ,
6084                      p_message_text    => lv_message_text,
6085                      p_instance_code  => p_instance_code,
6086                      p_batch_id       => lv_batch_id,
6087                      p_error_text     => lv_error_text);
6088 
6089       IF lv_return <> 0 THEN
6090         RAISE ex_logging_err;
6091       END IF;
6092 
6093       -- set the message, attribute_4 is invalid
6094 
6095         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
6096                      (p_app_short_name    => 'MSC',
6097                       p_error_code        => 'MSC_PP_INVALID_VALUE',
6098                       p_message_text      => lv_message_text,
6099                       p_error_text        => lv_error_text,
6100                       p_token1            => 'COLUMN_NAME',
6101                       p_token_value1      => 'PRODUCT LEVEL VALUE');
6102 
6103       IF lv_return <> 0 THEN
6104         RAISE ex_logging_err;
6105       END IF;
6106 
6107      -- Derive SR_LEVEL_PK - attribute_3 from msd_level_values
6108      -- or msd_st_level_values
6109 
6110        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_PK
6111                     (p_table_name      => 'MSD_ST_CS_DATA',
6112                      p_level_val_col   => 'ATTRIBUTE_4',
6113                      p_level_name_col  => 'ATTRIBUTE_2_VAL',
6114                      p_level_pk_col    =>  'ATTRIBUTE_3',
6115                      p_instance_code   => p_instance_code,
6116                      p_instance_id     => p_instance_id,
6117                      p_message_text    => lv_message_text,
6118                      p_batch_id        => lv_batch_id,
6119                      p_error_text      => lv_error_text);
6120 
6121       IF lv_return <> 0 THEN
6122         RAISE ex_logging_err;
6123       END IF;
6124 
6125        -- Set the  message
6126 
6127         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
6128                      (p_app_short_name    => 'MSC',
6129                       p_error_code        => 'MSC_PP_INVALID_VALUE',
6130                       p_message_text      => lv_message_text,
6131                       p_error_text        => lv_error_text,
6132                       p_token1            => 'COLUMN_NAME',
6133                       p_token_value1      => 'GEOGRAPHY LEVEL');
6134 
6135       IF lv_return <> 0 THEN
6136         RAISE ex_logging_err;
6137       END IF;
6138 
6139     -- Derive the level_id , error out if invalid level name
6140     -- Attribute_6 (geo_level_id)
6141 
6142       lv_return := MSC_ST_UTIL.DERIVE_LEVEL_ID
6143                     (p_table_name     => 'MSD_ST_CS_DATA',
6144                      p_level_name_col => 'ATTRIBUTE_6_VAL',
6145                      p_level_id_col   => 'ATTRIBUTE_6',
6146                      p_severity       => G_SEV3_ERROR ,
6147                      p_message_text    => lv_message_text,
6148                      p_instance_code  => p_instance_code,
6149                      p_batch_id       => lv_batch_id,
6150                      p_error_text     => lv_error_text);
6151 
6152       IF lv_return <> 0 THEN
6153         RAISE ex_logging_err;
6154       END IF;
6155 
6156       -- set the message, attribute_8 is invalid
6157 
6158         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
6159                      (p_app_short_name    => 'MSC',
6160                       p_error_code        => 'MSC_PP_INVALID_VALUE',
6161                       p_message_text      => lv_message_text,
6162                       p_error_text        => lv_error_text,
6163                       p_token1            => 'COLUMN_NAME',
6164                       p_token_value1      => 'GEOGRAPHY LEVEL VALUE');
6165 
6166       IF lv_return <> 0 THEN
6167         RAISE ex_logging_err;
6168       END IF;
6169 
6170      -- Derive SR_LEVEL_PK - attribute_7 from msd_level_values
6171      -- or msd_st_level_values
6172 
6173        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_PK
6174                     (p_table_name      => 'MSD_ST_CS_DATA',
6175                      p_level_val_col   => 'ATTRIBUTE_8',
6176                      p_level_name_col  => 'ATTRIBUTE_6_VAL',
6177                      p_level_pk_col    => 'ATTRIBUTE_7',
6178                      p_instance_code   => p_instance_code,
6179                      p_instance_id     => p_instance_id,
6180                      p_message_text    => lv_message_text,
6181                      p_batch_id        => lv_batch_id,
6182                      p_error_text      => lv_error_text);
6183 
6184       IF lv_return <> 0 THEN
6185         RAISE ex_logging_err;
6186       END IF;
6187 
6188 
6189       -- Set the  message
6190         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
6191                      (p_app_short_name    => 'MSC',
6192                       p_error_code        => 'MSC_PP_INVALID_VALUE',
6193                       p_message_text      => lv_message_text,
6194                       p_error_text        => lv_error_text,
6195                       p_token1            => 'COLUMN_NAME',
6196                       p_token_value1      => 'SHIP FROM LOCATION LEVEL');
6197 
6198       IF lv_return <> 0 THEN
6199         RAISE ex_logging_err;
6200       END IF;
6201 
6202     -- Derive the level_id , error out if invalid level name
6203     -- attribute_10 (org_level_id)
6204 
6205       lv_return := MSC_ST_UTIL.DERIVE_LEVEL_ID
6206                     (p_table_name     => 'MSD_ST_CS_DATA',
6207                      p_level_name_col => 'ATTRIBUTE_10_VAL',
6208                      p_level_id_col   => 'ATTRIBUTE_10',
6209                      p_severity       => G_SEV3_ERROR ,
6210                      p_message_text    => lv_message_text,
6211                      p_instance_code  => p_instance_code,
6212                      p_batch_id       => lv_batch_id,
6213                      p_error_text     => lv_error_text);
6214 
6215       IF lv_return <> 0 THEN
6216         RAISE ex_logging_err;
6217       END IF;
6218 
6219       -- set the message, attribute_12 is invalid
6220 
6221         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
6222                      (p_app_short_name    => 'MSC',
6223                       p_error_code        => 'MSC_PP_INVALID_VALUE',
6224                       p_message_text      => lv_message_text,
6225                       p_error_text        => lv_error_text,
6226                       p_token1            => 'COLUMN_NAME',
6227                       p_token_value1      => 'SHIP FROM LOCATION LEVEL VALUE');
6228 
6229       IF lv_return <> 0 THEN
6230         RAISE ex_logging_err;
6231       END IF;
6232 
6233      -- Derive SR_LEVEL_PK - attribute_11 from msd_level_values
6234      -- or msd_st_level_values
6235 
6236        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_PK
6237                     (p_table_name      => 'MSD_ST_CS_DATA',
6238                      p_level_val_col   => 'ATTRIBUTE_12',
6239                      p_level_name_col    => 'ATTRIBUTE_10_VAL',
6240                      p_level_pk_col => 'ATTRIBUTE_11',
6241                      p_instance_code   => p_instance_code,
6242                      p_instance_id     => p_instance_id,
6243                      p_message_text    => lv_message_text,
6244                      p_batch_id        => lv_batch_id,
6245                      p_error_text      => lv_error_text);
6246 
6247       IF lv_return <> 0 THEN
6248         RAISE ex_logging_err;
6249       END IF;
6250 
6251  /*     -- Set the  message
6252         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
6253                      (p_app_short_name    => 'MSC',
6254                       p_error_code        => 'MSC_PP_INVALID_VALUE',
6255                       p_message_text      => lv_message_text,
6256                       p_error_text        => lv_error_text,
6257                       p_token1            => 'COLUMN_NAME',
6258                       p_token_value1      => 'PARENT ITEM LEVEL');
6259 
6260       IF lv_return <> 0 THEN
6261         RAISE ex_logging_err;
6262       END IF;
6263 
6264     -- Derive the level_id , error out if invalid level name
6265     --attribute_14 (cus_level_id)
6266 
6267       lv_return := MSC_ST_UTIL.DERIVE_LEVEL_ID
6268                     (p_table_name     => 'MSD_ST_CS_DATA',
6269                      p_level_name_col => 'ATTRIBUTE_14_VAL',
6270                      p_level_id_col   => 'ATTRIBUTE_14',
6271                      p_severity      => G_SEV3_ERROR ,
6272                      p_message_text    => lv_message_text,
6273                      p_instance_code  => p_instance_code,
6274                      p_batch_id       => lv_batch_id,
6275                      p_error_text     => lv_error_text);
6276 
6277       IF lv_return <> 0 THEN
6278         RAISE ex_logging_err;
6279       END IF;
6280 */
6281 
6282   v_sql_stmt := 08;
6283  lv_sql_stmt :=
6284     '   UPDATE  msd_st_cs_data  mscd'
6285     ||' SET     attribute_14 = 1'
6286     ||' WHERE  attribute_16 is not null'
6287     ||' AND    process_flag            = '||G_IN_PROCESS
6288     ||' AND    batch_id                = :lv_batch_id'
6289     ||' AND    sr_instance_code        = :p_instance_code';
6290 
6291       IF lv_debug THEN
6292         msc_st_util.log_message(lv_sql_stmt);
6293       END IF;
6294 
6295    EXECUTE IMMEDIATE lv_sql_stmt
6296               USING     lv_batch_id,
6297                         p_instance_code;
6298 
6299 
6300       -- set the message, attribute_16 is invalid
6301 
6302         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
6303                      (p_app_short_name    => 'MSC',
6304                       p_error_code        => 'MSC_PP_INVALID_VALUE',
6305                       p_message_text      => lv_message_text,
6306                       p_error_text        => lv_error_text,
6307                       p_token1            => 'COLUMN_NAME',
6308                       p_token_value1      => 'PARENT ITEM NAME');
6309 
6310       IF lv_return <> 0 THEN
6311         RAISE ex_logging_err;
6312       END IF;
6313 
6314      -- Derive SR_LEVEL_PK - attribute_15 from msd_level_values
6315      -- or msd_st_level_values
6316 
6317        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_PK
6318                     (p_table_name      => 'MSD_ST_CS_DATA',
6319                      p_level_val_col   => 'ATTRIBUTE_16',
6320                      p_level_name_col    => 'ATTRIBUTE_14_VAL',
6321                      p_level_pk_col => 'ATTRIBUTE_15',
6322                      p_instance_code   => p_instance_code,
6323                      p_instance_id     => p_instance_id,
6324                      p_message_text    => lv_message_text,
6325                      p_batch_id        => lv_batch_id,
6326                      p_error_text      => lv_error_text);
6327 
6328       IF lv_return <> 0 THEN
6329         RAISE ex_logging_err;
6330       END IF;
6331 
6332 
6333 
6334       -- Set the  message
6335         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
6336                      (p_app_short_name    => 'MSC',
6337                       p_error_code        => 'MSC_PP_INVALID_VALUE',
6338                       p_message_text      => lv_message_text,
6339                       p_error_text        => lv_error_text,
6340                       p_token1            => 'COLUMN_NAME',
6341                       p_token_value1      => 'SALES REPRESANTATIVE LEVEL');
6342 
6343       IF lv_return <> 0 THEN
6344         RAISE ex_logging_err;
6345       END IF;
6346 
6347     -- Derive the level_id , error out if invalid level name
6348     --attribute_18 (rep_level_id)
6349 
6350       lv_return := MSC_ST_UTIL.DERIVE_LEVEL_ID
6351                     (p_table_name     => 'MSD_ST_CS_DATA',
6352                      p_level_name_col => 'ATTRIBUTE_18_VAL',
6353                      p_level_id_col   => 'ATTRIBUTE_18',
6354                      p_severity      => G_SEV3_ERROR ,
6355                      p_message_text    => lv_message_text,
6356                      p_instance_code  => p_instance_code,
6357                      p_batch_id       => lv_batch_id,
6358                      p_error_text     => lv_error_text);
6359 
6360       IF lv_return <> 0 THEN
6361         RAISE ex_logging_err;
6362       END IF;
6363 
6364 
6365       -- set the message, attribute_20 is invalid
6366 
6367         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
6368                      (p_app_short_name    => 'MSC',
6369                       p_error_code        => 'MSC_PP_INVALID_VALUE',
6370                       p_message_text      => lv_message_text,
6371                       p_error_text        => lv_error_text,
6372                       p_token1            => 'COLUMN_NAME',
6373                       p_token_value1      => 'SALES REPRESANTATIVE LEVEL VALUE');
6374 
6375       IF lv_return <> 0 THEN
6376         RAISE ex_logging_err;
6377       END IF;
6378 
6379      -- Derive SR_LEVEL_PK - attribute_19 from msd_level_values
6380      -- or msd_st_level_values
6381 
6382        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_PK
6383                     (p_table_name      => 'MSD_ST_CS_DATA',
6384                      p_level_val_col   => 'ATTRIBUTE_20',
6385                      p_level_name_col    => 'ATTRIBUTE_18_VAL',
6386                      p_level_pk_col => 'ATTRIBUTE_19',
6387                      p_instance_code   => p_instance_code,
6388                      p_instance_id     => p_instance_id,
6389                      p_message_text    => lv_message_text,
6390                      p_batch_id        => lv_batch_id,
6391                      p_error_text      => lv_error_text);
6392 
6393       IF lv_return <> 0 THEN
6394         RAISE ex_logging_err;
6395       END IF;
6396 
6397       -- Set the  message
6398         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
6399                      (p_app_short_name    => 'MSC',
6400                       p_error_code        => 'MSC_PP_INVALID_VALUE',
6401                       p_message_text      => lv_message_text,
6402                       p_error_text        => lv_error_text,
6403                       p_token1            => 'COLUMN_NAME',
6404                       p_token_value1      => 'SALES CHANNEL LEVEL');
6405 
6406       IF lv_return <> 0 THEN
6407         RAISE ex_logging_err;
6408       END IF;
6409 
6410 
6411     -- Derive the level_id , error out if invalid level name
6412     --attribute_22 (chn_level_id)
6413 
6414       lv_return := MSC_ST_UTIL.DERIVE_LEVEL_ID
6415                     (p_table_name     => 'MSD_ST_CS_DATA',
6416                      p_level_name_col => 'ATTRIBUTE_22_VAL',
6417                      p_level_id_col   => 'ATTRIBUTE_22',
6418                      p_severity      => G_SEV3_ERROR ,
6419                      p_message_text    => lv_message_text,
6420                      p_instance_code  => p_instance_code,
6421                      p_batch_id       => lv_batch_id,
6422                      p_error_text     => lv_error_text);
6423 
6424       IF lv_return <> 0 THEN
6425         RAISE ex_logging_err;
6426       END IF;
6427 
6428       -- set the message, attribute_24 is invalid
6429 
6430         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
6431                      (p_app_short_name    => 'MSC',
6432                       p_error_code        => 'MSC_PP_INVALID_VALUE',
6433                       p_message_text      => lv_message_text,
6434                       p_error_text        => lv_error_text,
6435                       p_token1            => 'COLUMN_NAME',
6436                       p_token_value1      => 'SALES CHANNEL LEVEL VALUE');
6437 
6438       IF lv_return <> 0 THEN
6439         RAISE ex_logging_err;
6440       END IF;
6441 
6442      -- Derive SR_LEVEL_PK - attribute_23 from msd_level_values
6443      -- or msd_st_level_values
6444 
6445        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_PK
6446                     (p_table_name      => 'MSD_ST_CS_DATA',
6447                      p_level_val_col   => 'ATTRIBUTE_24',
6448                      p_level_name_col    => 'ATTRIBUTE_22_VAL',
6449                      p_level_pk_col => 'ATTRIBUTE_23',
6450                      p_instance_code   => p_instance_code,
6451                      p_instance_id     => p_instance_id,
6452                      p_message_text    => lv_message_text,
6453                      p_batch_id        => lv_batch_id,
6454                      p_error_text      => lv_error_text);
6455 
6456       IF lv_return <> 0 THEN
6457         RAISE ex_logging_err;
6458       END IF;
6459 
6460       -- Set the  message
6461         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
6462                      (p_app_short_name    => 'MSC',
6463                       p_error_code        => 'MSC_PP_INVALID_VALUE',
6464                       p_message_text      => lv_message_text,
6465                       p_error_text        => lv_error_text,
6466                       p_token1            => 'COLUMN_NAME',
6467                       p_token_value1      => 'USER DEFINED DIMENION 1 LEVEL');
6468 
6469       IF lv_return <> 0 THEN
6470         RAISE ex_logging_err;
6471       END IF;
6472 
6473 
6474     -- Derive the level_id , error out if invalid level name
6475     --attribute_26 (ud1_level_id)
6476 
6477       lv_return := MSC_ST_UTIL.DERIVE_LEVEL_ID
6478                     (p_table_name     => 'MSD_ST_CS_DATA',
6479                      p_level_name_col => 'ATTRIBUTE_26_VAL',
6480                      p_level_id_col   => 'ATTRIBUTE_26',
6481                      p_severity      => G_SEV3_ERROR ,
6482                      p_message_text    => lv_message_text,
6483                      p_instance_code  => p_instance_code,
6484                      p_batch_id       => lv_batch_id,
6485                      p_error_text     => lv_error_text);
6486 
6487       IF lv_return <> 0 THEN
6488         RAISE ex_logging_err;
6489       END IF;
6490 
6491       -- set the message, attribute_28 is invalid
6492 
6493         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
6494                      (p_app_short_name    => 'MSC',
6495                       p_error_code        => 'MSC_PP_INVALID_VALUE',
6496                       p_message_text      => lv_message_text,
6497                       p_error_text        => lv_error_text,
6498                       p_token1            => 'COLUMN_NAME',
6499                       p_token_value1      => 'USER DEFINED DIMENION 1 LEVEL VALUE');
6500 
6501       IF lv_return <> 0 THEN
6502         RAISE ex_logging_err;
6503       END IF;
6504 
6505      -- Derive SR_LEVEL_PK - attribute_27 from msd_level_values
6506      -- or msd_st_level_values
6507 
6508        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_PK
6509                     (p_table_name      => 'MSD_ST_CS_DATA',
6510                      p_level_val_col   => 'ATTRIBUTE_28',
6511                      p_level_name_col    => 'ATTRIBUTE_26_VAL',
6512                      p_level_pk_col => 'ATTRIBUTE_27',
6513                      p_instance_code   => p_instance_code,
6514                      p_instance_id     => p_instance_id,
6515                      p_message_text    => lv_message_text,
6516                      p_batch_id        => lv_batch_id,
6517                      p_error_text      => lv_error_text);
6518 
6519       IF lv_return <> 0 THEN
6520         RAISE ex_logging_err;
6521       END IF;
6522 
6523       -- Set the  message
6524         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
6525                      (p_app_short_name    => 'MSC',
6526                       p_error_code        => 'MSC_PP_INVALID_VALUE',
6527                       p_message_text      => lv_message_text,
6528                       p_error_text        => lv_error_text,
6529                       p_token1            => 'COLUMN_NAME',
6530                       p_token_value1      => 'USER DEFINED DIMENION 2 LEVEL');
6531 
6532       IF lv_return <> 0 THEN
6533         RAISE ex_logging_err;
6534       END IF;
6535 
6536     -- Derive the level_id , error out if invalid level name
6537     --attribute_30 (ud2_level_id)
6538 
6539       lv_return := MSC_ST_UTIL.DERIVE_LEVEL_ID
6540                     (p_table_name     => 'MSD_ST_CS_DATA',
6541                      p_level_name_col => 'ATTRIBUTE_30_VAL',
6542                      p_level_id_col   => 'ATTRIBUTE_30',
6543                      p_severity       => G_SEV3_ERROR,
6544                      p_message_text   => lv_message_text,
6545                      p_instance_code  => p_instance_code,
6546                      p_batch_id       => lv_batch_id,
6547                      p_error_text     => lv_error_text);
6548 
6549       IF lv_return <> 0 THEN
6550         RAISE ex_logging_err;
6551       END IF;
6552 
6553       -- set the message, attribute_32 is invalid
6554 
6555         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
6556                      (p_app_short_name    => 'MSC',
6557                       p_error_code        => 'MSC_PP_INVALID_VALUE',
6558                       p_message_text      => lv_message_text,
6559                       p_error_text        => lv_error_text,
6560                       p_token1            => 'COLUMN_NAME',
6561                       p_token_value1      => 'USER DEFINED DIMENION 2 LEVEL VALUE');
6562 
6563       IF lv_return <> 0 THEN
6564         RAISE ex_logging_err;
6565       END IF;
6566 
6567      -- Derive SR_LEVEL_PK - attribute_31 from msd_level_values
6568      -- or msd_st_level_values
6569 
6570        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_PK
6571                     (p_table_name      => 'MSD_ST_CS_DATA',
6572                      p_level_val_col   => 'ATTRIBUTE_32',
6573                      p_level_name_col    => 'ATTRIBUTE_30_VAL',
6574                      p_level_pk_col => 'ATTRIBUTE_31',
6575                      p_instance_code   => p_instance_code,
6576                      p_instance_id     => p_instance_id,
6577                      p_message_text    => lv_message_text,
6578                      p_batch_id        => lv_batch_id,
6579                      p_error_text      => lv_error_text);
6580 
6581       IF lv_return <> 0 THEN
6582         RAISE ex_logging_err;
6583       END IF;
6584 
6585 -- Demand Class Changes for Custom Stream data starts
6586        -- Set the  message
6587         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
6588                      (p_app_short_name    => 'MSC',
6589                       p_error_code        => 'MSC_PP_INVALID_VALUE',
6590                       p_message_text      => lv_message_text,
6591                       p_error_text        => lv_error_text,
6592                       p_token1            => 'COLUMN_NAME',
6593                       p_token_value1      => 'DEMAND CLASS LEVEL');
6594 
6595       IF lv_return <> 0 THEN
6596         RAISE ex_logging_err;
6597       END IF;
6598 
6599     -- Derive the level_id , error out if invalid level name
6600     -- attribute_50 (demand_class_level_id)
6601 
6602       lv_return := MSC_ST_UTIL.DERIVE_LEVEL_ID
6603                     (p_table_name     => 'MSD_ST_CS_DATA',
6604                      p_level_name_col => 'ATTRIBUTE_50_VAL',
6605                      p_level_id_col   => 'ATTRIBUTE_50',
6606                      p_severity       => G_SEV3_ERROR ,
6607                      p_message_text    => lv_message_text,
6608                      p_instance_code  => p_instance_code,
6609                      p_batch_id       => lv_batch_id,
6610                      p_error_text     => lv_error_text);
6611 
6612       IF lv_return <> 0 THEN
6613         RAISE ex_logging_err;
6614       END IF;
6615 
6616  -- set the message, attribute_52 is invalid
6617 
6618         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
6619                      (p_app_short_name    => 'MSC',
6620                       p_error_code        => 'MSC_PP_INVALID_VALUE',
6621                       p_message_text      => lv_message_text,
6622                       p_error_text        => lv_error_text,
6623                       p_token1            => 'COLUMN_NAME',
6624                       p_token_value1      => 'DEMAND CLASS LEVEL VALUE');
6625 
6626       IF lv_return <> 0 THEN
6627         RAISE ex_logging_err;
6628       END IF;
6629 
6630      -- Derive SR_LEVEL_PK - attribute_51 from msd_level_values
6631      -- or msd_st_level_values
6632 
6633        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_PK
6634                     (p_table_name      => 'MSD_ST_CS_DATA',
6635                      p_level_val_col   => 'ATTRIBUTE_52',
6636                      p_level_name_col  => 'ATTRIBUTE_50_VAL',
6637                      p_level_pk_col    => 'ATTRIBUTE_51',
6638                      p_instance_code   => p_instance_code,
6639                      p_instance_id     => p_instance_id,
6640                      p_message_text    => lv_message_text,
6641                      p_batch_id        => lv_batch_id,
6642                      p_error_text      => lv_error_text);
6643 
6644       IF lv_return <> 0 THEN
6645         RAISE ex_logging_err;
6646       END IF;
6647 
6648 
6649  -- Demand Class Changes for Custom Stream data ends
6650 
6651    OPEN instance_type;
6652       FETCH instance_type into lv_instance_type;
6653    CLOSE instance_type;
6654 
6655 
6656    IF (lv_instance_type = G_INS_OTHER) THEN
6657 
6658      lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
6659                      (p_app_short_name    => 'MSC',
6660                       p_error_code        => 'MSC_PP_COL_REF_NOT_EXIST',
6661                       p_message_text      => lv_message_text,
6662                       p_error_text        => lv_error_text,
6663                       p_token1            => 'COLUMN_NAMES',
6664                       p_token_value1      => 'SR_INSTANCE_CODE AND'
6665                                              ||' INV_ORG AND ITEM AND ITEM.ATO_FORECAST_CONTROL'
6666                                              ||' AND ITEM.MRP_PLANNING_CODE',
6667                       p_token2            => 'MASTER_TABLE',
6668                       p_token_value2      => 'MSC_SYSTEM_ITEMS',
6669                       p_token3            => 'CHILD_TABLE',
6670                       p_token_value3      => 'MSD_ST_CS_DATA');
6671 
6672       IF lv_return <> 0 THEN
6673         RAISE ex_logging_err;
6674       END IF;
6675 
6676       -- Validate item-org combination
6677       v_sql_stmt := 15;
6678 
6679       UPDATE msd_st_cs_data mcd
6680       SET    process_flag = G_ERROR_FLG,
6681              error_text   = lv_message_text
6682       WHERE NOT EXISTS(SELECT 1
6683                        FROM   msc_st_system_items msi
6684                        WHERE  msi.sr_instance_id                  = p_instance_id
6685                        AND    nvl(msi.company_name,lv_my_company) = lv_my_company
6686                        AND    msi.organization_id                 = mcd.attribute_11
6687                        AND    msi.item_name                       = mcd.attribute_4
6688                        AND   ((v_plan_per_profile = 4) OR (msi.ato_forecast_control <> 3))        --forecast control - none
6689                        AND   ((msi.mrp_planning_code  <> 6 ) OR (msi.pick_components_flag='Y' ))  --Not planned item
6690                        UNION
6691                        SELECT 1
6692                        FROM   msc_system_items mls
6693                        WHERE  mls.sr_instance_id                  = p_instance_id
6694                        AND    mls.organization_id                 = mcd.attribute_11
6695                        AND    mls.item_name                       = mcd.attribute_4
6696                        AND    mls.plan_id                         = -1
6697                        AND   ((v_plan_per_profile = 4) OR (mls.ato_forecast_control <> 3))        --forecast control - none
6698                        AND   ((mls.mrp_planning_code <> 6 ) OR (mls.pick_components_flag='Y' )) ) --Not planned item
6699       AND    mcd.attribute_2             = 1
6700       AND    mcd.attribute_10            = 7
6701       AND    mcd.process_flag            = G_IN_PROCESS
6702       AND    mcd.sr_instance_code        = p_instance_code
6703       AND    mcd.batch_id                = p_batch_id;
6704 
6705   END IF;
6706 
6707       --Call to customised validation.
6708       MSC_CL_PRE_PROCESS_HOOK.ENTITY_VALIDATION
6709         (ERRBUF         => lv_error_text,
6710          RETCODE        => lv_return,
6711          pBatchID       => null,
6712          pInstanceCode  => p_instance_code,
6713          pEntityName    => 'MSD_ST_CS_DATA',
6714          pInstanceID    => p_instance_id);
6715 
6716       IF lv_return <> 0 THEN
6717         RAISE ex_logging_err;
6718       END IF;
6719 
6720       --Call to customised validation.
6721       MSC_CL_PRE_PROCESS_HOOK.ENTITY_VALIDATION
6722         (ERRBUF         => lv_error_text,
6723          RETCODE        => lv_return,
6724          pBatchID       => lv_batch_id,
6725          pInstanceCode  => p_instance_code,
6726          pEntityName    => 'MSD_ST_CS_DATA',
6727          pInstanceID    => p_instance_id);
6728 
6729       IF NVL(lv_return,0) <> 0 THEN
6730         RAISE ex_logging_err;
6731       END IF;
6732 
6733      -- Set the process flag as Valid and populate instance_id
6734       lv_return := MSC_ST_UTIL.SET_PROCESS_FLAG
6735                         (p_table_name     => 'MSD_ST_CS_DATA',
6736                          p_instance_id    => p_instance_id,
6737                          p_instance_code  => p_instance_code,
6738                          p_process_flag   => G_VALID,
6739                          p_error_text     => lv_error_text,
6740                          p_batch_id       => lv_batch_id,
6741                          p_instance_id_col=> 'ATTRIBUTE_1');
6742 
6743       IF lv_return <> 0 THEN
6744         RAISE ex_logging_err;
6745       END IF;
6746 
6747       -- Inserting all the errored out records into MSC_ERRORS:
6748 
6749       lv_return := MSC_ST_UTIL.LOG_ERROR
6750                    (p_table_name        => 'MSD_ST_CS_DATA',
6751                     p_instance_code     => p_instance_code,
6752                     p_row               => lv_column_names,
6753                     p_severity          => G_SEV_ERROR,
6754                     p_error_text        => lv_error_text,
6755                     p_message_text      => NULL,
6756                     p_batch_id          => lv_batch_id);
6757 
6758     IF(lv_return <> 0) THEN
6759       msc_st_util.log_message(lv_error_text);
6760     END IF;
6761     COMMIT;
6762 
6763     EXCEPTION
6764      WHEN ex_logging_err THEN
6765         ROLLBACK;
6766 
6767         ERRBUF := lv_error_text;
6768         RETCODE := G_WARNING;
6769         msc_st_util.log_message(lv_error_text);
6770 
6771     WHEN OTHERS THEN
6772       ROLLBACK;
6773 
6774       lv_error_text    := substr('MSD_CL_PRE_PROCESS.LOAD_CS_DATA'||'('
6775                        ||v_sql_stmt||')'|| SQLERRM, 1, 240);
6776       msc_st_util.log_message(lv_error_text);
6777       ERRBUF := lv_error_text;
6778       RETCODE := G_WARNING;
6779 
6780   END LOAD_CS_DATA;
6781 
6782   /*==========================================================================+
6783   | DESCRIPTION  : This function performs the validation and loads the data   |
6784   |                for business object Price List                             |
6785   +==========================================================================*/
6786 
6787   PROCEDURE LOAD_PRICE_LIST (ERRBUF          OUT NOCOPY VARCHAR,
6788                              RETCODE         OUT NOCOPY NUMBER,
6789                              p_instance_code IN VARCHAR,
6790                              p_instance_id   IN NUMBER,
6791                              p_batch_id      IN NUMBER)
6792 
6793   IS
6794   TYPE RowidTab IS TABLE OF ROWID INDEX BY BINARY_INTEGER;
6795   lb_rowid          RowidTab;
6796   lv_sql_stmt       VARCHAR2(4000);
6797   lv_batch_id       msd_st_price_list.batch_id%TYPE;
6798   lv_message_text   msc_errors.error_text%TYPE;
6799   lv_my_company     msc_companies.company_name%TYPE := GET_MY_COMPANY;
6800   lv_error_text     VARCHAR2(250);
6801   lv_debug          BOOLEAN   := msc_cl_pre_process.v_debug;
6802   lv_batch_size     NUMBER    := msc_cl_pre_process.v_batch_size;
6803   lv_current_user   NUMBER    := msc_cl_pre_process.v_current_user;
6804   lv_current_date   DATE      := msc_cl_pre_process.v_current_date;
6805   lv_return         NUMBER := 0;
6806   ex_logging_err    EXCEPTION;
6807   lv_column_names   VARCHAR2(5000);
6808 
6809   CURSOR c1(p_batch_id NUMBER)IS
6810     SELECT rowid
6811     FROM   msd_st_price_list
6812     WHERE  process_flag      IN (G_IN_PROCESS,G_ERROR_FLG)
6813     AND    sr_instance_code = p_instance_code
6814     AND    batch_id         = p_batch_id;
6815 
6816   CURSOR instance_type IS
6817    SELECT instance_type
6818    FROM msc_apps_instances
6819    WHERE instance_id=p_instance_id;
6820 
6821    lv_instance_type  msc_apps_instances.instance_type%TYPE;
6822 
6823    BEGIN
6824 
6825       lv_batch_id := p_batch_id;
6826 
6827 	lv_column_names :=
6828 	  '	SR_INSTANCE_CODE	||''~''||'
6829 	||'	ORGANIZATION_LVL	||''~''||'
6830 	||'	SR_ORGANIZATION_LVL_VAL	||''~''||'
6831 	||'	PRODUCT_LVL		||''~''||'
6832 	||'	SR_PRODUCT_LVL_VAL	||''~''||'
6833 	||'	SALESCHANNEL_LVL	||''~''||'
6834 	||'	SR_SALESCHANNEL_LVL_VAL	||''~''||'
6835 	||'	SALES_REP_LVL		||''~''||'
6836 	||'	SR_SALES_REP_LVL_VAL	||''~''||'
6837 	||'	GEOGRAPHY_LVL		||''~''||'
6838 	||'	SR_GEOGRAPHY_LVL_VAL	||''~''||'
6839 	||'	USER_DEFINED1_LVL	||''~''||'
6840 	||'	SR_USER_DEFINED1_LVL_VAL||''~''||'
6841 	||'	USER_DEFINED2_LVL	||''~''||'
6842 	||'	SR_USER_DEFINED2_LVL_VAL||''~''||'
6843 	||'	PRICE_LIST_NAME		||''~''||'
6844 	||'	START_DATE		||''~''||'
6845 	||'	END_DATE		||''~''||'
6846 	||'	PRICE			||''~''||'
6847 	||'	PRIORITY';
6848 
6849       OPEN  c1(lv_batch_id);
6850       FETCH c1 BULK COLLECT INTO lb_rowid;
6851       CLOSE c1;
6852 
6853       v_sql_stmt := 04;
6854       FORALL j IN lb_rowid.FIRST..lb_rowid.LAST
6855       UPDATE msd_st_price_list
6856       SET  st_transaction_id = msd_st_price_list_s.NEXTVAL,
6857            last_update_date  = lv_current_date,
6858            last_updated_by   = lv_current_user,
6859            creation_date     = lv_current_date,
6860            created_by        = lv_current_user
6861       WHERE  rowid           = lb_rowid(j);
6862 
6863 
6864       -- Set the  message
6865 
6866         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
6867                      (p_app_short_name    => 'MSC',
6868                       p_error_code        => 'MSC_PP_INVALID_VALUE',
6869                       p_message_text      => lv_message_text,
6870                       p_error_text        => lv_error_text,
6871                       p_token1            => 'COLUMN_NAME',
6872                       p_token_value1      => 'ORGANIZATION_LVL');
6873 
6874       IF lv_return <> 0 THEN
6875         RAISE ex_logging_err;
6876       END IF;
6877 
6878     -- Derive the org_level_id , error out if invalid level name
6879 
6880 
6881       lv_return := MSC_ST_UTIL.DERIVE_LEVEL_ID
6882                     (p_table_name     => 'MSD_ST_PRICE_LIST',
6883                      p_level_name_col => 'ORGANIZATION_LVL',
6884                      p_level_id_col   => 'ORGANIZATION_LVL_ID',
6885                      p_severity       => G_SEV_ERROR,	-- Against Bug#2413920
6886                      p_message_text    => lv_message_text,
6887                      p_instance_code  => p_instance_code,
6888                      p_batch_id       => lv_batch_id,
6889                      p_error_text     => lv_error_text);
6890 
6891       IF lv_return <> 0 THEN
6892         RAISE ex_logging_err;
6893       END IF;
6894 
6895       -- set the message, ORGANIZATION_LVL is invalid
6896 
6897         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
6898                      (p_app_short_name    => 'MSC',
6899                       p_error_code        => 'MSC_PP_INVALID_VALUE',
6900                       p_message_text      => lv_message_text,
6901                       p_error_text        => lv_error_text,
6902                       p_token1            => 'COLUMN_NAME',
6903                       p_token_value1      => 'SR_ORGANIZATION_LVL_VAL');
6904 
6905       IF lv_return <> 0 THEN
6906         RAISE ex_logging_err;
6907       END IF;
6908 
6909      -- Derive SR_ORGANIZATION_LVL_PK
6910 
6911        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_PK
6912                     (p_table_name      => 'MSD_ST_PRICE_LIST',
6913                      p_level_val_col   => 'SR_ORGANIZATION_LVL_VAL',
6914                      p_level_name_col  => 'ORGANIZATION_LVL',
6915                      p_level_pk_col    => 'SR_ORGANIZATION_LVL_PK',
6916                      p_instance_code   => p_instance_code,
6917                      p_instance_id     => p_instance_id,
6918                      p_message_text    => lv_message_text,
6919                      p_batch_id        => lv_batch_id,
6920                      p_severity        => G_SEV_ERROR,	-- Against Bug#2413920
6921                      p_error_text      => lv_error_text);
6922 
6923       IF lv_return <> 0 THEN
6924         RAISE ex_logging_err;
6925       END IF;
6926 
6927 
6928       -- Set the  message
6929 
6930         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
6931                      (p_app_short_name    => 'MSC',
6932                       p_error_code        => 'MSC_PP_INVALID_VALUE',
6933                       p_message_text      => lv_message_text,
6934                       p_error_text        => lv_error_text,
6935                       p_token1            => 'COLUMN_NAME',
6936                       p_token_value1      => 'PRODUCT_LVL');
6937 
6938       IF lv_return <> 0 THEN
6939         RAISE ex_logging_err;
6940       END IF;
6941 
6942     -- Derive the PRODUCT_LVL_ID, error out if invalid level name
6943 
6944 
6945       lv_return := MSC_ST_UTIL.DERIVE_LEVEL_ID
6946                     (p_table_name     => 'MSD_ST_PRICE_LIST',
6947                      p_level_name_col => 'PRODUCT_LVL',
6948                      p_level_id_col   => 'PRODUCT_LVL_ID',
6949                      p_severity       => G_SEV_ERROR,	-- Against Bug#2413920
6950                      p_message_text    => lv_message_text,
6951                      p_instance_code  => p_instance_code,
6952                      p_batch_id       => lv_batch_id,
6953                      p_error_text     => lv_error_text);
6954 
6955       IF lv_return <> 0 THEN
6956         RAISE ex_logging_err;
6957       END IF;
6958 
6959       -- set the message, PRODUCT_LVL is invalid
6960 
6961         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
6962                      (p_app_short_name    => 'MSC',
6963                       p_error_code        => 'MSC_PP_INVALID_VALUE',
6964                       p_message_text      => lv_message_text,
6965                       p_error_text        => lv_error_text,
6966                       p_token1            => 'COLUMN_NAME',
6967                       p_token_value1      => 'SR_PRODUCT_LVL_VAL');
6968 
6969       IF lv_return <> 0 THEN
6970         RAISE ex_logging_err;
6971       END IF;
6972 
6973      -- Derive SR_PRODUCT_LVL_PK
6974 
6975        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_PK
6976                     (p_table_name      => 'MSD_ST_PRICE_LIST',
6977                      p_level_val_col   => 'SR_PRODUCT_LVL_VAL',
6978                      p_level_name_col  => 'PRODUCT_LVL',
6979                      p_level_pk_col    => 'SR_PRODUCT_LVL_PK',
6980                      p_instance_code   => p_instance_code,
6981                      p_instance_id     => p_instance_id,
6982                      p_message_text    => lv_message_text,
6983                      p_batch_id        => lv_batch_id,
6984                      p_severity        => G_SEV_ERROR,	-- Against Bug#2413920
6985                      p_error_text      => lv_error_text);
6986 
6987       IF lv_return <> 0 THEN
6988         RAISE ex_logging_err;
6989       END IF;
6990 
6991 
6992       -- Set the  message
6993 
6994         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
6995                      (p_app_short_name    => 'MSC',
6996                       p_error_code        => 'MSC_PP_INVALID_VALUE',
6997                       p_message_text      => lv_message_text,
6998                       p_error_text        => lv_error_text,
6999                       p_token1            => 'COLUMN_NAME',
7000                       p_token_value1      => 'SALESCHANNEL_LVL');
7001 
7002       IF lv_return <> 0 THEN
7003         RAISE ex_logging_err;
7004       END IF;
7005 
7006     -- Derive the SALESCHANNEL_LVL_ID, error out if invalid level name
7007 
7008 
7009       lv_return := MSC_ST_UTIL.DERIVE_LEVEL_ID
7010                     (p_table_name     => 'MSD_ST_PRICE_LIST',
7011                      p_level_name_col => 'SALESCHANNEL_LVL',
7012                      p_level_id_col   => 'SALESCHANNEL_LVL_ID',
7013                      p_severity       => G_SEV_ERROR,	-- Against Bug#2413920
7014                      p_message_text    => lv_message_text,
7015                      p_instance_code  => p_instance_code,
7016                      p_batch_id       => lv_batch_id,
7017                      p_error_text     => lv_error_text);
7018 
7019       IF lv_return <> 0 THEN
7020         RAISE ex_logging_err;
7021       END IF;
7022 
7023       -- set the message, SALESCHANNEL_LVL is invalid
7024 
7025         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
7026                      (p_app_short_name    => 'MSC',
7027                       p_error_code        => 'MSC_PP_INVALID_VALUE',
7028                       p_message_text      => lv_message_text,
7029                       p_error_text        => lv_error_text,
7030                       p_token1            => 'COLUMN_NAME',
7031                       p_token_value1      => 'SR_SALESCHANNEL_LVL_VAL');
7032 
7033       IF lv_return <> 0 THEN
7034         RAISE ex_logging_err;
7035       END IF;
7036 
7037      -- Derive SR_SALESCHANNEL_LVL_PK
7038 
7039        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_PK
7040                     (p_table_name      => 'MSD_ST_PRICE_LIST',
7041                      p_level_val_col   => 'SR_SALESCHANNEL_LVL_VAL',
7042                      p_level_name_col  => 'SALESCHANNEL_LVL',
7043                      p_level_pk_col    => 'SR_SALESCHANNEL_LVL_PK',
7044                      p_instance_code   => p_instance_code,
7045                      p_instance_id     => p_instance_id,
7046                      p_message_text    => lv_message_text,
7047                      p_batch_id        => lv_batch_id,
7048                      p_severity        => G_SEV_ERROR,	-- Against Bug#2413920
7049                      p_error_text      => lv_error_text);
7050 
7051       IF lv_return <> 0 THEN
7052         RAISE ex_logging_err;
7053       END IF;
7054 
7055       -- Set the  message
7056 
7057         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
7058                      (p_app_short_name    => 'MSC',
7059                       p_error_code        => 'MSC_PP_INVALID_VALUE',
7060                       p_message_text      => lv_message_text,
7061                       p_error_text        => lv_error_text,
7062                       p_token1            => 'COLUMN_NAME',
7063                       p_token_value1      => 'SALES_REP_LVL');
7064 
7065       IF lv_return <> 0 THEN
7066         RAISE ex_logging_err;
7067       END IF;
7068 
7069     -- Derive the SALESREP_LVL_ID, error out if invalid level name
7070 
7071 
7072       lv_return := MSC_ST_UTIL.DERIVE_LEVEL_ID
7073                     (p_table_name     => 'MSD_ST_PRICE_LIST',
7074                      p_level_name_col => 'SALES_REP_LVL',
7075                      p_level_id_col   => 'SALES_REP_LVL_ID',
7076                      p_severity       => G_SEV_ERROR,	-- Against Bug#2413920
7077                      p_message_text    => lv_message_text,
7078                      p_instance_code  => p_instance_code,
7079                      p_batch_id       => lv_batch_id,
7080                      p_error_text     => lv_error_text);
7081 
7082       IF lv_return <> 0 THEN
7083         RAISE ex_logging_err;
7084       END IF;
7085 
7086       -- set the message, SALESREP_LVL is invalid
7087 
7088         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
7089                      (p_app_short_name    => 'MSC',
7090                       p_error_code        => 'MSC_PP_INVALID_VALUE',
7091                       p_message_text      => lv_message_text,
7092                       p_error_text        => lv_error_text,
7093                       p_token1            => 'COLUMN_NAME',
7094                       p_token_value1      => 'SR_SALES_REP_LVL_VAL');
7095 
7096       IF lv_return <> 0 THEN
7097         RAISE ex_logging_err;
7098       END IF;
7099 
7100      -- Derive SR_SALESREP_LVL_PK
7101 
7102        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_PK
7103                     (p_table_name      => 'MSD_ST_PRICE_LIST',
7104                      p_level_val_col   => 'SR_SALES_REP_LVL_VAL',
7105                      p_level_name_col  => 'SALES_REP_LVL',
7106                      p_level_pk_col    => 'SR_SALES_REP_LVL_PK',
7107                      p_instance_code   => p_instance_code,
7108                      p_instance_id     => p_instance_id,
7109                      p_message_text    => lv_message_text,
7110                      p_batch_id        => lv_batch_id,
7111                      p_severity        => G_SEV_ERROR,	-- Against Bug#2413920
7112                      p_error_text      => lv_error_text);
7113 
7114       IF lv_return <> 0 THEN
7115         RAISE ex_logging_err;
7116       END IF;
7117 
7118       -- Set the  message
7119 
7120         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
7121                      (p_app_short_name    => 'MSC',
7122                       p_error_code        => 'MSC_PP_INVALID_VALUE',
7123                       p_message_text      => lv_message_text,
7124                       p_error_text        => lv_error_text,
7125                       p_token1            => 'COLUMN_NAME',
7126                       p_token_value1      => 'GEOGRAPHY_LVL');
7127 
7128       IF lv_return <> 0 THEN
7129         RAISE ex_logging_err;
7130       END IF;
7131 
7132     -- Derive the GEOGRAPHY_LVL_ID, error out if invalid level name
7133 
7134       lv_return := MSC_ST_UTIL.DERIVE_LEVEL_ID
7135                     (p_table_name     => 'MSD_ST_PRICE_LIST',
7136                      p_level_name_col => 'GEOGRAPHY_LVL',
7137                      p_level_id_col   => 'GEOGRAPHY_LVL_ID',
7138                      p_severity       => G_SEV_ERROR,	-- Against Bug#2413920
7139                      p_message_text    => lv_message_text,
7140                      p_instance_code  => p_instance_code,
7141                      p_batch_id       => lv_batch_id,
7142                      p_error_text     => lv_error_text);
7143 
7144       IF lv_return <> 0 THEN
7145         RAISE ex_logging_err;
7146       END IF;
7147 
7148       -- set the message, GEOGRAPHY_LVL is invalid
7149 
7150         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
7151                      (p_app_short_name    => 'MSC',
7152                       p_error_code        => 'MSC_PP_INVALID_VALUE',
7153                       p_message_text      => lv_message_text,
7154                       p_error_text        => lv_error_text,
7155                       p_token1            => 'COLUMN_NAME',
7156                       p_token_value1      => 'SR_GEOGRAPHY_LVL_VAL');
7157 
7158       IF lv_return <> 0 THEN
7159         RAISE ex_logging_err;
7160       END IF;
7161 
7162      -- Derive SR_GEOGRAPHY_LVL_PK
7163 
7164        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_PK
7165                     (p_table_name      => 'MSD_ST_PRICE_LIST',
7166                      p_level_val_col   => 'SR_GEOGRAPHY_LVL_VAL',
7167                      p_level_name_col  => 'GEOGRAPHY_LVL',
7168                      p_level_pk_col    => 'SR_GEOGRAPHY_LVL_PK',
7169                      p_instance_code   => p_instance_code,
7170                      p_instance_id     => p_instance_id,
7171                      p_message_text    => lv_message_text,
7172                      p_batch_id        => lv_batch_id,
7173                      p_severity        => G_SEV_ERROR,	-- Against Bug#2413920
7174                      p_error_text      => lv_error_text);
7175 
7176       IF lv_return <> 0 THEN
7177         RAISE ex_logging_err;
7178       END IF;
7179 
7180       -- Set the  message
7181 
7182         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
7183                      (p_app_short_name    => 'MSC',
7184                       p_error_code        => 'MSC_PP_INVALID_VALUE',
7185                       p_message_text      => lv_message_text,
7186                       p_error_text        => lv_error_text,
7187                       p_token1            => 'COLUMN_NAME',
7188                       p_token_value1      => 'USER_DEFINED1_LVL');
7189 
7190       IF lv_return <> 0 THEN
7191         RAISE ex_logging_err;
7192       END IF;
7193 
7194     -- Derive the USER_DEFINED1_LVL_ID, error out if invalid level name
7195 
7196       lv_return := MSC_ST_UTIL.DERIVE_LEVEL_ID
7197                     (p_table_name     => 'MSD_ST_PRICE_LIST',
7198                      p_level_name_col => 'USER_DEFINED1_LVL',
7199                      p_level_id_col   => 'USER_DEFINED1_LVL_ID',
7200                      p_severity       => G_SEV3_ERROR ,
7201                      p_message_text    => lv_message_text,
7202                      p_instance_code  => p_instance_code,
7203                      p_batch_id       => lv_batch_id,
7204                      p_error_text     => lv_error_text);
7205 
7206       IF lv_return <> 0 THEN
7207         RAISE ex_logging_err;
7208       END IF;
7209 
7210 
7211       -- set the message, USER_DEFINED1_LVL is invalid
7212 
7213         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
7214                      (p_app_short_name    => 'MSC',
7215                       p_error_code        => 'MSC_PP_INVALID_VALUE',
7216                       p_message_text      => lv_message_text,
7217                       p_error_text        => lv_error_text,
7218                       p_token1            => 'COLUMN_NAME',
7219                       p_token_value1      => 'SR_USER_DEFINED1_LVL_VAL');
7220 
7221       IF lv_return <> 0 THEN
7222         RAISE ex_logging_err;
7223       END IF;
7224 
7225      -- Derive SR_USER_DEFINED1_LVL_PK
7226 
7227        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_PK
7228                     (p_table_name      => 'MSD_ST_PRICE_LIST',
7229                      p_level_val_col   => 'SR_USER_DEFINED1_LVL_VAL',
7230                      p_level_name_col  => 'USER_DEFINED1_LVL',
7231                      p_level_pk_col    => 'SR_USER_DEFINED1_LVL_PK',
7232                      p_instance_code   => p_instance_code,
7233                      p_instance_id     => p_instance_id,
7234                      p_message_text    => lv_message_text,
7235                      p_batch_id        => lv_batch_id,
7236                      p_error_text      => lv_error_text);
7237 
7238       IF lv_return <> 0 THEN
7239         RAISE ex_logging_err;
7240       END IF;
7241 
7242       -- Set the  message
7243 
7244         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
7245                      (p_app_short_name    => 'MSC',
7246                       p_error_code        => 'MSC_PP_INVALID_VALUE',
7247                       p_message_text      => lv_message_text,
7248                       p_error_text        => lv_error_text,
7249                       p_token1            => 'COLUMN_NAME',
7250                       p_token_value1      => 'USER_DEFINED2_LVL');
7251 
7252       IF lv_return <> 0 THEN
7253         RAISE ex_logging_err;
7254       END IF;
7255 
7256     -- Derive the USER_DEFINED2_LVL_ID, error out if invalid level name
7257 
7258       lv_return := MSC_ST_UTIL.DERIVE_LEVEL_ID
7259                     (p_table_name     => 'MSD_ST_PRICE_LIST',
7260                      p_level_name_col => 'USER_DEFINED2_LVL',
7261                      p_level_id_col   => 'USER_DEFINED2_LVL_ID',
7262                      p_severity       => G_SEV3_ERROR ,
7263                      p_message_text    => lv_message_text,
7264                      p_instance_code  => p_instance_code,
7265                      p_batch_id       => lv_batch_id,
7266                      p_error_text     => lv_error_text);
7267 
7268       IF lv_return <> 0 THEN
7269         RAISE ex_logging_err;
7270       END IF;
7271 
7272 
7273       -- set the message, USER_DEFINED2_LVL is invalid
7274 
7275         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
7276                      (p_app_short_name    => 'MSC',
7277                       p_error_code        => 'MSC_PP_INVALID_VALUE',
7278                       p_message_text      => lv_message_text,
7279                       p_error_text        => lv_error_text,
7280                       p_token1            => 'COLUMN_NAME',
7281                       p_token_value1      => 'SR_USER_DEFINED2_LVL_VAL');
7282 
7283       IF lv_return <> 0 THEN
7284         RAISE ex_logging_err;
7285       END IF;
7286 
7287      -- Derive SR_USER_DEFINED2_LVL_PK
7288 
7289        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_PK
7290                     (p_table_name      => 'MSD_ST_PRICE_LIST',
7291                      p_level_val_col   => 'SR_USER_DEFINED2_LVL_VAL',
7292                      p_level_name_col  => 'USER_DEFINED2_LVL',
7293                      p_level_pk_col    => 'SR_USER_DEFINED2_LVL_PK',
7294                      p_instance_code   => p_instance_code,
7295                      p_instance_id     => p_instance_id,
7296                      p_message_text    => lv_message_text,
7297                      p_batch_id        => lv_batch_id,
7298                      p_error_text      => lv_error_text);
7299 
7300       IF lv_return <> 0 THEN
7301         RAISE ex_logging_err;
7302       END IF;
7303 
7304 
7305   -- Set the  message
7306 
7307         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
7308                      (p_app_short_name    => 'MSC',
7309                       p_error_code        => 'MSC_PP_INVALID_VALUE',
7310                       p_message_text      => lv_message_text,
7311                       p_error_text        => lv_error_text,
7312                       p_token1            => 'COLUMN_NAME',
7313                       p_token_value1      => 'DEMAND_CLASS_LVL');
7314 
7315       IF lv_return <> 0 THEN
7316         RAISE ex_logging_err;
7317       END IF;
7318 
7319     -- Derive the DEMAND_CLASS_LVL_ID, error out if invalid level name
7320 
7321       lv_return := MSC_ST_UTIL.DERIVE_LEVEL_ID
7322                     (p_table_name     => 'MSD_ST_PRICE_LIST',
7323                      p_level_name_col => 'DEMAND_CLASS_LVL',
7324                      p_level_id_col   => 'DEMAND_CLASS_LVL_ID',
7325                      p_severity       => G_SEV3_ERROR,	-- Against Bug#2413920
7326                      p_message_text    => lv_message_text,
7327                      p_instance_code  => p_instance_code,
7328                      p_batch_id       => lv_batch_id,
7329                      p_error_text     => lv_error_text);
7330 
7331       IF lv_return <> 0 THEN
7332         RAISE ex_logging_err;
7333       END IF;
7334 
7335       -- set the message, DEMAND_CLASS_LVL is invalid
7336 
7337         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
7338                      (p_app_short_name    => 'MSC',
7339                       p_error_code        => 'MSC_PP_INVALID_VALUE',
7340                       p_message_text      => lv_message_text,
7341                       p_error_text        => lv_error_text,
7342                       p_token1            => 'COLUMN_NAME',
7343                       p_token_value1      => 'SR_DEMAND_CLASS_LVL_VAL');
7344 
7345       IF lv_return <> 0 THEN
7346         RAISE ex_logging_err;
7347       END IF;
7348 
7349      -- Derive SR_DEMAND_CLASS_LVL_PK
7350 
7351        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_PK
7352                     (p_table_name      => 'MSD_ST_PRICE_LIST',
7353                      p_level_val_col   => 'SR_DEMAND_CLASS_LVL_VAL',
7354                      p_level_name_col  => 'DEMAND_CLASS_LVL',
7355                      p_level_pk_col    => 'SR_DEMAND_CLASS_LVL_PK',
7356                      p_instance_code   => p_instance_code,
7357                      p_instance_id     => p_instance_id,
7358                      p_message_text    => lv_message_text,
7359                      p_batch_id        => lv_batch_id,
7360                      p_severity        => G_SEV3_ERROR,	-- Against Bug#2413920
7361                      p_error_text      => lv_error_text);
7362 
7363       IF lv_return <> 0 THEN
7364         RAISE ex_logging_err;
7365       END IF;
7366 
7367 -- Price List UOM Change starts
7368 -- Set the  message
7369   /* Comment Start :The code below  has been commented against Bug# 3796659 */
7370    /*     lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
7371                      (p_app_short_name    => 'MSC',
7372                       p_error_code        => 'MSC_PP_INVALID_VALUE',
7373                       p_message_text      => lv_message_text,
7374                       p_error_text        => lv_error_text,
7375                       p_token1            => 'COLUMN_NAME',
7376                       p_token_value1      => 'PRICE_LIST_UOM');
7377 
7378       IF lv_return <> 0 THEN
7379         RAISE ex_logging_err;
7380       END IF;
7381 
7382 
7383 
7384       UPDATE msd_st_price_list mspl
7385       SET    process_flag = G_ERROR_FLG,
7386              error_text   = lv_message_text
7387       WHERE NOT EXISTS(SELECT 1
7388                        FROM   msc_st_units_of_measure msum
7389                        --WHERE  msum.sr_instance_id                  = p_instance_id
7390                        WHERE msum.sr_instance_code                 = p_instance_code
7391                        AND   msum.process_flag                     = G_VALID
7392                        AND    msum.uom_code                        = mspl.price_list_uom
7393                        UNION
7394                        SELECT 1
7395                        FROM   msc_units_of_measure mum
7396                        WHERE  mum.sr_instance_id                  = p_instance_id
7397                        AND    mum.uom_code                        = mspl.price_list_uom )
7398       AND    mspl.process_flag           = G_IN_PROCESS
7399       AND    mspl.sr_instance_code       = p_instance_code
7400       AND    mspl.batch_id               = p_batch_id;
7401       */
7402  /* Comment END :The code above  has been commented against Bug# 3796659 */
7403 -- Price List UOM Change ends
7404 
7405    OPEN instance_type;
7406       FETCH instance_type into lv_instance_type;
7407    CLOSE instance_type;
7408 
7409    IF (lv_instance_type = G_INS_OTHER) THEN
7410 
7411      lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
7412                      (p_app_short_name    => 'MSC',
7413                       p_error_code        => 'MSC_PP_COL_REF_NOT_EXIST',
7414                       p_message_text      => lv_message_text,
7415                       p_error_text        => lv_error_text,
7416                       p_token1            => 'COLUMN_NAMES',
7417                       p_token_value1      => 'SR_INSTANCE_CODE AND'
7418                                              ||' INV_ORG AND ITEM AND ITEM.ATO_FORECAST_CONTROL'
7419                                              ||' AND ITEM.MRP_PLANNING_CODE',
7420                       p_token2            => 'MASTER_TABLE',
7421                       p_token_value2      => 'MSC_SYSTEM_ITEMS',
7422                       p_token3            => 'CHILD_TABLE',
7423                       p_token_value3      => 'MSD_ST_PRICE_LIST');
7424 
7425       IF lv_return <> 0 THEN
7426         RAISE ex_logging_err;
7427       END IF;
7428 
7429       -- Validate item-org combination
7430       v_sql_stmt := 15;
7431 
7432       UPDATE msd_st_price_list mpl
7433       SET    process_flag = G_ERROR_FLG,
7434              error_text   = lv_message_text
7435       WHERE NOT EXISTS(SELECT 1
7436                        FROM   msc_st_system_items msi
7437                        WHERE  msi.sr_instance_id                  = p_instance_id
7438                        AND    nvl(msi.company_name,lv_my_company) = lv_my_company
7439                        AND    msi.organization_id                 = mpl.sr_organization_lvl_pk
7440                        AND    msi.item_name                       = mpl.sr_product_lvl_val
7441                        AND   ((v_plan_per_profile = 4) OR (msi.ato_forecast_control <> 3))        --forecast control - none
7442                        AND   ((msi.mrp_planning_code  <> 6 ) OR (msi.pick_components_flag='Y' ))  --Not planned item
7443                        UNION
7444                        SELECT 1
7445                        FROM   msc_system_items mls
7446                        WHERE  mls.sr_instance_id                  = p_instance_id
7447                        AND    mls.organization_id                 = mpl.sr_organization_lvl_pk
7448                        AND    mls.item_name                       = mpl.sr_product_lvl_val
7449                        AND    mls.plan_id                         = -1
7450                        AND   ((v_plan_per_profile = 4) OR (mls.ato_forecast_control <> 3))        --forecast control - none
7451                        AND   ((mls.mrp_planning_code <> 6 ) OR (mls.pick_components_flag='Y' )) ) --Not planned item
7452       AND    mpl.product_lvl_id          = 1
7453       AND    mpl.organization_lvl_id     = 7
7454       AND    mpl.process_flag            = G_IN_PROCESS
7455       AND    mpl.sr_instance_code        = p_instance_code
7456       AND    mpl.batch_id                = p_batch_id;
7457 
7458    END IF;
7459 
7460       --Call to customised validation.
7461       MSC_CL_PRE_PROCESS_HOOK.ENTITY_VALIDATION
7462         (ERRBUF         => lv_error_text,
7463          RETCODE        => lv_return,
7464          pBatchID       => null,
7465          pInstanceCode  => p_instance_code,
7466          pEntityName    => 'MSD_ST_PRICE_LIST',
7467          pInstanceID    => p_instance_id);
7468 
7469       IF lv_return <> 0 THEN
7470         RAISE ex_logging_err;
7471       END IF;
7472 
7473      -- Set the process flag as Valid and populate instance_id
7474       lv_return := MSC_ST_UTIL.SET_PROCESS_FLAG
7475                         (p_table_name     => 'MSD_ST_PRICE_LIST',
7476                          p_instance_id    => p_instance_id,
7477                          p_instance_code  => p_instance_code,
7478                          p_process_flag   => G_VALID,
7479                          p_error_text     => lv_error_text,
7480                          p_batch_id       => lv_batch_id,
7481                          p_instance_id_col=> 'INSTANCE');
7482 
7483       IF lv_return <> 0 THEN
7484         RAISE ex_logging_err;
7485       END IF;
7486 
7487      -- Inserting all the errored out records into MSC_ERRORS:
7488 
7489       lv_return := MSC_ST_UTIL.LOG_ERROR
7490                    (p_table_name        => 'MSD_ST_PRICE_LIST',
7491                     p_instance_code     => p_instance_code,
7492                     p_row               => lv_column_names,
7493                     p_severity          => G_SEV_ERROR,
7494                     p_error_text        => lv_error_text,
7495                     p_message_text      => NULL,
7496                     p_batch_id          => lv_batch_id);
7497 
7498     IF(lv_return <> 0) THEN
7499       msc_st_util.log_message(lv_error_text);
7500     END IF;
7501     COMMIT;
7502 
7503     EXCEPTION
7504       WHEN ex_logging_err THEN
7505         ROLLBACK;
7506 
7507         ERRBUF := lv_error_text;
7508         RETCODE := G_WARNING;
7509         msc_st_util.log_message(lv_error_text);
7510 
7511     WHEN OTHERS THEN
7512       ROLLBACK;
7513 
7514       lv_error_text    := substr('MSD_CL_PRE_PROCESS.LOAD_PRICE_LIST'||'('
7515                        ||v_sql_stmt||')'|| SQLERRM, 1, 240);
7516       msc_st_util.log_message(lv_error_text);
7517       ERRBUF := lv_error_text;
7518       RETCODE := G_WARNING;
7519 
7520   END LOAD_PRICE_LIST;
7521 
7522    /*==========================================================================+
7523   | DESCRIPTION  : This function performs the validation and loads the data   |
7524   |                for business object UOM conversion                         |
7525   +==========================================================================*/
7526 
7527   PROCEDURE LOAD_UOM_CONV (ERRBUF          OUT NOCOPY VARCHAR,
7528                            RETCODE         OUT NOCOPY NUMBER,
7529                            p_instance_code IN VARCHAR,
7530                            p_instance_id   IN NUMBER,
7531                            p_batch_id      IN NUMBER)
7532 
7533   IS
7534   TYPE RowidTab IS TABLE OF ROWID INDEX BY BINARY_INTEGER;
7535   lb_rowid          RowidTab;
7536   lv_sql_stmt       VARCHAR2(4000);
7537   lv_batch_id       msd_st_uom_conversions.batch_id%TYPE;
7538   lv_message_text   msc_errors.error_text%TYPE;
7539   lv_error_text     VARCHAR2(250);
7540   lv_debug          BOOLEAN   := msc_cl_pre_process.v_debug;
7541   lv_batch_size     NUMBER    := msc_cl_pre_process.v_batch_size;
7542   lv_current_user   NUMBER    := msc_cl_pre_process.v_current_user;
7543   lv_current_date   DATE      := msc_cl_pre_process.v_current_date;
7544   lv_return         NUMBER := 0;
7545   ex_logging_err    EXCEPTION;
7546   lv_column_names   VARCHAR2(5000);
7547 
7548   CURSOR c1(p_batch_id NUMBER)IS
7549     SELECT rowid
7550     FROM   msd_st_uom_conversions
7551     WHERE  process_flag      IN (G_IN_PROCESS,G_ERROR_FLG)
7552     AND    sr_instance_code = p_instance_code
7553     AND    batch_id         = p_batch_id;
7554 
7555    BEGIN
7556 
7557       lv_batch_id := p_batch_id;
7558 
7559       lv_column_names :=
7560 	'	SR_INSTANCE_CODE	||''~''||'
7561 	||'	FROM_UOM_CLASS		||''~''||'
7562 	||'	TO_UOM_CLASS		||''~''||'
7563 	||'	FROM_UOM_CODE		||''~''||'
7564 	||'	TO_UOM_CODE		||''~''||'
7565 	||'	BASE_UOM_FLAG		||''~''||'
7566 	||'	CONVERSION_RATE		||''~''||'
7567 	||'	ITEM ';
7568 
7569 
7570       OPEN  c1(lv_batch_id);
7571       FETCH c1 BULK COLLECT INTO lb_rowid;
7572       CLOSE c1;
7573 
7574       v_sql_stmt := 04;
7575       FORALL j IN lb_rowid.FIRST..lb_rowid.LAST
7576       UPDATE msd_st_uom_conversions
7577       SET  st_transaction_id = msd_st_uom_conversions_s.NEXTVAL,
7578            last_update_date  = lv_current_date,
7579            last_updated_by   = lv_current_user,
7580            creation_date     = lv_current_date,
7581            created_by        = lv_current_user
7582       WHERE  rowid           = lb_rowid(j);
7583 
7584      -- set the message
7585 
7586       lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
7587                      (p_app_short_name    => 'MSC',
7588                       p_error_code        => 'MSC_PP_COL_VAL_NULL',
7589                       p_message_text      => lv_message_text,
7590                       p_error_text        => lv_error_text,
7591                       p_token1            => 'COLUMN_NAME',
7592                       p_token_value1      => 'FROM_UOM_CLASS OR'
7593                                              ||' TO_UOM_CLASS OR'
7594                                              ||' FROM_UOM_CODE OR'
7595                                              ||' TO _UOM_CODE'
7596                                              ||' CONVERSION_RATE');
7597 
7598       IF lv_return <> 0 THEN
7599         RAISE ex_logging_err;
7600       END IF;
7601 
7602       -- error out if  from or to uom class is null
7603       -- error out if  from or to uom code is null
7604       -- error out if conversion rate is null
7605 
7606       v_sql_stmt := 05;
7607 
7608       lv_sql_stmt :=
7609       'UPDATE    msd_st_uom_conversions'
7610       ||' SET    process_flag            = '||G_ERROR_FLG||','
7611       ||'        error_text      = '||''''||lv_message_text||''''
7612       ||' WHERE (NVL(from_uom_class, '||''''||NULL_CHAR||''''||') '
7613       ||'          =                 '||''''||NULL_CHAR||''''
7614       ||' OR   NVL(to_uom_class, '||''''||NULL_CHAR||''''||') '
7615       ||'          =             '||''''||NULL_CHAR||''''
7616       ||' OR   NVL(from_uom_code, '||''''||NULL_CHAR||''''||') '
7617       ||'          =              '||''''||NULL_CHAR||''''
7618       ||' OR   NVL(to_uom_code, '||''''||NULL_CHAR||''''||') '
7619       ||'          =            '||''''||NULL_CHAR||''''
7620       ||' OR  NVL(conversion_rate,'||NULL_VALUE||') = '||NULL_VALUE||')'
7621       ||' AND    process_flag            = '||G_IN_PROCESS
7622       ||' AND    batch_id                = :lv_batch_id'
7623       ||' AND    sr_instance_code        = :p_instance_code';
7624 
7625       IF lv_debug THEN
7626         msc_st_util.log_message(lv_sql_stmt);
7627       END IF;
7628       EXECUTE IMMEDIATE lv_sql_stmt
7629               USING     lv_batch_id,
7630                         p_instance_code;
7631 
7632 
7633         -- Set the message
7634         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
7635                      (p_app_short_name    => 'MSC',
7636                       p_error_code        => 'MSC_PP_INVALID_VALUE',
7637                       p_message_text      => lv_message_text,
7638                       p_error_text        => lv_error_text,
7639                       p_token1            => 'COLUMN_NAME',
7640                       p_token_value1      => 'ITEM');
7641 
7642       IF lv_return <> 0 THEN
7643         RAISE ex_logging_err;
7644       END IF;
7645 
7646      -- Derive sr_item_pk from msd_st_level_values and msd_level_values
7647 
7648        lv_return :=  MSC_ST_UTIL.DERIVE_SR_PK
7649                        (p_table_name         => 'MSD_ST_UOM_CONVERSIONS',
7650                         p_column_name        => 'ITEM',
7651                         p_pk_col_name        => 'SR_ITEM_PK',
7652                         p_instance_code      => p_instance_code,
7653                         p_level_id           => 1,
7654                         p_instance_id        =>  p_instance_id,
7655                         p_message_text       => lv_message_text,
7656                         p_batch_id           => lv_batch_id,
7657                         p_error_text         => lv_error_text);
7658 
7659         IF lv_return <> 0 THEN
7660             RAISE ex_logging_err;
7661         END IF;
7662 
7663 
7664 
7665       --Call to customised validation.
7666       MSC_CL_PRE_PROCESS_HOOK.ENTITY_VALIDATION
7667         (ERRBUF         => lv_error_text,
7668          RETCODE        => lv_return,
7669          pBatchID       => lv_batch_id,
7670          pInstanceCode  => p_instance_code,
7671          pEntityName    => 'MSD_ST_UOM_CONVERSIONS',
7672          pInstanceID    => p_instance_id);
7673 
7674       IF NVL(lv_return,0) <> 0 THEN
7675         RAISE ex_logging_err;
7676       END IF;
7677 
7678      -- Set the process flag as Valid and populate instance_id
7679       lv_return := MSC_ST_UTIL.SET_PROCESS_FLAG
7680                         (p_table_name     => 'MSD_ST_UOM_CONVERSIONS',
7681                          p_instance_id    => p_instance_id,
7682                          p_instance_code  => p_instance_code,
7683                          p_process_flag   => G_VALID,
7684                          p_error_text     => lv_error_text,
7685                          p_batch_id       => lv_batch_id,
7686                          p_instance_id_col=> 'INSTANCE');
7687 
7688       IF lv_return <> 0 THEN
7689         RAISE ex_logging_err;
7690       END IF;
7691 
7692       -- Inserting all the errored out records into MSC_ERRORS:
7693 
7694       lv_return := MSC_ST_UTIL.LOG_ERROR
7695                    (p_table_name        => 'MSD_ST_UOM_CONVERSIONS',
7696                     p_instance_code     => p_instance_code,
7697                     p_row               => lv_column_names,
7698                     p_severity          => G_SEV_ERROR,
7699                     p_error_text        => lv_error_text,
7700                     p_message_text      => NULL,
7701                     p_batch_id          => lv_batch_id);
7702 
7703       IF(lv_return <> 0) THEN
7704         msc_st_util.log_message(lv_error_text);
7705       END IF;
7706       COMMIT;
7707 
7708     EXCEPTION
7709       WHEN ex_logging_err THEN
7710         ROLLBACK;
7711 
7712         ERRBUF := lv_error_text;
7713         RETCODE := G_WARNING;
7714         msc_st_util.log_message(lv_error_text);
7715 
7716     WHEN OTHERS THEN
7717       ROLLBACK;
7718 
7719       lv_error_text    := substr('MSD_CL_PRE_PROCESS.LOAD_UOM_CONV '||'('
7720                        ||v_sql_stmt||')'|| SQLERRM, 1, 240);
7721       msc_st_util.log_message(lv_error_text);
7722       ERRBUF := lv_error_text;
7723       RETCODE := G_WARNING;
7724 
7725   END LOAD_UOM_CONV ;
7726 
7727  /*==========================================================================+
7728   | DESCRIPTION  : This function performs the validation and loads the data   |
7729   |                for setup parameters                                       |
7730   +==========================================================================*/
7731 
7732    PROCEDURE LOAD_SETUP_PARAMETER(ERRBUF          OUT NOCOPY VARCHAR,
7733                                  RETCODE         OUT NOCOPY NUMBER,
7734                                  p_instance_code IN VARCHAR,
7735                                  p_instance_id   IN NUMBER)
7736    IS
7737    TYPE RowidTab IS TABLE OF ROWID INDEX BY BINARY_INTEGER;
7738    lb_rowid          RowidTab;
7739    lv_sql_stmt       VARCHAR2(4000);
7740    lv_message_text   msc_errors.error_text%TYPE;
7741    lv_error_text     VARCHAR2(250);
7742    lv_return         NUMBER := 0;
7743    lv_current_user   NUMBER    := msc_cl_pre_process.v_current_user;
7744    lv_current_date   DATE      := msc_cl_pre_process.v_current_date;
7745    lv_debug          BOOLEAN   := msc_cl_pre_process.v_debug;
7746    ex_logging_err    EXCEPTION;
7747    lv_column_names   VARCHAR2(5000);
7748 
7749 
7750 
7751   CURSOR c1 IS
7752     SELECT rowid
7753     FROM   msd_st_setup_parameters
7754     WHERE  process_flag      IN (G_IN_PROCESS,G_ERROR_FLG)
7755     AND    sr_instance_code = p_instance_code ;
7756 
7757 
7758    CURSOR c2 IS
7759     SELECT  instance,
7760             parameter_name,
7761             parameter_value
7762     FROM    msd_st_setup_parameters
7763     WHERE   instance = p_instance_id ;
7764 
7765   BEGIN
7766 
7767    lv_column_names :=
7768 	'	SR_INSTANCE_CODE	||''~''||'
7769 	||'	PARAMETER_NAME		||''~''||'
7770 	||'	PARAMETER_VALUE	';
7771 
7772       OPEN  c1;
7773       FETCH c1 BULK COLLECT INTO lb_rowid;
7774       CLOSE c1;
7775 
7776       v_sql_stmt := 04;
7777       FORALL j IN lb_rowid.FIRST..lb_rowid.LAST
7778       UPDATE msd_st_setup_parameters
7779       SET  st_transaction_id = msd_st_setup_parameters_s.NEXTVAL,
7780            last_update_date  = lv_current_date,
7781            last_updated_by   = lv_current_user,
7782            creation_date     = lv_current_date,
7783            created_by        = lv_current_user
7784       WHERE  rowid           = lb_rowid(j);
7785 
7786      -- set the message
7787 
7788       lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
7789                      (p_app_short_name    => 'MSC',
7790                       p_error_code        => 'MSC_PP_COL_VAL_NULL',
7791                       p_message_text      => lv_message_text,
7792                       p_error_text        => lv_error_text,
7793                       p_token1            => 'COLUMN_NAME',
7794                       p_token_value1      => 'PARAMETER_NAME OR'
7795                                              ||' PARAMETER_VALUE');
7796 
7797 
7798     -- Parameter value and parameter_name should not be null
7799 
7800       v_sql_stmt := 01;
7801       lv_sql_stmt :=
7802       ' UPDATE    msd_st_setup_parameters'
7803       ||' SET    process_flag            = '||G_ERROR_FLG||','
7804       ||'        error_text      = '||''''||lv_message_text||''''
7805       ||' WHERE (NVL(parameter_name, '||''''||NULL_CHAR||''''||') '
7806       ||'          =                 '||''''||NULL_CHAR||''''
7807       ||' OR   NVL(parameter_value, '||''''||NULL_CHAR||''''||') '
7808       ||'          =             '||''''||NULL_CHAR||''''||')'
7809       ||' AND    process_flag            = '||G_IN_PROCESS
7810       ||' AND    sr_instance_code        = :p_instance_code';
7811 
7812       IF lv_debug THEN
7813         msc_st_util.log_message(lv_sql_stmt);
7814       END IF;
7815       EXECUTE IMMEDIATE lv_sql_stmt
7816               USING     p_instance_code;
7817 
7818      -- Set the process flag as Valid and populate instance_id
7819       lv_return := MSC_ST_UTIL.SET_PROCESS_FLAG
7820                         (p_table_name     => 'MSD_ST_SETUP_PARAMETERS',
7821                          p_instance_id    => p_instance_id,
7822                          p_instance_code  => p_instance_code,
7823                          p_process_flag   => G_VALID,
7824                          p_error_text     => lv_error_text,
7825                          p_instance_id_col=> 'INSTANCE');
7826 
7827       IF lv_return <> 0 THEN
7828         RAISE ex_logging_err;
7829       END IF;
7830 
7831 
7832      -- Update the msd_setup_parameters
7833     FOR c_rec IN c2 LOOP
7834 
7835     BEGIN
7836 
7837      UPDATE msd_setup_parameters
7838      SET parameter_value   = c_rec.parameter_value
7839      WHERE parameter_name  = c_rec.parameter_name
7840      AND   instance_id     = c_rec.instance ;
7841 
7842    IF  SQL%NOTFOUND THEN
7843 
7844     DELETE FROM msd_setup_parameters
7845     WHERE PARAMETER_NAME = c_rec.parameter_name;
7846 
7847      INSERT INTO MSD_SETUP_PARAMETERS
7848        ( INSTANCE_ID,
7849          PARAMETER_NAME,
7850          PARAMETER_VALUE )
7851      VALUES
7852        ( c_rec.instance,
7853          c_rec.parameter_name,
7854          c_rec.parameter_value );
7855      END IF ;
7856 
7857      DELETE FROM MSD_ST_SETUP_PARAMETERS
7858      WHERE instance = c_rec.instance
7859      AND  parameter_name = c_rec.parameter_name
7860      AND  parameter_value = c_rec.parameter_value;
7861 
7862     EXCEPTION
7863       WHEN OTHERS THEN
7864        msc_st_util.log_message(SQLERRM);
7865      END ;
7866     END LOOP;
7867 
7868     -- Inserting all the errored out records into MSC_ERRORS:
7869 
7870       lv_return := MSC_ST_UTIL.LOG_ERROR
7871                    (p_table_name        => 'MSD_ST_SETUP_PARAMETERS',
7872                     p_instance_code     => p_instance_code,
7873                     p_row               => lv_column_names,
7874                     p_severity          => G_SEV_ERROR,
7875                     p_error_text        => lv_error_text,
7876                     p_message_text      => NULL);
7877 
7878       IF(lv_return <> 0) THEN
7879         msc_st_util.log_message(lv_error_text);
7880       END IF;
7881       COMMIT;
7882 
7883     EXCEPTION
7884       WHEN ex_logging_err THEN
7885         ROLLBACK;
7886 
7887         ERRBUF := lv_error_text;
7888         RETCODE := G_WARNING;
7889         msc_st_util.log_message(lv_error_text);
7890 
7891     WHEN OTHERS THEN
7892       ROLLBACK;
7893 
7894       lv_error_text    := substr('MSD_CL_PRE_PROCESS.LOAD_SETUP_PARAMETER '||'('
7895                        ||v_sql_stmt||')'|| SQLERRM, 1, 240);
7896       msc_st_util.log_message(lv_error_text);
7897       ERRBUF := lv_error_text;
7898       RETCODE := G_WARNING;
7899 
7900   END LOAD_SETUP_PARAMETER ;
7901 
7902   /*==========================================================================+
7903   | DESCRIPTION  : This function performs the validation and loads the data   |
7904   |                for item relationships.                                    |
7905   +==========================================================================*/
7906   PROCEDURE LOAD_ITEM_RELATIONSHIP ( p_instance_code IN VARCHAR,
7907                                      p_instance_id   IN NUMBER )
7908  IS
7909 
7910  TYPE RowidTab IS TABLE OF ROWID INDEX BY BINARY_INTEGER;
7911 
7912   lb_rowid          RowidTab;
7913   lv_sql_stmt       VARCHAR2(4000);
7914   lv_batch_id       msd_st_item_relationships.batch_id%TYPE;
7915   lv_message_text   msc_errors.error_text%TYPE;
7916   lv_debug          BOOLEAN   := msc_cl_pre_process.v_debug;
7917   lv_current_user   NUMBER    := msc_cl_pre_process.v_current_user;
7918   lv_current_date   DATE      := msc_cl_pre_process.v_current_date;
7919   lv_batch_size     NUMBER    := msc_cl_pre_process.v_batch_size;
7920   lv_return         NUMBER := 0;
7921   lv_error_text     VARCHAR2(250);
7922   lv_instance_code  VARCHAR2(3);
7923 
7924   ex_logging_err    EXCEPTION;
7925   lv_column_names   VARCHAR2(5000);
7926 
7927 
7928 
7929  CURSOR c1(p_batch_id NUMBER)IS
7930   SELECT rowid
7931   FROM   msd_st_item_relationships
7932   WHERE  process_flag      IN (G_IN_PROCESS,G_ERROR_FLG)
7933   AND    sr_instance_code = p_instance_code
7934   AND    batch_id         = p_batch_id;
7935 
7936 BEGIN
7937      lv_instance_code := p_instance_code;
7938 
7939      lv_column_names :=
7940 	'       SR_INSTANCE_CODE	||''~''||'
7941 	||'	INVENTORY_ITEM		||''~''||'
7942 	||'	RELATED_ITEM		||''~''||'
7943 	||'	RELATIONSHIP_TYPE ';
7944 
7945     LOOP
7946       v_sql_stmt := 01;
7947       SELECT       msd_st_batch_id_s.NEXTVAL
7948       INTO         lv_batch_id
7949       FROM         DUAL;
7950 
7951       v_sql_stmt := 02;
7952 
7953       lv_sql_stmt :=
7954       'UPDATE   msd_st_item_relationships'
7955       ||' SET   batch_id                       = :lv_batch_id '
7956       ||' WHERE process_flag  IN ('||G_IN_PROCESS||','||G_ERROR_FLG||')'
7957       ||' AND   sr_instance_code               = :lv_instance_code'
7958       ||' AND   NVL(batch_id,'||NULL_VALUE||') = '||NULL_VALUE
7959       ||' AND   rownum                        <= '||lv_batch_size;
7960 
7961       IF lv_debug THEN
7962         msc_st_util.log_message(lv_sql_stmt);
7963       END IF;
7964 
7965       EXECUTE IMMEDIATE  lv_sql_stmt
7966               USING      lv_batch_id,
7967                          p_instance_code;
7968 
7969       EXIT WHEN SQL%NOTFOUND ;
7970 
7971       OPEN  c1(lv_batch_id);
7972       FETCH c1 BULK COLLECT INTO lb_rowid;
7973       CLOSE c1;
7974 
7975       v_sql_stmt := 03;
7976       FORALL j IN 1..lb_rowid.COUNT
7977       UPDATE msd_st_item_relationships
7978       SET  st_transaction_id = msd_st_item_relationships_s.NEXTVAL,
7979            last_update_date  = lv_current_date,
7980            last_updated_by   = lv_current_user,
7981            creation_date     = lv_current_date,
7982            created_by        = lv_current_user
7983       WHERE  rowid           = lb_rowid(j);
7984 
7985 
7986        -- Set the message
7987         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
7988                      (p_app_short_name    => 'MSC',
7989                       p_error_code        => 'MSC_PP_INVALID_VALUE',
7990                       p_message_text      => lv_message_text,
7991                       p_error_text        => lv_error_text,
7992                       p_token1            => 'COLUMN_NAME',
7993                       p_token_value1      => 'INVENTORY_ITEM');
7994 
7995       IF lv_return <> 0 THEN
7996         RAISE ex_logging_err;
7997       END IF;
7998 
7999      -- Derive INVENTORY_ITEM_ID from msd_st_level_values and msd_level_values
8000 
8001        lv_return :=  MSC_ST_UTIL.DERIVE_SR_PK
8002                        (p_table_name         => 'MSD_ST_ITEM_RELATIONSHIPS',
8003                         p_column_name        => 'INVENTORY_ITEM',
8004                         p_pk_col_name        => 'INVENTORY_ITEM_ID',
8005                         p_level_id           => 1,
8006                         p_instance_code      => p_instance_code,
8007                         p_instance_id        => p_instance_id,
8008                         p_message_text       => lv_message_text,
8009                         p_batch_id           => lv_batch_id,
8010                         p_severity           => G_SEV_ERROR,	-- Against Bug#2415379
8011                         p_error_text         => lv_error_text);
8012 
8013         IF lv_return <> 0 THEN
8014             RAISE ex_logging_err;
8015         END IF;
8016 
8017          -- Set the message
8018         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
8019                      (p_app_short_name    => 'MSC',
8020                       p_error_code        => 'MSC_PP_INVALID_VALUE',
8021                       p_message_text      => lv_message_text,
8022                       p_error_text        => lv_error_text,
8023                       p_token1            => 'COLUMN_NAME',
8024                       p_token_value1      => 'RELATED_ITEM');
8025 
8026       IF lv_return <> 0 THEN
8027         RAISE ex_logging_err;
8028       END IF;
8029 
8030      -- Derive RELATED_ITEM_ID from msd_st_level_values and msd_level_values
8031 
8032        lv_return :=  MSC_ST_UTIL.DERIVE_SR_PK
8033                        (p_table_name         => 'MSD_ST_ITEM_RELATIONSHIPS',
8034                         p_column_name        => 'RELATED_ITEM',
8035                         p_pk_col_name        => 'RELATED_ITEM_ID',
8036                         p_level_id           => 1,
8037                         p_instance_code      => p_instance_code,
8038                         p_instance_id        => p_instance_id,
8039                         p_message_text       => lv_message_text,
8040                         p_batch_id           => lv_batch_id,
8041                         p_severity           => G_SEV_ERROR,	-- Against Bug#2415379
8042                         p_error_text         => lv_error_text);
8043 
8044         IF lv_return <> 0 THEN
8045             RAISE ex_logging_err;
8046         END IF;
8047 
8048     v_sql_stmt := 04;
8049     lv_sql_Stmt:=
8050     'UPDATE     msd_st_item_relationships t1'
8051     ||' SET     t1.relationship_type_id = 8 '                    -- Relationship Type  - Superseded
8052     ||' WHERE   t1.process_flag              ='|| G_IN_PROCESS
8053     ||' AND     t1.batch_id                  = :lv_batch_id'
8054     ||' AND     t1.sr_instance_code          = :p_instance_code';
8055 
8056     IF lv_debug THEN
8057            msc_st_util.log_message(lv_sql_stmt);
8058     END IF;
8059 
8060    EXECUTE IMMEDIATE lv_sql_stmt
8061                USING lv_batch_id,
8062                      p_instance_code ;
8063 
8064 
8065   --Commented the below piece of code, as User will not be entering the Relationship Type via Flat File.
8066   -- It is assumed that only Relation that exists, is of type - Superseded.
8067 
8068 /*
8069     v_sql_stmt := 04;
8070     lv_sql_Stmt:=
8071     'UPDATE     msd_st_item_relationships t1'
8072     ||' SET     t1.relationship_type_id = ( select lookup_code '
8073     ||'                                     from mfg_lookups t2 '
8074     ||'                                     where t1.relationship_type = t2.meaning '
8075     ||'                                     and t2.lookup_type =''MTL_RELATIONSHIP_TYPES'' )'
8076     ||' WHERE   t1.process_flag              ='|| G_IN_PROCESS
8077     ||' AND     t1.batch_id                  = :lv_batch_id'
8078     ||' AND     t1.sr_instance_code          = :p_instance_code';
8079 
8080     IF lv_debug THEN
8081            msc_st_util.log_message(lv_sql_stmt);
8082     END IF;
8083 
8084    EXECUTE IMMEDIATE lv_sql_stmt
8085                USING lv_batch_id,
8086                      p_instance_code ;
8087 
8088     -- Set the message
8089     lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
8090                      (p_app_short_name    => 'MSC',
8091                       p_error_code        => 'MSC_PP_COL_VAL_NULL',
8092                       p_message_text      => lv_message_text,
8093                       p_error_text        => lv_error_text,
8094                       p_token1            => 'COLUMN_NAME',
8095                       p_token_value1      => 'RELATIONSHIP_TYPE');
8096 
8097       IF lv_return <> 0 THEN
8098         RAISE ex_logging_err;
8099       END IF;
8100 
8101        --error out records if relationship_type is not valid.
8102       v_sql_stmt := 05;
8103 
8104     lv_sql_Stmt:=
8105     'UPDATE     msd_st_item_relationships '
8106     ||' SET     process_flag              ='||G_ERROR_FLG||','
8107     ||'         error_text   = '||''''||lv_message_text||''''
8108     ||' WHERE   NVL(RELATIONSHIP_TYPE_ID,'||NULL_VALUE||')  = '||NULL_VALUE
8109     ||' AND     process_flag              ='|| G_IN_PROCESS
8110     ||' AND     batch_id                  = :lv_batch_id'
8111     ||' AND     sr_instance_code          = :p_instance_code';
8112 
8113     IF lv_debug THEN
8114            msc_st_util.log_message(lv_sql_stmt);
8115     END IF;
8116 
8117    EXECUTE IMMEDIATE lv_sql_stmt
8118                USING lv_batch_id,
8119                      p_instance_code ;
8120 */
8121 
8122 
8123       --Call to customised validation.
8124       MSC_CL_PRE_PROCESS_HOOK.ENTITY_VALIDATION
8125         (ERRBUF         => lv_error_text,
8126          RETCODE        => lv_return,
8127          pBatchID       => lv_batch_id,
8128          pInstanceCode  => p_instance_code,
8129          pEntityName    => 'MSD_ST_ITEM_RELATIONSHIPS',
8130          pInstanceID    => p_instance_id);
8131 
8132       IF NVL(lv_return,0) <> 0 THEN
8133         RAISE ex_logging_err;
8134       END IF;
8135 
8136        -- Set the process flag as Valid and populate instance_id
8137       lv_return := MSC_ST_UTIL.SET_PROCESS_FLAG
8138                         (p_table_name     => 'MSD_ST_ITEM_RELATIONSHIPS',
8139                          p_instance_id    => p_instance_id,
8140                          p_instance_code  => p_instance_code,
8141                          p_process_flag   => G_VALID,
8142                          p_error_text     => lv_error_text,
8143                          p_batch_id       => lv_batch_id,
8144                          p_instance_id_col=> 'INSTANCE_ID');
8145 
8146       IF lv_return <> 0 THEN
8147         RAISE ex_logging_err;
8148       END IF;
8149 
8150    	-- Inserting all the errored out records into MSC_ERRORS:
8151 
8152       lv_return := MSC_ST_UTIL.LOG_ERROR
8153 	                   (p_table_name        => 'MSD_ST_ITEM_RELATIONSHIPS',
8154 	                    p_instance_code     => p_instance_code,
8155 	                    p_row               => lv_column_names,
8156 	                    p_severity          => G_SEV_ERROR,
8157 	                    p_error_text        => lv_error_text,
8158 	                    p_message_text      => NULL,
8159 	                    p_batch_id          => lv_batch_id);
8160 
8161       IF(lv_return <> 0) THEN
8162 	RAISE ex_logging_err;
8163       END IF;
8164       COMMIT;
8165 
8166    END LOOP;
8167 
8168 EXCEPTION
8169   WHEN ex_logging_err THEN
8170         ROLLBACK;
8171 
8172         msc_st_util.log_message(lv_error_text);
8173 
8174      WHEN OTHERS THEN
8175       ROLLBACK;
8176 
8177       lv_error_text    := substr('LOAD_ITEM_RELATIONSHIP '||'('
8178                        ||v_sql_stmt||')'|| SQLERRM, 1, 240);
8179       msc_st_util.log_message(lv_error_text);
8180 
8181 END LOAD_ITEM_RELATIONSHIP;
8182 
8183   /*==========================================================================+
8184   | DESCRIPTION  : This function performs the validation and loads the data   |
8185   |                for level org associations.                                |
8186   +==========================================================================*/
8187   PROCEDURE LOAD_LEVEL_ORG_ASSCNS ( p_instance_code IN VARCHAR,
8188                                     p_instance_id   IN NUMBER )
8189   IS
8190 
8191   TYPE RowidTab IS TABLE OF ROWID INDEX BY BINARY_INTEGER;
8192 
8193   lb_rowid          RowidTab;
8194   lv_sql_stmt       VARCHAR2(4000);
8195   lv_batch_id       msd_st_level_org_asscns.batch_id%TYPE;
8196   lv_message_text   msc_errors.error_text%TYPE;
8197   lv_debug          BOOLEAN   := msc_cl_pre_process.v_debug;
8198   lv_current_user   NUMBER    := msc_cl_pre_process.v_current_user;
8199   lv_current_date   DATE      := msc_cl_pre_process.v_current_date;
8200   lv_batch_size     NUMBER    := msc_cl_pre_process.v_batch_size;
8201   lv_return         NUMBER := 0;
8202   lv_error_text     VARCHAR2(250);
8203   lv_instance_code  VARCHAR2(3);
8204 
8205   ex_logging_err    EXCEPTION;
8206   lv_column_names   VARCHAR2(5000);
8207 
8208   lv_instance_type  msc_apps_instances.instance_type%TYPE;
8209 
8210   CURSOR instance_type IS
8211    SELECT instance_type
8212    FROM msc_apps_instances
8213    WHERE instance_id=p_instance_id;
8214 
8215  CURSOR c1(p_batch_id NUMBER)IS
8216   SELECT rowid
8217   FROM   msd_st_level_org_asscns
8218   WHERE  process_flag      IN (G_IN_PROCESS,G_ERROR_FLG)
8219   AND    sr_instance_code = p_instance_code
8220   AND    batch_id         = p_batch_id;
8221 
8222 BEGIN
8223 
8224    lv_instance_code := p_instance_code;
8225 
8226    lv_column_names :=
8227 	'       SR_INSTANCE_CODE	||''~''||'
8228 	||'	LEVEL_NAME		||''~''||'
8229 	||'	LEVEL_VALUE		||''~''||'
8230 	||'	ORG_LEVEL_NAME	        ||''~''||'
8231 	||'	ORG_LEVEL_VALUE ';
8232 
8233   LOOP
8234       v_sql_stmt := 01;
8235       SELECT       msd_st_batch_id_s.NEXTVAL
8236       INTO         lv_batch_id
8237       FROM         DUAL;
8238 
8239       v_sql_stmt := 02;
8240 
8241       lv_sql_stmt :=
8242       'UPDATE   msd_st_level_org_asscns'
8243       ||' SET   batch_id                       = :lv_batch_id '
8244       ||' WHERE process_flag  IN ('||G_IN_PROCESS||','||G_ERROR_FLG||')'
8245       ||' AND   sr_instance_code               = :lv_instance_code'
8246       ||' AND   NVL(batch_id,'||NULL_VALUE||') = '||NULL_VALUE
8247       ||' AND   rownum                        <= '||lv_batch_size;
8248 
8249       IF lv_debug THEN
8250         msc_st_util.log_message(lv_sql_stmt);
8251       END IF;
8252 
8253       EXECUTE IMMEDIATE  lv_sql_stmt
8254               USING      lv_batch_id,
8255                          p_instance_code;
8256 
8257       EXIT WHEN SQL%NOTFOUND ;
8258 
8259       OPEN  c1(lv_batch_id);
8260       FETCH c1 BULK COLLECT INTO lb_rowid;
8261       CLOSE c1;
8262 
8263       v_sql_stmt := 03;
8264       FORALL j IN 1..lb_rowid.COUNT
8265       UPDATE msd_st_level_org_asscns
8266       SET  st_transaction_id = msd_st_level_org_asscns_s.NEXTVAL,
8267            last_update_date  = lv_current_date,
8268            last_updated_by   = lv_current_user,
8269            creation_date     = lv_current_date,
8270            created_by        = lv_current_user
8271       WHERE  rowid           = lb_rowid(j);
8272 
8273 
8274       -- Set the  message LEVEL_NAME is invalid
8275       lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
8276                      (p_app_short_name    => 'MSC',
8277                       p_error_code        => 'MSC_PP_INVALID_VALUE',
8278                       p_message_text      => lv_message_text,
8279                       p_error_text        => lv_error_text,
8280                       p_token1            => 'COLUMN_NAME',
8281                       p_token_value1      => 'LEVEL_NAME');
8282 
8283       IF lv_return <> 0 THEN
8284         RAISE ex_logging_err;
8285       END IF;
8286 
8287     -- Derive the level_id , error out if invalid level name
8288       lv_return := MSC_ST_UTIL.DERIVE_LEVEL_ID
8289                     (p_table_name     => 'MSD_ST_LEVEL_ORG_ASSCNS',
8290                      p_level_name_col => 'LEVEL_NAME',
8291                      p_level_id_col   => 'LEVEL_ID',
8292                      p_severity      => G_SEV_ERROR ,
8293                      p_message_text    => lv_message_text,
8294                      p_instance_code  => p_instance_code,
8295                      p_batch_id       => lv_batch_id,
8296                      p_error_text     => lv_error_text);
8297 
8298 
8299      -- Set the  message ORG_LEVEL_NAME is invalid
8300       lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
8301                      (p_app_short_name    => 'MSC',
8302                       p_error_code        => 'MSC_PP_INVALID_VALUE',
8303                       p_message_text      => lv_message_text,
8304                       p_error_text        => lv_error_text,
8305                       p_token1            => 'COLUMN_NAME',
8306                       p_token_value1      => 'ORG_LEVEL_NAME');
8307 
8308       IF lv_return <> 0 THEN
8309         RAISE ex_logging_err;
8310       END IF;
8311 
8312     -- Derive the level_id , error out if invalid org level name
8313       lv_return := MSC_ST_UTIL.DERIVE_LEVEL_ID
8314                     (p_table_name     => 'MSD_ST_LEVEL_ORG_ASSCNS',
8315                      p_level_name_col => 'ORG_LEVEL_NAME',
8316                      p_level_id_col   => 'ORG_LEVEL_ID',
8317                      p_severity      => G_SEV_ERROR ,
8318                      p_message_text    => lv_message_text,
8319                      p_instance_code  => p_instance_code,
8320                      p_batch_id       => lv_batch_id,
8321                      p_error_text     => lv_error_text);
8322 
8323 
8324       -- Set the message
8325         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
8326                      (p_app_short_name    => 'MSC',
8327                       p_error_code        => 'MSC_PP_INVALID_VALUE',
8328                       p_message_text      => lv_message_text,
8329                       p_error_text        => lv_error_text,
8330                       p_token1            => 'COLUMN_NAME',
8331                       p_token_value1      => 'LEVEL_NAME AND ORG_LEVEL_NAME');
8332 
8333       IF lv_return <> 0 THEN
8334         RAISE ex_logging_err;
8335       END IF;
8336 
8337       OPEN instance_type;
8338        FETCH instance_type into lv_instance_type;
8339       CLOSE instance_type;
8340 
8341       IF (lv_instance_type = G_INS_OTHER) THEN
8342 
8343        --Combinations for Level-Org other than the (Sales rep - OU) and (Ship to Loc - OU) is not valid.
8344            UPDATE msd_st_level_org_asscns mloa
8345            SET    process_flag = G_ERROR_FLG,
8346                   error_text   = lv_message_text
8347            WHERE  mloa.process_flag               = G_IN_PROCESS
8348            AND    mloa.sr_instance_code           = p_instance_code
8349            AND    mloa.batch_id                   = lv_batch_id
8350            AND  ( mloa.org_level_id <> 8 OR mloa.level_id not in (18,11) );
8351 
8352       ELSE
8353 
8354        --Combinations for Level-Org other than the (Sales rep - OU) , (Ship to Loc - OU) and (Item - Org )is not valid.
8355            UPDATE msd_st_level_org_asscns mloa
8356            SET    process_flag = G_ERROR_FLG,
8357                   error_text   = lv_message_text
8358            WHERE  mloa.process_flag               = G_IN_PROCESS
8359            AND    mloa.sr_instance_code           = p_instance_code
8360            AND    mloa.batch_id                   = lv_batch_id
8361            AND  ( mloa.org_level_id <> 8 OR mloa.level_id not in (18,11) )
8362            AND  ( mloa.org_level_id <> 7 OR mloa.level_id <> 1 );
8363 
8364 
8365       END IF;
8366 
8367       -- set the message, LEVEL_VALUE is invalid
8368         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
8369                      (p_app_short_name    => 'MSC',
8370                       p_error_code        => 'MSC_PP_INVALID_VALUE',
8371                       p_message_text      => lv_message_text,
8372                       p_error_text        => lv_error_text,
8373                       p_token1            => 'COLUMN_NAME',
8374                       p_token_value1      => 'LEVEL_VALUE');
8375 
8376       IF lv_return <> 0 THEN
8377         RAISE ex_logging_err;
8378       END IF;
8379 
8380      -- Derive SR_LEVEL_PK from msd_level_values or msd_st_level_values
8381 
8382        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_PK
8383                     (p_table_name      => 'MSD_ST_LEVEL_ORG_ASSCNS',
8384                      p_level_val_col   => 'LEVEL_VALUE',
8385                      p_level_name_col  => 'LEVEL_NAME',
8386                      p_level_pk_col    =>  'SR_LEVEL_PK',
8387                      p_instance_code   => p_instance_code,
8388                      p_instance_id     => p_instance_id,
8389                      p_message_text    => lv_message_text,
8390                      p_batch_id        => lv_batch_id,
8391                      p_error_text      => lv_error_text);
8392 
8393       IF lv_return <> 0 THEN
8394         RAISE ex_logging_err;
8395       END IF;
8396 
8397       -- set the message, ORG_LEVEL_VALUE is invalid
8398         lv_return := MSC_ST_UTIL.GET_ERROR_MESSAGE
8399                      (p_app_short_name    => 'MSC',
8400                       p_error_code        => 'MSC_PP_INVALID_VALUE',
8401                       p_message_text      => lv_message_text,
8402                       p_error_text        => lv_error_text,
8403                       p_token1            => 'COLUMN_NAME',
8404                       p_token_value1      => 'ORG_LEVEL_VALUE');
8405 
8406       IF lv_return <> 0 THEN
8407         RAISE ex_logging_err;
8408       END IF;
8409 
8410      -- Derive ORG_SR_LEVEL_PK from msd_level_values or msd_st_level_values
8411 
8412        lv_return := MSC_ST_UTIL.DERIVE_LEVEL_PK
8413                     (p_table_name      => 'MSD_ST_LEVEL_ORG_ASSCNS',
8414                      p_level_val_col   => 'ORG_LEVEL_VALUE',
8415                      p_level_name_col  => 'ORG_LEVEL_NAME',
8416                      p_level_pk_col    =>  'ORG_SR_LEVEL_PK',
8417                      p_instance_code   => p_instance_code,
8418                      p_instance_id     => p_instance_id,
8419                      p_message_text    => lv_message_text,
8420                      p_batch_id        => lv_batch_id,
8421                      p_error_text      => lv_error_text);
8422 
8423       IF lv_return <> 0 THEN
8424         RAISE ex_logging_err;
8425       END IF;
8426 
8427     --Call to customised validation.
8428       MSC_CL_PRE_PROCESS_HOOK.ENTITY_VALIDATION
8429         (ERRBUF         => lv_error_text,
8430          RETCODE        => lv_return,
8431          pBatchID       => lv_batch_id,
8432          pInstanceCode  => p_instance_code,
8433          pEntityName    => 'MSD_ST_LEVEL_ORG_ASSCNS',
8434          pInstanceID    => p_instance_id);
8435 
8436       IF NVL(lv_return,0) <> 0 THEN
8437         RAISE ex_logging_err;
8438       END IF;
8439 
8440      -- Set the process flag as Valid and populate instance_id
8441       lv_return := MSC_ST_UTIL.SET_PROCESS_FLAG
8442                         (p_table_name     => 'MSD_ST_LEVEL_ORG_ASSCNS',
8443                          p_instance_id    => p_instance_id,
8444                          p_instance_code  => p_instance_code,
8445                          p_process_flag   => G_VALID,
8446                          p_error_text     => lv_error_text,
8447                          p_batch_id       => lv_batch_id,
8448                          p_instance_id_col=> 'INSTANCE');
8449 
8450       IF lv_return <> 0 THEN
8451         RAISE ex_logging_err;
8452       END IF;
8453 
8454    	-- Inserting all the errored out records into MSC_ERRORS:
8455 
8456       lv_return := MSC_ST_UTIL.LOG_ERROR
8457 	                   (p_table_name        => 'MSD_ST_LEVEL_ORG_ASSCNS',
8458 	                    p_instance_code     => p_instance_code,
8459 	                    p_row               => lv_column_names,
8460 	                    p_severity          => G_SEV_ERROR,
8461 	                    p_error_text        => lv_error_text,
8462 	                    p_message_text      => NULL,
8463 	                    p_batch_id          => lv_batch_id);
8464 
8465       IF(lv_return <> 0) THEN
8466 	RAISE ex_logging_err;
8467       END IF;
8468 
8469       COMMIT;
8470 
8471    END LOOP;
8472 
8473 
8474   EXCEPTION
8475     WHEN ex_logging_err THEN
8476         ROLLBACK;
8477 
8478         msc_st_util.log_message(lv_error_text);
8479 
8480      WHEN OTHERS THEN
8481       ROLLBACK;
8482 
8483       lv_error_text    := substr('LOAD_LEVEL_ORG_ASSCNS '||'('
8484                        ||v_sql_stmt||')'|| SQLERRM, 1, 240);
8485       msc_st_util.log_message(lv_error_text);
8486 
8487   END LOAD_LEVEL_ORG_ASSCNS;
8488 
8489   PROCEDURE LAUNCH_DELETE_DUPLICATES (ERRBUF   OUT NOCOPY VARCHAR2,
8490                                          RETCODE  OUT NOCOPY NUMBER,
8491                                          p_instance_id  IN NUMBER)
8492   IS
8493   lv_error_text     VARCHAR2(250);
8494   BEGIN
8495         v_sql_stmt := 01;
8496     delete from msd_st_level_values m1
8497     where rowid<>(select max(rowid)     from msd_st_level_values m2
8498      where m2.level_id= m1.level_id  and m2.instance = m1.instance
8499      and m2.sr_level_pk = m1.sr_level_pk    )
8500         and m1.instance=p_instance_id ;
8501 
8502       msc_st_util.log_message('****no of row deleted*****' || SQL%ROWCOUNT);
8503 
8504       commit ;
8505 
8506     v_sql_stmt := 02;
8507 
8508           delete from msd_st_level_associations m1
8509           where rowid<> (select max(rowid)
8510                         from msd_st_level_associations m2
8511                         where m2.level_id= m1.level_id
8512                         and m2.instance = m1.instance
8513                         and m2.sr_level_pk = m1.sr_level_pk
8514                         and m2.PARENT_LEVEL_ID=m1.PARENT_LEVEL_ID
8515                         and m2.SR_PARENT_LEVEL_PK = m1.SR_PARENT_LEVEL_PK
8516                           )
8517                       and m1.instance=p_instance_id ;
8518 
8519           msc_st_util.log_message('****no of row deleted*****' || SQL%ROWCOUNT);
8520 
8521           commit ;
8522   EXCEPTION
8523       WHEN OTHERS THEN
8524          ROLLBACK;
8525 
8526          lv_error_text    := substr('LAUNCH_DELETE_DUPLICATES '||'('||v_sql_stmt||')'|| SQLERRM, 1, 240);
8527           msc_st_util.log_message(lv_error_text);
8528   END LAUNCH_DELETE_DUPLICATES;
8529 
8530 
8531 
8532  /*==========================================================================+
8533   | DESCRIPTION  : This procedure launches the Pull Program of DP             |
8534   +==========================================================================*/
8535 
8536    PROCEDURE  LAUNCH_PULL_PROGRAM(ERRBUF  OUT  NOCOPY VARCHAR2,
8537                        RETCODE            OUT  NOCOPY NUMBER,
8538                        p_instance_id      IN   NUMBER,
8539                        p_request_id       IN   NUMBER,
8540                        p_launch_lvalue    IN   NUMBER DEFAULT SYS_NO,
8541                        p_launch_booking   IN   NUMBER DEFAULT SYS_NO,
8542                        p_launch_shipment  IN   NUMBER DEFAULT SYS_NO,
8543                        p_launch_forecast  IN   NUMBER DEFAULT SYS_NO,
8544                        p_launch_time      IN   NUMBER DEFAULT SYS_NO,
8545                        p_launch_pricing   IN   NUMBER DEFAULT SYS_NO,
8546                        p_launch_curr_conv IN   NUMBER DEFAULT SYS_NO,
8547                        p_launch_uom_conv  IN   NUMBER DEFAULT SYS_NO,
8548                        p_launch_cs_data   IN   NUMBER DEFAULT SYS_NO,
8549                        p_cs_refresh       IN   NUMBER DEFAULT SYS_NO)
8550   IS
8551 
8552    CURSOR c1 IS
8553    SELECT   distinct cs_name,cs_definition_id
8554    FROM     msd_st_cs_data
8555    WHERE    attribute_1  = to_char(p_instance_id)
8556    AND      request_id   = p_request_id; --Bug 3002566
8557 
8558   lv_request_id        NUMBER;
8559   lv_lval_request_id   NUMBER:= 0;
8560   lv_cs_refresh        VARCHAR2(10) := 'N';
8561   ex_launch_fail       EXCEPTION ;
8562   lv_req_data          VARCHAR2(10);
8563 
8564   BEGIN
8565 
8566    lv_req_data := nvl(fnd_conc_global.request_data,G_NEW_REQUEST);
8567 
8568    -- If "Level Values' is already submitted as a sub-request then concurrent request
8569    -- would have been submitted for all the entities within this if clause.
8570 
8571   IF lv_req_data <> G_DP_LV_REQ_DATA THEN
8572    IF (p_launch_lvalue = SYS_YES ) THEN
8573 
8574       lv_request_id := fnd_request.submit_request('MSD', 'MSDPLV', NULL, NULL,TRUE,SYS_NO);
8575 
8576       IF lv_request_id = 0 THEN
8577         RAISE ex_launch_fail;
8578       END IF;
8579       fnd_conc_global.set_req_globals(conc_status => 'PAUSED',
8580                                       request_data => to_char(G_DP_LV_REQ_DATA));
8581       lv_req_data := 2;
8582     END IF;
8583 
8584    IF (p_launch_booking = SYS_YES ) THEN
8585 
8586       lv_request_id := fnd_request.submit_request('MSD', 'MSDPBD', NULL, NULL,FALSE);
8587       IF lv_request_id = 0 THEN
8588         RAISE ex_launch_fail;
8589       END IF;
8590       commit;
8591    END IF;
8592 
8593    IF (p_launch_shipment = SYS_YES ) THEN
8594 
8595       lv_request_id := fnd_request.submit_request('MSD', 'MSDPSD', NULL, NULL,FALSE);
8596       IF lv_request_id = 0 THEN
8597         RAISE ex_launch_fail;
8598       END IF;
8599       commit;
8600    END IF;
8601 
8602 
8603    IF (p_launch_forecast = SYS_YES ) THEN
8604 
8605       lv_request_id := fnd_request.submit_request('MSD', 'MSDPMF', NULL, NULL,FALSE);
8606       IF lv_request_id = 0 THEN
8607         RAISE ex_launch_fail;
8608       END IF;
8609       commit;
8610    END IF;
8611 
8612    IF (p_launch_time = SYS_YES ) THEN
8613 
8614       lv_request_id := fnd_request.submit_request('MSD', 'MSDPTD', NULL, NULL,FALSE);
8615       IF lv_request_id = 0 THEN
8616         RAISE ex_launch_fail;
8617       END IF;
8618       commit;
8619    END IF;
8620 
8621    IF (p_launch_pricing = SYS_YES ) THEN
8622 
8623       lv_request_id := fnd_request.submit_request('MSD', 'MSDPPD', NULL, NULL,FALSE);
8624       IF lv_request_id = 0 THEN
8625         RAISE ex_launch_fail;
8626       END IF;
8627       commit;
8628    END IF;
8629 
8630    IF (p_launch_curr_conv = SYS_YES ) THEN
8631 
8632       lv_request_id := fnd_request.submit_request('MSD', 'MSDPCC', NULL, NULL,FALSE);
8633       IF lv_request_id = 0 THEN
8634         RAISE ex_launch_fail;
8635       END IF;
8636       commit;
8637    END IF;
8638 
8639    IF (p_launch_uom_conv = SYS_YES ) THEN
8640 
8641       lv_request_id := fnd_request.submit_request('MSD', 'MSDPUC', NULL, NULL,FALSE);
8642       IF lv_request_id = 0 THEN
8643         RAISE ex_launch_fail;
8644       END IF;
8645     END IF;
8646 
8647   IF lv_req_data = G_DP_LV_REQ_DATA THEN
8648    RETURN;
8649   END IF;
8650  END IF;
8651 
8652    IF (p_launch_cs_data = SYS_YES) THEN
8653 
8654        IF nvl(p_request_id,-1) < 1 THEN  -- If launched via Flat File Load, check the supplied parameter for CSData Refresh
8655            IF(p_cs_refresh = 1) THEN
8656              lv_cs_refresh := 'Y';
8657            END IF;
8658        ELSE
8659              lv_cs_refresh := 'Y';  -- If Launching CS data Pull Program via Self Service in legacy, Launching it with Complete Refresh.(Bug 3419291)
8660        END IF;
8661 
8662       FOR c_rec IN c1 LOOP
8663 
8664             lv_request_id :=
8665             fnd_request.submit_request('MSD', 'MSDCSCL', NULL, NULL,FALSE,
8666                                        'P', 'Y',
8667                                         c_rec.cs_definition_id,
8668                                         c_rec.cs_name,
8669                                         lv_cs_refresh,
8670                                         p_instance_id,
8671                                         NULL,
8672                                         NULL,
8673                                         NULL,
8674                                         NULL,
8675                                         NULL,
8676                                         NULL,
8677                                         NULL,
8678                                         NULL,
8679                                         NULL,
8680                                         NULL,
8681                                         NULL );
8682 
8683 
8684       END LOOP ;
8685 
8686    END IF;
8687 
8688   -- Only for level values sub-request, monitor needs to wait till the processing of
8689   -- level values. If the request data value is already set to 'DP Level Values   -- sub-request', it is modified to 'DP custom stream sub-request', so that monitor   -- continues with the processing.
8690 
8691      IF lv_req_data = G_DP_LV_REQ_DATA THEN
8692         fnd_conc_global.set_req_globals(conc_status => 'RUNNING',
8693                                         request_data => to_char(G_DP_CS_REQ_DATA));
8694      END IF;
8695    EXCEPTION
8696        WHEN  ex_launch_fail THEN
8697        FND_MESSAGE.SET_NAME('MSD', 'MSD_PP_LAUNCH_PULL_FAIL');
8698        ERRBUF := FND_MESSAGE.GET ;
8699        RETCODE := G_WARNING ;
8700 
8701        WHEN OTHERS THEN
8702        FND_MESSAGE.SET_NAME('MSD', 'MSD_PP_LAUNCH_PULL_FAIL');
8703        ERRBUF := FND_MESSAGE.GET;
8704        RETCODE := G_WARNING ;
8705 
8706   END LAUNCH_PULL_PROGRAM ;
8707 
8708 
8709  /*======================================================================================+
8710   | DESCRIPTION  :  This procedure is just a wrapper procedure for pre-processor monitor |
8711   ++=====================================================================================*/
8712      PROCEDURE LAUNCH_MONITOR( ERRBUF                OUT NOCOPY VARCHAR2,
8713                              RETCODE               OUT NOCOPY NUMBER,
8714                              p_instance_id         IN  NUMBER,
8715                              p_timeout             IN  NUMBER DEFAULT 1440,
8716                              p_batch_size          IN  NUMBER DEFAULT 1000,
8717                              p_total_worker_num    IN  NUMBER DEFAULT 3,
8718                              p_ascp_ins_dummy      IN  VARCHAR2 DEFAULT NULL,
8719                              p_dummy1              IN  VARCHAR2 DEFAULT NULL,
8720                              p_dummy2              IN  VARCHAR2 DEFAULT NULL,
8721                              p_cal_enabled         IN  NUMBER DEFAULT SYS_NO,
8722                              p_dmd_class_enabled   IN  NUMBER DEFAULT SYS_YES,
8723                              p_tp_enabled          IN  NUMBER DEFAULT SYS_YES,
8724                              p_list_price_enabled  IN  NUMBER DEFAULT SYS_NO,
8725                              p_ctg_enabled         IN  NUMBER DEFAULT SYS_YES,
8726                              p_item_enabled        IN  NUMBER DEFAULT SYS_YES,
8727                              p_item_cat_enabled    IN  NUMBER DEFAULT SYS_YES,
8728                              p_rollup_dummy        IN  VARCHAR2 DEFAULT NULL,
8729                              p_item_rollup         IN  NUMBER DEFAULT SYS_YES,
8730                              p_bom_enabled         IN  NUMBER DEFAULT SYS_YES,
8731                              p_uom_enabled         IN  NUMBER DEFAULT SYS_YES,
8732                              p_uom_conv_enabled    IN  NUMBER DEFAULT SYS_NO ,
8733                              p_curr_conv_enabled   IN  NUMBER DEFAULT SYS_NO,
8734                              p_setup_enabled       IN  NUMBER DEFAULT SYS_NO,
8735                              p_fiscal_cal_enabled  IN  NUMBER DEFAULT SYS_NO,
8736                              p_comp_cal_enabled    IN  NUMBER DEFAULT SYS_NO,
8737                              p_level_value_enabled IN  NUMBER DEFAULT SYS_NO,
8738                              p_level_assoc_enabled IN  NUMBER DEFAULT SYS_NO,
8739                              p_booking_enabled     IN  NUMBER DEFAULT SYS_NO,
8740                              p_shipment_enabled    IN  NUMBER DEFAULT SYS_NO,
8741                              p_mfg_fct_enabled     IN  NUMBER DEFAULT SYS_NO,
8742                              p_cs_data_enabled     IN  NUMBER DEFAULT SYS_NO,
8743                              p_cs_dummy            IN  VARCHAR2 DEFAULT NULL,
8744                              p_cs_refresh          IN  NUMBER DEFAULT SYS_NO,
8745                              p_parent_request_id   IN  NUMBER DEFAULT -1,
8746                              p_calling_module      IN  NUMBER DEFAULT G_DP)
8747 
8748     IS
8749         lv_errbuf                   varchar2(4000):='';
8750         lv_retcode                  number;
8751 
8752 
8753 
8754     BEGIN
8755 
8756          MSC_CL_PRE_PROCESS.LAUNCH_MONITOR(
8757                              ERRBUF                =>    lv_errbuf,
8758                              RETCODE               =>    lv_retcode,
8759                              p_instance_id         =>    p_instance_id ,
8760                              p_timeout             =>    p_timeout ,
8761                              p_batch_size          =>    p_batch_size ,
8762                              p_total_worker_num    =>    p_total_worker_num ,
8763                              p_cal_enabled         =>    p_cal_enabled ,
8764                              p_dmd_class_enabled   =>    p_dmd_class_enabled ,
8765                              p_tp_enabled          =>    p_tp_enabled ,
8766                              p_ctg_enabled         =>    p_ctg_enabled ,
8767                              p_item_enabled        =>    p_item_enabled ,
8768                              p_item_cat_enabled    =>    p_item_cat_enabled ,
8769                              p_item_rollup         =>    p_item_rollup ,
8770                              p_bom_enabled         =>    p_bom_enabled ,
8771                              p_uom_enabled         =>    p_uom_enabled ,
8772                              p_uom_conv_enabled    =>    p_uom_conv_enabled ,
8773                              p_curr_conv_enabled   =>    p_curr_conv_enabled ,
8774                              p_setup_enabled       =>    p_setup_enabled ,
8775                              p_fiscal_cal_enabled  =>    p_fiscal_cal_enabled ,
8776                              p_comp_cal_enabled  =>    p_comp_cal_enabled ,
8777                              p_level_value_enabled =>    p_level_value_enabled ,
8778                              p_level_assoc_enabled =>    p_level_assoc_enabled ,
8779                              p_booking_enabled     =>    p_booking_enabled ,
8780                              p_shipment_enabled    =>    p_shipment_enabled ,
8781                              p_mfg_fct_enabled     =>    p_mfg_fct_enabled ,
8782                              p_list_price_enabled  =>    p_list_price_enabled ,
8783                              p_cs_data_enabled     =>    p_cs_data_enabled ,
8784                              p_cs_refresh          =>    p_cs_refresh ,
8785                              p_parent_request_id   =>    p_parent_request_id ,
8786                              p_calling_module      =>    p_calling_module);
8787 
8788 
8789 
8790        ERRBUF  := lv_errbuf;
8791        RETCODE := lv_retcode;
8792 
8793 
8794 
8795     END;
8796 
8797  END MSD_CL_PRE_PROCESS;