275 lines
7.7 KiB
Plaintext
Executable File
275 lines
7.7 KiB
Plaintext
Executable File
* CLOCK.ABSENT.RPT
|
|
* AUTHOR : AL SURLES
|
|
* DATE : 26 AUG 91
|
|
* PURPOSE : To list individuals who where absent in
|
|
* whole or part of a day.
|
|
* UPDATES :
|
|
* 7-1-92 BY J. LONGLEY: LINES 116-118 ADDED TO PRINT OUT HOURS & MINUTES
|
|
* 08-06-92 SRM : ADDED DEPT OR INDIVIDUAL CAPABILITY AND ALLOWED BACKUP
|
|
* TO PREVIOUS FIELD CAPABILITY, ALSO REARRANGED SCREEN
|
|
* SLIGHTLY SO COUNTER DISPLAY DOES NOT WIPE OUT CHOICES
|
|
* TAKEN.
|
|
*******************************************************
|
|
$INCLUDE BP GEN.COM2
|
|
*******************************************************
|
|
CHK=0; FND=0
|
|
WHO=ICONV('','U50BB')
|
|
OPR=FIELD(WHO,' ',2)
|
|
PORT=FIELD(WHO,' ',1)
|
|
HD="** CLOCK.MASTER **"
|
|
HDL=(80-LEN(HD))/2
|
|
HD2=TIMEDATE()
|
|
HDL2=79-LEN(TIMEDATE())
|
|
STR80=STR('=',80)
|
|
CRT @(-1) ; * CLEAR SCREEN
|
|
CRT @(HDL,0):HD ; * PRINT ACCT NAME IN HL
|
|
CRT @(0,0):"MASTER SOFTWARE DESIGN, INC."
|
|
CRT @(HDL2,0):HD2 ; * PRINT TIME AND DATE
|
|
CRT @(0,1):STR80 ; * PRINT "=" 80 TIMES
|
|
CRT @(0,2):"CLOCK.ABSENT.RPT" ; * PRINT PGM NAME
|
|
CRT @(24,4):RV:" LIST PERSONNEL WHO WERE ABSENT ":ERV
|
|
CRT @(28,5):RV:" ALL OR PART OF THE DAY ":ERV
|
|
*******************************************************
|
|
OPEN 'CLOCKFILE' TO CLF ELSE ABORT 201,"CLOCKFILE"
|
|
OPEN 'USER' TO USER ELSE ABORT 201,"USER"
|
|
OPEN 'ABSENT.WORKFILE' TO ABW ELSE
|
|
EXECUTE "CREATE-FILE DATA ABSENT.WORKFILE 11"
|
|
OPEN 'ABSENT.WORKFILE' TO ABW ELSE ABORT 201,"ABSENT.WORKFILE"
|
|
END
|
|
*******************************************************
|
|
10 *
|
|
LOOP
|
|
CRT @(0,7):CR:"Enter beginning date (MM/DD/YY) : ":
|
|
MSG="Enter '/' to Escape"; GOSUB 3000
|
|
INPUT @(40,7):BEG.DATE
|
|
IF BEG.DATE="" OR BEG.DATE="/" THEN GO 999
|
|
UNTIL ICONV(BEG.DATE,'D') # "" DO REPEAT
|
|
DATE.LIMIT1=ICONV(BEG.DATE,"D")
|
|
CRT @(40,7):OCONV(DATE.LIMIT1,'D2/'):
|
|
*******************************************************
|
|
15 *
|
|
LOOP
|
|
CRT @(0,9):CR:"Enter ending date (MM/DD/YY) : ":
|
|
MSG="Enter '/' to Escape or '<' to backup to previous field"; GOSUB 3000
|
|
INPUT @(40,9):END.DATE
|
|
IF END.DATE="" OR END.DATE="/" THEN GO 999
|
|
IF END.DATE='<' THEN GO 10
|
|
UNTIL ICONV(END.DATE,'D') # "" DO REPEAT
|
|
DATE.LIMIT2=ICONV(END.DATE,"D")
|
|
CRT @(40,9):OCONV(DATE.LIMIT2,'D2/'):
|
|
*
|
|
IF DATE.LIMIT1 > DATE.LIMIT2 THEN
|
|
CRT @(0,22):BEEP:RV:" The beginning date is greater than ending date - error ":ERV
|
|
RQM ; RQM
|
|
GO 10
|
|
END
|
|
*******************************************************
|
|
20 *
|
|
DEPTINDIV="D"
|
|
LOOP
|
|
CRT @(0,11):CR:"Enter DEPT or INDIVIDUAL (D/I) : ":
|
|
MSG="Enter '/' to Escape or '<' to backup to previous field"; GOSUB 3000
|
|
INPUT @(40,11):DEPTINDIV
|
|
IF DEPTINDIV="" OR DEPTINDIV="/" THEN GO 999
|
|
IF DEPTINDIV="<" THEN GO 15
|
|
UNTIL DEPTINDIV="D" OR DEPTINDIV="I" DO REPEAT
|
|
IF DEPTINDIV='D' THEN
|
|
CRT @(40,11):"DEPARTMENT"
|
|
GO 30
|
|
END ELSE
|
|
CRT @(40,11):"INDIVIDUAL"
|
|
GO 40
|
|
END
|
|
*******************************************************
|
|
30 *
|
|
DEPT.RESPONSE=''
|
|
CRT @(0,13):CR:"Enter DEPARTMENT OR 'ALL' (EX : 504) : ":
|
|
MSG="Enter '/' to Escape or '<' to backup to previous field"; GOSUB 3000
|
|
INPUT @(40,13):DEPT.RESPONSE
|
|
IF DEPT.RESPONSE="" OR DEPT.RESPONSE="/" THEN GO 999
|
|
IF DEPT.RESPONSE="<" THEN GO 20
|
|
DEPT=DEPT.RESPONSE
|
|
GO 50
|
|
*******************************************************
|
|
40 *
|
|
INDIV=''
|
|
CRT @(0,13):CR:"Enter INDIVIDUAL USER # (EX : 9999) : ":
|
|
MSG="Enter '/' to Escape or '<' to backup to previous field"; GOSUB 3000
|
|
INPUT @(40,13):INDIV
|
|
IF INDIV="" OR INDIV="/" THEN GO 999
|
|
IF INDIV="<" THEN GO 20
|
|
READ ANY FROM USER,INDIV THEN
|
|
DISP=' ':ANY<1>:' ':ANY<2>:' '
|
|
CRT @(45,13):RV:DISP[1,23]:ERV
|
|
END ELSE
|
|
CRT @(0,22):BEEP:RV:" This is not a VALID USER # - Try Again ":ERV:
|
|
RQM; RQM
|
|
GO 40
|
|
END
|
|
GO 50
|
|
*******************************************************
|
|
50 *
|
|
OUTPUT.RESPONSE="Y"
|
|
CRT @(10,15):CR:" OUTPUT TO PRINTER (Y/N) : ":
|
|
MSG="Enter '/' to Escape or '<' to backup to previous field"; GOSUB 3000
|
|
INPUT @(40,15):OUTPUT.RESPONSE
|
|
IF OUTPUT.RESPONSE="" OR OUTPUT.RESPONSE="/" THEN GO 999
|
|
IF OUTPUT.RESPONSE="<" THEN
|
|
IF DEPTINDIV="I" THEN GO 30 ELSE GO 40
|
|
END
|
|
GOSUB 1000
|
|
*******************************************************
|
|
IF DEPTINDIV="D" THEN
|
|
HD="PERSONNEL in DEPT '":DEPT.RESPONSE:"' that were ABSENT in WHOLE or PART"
|
|
END ELSE
|
|
HD="INDIVIDUAL # '":INDIV:"' that was ABSENT in WHOLE or PART"
|
|
END
|
|
LNG=LEN(HD)
|
|
XLNG=63-LNG
|
|
YLNG=XLNG/2
|
|
XLNG=YLNG
|
|
IF XLNG+YLNG+LNG > 80 THEN YLNG=YLNG-1 ; * IN CASE IS 1 TO LONG
|
|
HDLN1=SPACE(28):"INTERNAL DATA MANAGEMENT"
|
|
HDLN2=SPACE(24):"FROM ":OCONV(DATE.LIMIT1,'D2/'):" - ":OCONV(DATE.LIMIT2,'D2/')
|
|
HDLN3=SPACE(60):"HOURS"
|
|
HDLN4='USER #':SPACE(4):'FULL NAME':SPACE(21):'DAY':SPACE(7):'DATE':SPACE(6):'WORKED':SPACE(3):'DEPARTMENT'
|
|
*******************************************************
|
|
CLEARFILE ABW
|
|
EOF=0
|
|
SELECT CLF
|
|
LOOP
|
|
READNEXT ID ELSE EOF=1
|
|
UNTIL EOF DO
|
|
TM=0
|
|
CHK=CHK+1
|
|
CLF.REC=""
|
|
READ CLF.REC FROM CLF,ID THEN
|
|
REC.DATE=OCONV(ID,"G1|1")
|
|
KEY=OCONV(ID,"G0|1")
|
|
IF DEPTINDIV='I' THEN IF INDIV NE KEY THEN GO 100
|
|
IF REC.DATE >= DATE.LIMIT1 AND REC.DATE <= DATE.LIMIT2 THEN
|
|
TR.CNT=DCOUNT(CLF.REC<1>,VM)
|
|
FOR B=1 TO TR.CNT
|
|
Y=B+1
|
|
FOR Z=Y TO TR.CNT
|
|
IF CLF.REC<2,Z> = "OFF" THEN
|
|
TM=TM+(CLF.REC<1,Z>-CLF.REC<1,B>)
|
|
B=Z
|
|
Z=9999
|
|
END
|
|
NEXT Z
|
|
NEXT B
|
|
IF TM < 25200 THEN
|
|
KEY=OCONV(ID,"G0|1")
|
|
USER.REC=""
|
|
READ USER.REC FROM USER,KEY THEN
|
|
IF DEPTINDIV='D' THEN
|
|
IF DEPT.RESPONSE # 'ALL' THEN
|
|
IF DEPT.RESPONSE # USER.REC<5> THEN GO 100
|
|
END
|
|
END
|
|
WORK.REC=""
|
|
WORK.REC<1>=KEY
|
|
WORK.REC<2>=TRIM(USER.REC<1>:" ":USER.REC<2>)
|
|
WORK.REC<3>=OCONV(REC.DATE,"DWA")
|
|
WORK.REC<4>=OCONV(REC.DATE,"D2/")
|
|
*WORK.REC<5>=OCONV(TM,"MT")
|
|
WORK.TM=TM/60
|
|
WORK.REC<5>=WORK.TM/60
|
|
TEMP=WORK.REC<5>-INT(WORK.REC<5>)
|
|
TEMP=INT(TEMP*60)
|
|
WORK.REC<5>=INT(WORK.REC<5>): ":" : TEMP'R%2'
|
|
WORK.REC<6>=USER.REC<5>
|
|
WRITE WORK.REC ON ABW,ID
|
|
FND=FND+1
|
|
END
|
|
END
|
|
END
|
|
END
|
|
100 *
|
|
IF REM(CHK,500)=0 THEN GOSUB 1000
|
|
REPEAT
|
|
GOSUB 1000
|
|
99 *
|
|
IF OUTPUT.RESPONSE="Y" THEN
|
|
PRINTER ON
|
|
EXECUTE 'SP-ASSIGN HS'
|
|
END
|
|
GOSUB 2000
|
|
PRINTER OFF
|
|
PRINT
|
|
PRINT @(0,22):CL:RV:" JOB COMPLETED - HIT RETURN ":ERV:
|
|
INPUT DUMMY
|
|
999 * END OF JOB
|
|
EXECUTE "DELETE-FILE DATA ABSENT.WORKFILE"
|
|
STOP
|
|
*
|
|
*******************************************************
|
|
1000 * REFRESH SCREEN
|
|
*
|
|
CRT @(0,16):CR
|
|
CRT @(24,18):"NUMBER OF RECORDS CHECKED :":CHK
|
|
CRT @(24,20):"NUMBER OF RECORDS FOUND :":FND:
|
|
RETURN
|
|
*******************************************************
|
|
2000 * PRINT ITEM
|
|
PCNT=0
|
|
STR=STR("=",79)
|
|
STR1=STR("-",79)
|
|
PGCNT=1
|
|
PGHED=0
|
|
EOF=0
|
|
EXECUTE "SSELECT ABSENT.WORKFILE BY DEPT BY DATE"
|
|
* EXECUTE "SSELECT ABSENT.WORKFILE BY LNAME BY DATE (R,1"
|
|
LOOP
|
|
READNEXT KEY ELSE EOF=1
|
|
UNTIL EOF DO
|
|
READ ABW.REC FROM ABW,KEY THEN
|
|
* IF PCNT >=17 THEN
|
|
* PRINT CHAR(12)
|
|
* PCNT=0
|
|
* PGHED=0
|
|
* END
|
|
IF PGHED ELSE
|
|
PRINT CHAR(12)
|
|
PRINT HDLN1
|
|
PRINT
|
|
HDLN=OCONV(DATE(),"D2"):SPACE(XLNG):HD:SPACE(YLNG):"PAGE ":PGCNT'R#3'
|
|
PRINT HDLN
|
|
PRINT HDLN2
|
|
PRINT
|
|
PRINT HDLN3
|
|
PRINT HDLN4
|
|
PRINT STR
|
|
PRINT
|
|
PGCNT=PGCNT+1
|
|
PGHED=1
|
|
PCNT=0
|
|
END
|
|
*HERE
|
|
PRINT ABW.REC<1>'L#10':ABW.REC<2>'L#30':ABW.REC<3>[1,3]'L#8':ABW.REC<4>'L#12':ABW.REC<5>'L#9':ABW.REC<6>'L#5'
|
|
PRINT
|
|
PRINT STR1
|
|
PCNT=PCNT+1
|
|
IF OUTPUT.RESPONSE="N" THEN
|
|
IF REM(PCNT,4)=0 THEN
|
|
CRT RV:" HIT RETURN TO CONTINUE ":ERV:
|
|
INPUT ANY
|
|
CRT CS
|
|
PGHED=0
|
|
END
|
|
END ELSE
|
|
IF REM(PCNT,17)=0 THEN
|
|
PGHED=0
|
|
END
|
|
END
|
|
END
|
|
REPEAT
|
|
RETURN
|
|
*******************************************************
|
|
3000 *
|
|
MSGL=(80-LEN(MSG))/2
|
|
CRT @(MSGL,20):MSG:
|
|
RETURN
|
|
*******************************************************
|