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