394 lines
11 KiB
Plaintext
Executable File
394 lines
11 KiB
Plaintext
Executable File
*-------------------------------------------------------------------------*
|
|
* CLOCK.ABSENT.DEPT
|
|
* AUTHOR : AL SURLES
|
|
* DATE : 26 AUG 91
|
|
* PURPOSE : To list individuals who where absent in
|
|
* whole or part of a day.
|
|
* COPIED : From CLOCK.ABSENT.RPT on 08-21-92 by STEVE MOFFETT.
|
|
*
|
|
* Program would not report fact of persons being absent all day, and would
|
|
* report only if worked less than 7 hours.
|
|
* Added Department Groups and Day ONE of Pay Period.
|
|
*-------------------------------------------------------------------------*
|
|
$INCLUDE GEN.COMMON
|
|
PROMPT " "
|
|
BLT=0; CHK=0; FND=0
|
|
WHO=ICONV('','U50BB')
|
|
PORT=FIELD(WHO,' ',1)
|
|
CRT CS
|
|
CRT @(0,0):"CLOCK.ABSENT.DEPT"
|
|
CRT @(0,1):RV:SPACE(80):ERV
|
|
HD="LIST PERSONNEL WHO WERE ABSENT"
|
|
HDL=(80-LEN(HD))/2
|
|
CRT @(HDL,1):RV:HD:ERV
|
|
CRT @(28,2):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,':PORT TO ABW ELSE
|
|
EXECUTE "CREATE-FILE DATA ABSENT.WORKFILE,":PORT:" 11,4"
|
|
OPEN 'ABSENT.WORKFILE,':PORT TO ABW ELSE ABORT 201,'ABSENT.WORKFILE,':PORT
|
|
END
|
|
OPEN 'ABSENT.WORKFILE,D':PORT TO ABD ELSE
|
|
EXECUTE "CREATE-FILE DATA ABSENT.WORKFILE,D":PORT:" 37,4"
|
|
OPEN 'ABSENT.WORKFILE,D':PORT TO ABD ELSE ABORT 201,'ABSENT.WORKFILE,D':PORT
|
|
END
|
|
*-------------------------------------------------------------------------*
|
|
10 *
|
|
CRT @(0,3):CR
|
|
CRT @(31,22):'Enter / to Escape'
|
|
CRT @(5,5):"ENTER Day ONE of PAY PERIOD :":
|
|
INPUT DFIRST
|
|
IF DFIRST="" OR DFIRST="/" THEN GO 999
|
|
DFIRST=ICONV(DFIRST,'D')
|
|
IF REM(8533-DFIRST,14)=0 THEN
|
|
DLAST=DFIRST+13
|
|
CRT @(46,5):OCONV(DFIRST,"D2/"):' thru ':OCONV(DLAST,"D2/")
|
|
END ELSE
|
|
CRT @(0,22):BEEP:CL:"DATE NOT VALID--ENTRY MUST BE DAY ONE OF PAY PERIOD - HIT RETURN -->":
|
|
INPUT ANY
|
|
GO 10
|
|
END
|
|
*-------------------------------------------------------------------------*
|
|
20 *
|
|
DEPTINDIV="D"
|
|
LOOP
|
|
CRT @(0,6):CR
|
|
CRT @(17,22):"Enter / to Escape or < to backup to PAY PERIOD"
|
|
CRT @(5,6):"Enter DEPT or INDIVIDUAL (D/I) :":
|
|
INPUT @(46,6):DEPTINDIV
|
|
IF DEPTINDIV="" OR DEPTINDIV="/" THEN GO 999
|
|
IF DEPTINDIV="<" THEN GO 10
|
|
UNTIL DEPTINDIV="D" OR DEPTINDIV="I" DO REPEAT
|
|
IF DEPTINDIV='D' THEN
|
|
CRT @(46,6):"DEPARTMENT"
|
|
GO 30
|
|
END ELSE
|
|
CRT @(46,6):"INDIVIDUAL"
|
|
GO 40
|
|
END
|
|
*-------------------------------------------------------------------------*
|
|
30 *
|
|
CRT @(0,7):CR
|
|
CRT @(13,7):'DEPARTMENT GROUPS'
|
|
CRT @(10,8):RV:' 1 - DON BELL '
|
|
CRT @(10,9):' 2 - AL SURLES '
|
|
CRT @(10,10):' 3 - GENE GREGG '
|
|
DEPT.RESPONSE=''
|
|
*
|
|
35 *
|
|
*
|
|
CRT @(0,16):CR
|
|
CRT @(13,22):"Enter / to Escape or < to backup to DEPT or INDIVIDUAL"
|
|
CRT @(5,16):"Enter DEPARTMENT GROUP number or 'ALL' : ":
|
|
INPUT @(46,16):DEPT.RESPONSE
|
|
IF DEPT.RESPONSE="" OR DEPT.RESPONSE="/" THEN GO 999
|
|
IF DEPT.RESPONSE="<" THEN GO 20
|
|
IF DEPT.RESPONSE='ALL' OR DEPT.RESPONSE='A' ELSE
|
|
IF DEPT.RESPONSE GE 1 AND DEPT.RESPONSE LE 7 ELSE
|
|
CRT @(0,22):CL:BEEP:'Enter a number between 1 and 7 or ALL - HIT RETURN -->':
|
|
INPUT ANY,3
|
|
GO 35
|
|
END
|
|
END
|
|
DEPT=DEPT.RESPONSE
|
|
GO 50
|
|
*-------------------------------------------------------------------------*
|
|
40 *
|
|
INDIV=''
|
|
CRT @(0,7):CR
|
|
CRT @(13,22):"Enter / to Escape or < to backup to DEPT or INDIVIDUAL"
|
|
CRT @(5,7):"Enter INDIVIDUAL USER # (EX : 9999) : ":
|
|
INPUT @(46,7):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 @(51,7):RV:DISP[1,28]: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"
|
|
IF DEPTINDIV='D' THEN
|
|
CRT @(5,17):"OUTPUT TO PRINTER (Y/N) : ":
|
|
END ELSE
|
|
CRT @(5,8):"OUTPUT TO PRINTER (Y/N) : ":
|
|
END
|
|
CRT @(15,22):"Enter / to Escape or < to backup to previous field"
|
|
IF DEPTINDIV='D' THEN
|
|
INPUT @(46,17):OUTPUT.RESPONSE
|
|
END ELSE
|
|
INPUT @(46,8):OUTPUT.RESPONSE
|
|
END
|
|
IF OUTPUT.RESPONSE="" OR OUTPUT.RESPONSE="/" THEN GO 999
|
|
IF OUTPUT.RESPONSE="<" THEN
|
|
IF DEPTINDIV="D" THEN GO 35 ELSE GO 40
|
|
END
|
|
IF OUTPUT.RESPONSE='Y' OR OUTPUT.RESPONSE='N' ELSE GO 50
|
|
GOSUB 1100
|
|
*-------------------------------------------------------------------------*
|
|
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(DFIRST,'D2/'):" - ":OCONV(DLAST,'D2/')
|
|
HDLN3=SPACE(60):"HOURS"
|
|
HDLN4='USER #':SPACE(4):'FULL NAME':SPACE(21):'DAY':SPACE(7):'DATE':SPACE(6):'WORKED':SPACE(3):'DEPARTMENT'
|
|
TODAY=DATE()
|
|
*-------------------------------------------------------------------------*
|
|
CLEARFILE ABW
|
|
CLEARFILE ABD
|
|
EOF=0
|
|
SELECT USER
|
|
LOOP
|
|
READNEXT ID ELSE EOF=1
|
|
UNTIL EOF DO
|
|
READ USER.REC FROM USER,ID THEN
|
|
IF DEPTINDIV='D' THEN
|
|
IF DEPT.RESPONSE[1,1] NE 'A' THEN
|
|
OK=0
|
|
CK=USER.REC<5>
|
|
BEGIN CASE
|
|
CASE DEPT.RESPONSE=1
|
|
IF CK='504' THEN OK=1
|
|
CASE DEPT.RESPONSE=2
|
|
IF CK='512' THEN OK=1
|
|
CASE DEPT.RESPONSE=3
|
|
IF CK='506' OR CK='507' OR CK='508' OR CK='513' THEN OK=1
|
|
CASE DEPT.RESPONSE=4
|
|
IF CK='500' OR CK='501' OR CK='502' OR CK='503' OR CK='505' OR CK='509' OR CK='514' OR CK='515' THEN OK=1
|
|
CASE DEPT.RESPONSE=5
|
|
* IF CK='511' OR CK='518' OR CK='524' THEN OK=1
|
|
IF CK='511' THEN OK=1
|
|
CASE DEPT.RESPONSE=6
|
|
IF CK='510' THEN OK=1
|
|
CASE DEPT.RESPONSE=7
|
|
IF CK='517' THEN OK=1
|
|
END CASE
|
|
END ELSE
|
|
OK=1;* ALL specified.
|
|
END
|
|
IF OK THEN GOSUB 3000;* Build work record.
|
|
END ELSE
|
|
IF INDIV=ID THEN GOSUB 3000;* Build work record.
|
|
END
|
|
END
|
|
REPEAT
|
|
GOSUB 1100; RQM; RQM
|
|
*-------------------------------------------------------------------------*
|
|
EOF=0
|
|
SELECT CLF
|
|
LOOP
|
|
READNEXT ID ELSE EOF=1
|
|
UNTIL EOF DO
|
|
TM=0
|
|
CHK=CHK+1
|
|
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 >= DFIRST AND REC.DATE <= DLAST AND REC.DATE LT TODAY 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
|
|
KEY=OCONV(ID,"G0|1")
|
|
READ USER.REC FROM USER,KEY THEN
|
|
IF DEPTINDIV='D' THEN
|
|
IF DEPT.RESPONSE # 'ALL' THEN
|
|
CK=USER.REC<5>
|
|
BEGIN CASE
|
|
CASE DEPT.RESPONSE=1
|
|
IF CK='504' ELSE GO 100
|
|
CASE DEPT.RESPONSE=2
|
|
IF CK='512' ELSE GO 100
|
|
CASE DEPT.RESPONSE=3
|
|
IF CK='506' OR CK='507' OR CK='508' OR CK='513' ELSE GO 100
|
|
CASE DEPT.RESPONSE=4
|
|
IF CK='500' OR CK='501' OR CK='502' OR CK='503' OR CK='505' OR CK='509' OR CK='514' OR CK='515' ELSE GO 100
|
|
CASE DEPT.RESPONSE=5
|
|
IF CK='511' OR CK='518' OR CK='524' ELSE GO 100
|
|
CASE DEPT.RESPONSE=6
|
|
IF CK='510' ELSE GO 100
|
|
CASE DEPT.RESPONSE=7
|
|
IF CK='517' ELSE GO 100
|
|
CASE 1; GO 100
|
|
END CASE
|
|
END
|
|
READ WORK.REC FROM ABD,KEY THEN
|
|
LOCATE(REC.DATE,WORK.REC,1;WH) THEN
|
|
WORK.REC<3,WH>=TM
|
|
END
|
|
WRITE WORK.REC ON ABD,KEY
|
|
END
|
|
END
|
|
END
|
|
END
|
|
END
|
|
100 *
|
|
IF REM(CHK,500)=0 THEN GOSUB 1000
|
|
REPEAT
|
|
GOSUB 1000; RQM; RQM
|
|
*-------------------------------------------------------------------------*
|
|
GOSUB 1200;* REFRESH
|
|
EOF=0
|
|
SELECT ABD
|
|
LOOP
|
|
READNEXT KEY ELSE EOF=1
|
|
UNTIL EOF DO
|
|
READ ABD.REC FROM ABD,KEY THEN
|
|
READ USER.REC FROM USER,KEY THEN
|
|
DCT=DCOUNT(ABD.REC<1>,VM)
|
|
FOR I=1 TO DCT
|
|
DT=ABD.REC<1,I>
|
|
IF DT LT TODAY THEN
|
|
DAY=ABD.REC<2,I>
|
|
IF DAY='SAT' OR DAY='SUN' ELSE
|
|
TM=ABD.REC<3,I>
|
|
IF TM < 28800 THEN
|
|
WORK.REC=""
|
|
WORK.REC<1>=KEY
|
|
WORK.REC<2>=TRIM(USER.REC<1>:" ":USER.REC<2>)
|
|
WORK.REC<3>=OCONV(ABD.REC<1,I>,"DWA")
|
|
WORK.REC<4>=OCONV(ABD.REC<1,I>,"D2/")
|
|
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>;* DEPT
|
|
WORK.REC<7>=USER.REC<2>;* LNAME
|
|
WORK.REC<8>=USER.REC<1>;* FNAME
|
|
WRITE WORK.REC ON ABW,KEY:'*':ABD.REC<1,I>
|
|
FND=FND+1
|
|
IF REM(FND,10)=0 THEN GOSUB 1200
|
|
END
|
|
END
|
|
END
|
|
NEXT I
|
|
END
|
|
END
|
|
REPEAT
|
|
GOSUB 1200
|
|
*-------------------------------------------------------------------------*
|
|
*
|
|
IF OUTPUT.RESPONSE="Y" THEN
|
|
PRINTER ON
|
|
EXECUTE 'SP-ASSIGN F6'
|
|
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,":PORT
|
|
EXECUTE "DELETE-FILE DATA ABSENT.WORKFILE,D":PORT
|
|
STOP
|
|
*-------------------------------------------------------------------------*
|
|
1000 * REFRESH SCREEN
|
|
CRT @(0,19):CR
|
|
CRT @(24,19):"NUMBER OF RECORDS CHECKED :":CHK:
|
|
RETURN
|
|
*-------------------------------------------------------------------------*
|
|
1100 * REFRESH *
|
|
CRT @(0,18):CR
|
|
CRT @(24,18):"NUMBER OF WORK RECORDS BUILT:":BLT:
|
|
RETURN
|
|
*-------------------------------------------------------------------------*
|
|
1200 * REFRESH *
|
|
CRT @(0,20):CR
|
|
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
|
|
DEPT.HOLD=''
|
|
EXECUTE "SSELECT ABSENT.WORKFILE,":PORT:" BY DEPT BY DATE BY LNAME BY FNAME"
|
|
LOOP
|
|
READNEXT KEY ELSE EOF=1
|
|
UNTIL EOF DO
|
|
READ ABW.REC FROM ABW,KEY THEN
|
|
IF ABW.REC<6> NE DEPT.HOLD THEN
|
|
PGHED=0; PGCNT=1; DEPT.HOLD=ABW.REC<6>
|
|
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
|
|
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 * BUILD WORK RECORD *
|
|
READ WORK.REC FROM ABD,ID ELSE
|
|
WORK.REC=''
|
|
CT=1
|
|
FOR I=DFIRST TO DLAST
|
|
DT=DFIRST+CT-1;* DATE
|
|
WORK.REC<1,CT>=DT
|
|
CK=OCONV(DT,'DWA')[1,3]
|
|
IF CK='SAT' OR CK='SUN' THEN
|
|
WORK.REC<2,CT>=CK;* POST WEEKEND DAYS
|
|
END
|
|
CT=CT+1
|
|
NEXT I
|
|
WRITE WORK.REC ON ABD,ID
|
|
BLT=BLT+1
|
|
IF REM(BLT,25)=0 THEN GOSUB 1100;* REFRESH
|
|
END
|
|
RETURN
|
|
*-------------------------------------------------------------------------*
|