DSN8MPW

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

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