tldm-universe/CMS/BP.CLOCK/CM.TIMECARD.RPT
2024-09-10 15:25:06 -04:00

356 lines
7.7 KiB
Plaintext
Executable File

* CM.TIMECARD.RPT
*
* TWH: 1.4.95
* TIMECARD REPORT
*
$INCLUDE GEN.COMMON
*
EQU TRUE TO 1
EQU FALSE TO 0
PDATE = DATE()
LINECNTR = 99
PAGECNTR = 0
LASER.PRINTER = 'Y'
CRT CS
*
OPEN 'CLOCKFILE' TO CLOCKFILE ELSE ABORT
OPEN 'USER' TO USERS ELSE ABORT
OPEN 'TIMECARD.WORK' TO TIMECARD.WORK THEN
CRT @(0,2):CL:"CLEARING WORK FILE - PLEASE WAIT"
CRT @(0,3):CL
EXECUTE "CLEAR-FILE DATA TIMECARD.WORK"
END ELSE
ABORT
END
*
CRT @(0,2):CL:"CM.TIMECARD.RPT TIMECARD REPORT"
*
* GET PRINTER STATUS
100
CRT @(0,4):CL:"OUTPUT TO THE PRINTER (Y/N OR / to QUIT): ":
PTRFLAG = ''
INPUT PTRFLAG
IF PTRFLAG = PF3 THEN STOP
IF PTRFLAG = 'Y' ELSE PTRFLAG = 'N'
IF PTRFLAG = '/' THEN STOP
CRT @(0,3):''
PAGESKIP = 23
CHANNEL.SKIP = @(-1)
IF PTRFLAG = 'Y' THEN
EXECUTE "SETPTR 0,80,60,0,0,1,PRINTER mtk4si,FORM 6,INFORM,BRIEF"
* EXECUTE "SETPTR 0,132,60,0,0,1,PRINTER wof3si,FORM 8,INFORM,BRIEF"
PRINTER ON
END
*
* GET START DATE
200
CRT @(0,6):CL:"INPUT START DATE(mm/dd/yy): ":
STARTDATE = ''
INPUT STARTDATE
IF STARTDATE = '/' THEN GO 100
INTSTARTDATE = ICONV(STARTDATE,"DJ")
*
* GET END DATE
300
CRT @(0,8):CL:"INPUT END DATE(mm/dd/yy): ":
ENDDATE = ''
INPUT ENDDATE
IF ENDDATE = '/' THEN GO 200
INTENDDATE = ICONV(ENDDATE,"DJ")
IF INTENDDATE < INTSTARTDATE THEN
CRT @(0,8):CL:"END DATE LESS THAN START DATE - PLEASE REENTER"
SLEEP 2
GO 300
END
*
* GET DEPT NUMBER
400
CRT @(0,10):CL:"ENTER DEPTARTMENT # OR ALL: ":
DEPTCODE = ''
INPUT DEPTCODE
IF DEPTCODE = '/' THEN GO 300
*
* BUILD WORK FILE
500
SELECT CLOCKFILE
EOF = FALSE
USERSAVE = ''
CRT @(0,13):CL
CRT @(0,12):CL:"WRITING TO WORK FILE - PLEASE WAIT: ":
LOOP
READNEXT @ID ELSE EOF = TRUE
UNTIL EOF DO
READ CLOCKREC FROM CLOCKFILE,@ID THEN
TIMECNTR = DCOUNT(CLOCKREC<1>,VM)
FOR I = 1 TO TIMECNTR
TEMPUSER = FIELD(@ID,"|",1)
TEMPDATE = FIELD(@ID,"|",2)
READ USERREC FROM USERS,TEMPUSER THEN
DEPTNUM = TRIM(USERREC<5>)
FULLNAME = TRIM(USERREC<1>):" ":TRIM(USERREC<2>)
END ELSE
DEPTNUM = 0
FULLNAME = ''
END
IF DEPTNUM = DEPTCODE OR DEPTCODE = "ALL" THEN
IF TEMPDATE >= INTSTARTDATE AND TEMPDATE <= INTENDDATE THEN
GOSUB 600
END
END
NEXT I
END
REPEAT
GOSUB 700
GO 9999
STOP
*
* WRITE TO WORK FILE
600
KEY = ''
KEY = TEMPUSER:"|":TEMPDATE:"|":DEPTNUM
READ WORKREC FROM TIMECARD.WORK,KEY ELSE
WORKREC = ''
WORKREC<7> = 0
END
WORKREC<1> = TEMPUSER
WORKREC<2> = FULLNAME
WORKREC<3> = TRIM(USERREC<6>)
WORKREC<4> = DEPTNUM
WORKREC<5> = TEMPDATE
WORKREC = INSERT(WORKREC,6,1;CLOCKREC<2,I>)
WORKREC = INSERT(WORKREC,7,1;CLOCKREC<1,I>)
IF CLOCKREC<2,I> = "OFF" THEN
WORKREC<8> = WORKREC<8> + (CLOCKREC<1,I> - CLOCKREC<1,I-1>)
END
WRITE WORKREC ON TIMECARD.WORK,KEY
RETURN
*
* WRITE THE REPORT
700
*IF PTRFLAG # "Y" THEN
*EXECUTE "T132"
*END
*IF LASER.PRINTER = "Y" THEN
* GOSUB 10000
*END
CRT @(0,13):CL
CRT @(0,12):CL:"SORTING PRINT FILE - PLEASE WAIT: ":
COMMANDLINE = \SSELECT TIMECARD.WORK \
COMMANDLINE = COMMANDLINE:\BY DATE BY-DSND DEPT BY EMPNO\
EXECUTE COMMANDLINE
EOF = FALSE
PRINTDATE = OCONV(PDATE,"D2/")
GRANDTDEPT = 0
GRANDTEMP = 0
GRANDTDATE = 0
DEPTSAVE = ''
DATESAVE = ''
EMPSAVE = ''
LOOP
READNEXT @ID ELSE EOF = TRUE
UNTIL EOF
READ PRINTREC FROM TIMECARD.WORK,@ID THEN
PPCOUNT = DCOUNT(PRINTREC<6>,VM)
INVALIDTIMES = FALSE
TIMESCHECK = REM(PPCOUNT,2)
IF TIMESCHECK # 0 THEN
INVALIDTIMES = TRUE
END
PCOUNTER = DCOUNT(PRINTREC<7>,VM)
FOR II = 1 TO PCOUNTER
IF EMPSAVE # PRINTREC<3> THEN
IF EMPSAVE # '' THEN
GOSUB 810
END
EMPSAVE = PRINTREC<3>
END
IF DATESAVE # PRINTREC<5> THEN
IF DATESAVE # '' THEN
GOSUB 820
END
DATESAVE = PRINTREC<5>
END
IF DEPTSAVE # PRINTREC<4> THEN
IF DEPTSAVE # '' THEN
GOSUB 830
END
DEPTSAVE = PRINTREC<4>
END
GOSUB 800
NEXT II
END
REPEAT
GOSUB 810
GOSUB 820
GOSUB 830
*IF LASER.PRINTER = "Y" THEN
* GOSUB 11000
*END
RETURN
*
* PRINT DETAIL LINE
800
GOSUB 910
PL = ''
BEGIN CASE
CASE II = 1 OR NAMELINE = TRUE
PRINT
LINECNTR = LINECNTR + 1
PL = PRINTREC<1>'R%4':" "
PL = PL:PRINTREC<2>'L#20':" "
PL = PL:PRINTREC<3>'R#6':" "
PL = PL:PRINTREC<4>'R#6':" "
PLDATE = OCONV(PRINTREC<5>,"D2/")
PL = PL:PLDATE'R#8':" "
PL = PL:PRINTREC<6,II>'R#7':" "
INTIME = PRINTREC<7,II>
GOSUB 1000
PL = PL:INTIME'L%10'
PRINT PL
CASE II = PCOUNTER
GRANDTDEPT = GRANDTDEPT + PRINTREC<8>
GRANDTEMP = GRANDTEMP + PRINTREC<8>
GRANDTDATE = GRANDTDATE + PRINTREC<8>
* INTIME = PRINTREC<8>
* GOSUB 1000
* PL = SPACE(65):INTIME'L%10'
* PRINT PL
CASE 1
INTIME = PRINTREC<7,II>
GOSUB 1000
PL = SPACE(56):PRINTREC<6,II>'R#7':" ":INTIME'L%10'
PRINT PL
END CASE
LINECNTR = LINECNTR + 1
RETURN
*
* PRINT EMPLOYEE GRAND TOTAL LINE
810
GOSUB 910
PRINT
INTIME = GRANDTEMP
GRDATE = OCONV(DATESAVE,"D2/")
GOSUB 1000
EL = ''
EL = "* GRAND TOTAL FOR EMPLOYEE ":EMPSAVE:" ON ":GRDATE:" IS ":INTIME
PRINT EL
IF INVALIDTIMES = TRUE THEN
EL = ''
EL = "* WARNING - INCOMPLETE RECORD FOR EMPLOYEE ":EMPSAVE
PRINT EL
LINECNTR = LINECNTR + 1
END
* PRINT
LINECNTR = LINECNTR + 2
GRANDTEMP = 0
RETURN
*
* PRINT DATE GRAND TOTAL LINE
820
GOSUB 910
PRINT
INTIME = GRANDTDATE
GRDATE = OCONV(DATESAVE,"D2/")
GOSUB 1000
EL = ''
EL = "** GRAND TOTAL FOR ":GRDATE:" IS ":INTIME
PRINT EL
* PRINT
LINECNTR = LINECNTR + 2
GRANDTDATE = 0
RETURN
*
* PRINT DEPARTMENT GRAND TOTAL LINE
830
GOSUB 910
PRINT
INTIME = GRANDTDEPT
GRDATE = OCONV(DATESAVE,"D2/")
GOSUB 1000
GL = ''
GL = "*** GRAND TOTAL FOR DEPT ":DEPTSAVE:" IS ":INTIME
PRINT GL
PRINT
LINECNTR = LINECNTR + 3
GRANDTDEPT = 0
RETURN
*
* PRINT HEADER
900
PAGECNTR = PAGECNTR + 1
H1 = "PAGE: ":PAGECNTR:SPACE(15):"DEPARTMENT EMPLOYEES TIME CARD REPORT":SPACE(10):PRINTDATE
H2 = "USER NAME EMPLOYEE DEPT DATE"
H2 = H2:" PROJECT TIME"
H3 = "---- -------------------- -------- ------ ----"
H3 = H3:"---- ------- ----------"
PRINT H1
PRINT
PRINT H2
PRINT
PRINT H3
LINECNTR = 5
RETURN
*
* CHECK PRINT FOR HEADER
910
NAMELINE = FALSE
IF PTRFLAG # "Y" THEN
IF LINECNTR > PAGESKIP OR LINECNTR = 99 THEN
IF PAGECNTR # 0 THEN
CRT @(0,22):CL:"PRESS RETURN TO CONTINUE: ":
INPUT DUMMY
END
GOSUB 900
NAMELINE = TRUE
END
END ELSE
IF LINECNTR = 99 THEN
GOSUB 900
NAMELINE = TRUE
END
IF LINECNTR >= 60 THEN
PRINT CHAR(12)
GOSUB 900
NAMELINE = TRUE
END
END
RETURN
*
* CONVERT SECONDS TO HOURS:MINUTES.SECONDS
1000
OUTHOUR = 0
OUTMIN = 0
OUTSEC = 0
OUTHOUR = INT(INTIME / 3600)
OUTMIN = INTIME - (OUTHOUR * 3600)
OUTMIN = INT(OUTMIN / 60)
OUTSEC = INTIME - ((OUTHOUR * 3600) + (OUTMIN * 60))
INTIME = ''
INTIME = OUTHOUR'R#4':":":OUTMIN'R%2':":":OUTSEC'R%2'
RETURN
*
10000
OPEN 'HP.CONTROL' TO HP.CONTROL THEN
READ REC132 FROM HP.CONTROL,"16.PITCH" THEN
PRINT REC132
END
END
RETURN
*
11000
OPEN 'HP.CONTROL' TO HP.CONTROL THEN
READ REC80 FROM HP.CONTROL,"10.PITCH" THEN
PRINT REC80
END
END
RETURN
*
9999
CRT @(0,22):CL:"REPORT COMPLETE - PRESS RETURN: ":
*IF PTRFLAG # "Y" THEN
*EXECUTE "T80"
*END
PRINTER OFF
INPUT DUMMY
*