DSN8MPX

THIS MODULE HANDLES, IN THE MAJOR SYSTEM PROJECT, THE DETAIL OPERATIONS FOR ACTIVITY ESTIMATES OF A PROJECT, SUCH AS DISPLAY, ADD(INSERT), UPDATE, AND ERASE(DELETE), DEPENDING ON A SEARCH CRITERIA, SUCH AS PROJECT ID, PROJECT NAME, RESPONSIBLE ID, OR RESPONSIBLE NAME.

 DSN8MPX: PROC;           /* ACTIVITY ESTIMATES DETAIL MODULE */        00010000
  /*                                                                 */ 00020000
  /*                                                                 */ 00030000
 /********************************************************************* 00040000
 *                                                                    * 00050000
 *   MODULE NAME      = DSN8MPX                                       * 00060000
 *                                                                    * 00070000
 *   DESCRIPTIVE NAME = SAMPLE APPLICATION                            * 00080000
 *                      DETAIL ACTIVITY ESTIMATES MODULE              * 00090000
 *                      PL/I                                          * 00100000
 *                                                                    * 00110000
 *     COPYRIGHT = 5740-XYR (C) COPYRIGHT IBM CORP 1982, 1989         * 00120000
 *     REFER TO COPYRIGHT INSTRUCTIONS FORM NUMBER G120-2083          * 00130000
 *                                                                    * 00140000
 *     STATUS = VERSION 2 RELEASE 2, LEVEL 0                          * 00150000
 *                                                                    * 00160000
 *   FUNCTION = THIS MODULE HANDLES, IN THE MAJOR SYSTEM PROJECT,     * 00170000
 *         THE DETAIL OPERATIONS FOR ACTIVITY ESTIMATES               * 00180000
 *        OF A PROJECT, SUCH AS                                       * 00190000
 *        DISPLAY, ADD(INSERT), UPDATE, AND ERASE(DELETE),            * 00200000
 *        DEPENDING ON A SEARCH CRITERIA, SUCH AS                     * 00210000
 *        PROJECT ID, PROJECT NAME,                                   * 00220000
 *        RESPONSIBLE ID, OR RESPONSIBLE NAME.                        * 00230000
 *                                                                    * 00240000
 *   NOTES =                                                          * 00250000
 *      DEPENDENCIES = NONE                                           * 00260000
 *                                                                    * 00270000
 *      RESTRICTIONS = THE VALID OPTIONS ARE:                         * 00280000
 *        .P-D-AE-PI,PN,RI,RN                                         * 00290000
 *        .P-A-AE-PI                                                  * 00300000
 *        .P-U-AE-PI,PN,RI,RN                                         * 00310000
 *        .P-E-AE-PI,PN,RI,RN                                         * 00320000
 *                                                                    * 00330000
 *   MODULE TYPE =                                                    * 00340000
 *      PROCESSOR = DB2  PRECOMPILER, PL/I OPTIMIZER                  * 00350000
 *      MODULE SIZE = SEE LINK-EDIT                                   * 00360000
 *      ATTRIBUTES =  REUSABLE                                        * 00370000
 *                                                                    * 00380000
 *   ENTRY POINT = DSN8MPX                                            * 00390000
 *                                                                    * 00400000
 *      PURPOSE = SEE FUNCTION                                        * 00410000
 *                                                                    * 00420000
 *      LINKAGE =   MODULE CALLED BY                                  * 00430000
 *        .DSN8MPM  FOR DISPLAY, AND FIRST STEP UPDATE OR ERASE       * 00440000
 *        .DSN8IP2  FOR FIRST STEP ADD, AND ALL SECOND STEPS.         * 00450000
 *                                                                    * 00460000
 *      INPUT = PARAMETERS EXPLICITLY PASSED TO THIS FUNCTION:        * 00470000
 *         COMMON AREA.                                               * 00480000
 *                                                                    * 00490000
 *         SYMBOLIC LABEL/NAME = PCONVSTA.PREV                        * 00500000
 *         DESCRIPTION         = ' ' OR 'D' PREVIOUS REQUEST          * 00510000
 *                                                                    * 00520000
 *         SYMBOLIC LABEL/NAME = .MAXSEL                              * 00530000
 *         DESCRIPTION         = 1-13 NUMBER OF SELECTIONS            * 00540000
 *                                                                    * 00550000
 *         SYMBOLIC LABEL/NAME = OUTAREA .OUTPUT                      * 00560000
 *         DESCRIPTION         = SECONDARY SELECTION OUTPUT           * 00570000
 *                                                                    * 00580000
 *         SYMBOLIC LABEL/NAME = COMPARM .NEWREQ                      * 00590000
 *         DESCRIPTION         = 'Y' OR 'N' NEW REQUEST               * 00600000
 *                                                                    * 00610000
 *         SYMBOLIC LABEL/NAME = INAREA                               * 00620000
 *         DESCRIPTION         = USER INPUT                           * 00630000
 *                                                                    * 00640000
 *      OUTPUT = PARAMETERS EXPLICITLY RETURNED:                      * 00650000
 *         COMMON AREA.                                               * 00660000
 *                                                                    * 00670000
 *         SYMBOLIC LABEL/NAME = OUTAREA .OUTPUT                      * 00680000
 *         DESCRIPTION         = SCREEN DETAIL OUTPUT                 * 00690000
 *                                                                    * 00700000
 *         SYMBOLIC LABEL/NAME = PCONVSTA.PREV                        * 00710000
 *         DESCRIPTION         = 'D' OR ' ' DEPENDING ON STEP NUMBER  * 00720000
 *                                                                    * 00730000
 *   EXIT-NORMAL =                                                    * 00740000
 *                                                                    * 00750000
 *   EXIT-ERROR =                                                     * 00760000
 *                                                                    * 00770000
 *      RETURN CODE =    NONE                                         * 00780000
 *                                                                    * 00790000
 *      ABEND CODES =    NONE                                         * 00800000
 *                                                                    * 00810000
 *      ERROR-MESSAGES =                                              * 00820000
 *        DSN8021I ACTIVITY NOT FOUND                                 * 00830000
 *        DSN8022I ACTIVITY SUCCESSFULLY ADDED                        * 00840000
 *        DSN8023I ACTIVITY SUCCESSFULLY ERASED                       * 00850000
 *        DSN8024I ACTIVITY SUCCESSFULLY UPDATED                      * 00860000
 *        DSN8025E ACTIVITY EXISTS ALREADY, ADD NOT DONE              * 00870000
 *        DSN8026E ACTIVITY DOES NOT EXIST, ERASE NOT DONE            * 00880000
 *        DSN8027E ACTIVITY DOES NOT EXIST, UPDATE NOT DONE           * 00890000
 *        DSN8028I ACTIVITY TYPE NOT FOUND, ADD IT INTERACTIVELY      * 00900000
 *        DSN8069E NO VALID SELECTIONS QUALIFY FOR THIS REQUEST       * 00910000
 *        DSN8220E INVALID PROJECT NUMBER, ACTIVITY NOT ADDED         * 00920000
 *        DSN8222E ACTIVITY HAS DEPENDENT ROWS, NOT ERASED            * 00930000
 *                                                                    * 00940000
 *   EXTERNAL REFERENCES =                                            * 00950000
 *      ROUTINES/SERVICES =                                           * 00960000
 *         DSN8MPG = ERROR MESSAGE ROUTINE                            * 00970000
 *                                                                    * 00980000
 *      DATA-AREAS =                                                  * 00990000
 *      CONTROL-BLOCKS =                                              * 01000000
 *         SQLCA               - SQL COMMUNICATION AREA               * 01010000
 *         DSN8MPCA            - SAMPLE COMMON AREA                   * 01020000
 *                                                                    * 01030000
 *   TABLES =                                                         * 01040000
 *           VPROJACT = PROJECT-ACTIVITY TABLE VIEW                   * 01050000
 *           VPROJ    = PROJECT       TABLE VIEW                      * 01060000
 *           VACT     = ACTIVITY TYPE TABLE VIEW                      * 01070000
 *           VOPTVAL = VALID OPTIONS TABLE VIEW                       * 01080000
 *           VDSPTXT = DISPLAY TEXTS TABLE VIEW                       * 01090000
 *                                                                    * 01100000
 *   CHANGE-ACTIVITY =                                                * 01110000
 *   - ADD CHECKS FOR REFERENTIAL INTEGRITY VIOLATIONS           V2R1 * 01120000
 *                                                                    * 01130000
 *  *PSEUDOCODE*                                                      * 01140000
 *                                                                    * 01150000
 *   PROCEDURE                                                        * 01160000
 *    DECLARATIONS.                                                   * 01170000
 *                                                                    * 01180000
 *    INITIALIZATION.                                                 * 01190000
 *     .CHECK IF OPTION IS VALID FOR THIS MODULE                      * 01200000
 *        MAJOR SYSTEM = 'P' AND OBJFLD = 'AE'                        * 01210002
 *      IF NOT, RETURN WITH ERROR MSG 691E OPTION NOT SUPPORTED.      * 01220000
 *                                                                    * 01230000
 *    STEP-1.                                                         * 01240000
 *      FILL IN TEXT LINES (HEADER,INFORMATION AND PFK)               * 01250000
 *       FROM VOPTVAL DEPENDING ON ACTION REQUIRED.                   * 01260000
 *      IF NOT ADD, SAVE PROJECT ID AND ACTIVITY KEYWORD,             * 01270000
 *       DEPENDING ON MAXSEL,                                         * 01280000
 *       IF MAXSEL=1 PROJ-ID AND ACT-KWD ARE ON THE FIRST DETAIL LINE,* 01290000
 *       IF MAXSEL>1 THE INPUT DATA CONTAINS THE DETAIL LINE NUMBER.  * 01300000
 *      GET PROJECT AND ACTIVITY FIELD NAMES,                         * 01310000
 *       FROM VDSPTXT.                                                * 01320000
 *      IF DISPLAY OR DELETE ACTION,                                  * 01330000
 *       PROTECT EVERY DETAIL INPUT FIELD.                            * 01340000
 *      IF ADD OR UPDATE ACTION,                                      * 01350000
 *       PROTECT PROJECT-ID, ACT-ID AND ALL NON PROJ-ACT FIELDS.      * 01360000
 *       POSITION THE SCREEN CURSOR TO ACT ESTIMATES NAME FIELD.      * 01370000
 *      IF ADD, UNPROTECT PROJ-ID AND ACT-ID FIELDS,                  * 01380000
 *       MOVE USER INPUT TO CORRESPONDING OUTPUT DATA FIELD,          * 01390000
 *       PREV='D' AND RETURN.                                         * 01400000
 *      AND FOR DISPLAY, UPDATE AND ERASE,                            * 01410000
 *       FETCH PROJECT-ACTIVITY, PROJECT AND ACTIVITY-TYPE CURRENT    * 01420000
 *        VALUES,                                                     * 01430000
 *        PREV='D' AND RETURN.                                        * 01440000
 *       OR MSG 'ACTIVITY TYPE NOT FOUND'                             * 01450000
 *           OR 'ACTIVITY NOT FOUND'                                  * 01460000
 *           AND RETURN.                                              * 01470000
 *                                                                    * 01480000
 *    STEP-2.                                                         * 01490000
 *      IF ADD, DO IT AND MSG                                         * 01500000
 *       EITHER 'ACTIVITY ADDED SUCCESSFULLY'                         * 01510000
 *           OR 'ACTIVITY EXISTS ALREADY, ADD NOT DONE'               * 01520000
 *       PREV=' ' AND RETURN.                                         * 01530000
 *      IF UPDATE, DO IT AND MSG                                      * 01540000
 *       EITHER 'ACTIVITY UPDATED SUCCESSFULLY'                       * 01550000
 *           OR 'ACTIVITY DOES NOT EXIST, UPDATE NOT DONE'            * 01560000
 *       RETURN.                                                      * 01570000
 *      IF ERASE, DO IT AND MSG                                       * 01580000
 *       EITHER 'ACTIVITY ERASED SUCCESSFULLY'                        * 01590000
 *           OR 'ACTIVITY DOES NOT EXIST, ERASE NOT DONE'             * 01600000
 *       PREV=' ' AND RETURN.                                         * 01610000
 *      OR MSG 002E OPTION NOT SUPPORTED                              * 01620000
 *       RETURN.                                                      * 01630000
 *    END.                                                            * 01640000
 *                                                                    * 01650000
 *********************************************************************/ 01660000
     /********************************************************/         01670000
     /*          **  FIELDS SENT TO MESSAGE ROUTINE          */         01680000
     /********************************************************/         01690000
                                                                        01700000
 DCL  MODULE            CHAR (07) INIT ('DSN8MPX');                     01710000
 DCL  OUTMSG            CHAR (69);                                      01720000
                                                                        01730000
                                                                        01740000
  /*********************************************************/           01750000
  /*  ** CHECKS IF OPTION IS VALID                         */           01760000
  /*********************************************************/           01770000
                                                                        01780000
                                       /* INITIALIZE VARIABLES       */ 01790000
  MAJOR='DSN8MPX';                                                      01800000
  MINOR=' ';                                                            01810000
                                                                        01820000
                                       /* IS OPTION VALID?           */ 01830000
                                       /* MAJOR SYSTEM - P           */ 01840000
                                       /* OBJFLD - AE                */ 01850002
  IF INAREA.MAJSYS^='P' | INAREA.OBJFLD^='AE' THEN                      01860002
    DO;                                                                 01870000
      I=1;                             /* OPTION NOT VALID           */ 01880000
      GOTO MPXNSUP;                    /* GO TO ERROR ROUTINE        */ 01890000
    END;                                                                01900000
                                                                        01910000
  IF INAREA.ACTION  ='D' THEN          /* ACTION - DISPLAY           */ 01920000
    GOTO MPX1_STEP;                                                     01930000
                                                                        01940000
  IF COMPARM.NEWREQ ='N' THEN          /*  NEW REQUEST               */ 01950000
    GOTO MPX2_STEP;                                                     01960000
                                                                        01970000
  IF COMPARM.NEWREQ^='Y' THEN          /* INVALID OPTION             */ 01980000
    DO;                                /* GO TO ERROR ROUTINE        */ 01990000
      I=2;                                                              02000000
      GOTO MPXNSUP;                                                     02010000
    END;                                                                02020000
                                                                        02030000
                                                                        02040000
  /*********************************************************/           02050000
  /*  ** FETCHES AND PROTECTS FIELDS FOR A CERTAIN REQUEST */           02060000
  /*********************************************************/           02070000
                                                                        02080000
 MPX1_STEP:                                                             02090000
  MINOR='STEP-1';                                                       02100000
                                       /* FETCH FIELDS FOR           */ 02110000
                                       /* A CERTAIN REQUEST          */ 02120000
  EXEC SQL SELECT  *                                                    02130000
              INTO :POPTVAL FROM VOPTVAL                                02140000
              WHERE     MAJSYS  =  'P'                                  02150000
                    AND ACTION  = :INAREA.ACTION                        02160000
                    AND OBJFLD  =  'AE'                                 02170003
                    AND SCRTYPE =  'D';                                 02180000
                                                                        02190000
  IF SQLCODE=100 THEN                  /* ERROR ?                    */ 02200000
    DO;                                                                 02210000
      OUTAREA.MSG=OPTNF;                                                02220000
      RETURN;                                                           02230000
    END;                                                                02240000
                                                                        02250000
                                       /* FILL IN TEXT LINES         */ 02260000
  OUTAREA.TITLE  =POPTVAL.HEADTXT;     /* HEADING INFORMATION        */ 02270000
  OUTAREA.MSG    =POPTVAL.INFOTXT;     /* MESSAGE INFORMATION        */ 02280000
  OUTAREA.PFKTEXT=POPTVAL.PFKTXT;      /* PFKEY INFORMATION          */ 02290000
                                                                        02300000
  IF INAREA.ACTION='A' THEN            /* ACTION - ADD               */ 02310000
    GOTO MPX010;                                                        02320000
                                                                        02330000
  IF MAXSEL=1 THEN                     /* SAVE ONLY INFORMATION      */ 02340000
                                       /*    ON FIRST DETAIL         */ 02350000
                                       /* LINE IN SECONDARY SEL      */ 02360000
    DO;                                                                 02370000
      PPROJACT.PROJNO=DSN8MP3_POS.PROJNUM(1);                           02380000
      PACT.ACTKWD=DSN8MP3_POS.ACTKW(1);                                 02390000
      PPROJACT.ACSTDATE=DSN8MP3_POS.ESTDAT(1);                          02400000
      GOTO MPX010;                                                      02410000
    END;                                                                02420000
                                                                        02430000
  IF MAXSEL < 1 THEN                   /* NO PROJECTS                */ 02440000
    DO;                                /* PRINT ERROR MESSAGE        */ 02450000
      I=3;                                                              02460000
      GOTO MPXNSUP;                                                     02470000
    END;                                                                02480000
                                                                        02490000
  IF VERIFY(DAT1,'0123456789')^=0 THEN /* NON NUMERIC VERIFICATION   */ 02500000
    DO;                                /*    FOR DAT1                */ 02510000
      I=4;                                                              02520000
      GOTO MPXNSUP;                                                     02530000
    END;                                                                02540000
                                                                        02550000
  IF VERIFY(DAT2,'0123456789')^=0 THEN /* NUMERIC VERIFICATION       */ 02560000
    DO;                                                                 02570000
      DAT2=DAT1;                                                        02580000
      DAT1='0';                                                         02590000
    END;                                                                02600000
                                       /*  INPUT DATA CONTAINS       */ 02610000
                                       /*  THE DETAIL LINE NO.       */ 02620000
  I=DATAP;                                                              02630000
                                                                        02640000
  IF I>MAXSEL THEN                     /*  INVALID SECONDARY SEL     */ 02650000
    DO;                                /*  PRINT ERROR MESSAGE       */ 02660000
      I=5;                                                              02670000
      GOTO MPXNSUP;                                                     02680000
    END;                                                                02690000
                                                                        02700000
  PPROJACT.PROJNO=DSN8MP3_POS.PROJNUM(I);    /* SAVE PROJECT ID      */ 02710000
  PACT.ACTKWD=DSN8MP3_POS.ACTKW(I);          /* SAVE ACTIVITY WK     */ 02720000
  PPROJACT.ACSTDATE=DSN8MP3_POS.ESTDAT(I);   /* SAVE EMPLOYEE ID     */ 02730000
                                                                        02740000
 MPX010:                                                                02750000
  OUTPUT=' ';                          /* MOVE BLANKS TO OUTPUT FIELD*/ 02760000
  EXEC SQL OPEN DH;                    /* OPEN DH CURSOR             */ 02770000
                                                                        02780000
  DO I=1 TO 9;                                                          02790000
    EXEC SQL FETCH DH INTO :PDSPTXT.DSPLINE, :PDSPTXT.LINENO;           02800000
                                                                        02810000
    IF SQLCODE=100 THEN                                                 02820000
      LEAVE;                                                            02830000
    FIELD1(I)=DSPLINE;                                                  02840000
  END;                                                                  02850000
                                                                        02860000
  EXEC SQL CLOSE DH;                   /* CLOSE DH CURSOR            */ 02870000
                                                                        02880000
  IF I=1 THEN                          /* NO TEXT AVAILABLE          */ 02890000
    DO;                                                                 02900000
      OUTAREA.MSG=DSPNF;                                                02910000
      RETURN;                                                           02920000
    END;                                                                02930000
                                                                        02940000
                        /* PROTECT THE MODIFIABLE ATTRIBUTE FIELDS   */ 02950000
  DO I=1 TO 15;                                                         02960000
    UNSPEC(ATTR1(I))='00000000'B;   /* REPLACE PROTECTED PRE-MODIFIED*/ 02970000
    UNSPEC(ATTR2(I))='11100001'B;   /* REPLACE PROTECTED PRE-MODIFIED*/ 02980000
  END;                                                                  02990000
                                                                        03000000
                                       /* IF DISPLAY OR ERASE ACTION */ 03010000
                                       /* PROTECT EVERY DETAIL       */ 03020000
                                       /* INPUT FIELD                */ 03030000
  IF INAREA.ACTION='D' | INAREA.ACTION='E' THEN                         03040000
    GOTO MPX030;                                                        03050000
                                                                        03060000
                                       /* IF UPDATE OR ADD ACTION    */ 03070000
                                       /* PROTECT PROJECT-ID         */ 03080000
                                       /* AND RESPONSIBLE FIELDS     */ 03090000
  IF INAREA.ACTION='U' THEN                                             03100000
    GOTO MPX022;                                                        03110000
                                                                        03120000
                                       /* IF ADD, UNPROTECT          */ 03130000
                                       /* PROJECT-ID FIELD           */ 03140000
  IF INAREA.ACTION^='A' THEN                                            03150000
    DO;                                                                 03160000
      I=6;                                                              03170000
      GOTO MPXNSUP;                                                     03180000
    END;                                                                03190000
                                                                        03200000
  IF INAREA.SEARCH^='PI' THEN          /*  PROJECT-ID                */ 03210000
    DO;                                                                 03220000
      I=7;                                                              03230000
      GOTO MPXNSUP;                                                     03240000
    END;                                                                03250000
                                                                        03260000
  FIELD2(1)=DATA6;                                                      03270000
                                                                        03280000
               /* MAKE IT POSSIBLE TO ADD PROJECT ID & ACTIVITY ID   */ 03290000
  UNSPEC(ATTR2(1))='11000001'B;  /* REPLACE UNPROTECTED PRE-MODIFIED */ 03300000
  UNSPEC(ATTR2(4))='11000001'B;  /* REPLACE UNPROTECTED PRE-MODIFIED */ 03310000
                                                                        03320000
 MPX022:                                                                03330000
  DO I=7 TO 9;                                                          03340000
    UNSPEC(ATTR2(I))='11000001'B;                                       03350000
  END;                                                                  03360000
  UNSPEC(ATTR1(1))='11000000'B;        /* CURSOR POSITION            */ 03370000
                                                                        03380000
  IF INAREA.ACTION='A' THEN            /*   ACTION - ADD             */ 03390000
    GOTO MPXRET1;                      /*   GO TO RETURN ROUTINE     */ 03400000
                                                                        03410000
  MPXSAVE.ACSTDATE = PPROJACT.ACSTDATE;/* SAVE FOR UPDATE NEXT TIME  */ 03420000
                                                                        03430000
  /*********************************************************/           03440000
  /*  *  ADDS, UPDATES, OR ERASES AND PRINTS MESSAGE       */           03450000
  /*********************************************************/           03460000
                                                                        03470000
 MPX030:                                                                03480000
  FIELD2(1)=PPROJACT.PROJNO;           /* GET PROJECT ID             */ 03490000
  FIELD2(5)=PACT.ACTKWD;               /* GET ACTIVITY WORK DEPT     */ 03500000
  FIELD2(8)=PPROJACT.ACSTDATE;         /* GET EMPLOYEE ID            */ 03510000
                                                                        03520000
  EXEC SQL SELECT *                    /* FETCH ACTIVITY INFO.       */ 03530000
              INTO :PACT     FROM VACT                                  03540000
              WHERE ACTKWD=:PACT.ACTKWD;                                03550000
                                                                        03560000
  IF SQLCODE=100 THEN                                                   03570000
    DO;                                                                 03580000
      CALL DSN8MPG (MODULE, '028I', OUTMSG);                            03590000
                                       /* ACTIVITY TYPE NOT FOUND    */ 03600000
      GOTO MPXMSG;                     /* GO TO MESSAGE ROUTINE      */ 03610000
    END;                                                                03620000
                                                                        03630000
  FIELD2(4)=PACT.ACTNO;                /*   GET ACTIVITY ID       */    03640000
  FIELD2(6)=PACT.ACTDESC;              /*  GET ACTIVITY DESCRIPTION */  03650000
                                                                        03660000
 /********************************************************************/ 03670000
 /* IF THE ACTIVITY START DATE IS BLANK, THIS INDICATES THAT THE     */ 03680000
 /* FIELD IS NULL.  PUT A NULL INTO THE PREDICATE FOR THE ACTIVITY   */ 03690000
 /* START DATE COLUMN.  OTHERWISE DO A SELECT USING THE INPUT VALUE  */ 03700000
 /********************************************************************/ 03710000
                                                                        03720000
  IF PPROJACT.ACSTDATE = BLKDATE THEN                                   03730000
    DO;                                                                 03740000
      EXEC SQL SELECT *                      /* FETCH PROJ-ACT INFO. */ 03750000
              INTO :PPROJACT:PRNULLS_INDS FROM VPROJACT                 03760000
              WHERE     PROJNO   = :PPROJACT.PROJNO                     03770000
                    AND ACTNO    = :PACT.ACTNO                          03780000
                    AND ACSTDATE IS NULL;                               03790000
    END;                                                                03800000
  ELSE                                                                  03810000
    DO;                                                                 03820000
      EXEC SQL SELECT *                      /* FETCH PROJ-ACT INFO. */ 03830000
              INTO :PPROJACT:PRNULLS_INDS FROM VPROJACT                 03840000
              WHERE     PROJNO   = :PPROJACT.PROJNO                     03850000
                    AND ACTNO    = :PACT.ACTNO                          03860000
                    AND ACSTDATE = :PPROJACT.ACSTDATE;                  03870000
    END;                                                                03880000
                                                                        03890000
  IF SQLCODE=100 THEN                                                   03900000
    DO;                                                                 03910000
      CALL DSN8MPG (MODULE, '021I', OUTMSG); /*   PROJ-ACT NOT FOUND */ 03920000
      GOTO MPXMSG;                           /*  PRINT ERROR MESSAGE */ 03930000
    END;                                                                03940000
                                                                        03950000
  FIELD2(7)=ACSTAFF;                         /*  GET ACTIVITY NAME   */ 03960000
                                                                        03970000
 /********************************************************************/ 03980000
 /* IF THE NULL INDICATOR FOR THE END DATE IS 0, THE VALUE IS NOT    */ 03990000
 /* NULL.  USE THE RETRIEVED VALUE IN THE OUTPUT FIELD.  IF THE NULL */ 04000000
 /* INDICATOR IS -1 THEN THE VALUE IS NULL.  FILL THE OUTPUT FIELD   */ 04010000
 /* WITH BLANKS.                                                     */ 04020000
 /********************************************************************/ 04030000
                                                                        04040000
  IF PRNULLS_INDS(5) = 0 THEN                                           04050000
    FIELD2(9)=ACENDATE;                /*  GET ACTIVITY DATE         */ 04060000
  ELSE                                                                  04070000
    FIELD2(9)=BLKDATE;                                                  04080000
                                                                        04090000
  EXEC SQL SELECT *                                                     04100000
              INTO :PPROJ.PROJNO,                                       04110000
                   :PPROJ.PROJNAME,                                     04120000
                   :PPROJ.DEPTNO,                                       04130000
                   :PPROJ.RESPEMP,                                      04140000
                   :PPROJ.PRSTAFF,                                      04150000
                   :PPROJ.PRSTDATE,                                     04160000
                   :PPROJ.PRENDATE,                                     04170000
                   :PPROJ.MAJPROJ:NULL_IND1                             04180000
              FROM VPROJ                                                04190000
              WHERE PROJNO=:PPROJACT.PROJNO;                            04200000
                                                                        04210000
  IF SQLCODE=100 THEN                  /*  EMPLOYEE NOT FOUND        */ 04220000
    GOTO MPXRET1;                      /*  GO TO RETURN ROUTINE      */ 04230000
                                                                        04240000
  FIELD2(2)=PPROJ.PROJNAME;            /*  GET PROJECT NAME          */ 04250000
                                                                        04260000
 MPXRET1:                              /*   RETURN  ROUTINE          */ 04270000
  PREV='D';                                                             04280000
  RETURN;                              /*   RETURN                   */ 04290000
                                                                        04300000
