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