1MPX2_STEP:                                                             04310000
  MINOR='STEP-2';                                                       04320000
                                                                        04330000
  DO I=1 TO 15;                                                         04340000
    UNSPEC(ATTR1(I))='00000000'B;   /* REPLACE PROTECTED PRE-MODIFIED*/ 04350000
    UNSPEC(ATTR2(I))='11100001'B;   /* REPLACE PROTECTED PRE-MODIFIED*/ 04360000
    FIELD2(I)=TRANDATA(I);                                              04370000
  END;                                                                  04380000
                                                                        04390000
  PPROJACT.PROJNO=TRANDATA(1);                                          04400000
                                                                        04410000
  IF VERIFY(TRANDATA(4),'0123456789 ') = 0 & /* DATA IS NUMERIC      */ 04420000
    TRANDATA(4)  ^= '       ' THEN           /* AND NOT ALL BLANKS   */ 04430000
    PPROJACT.ACTNO =TRANDATA(4);             /* USE THE ENTERED DATA */ 04440000
                                                                        04450000
  ELSE                                       /* DATA ISN'T NUMERIC   */ 04460000
    PPROJACT.ACTNO =  0;                     /* CHOOSE A NUMBER      */ 04470000
                                                                        04480000
 /********************************************************************/ 04490000
 /* IF THE INPUT VALUE IS BLANK, SET THE NULL INDICATOR TO -1 TO     */ 04500000
 /* INDICATE THE FIELD CONTAINS A NULL VALUE.  OTHERWISE SET THE     */ 04510000
 /* NULL INDICATOR TO 0.                                             */ 04520000
 /********************************************************************/ 04530000
                                                                        04540000
  IF TRANDATA(8) = '           ' THEN  /* DATA IS BLANK              */ 04550000
    DO;                                                                 04560000
      NULL_IND1 = -1;                  /* SET NULL INDICATOR         */ 04570000
      PPROJACT.ACSTDATE = BLKDATE;     /* ARBITRARY DATE VALUE       */ 04580000
    END;                                                                04590000
  ELSE                                 /* DATA IS NOT VALID          */ 04600000
    DO;                                                                 04610000
      NULL_IND1 = 0;                   /* SET NULL INDICATOR         */ 04620000
      PPROJACT.ACSTDATE=TRANDATA(8);   /* USE THE ENTERRED DATA      */ 04630000
    END;                                                                04640000
                                                                        04650000
  IF INAREA.ACTION = 'E' THEN                                           04660000
    GOTO MPX050;                                                        04670000
                                                                        04680000
  EXEC SQL SELECT *                                                     04690000
              INTO :PACT     FROM VACT                                  04700000
              WHERE ACTNO=:PPROJACT.ACTNO;                              04710000
                                                                        04720000
  IF SQLCODE=100 THEN                                                   04730000
    DO;                                                                 04740000
      CALL DSN8MPG (MODULE, '028I', OUTMSG);                            04750000
                                       /* ACTIVITY TYPE NOT FOUND    */ 04760000
      GOTO MPXMSG;                     /* PRINT ERROR MESSAGE        */ 04770000
    END;                                                                04780000
                                                                        04790000
  IF VERIFY(TRANDATA(7),'0123456789. ') = 0 &/* DATA IS NUMERIC      */ 04800000
    TRANDATA(7)  ^= '       ' THEN           /* AND NOT ALL BLANKS   */ 04810000
    ACSTAFF = TRANDATA(7);                   /* USE THE ENTERED DATA */ 04820000
                                                                        04830000
  ELSE                                       /* DATA ISN'T NUMERIC   */ 04840000
    PPROJACT.ACSTAFF = 0;                 /* CHOOSE A STAFFING LEVEL */ 04850000
                                                                        04860000
 /********************************************************************/ 04870000
 /* IF THE INPUT VALUE IS BLANK, SET THE NULL INDICATOR TO -1 TO     */ 04880000
 /* INDICATE THE FIELD CONTAINS A NULL VALUE.  OTHERWISE SET THE     */ 04890000
 /* NULL INDICATOR TO 0.                                             */ 04900000
 /********************************************************************/ 04910000
                                                                        04920000
  IF TRANDATA(9) = '           ' THEN  /* DATA IS BLANK              */ 04930000
    DO;                                                                 04940000
      NULL_IND2 = -1;                  /* SET NULL INDICATOR         */ 04950000
      ACENDATE = BLKDATE;              /* ARBITRARY DATE VALUE       */ 04960000
    END;                                                                04970000
  ELSE                                 /* DATA IS NOT VALID          */ 04980000
    DO;                                                                 04990000
      NULL_IND2 = 0;                   /* SET NULL INDICATOR         */ 05000000
      ACENDATE=TRANDATA(9);            /* USE THE ENTERRED DATA      */ 05010000
    END;                                                                05020000
                                                                        05030000
  /*********************************************************/           05040000
  /*  ** INSERT (ADD)                                      */           05050000
  /*********************************************************/           05060000
                                                                        05070000
  IF INAREA.ACTION ^= 'A' THEN         /* IF ACTION IS NOT ADD       */ 05080000
    GOTO MPX040;                       /* SKIP THIS ROUTINE          */ 05090000
                                                                        05100000
  EXEC SQL WHENEVER SQLERROR CONTINUE;                                  05110000
                                       /* PERFORM INSERT (ADD)       */ 05120000
  EXEC SQL INSERT                                                       05130000
              INTO VPROJACT (PROJNO,ACTNO,ACSTAFF,ACSTDATE,ACENDATE)    05140000
              VALUES(:PPROJACT.PROJNO,:PPROJACT.ACTNO,                  05150000
                     :PPROJACT.ACSTAFF,:PPROJACT.ACSTDATE:NULL_IND1,    05160000
                     :PPROJACT.ACENDATE:NULL_IND2);                     05170000
  IF SQLCODE=0 THEN                                                     05180000
    DO;                                                                 05190000
      PREV=' ';                                                         05200000
      CALL DSN8MPG (MODULE, '022I', OUTMSG);                            05210000
                                       /* ACTIVITY SUCCESSFULLY ADDED*/ 05220000
      GO TO MPXMSG;                    /* PRINT CONFIRMATION MESSAGE */ 05230000
    END;                                                                05240000
                                                                        05250000
  IF SQLCODE = -530 THEN                                                05260000
    DO;                                /* INVALID PROJECT NUMBER     */ 05270000
      CALL DSN8MPG (MODULE, '220E',OUTMSG);                             05280000
                                       /* ADD NOT DONE               */ 05290000
      GO TO MPXMSG;                    /* PRINT ERROR MESSAGE        */ 05300000
    END;                                                                05310000
                                                                        05320000
  IF SQLCODE=-803 THEN                 /* ACTIVITY ALREADY EXISTS    */ 05330000
    DO;                                                                 05340000
      CALL DSN8MPG (MODULE, '025E', OUTMSG);                            05350000
                                       /* ADD NOT DONE               */ 05360000
      GO TO MPXMSG;                    /* PRINT ERROR MESSAGE        */ 05370000
    END;                                                                05380000
                                                                        05390000
  GO TO DB_ERROR;                      /* GO TO SQL ERROR ROUTINE    */ 05400000
                                                                        05410000
  /*********************************************************/           05420000
  /*  ** UPDATE                                            */           05430000
  /*********************************************************/           05440000
                                                                        05450000
 MPX040:                                                                05460000
  IF INAREA.ACTION ^= 'U' THEN         /* IF ACTION IS NOT UPDATE    */ 05470000
    DO;                                                                 05480000
      I=8;                                                              05490000
      GOTO MPXNSUP;                    /* GO TO MESSAGE ROUTINE      */ 05500000
    END;                                                                05510000
                                                                        05520000
 /********************************************************************/ 05530000
 /* IF THE ACTIVITY START DATE IS BLANK, THIS INDICATES THAT THE     */ 05540000
 /* FIELD IS NULL.  PUT A NULL INTO THE PREDICATE FOR THE ACTIVITY   */ 05550000
 /* START DATE COLUMN.  OTHERWISE DO THE UPDATE USING THE INPUT      */ 05560000
 /* VALUE.                                                           */ 05570000
 /********************************************************************/ 05580000
                                                                        05590000
                                       /* PERFORM UPDATE             */ 05600000
  IF MPXSAVE.ACSTDATE = BLKDATE THEN                                    05610000
    DO;                                                                 05620000
      EXEC SQL UPDATE VPROJACT                                          05630000
                  SET ACSTAFF  =:PPROJACT.ACSTAFF,                      05640000
                      ACSTDATE =:PPROJACT.ACSTDATE:NULL_IND1,           05650000
                      ACENDATE =:PPROJACT.ACENDATE:NULL_IND2            05660000
       WHERE PROJNO=:PPROJACT.PROJNO AND ACTNO=:PPROJACT.ACTNO          05670000
         AND ACSTDATE IS NULL;                                          05680000
    END;                                                                05690000
  ELSE                                                                  05700000
    DO;                                                                 05710000
      EXEC SQL UPDATE VPROJACT                                          05720000
                  SET ACSTAFF  =:PPROJACT.ACSTAFF,                      05730000
                      ACSTDATE =:PPROJACT.ACSTDATE:NULL_IND1,           05740000
                      ACENDATE =:PPROJACT.ACENDATE:NULL_IND2            05750000
       WHERE PROJNO=:PPROJACT.PROJNO AND ACTNO=:PPROJACT.ACTNO          05760000
         AND ACSTDATE=:MPXSAVE.ACSTDATE;                                05770000
    END;                                                                05780000
                                                                        05790000
  IF SQLCODE=100 THEN                                                   05800000
    DO;                                /* ACTIVITY DOES NOT EXIST    */ 05810000
      CALL DSN8MPG (MODULE, '027E', OUTMSG);                            05820000
                                       /* UPDATE NOT DONE            */ 05830000
      GO TO MPXMSG;                    /* PRINT ERROR MESSAGE        */ 05840000
    END;                                                                05850000
                                                                        05860000
  IF SQLCODE = -531 THEN                                                05870000
    DO;                                                                 05880000
      CALL DSN8MPG (MODULE, '223E', OUTMSG); /* DEPENDENT ROWS       */ 05890000
                                       /* UPDATE NOT DONE            */ 05900000
      GO TO MPXMSG;                    /* PRINT ERROR MESSAGE        */ 05910000
    END;                                                                05920000
                                                                        05930000
  IF SQLCODE ^= 0 THEN                 /* UNKNOWN ERROR              */ 05940000
    GOTO DB_ERROR;                     /* PRINT ERROR MESSAGE        */ 05950000
                                                                        05960000
                                    /* ACTIVITY SUCCESSFULLY UPDATED */ 05970000
                                    /* PRINT CONFIRMATION MESSAGE    */ 05980000
  CALL DSN8MPG (MODULE, '024I', OUTMSG);                                05990000
                                                                        06000000
  GO TO MPXMSG;                        /* GO TO MESSAGE ROUTINE      */ 06010000
                                                                        06020000
  /*********************************************************/           06030000
  /*  ** ERASE                                             */           06040000
  /*********************************************************/           06050000
                                                                        06060000
 MPX050:                               /* PERFORM ERASE (DELETE)     */ 06070000
                                                                        06080000
                                                                        06090000
 /********************************************************************/ 06100000
 /* IF THE ACTIVITY START DATE IS BLANK, THIS INDICATES THAT THE     */ 06110000
 /* FIELD IS NULL.  PUT A NULL INTO THE PREDICATE FOR THE ACTIVITY   */ 06120000
 /* START DATE COLUMN.  OTHERWISE DO THE UPDATE USING THE INPUT      */ 06130000
 /* VALUE.                                                           */ 06140000
 /********************************************************************/ 06150000
                                                                        06160000
  IF PPROJACT.ACSTDATE = BLKDATE THEN                                   06170000
    DO;                                                                 06180000
      EXEC SQL DELETE FROM VPROJACT                                     06190000
                  WHERE     PROJNO   = :PPROJACT.PROJNO                 06200000
                        AND ACTNO    = :PPROJACT.ACTNO                  06210000
                        AND ACSTDATE IS NULL;                           06220000
    END;                                                                06230000
  ELSE                                                                  06240000
    DO;                                                                 06250000
      EXEC SQL DELETE FROM VPROJACT                                     06260000
                  WHERE     PROJNO   = :PPROJACT.PROJNO                 06270000
                        AND ACTNO    = :PPROJACT.ACTNO                  06280000
                        AND ACSTDATE = :PPROJACT.ACSTDATE;              06290000
    END;                                                                06300000
                                                                        06310000
  IF SQLCODE=0 THEN                                                     06320000
    DO;                                                                 06330000
      PREV=' ';                                                         06340000
      CALL DSN8MPG (MODULE, '023I', OUTMSG);                            06350000
                                    /* STAFFING SUCCESSFULLY ERASED  */ 06360000
      GO TO MPXMSG;                 /* PRINT CONFIRMATION MESSAGE    */ 06370000
    END;                                                                06380000
                                                                        06390000
                                                                        06400000
  IF SQLCODE=100 THEN                                                   06410000
    DO;                             /* STAFFING DOES NOT EXIST       */ 06420000
      CALL DSN8MPG (MODULE, '026E', OUTMSG);                            06430000
                                    /* ERASE NOT DONE                */ 06440000
      GO TO MPXMSG;                 /* PRINT ERROR MESSAGE           */ 06450000
    END;                                                                06460000
                                                                        06470000
  IF SQLCODE=-532 THEN              /* STAFFING HAS DEPENDENT        */ 06480000
    DO;                             /* ROWS, ERASE NOT DONE          */ 06490000
      CALL DSN8MPG (MODULE, '222E', OUTMSG);                            06500000
      GO TO MPXMSG;                 /* PRINT ERROR MESSAGE           */ 06510000
    END;                                                                06520000
                                                                        06530000
  /*********************************************************/           06540000
  /*  ** PRINT ERROR MESSAGE                               */           06550000
  /*********************************************************/           06560000
                                                                        06570000
 MPXNSUP:                                                               06580000
                                 /* OPTION NOT SUPPORTED BY DSN8MPX  */ 06590000
  CALL DSN8MPG (MODULE, '069E', OUTMSG);                                06600000
                                                                        06610000
 MPXMSG:                                                                06620000
  MESSAGE.MSGTXT= OUTMSG;        /* PRINT MESSAGE TEXT               */ 06630000
                                                                        06640000
  RETURN;                        /* RETURN                           */ 06650000
 END DSN8MPX;                                                           06660000
                                                                        06670000