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

840 lines
18 KiB
Plaintext
Executable File

*---------------------------- *
* PROGRAM: CLOCK
* REQUIRES: CM,PROJECTS,TIMES
* BY: D.BELL
* ON: 12/24/90
* ON: 06/25/91 KJC DISPLAYS HOURLY TOTAL FOR PAY PERIOD
* ON: 02/28/95 STR DISPLAYS HOURLY TOTAL FOR WEEK ONE & TWO
*-----------------------------*
$INCLUDE GEN.COMMON
***** CLERK MASTER (CM) FILE LAYOUT *****
*
* USER ATTRIBUTES
*
EQU CM$FNAME TO 1
EQU CM$LNAME TO 2
EQU CM$PHONE TO 3
EQU CM$PASSWD TO 4
EQU CM$DEPT TO 5
EQU CM$FILLER1 TO 6
EQU CM$PASSWD.SET.DATE TO 7
EQU CM$PASSWD.EXP.DATE TO 8
EQU CM$POSITION TO 9
EQU CM$UNIX.USER TO 10 ; * IN-HOUSE ACCOUNTS ONLY
EQU CM$STATUS TO 11
EQU CM$FILLER2 TO 12
EQU CM$FILLER3 TO 13
EQU CM$ACCOUNTS TO 14
*
* SECURITY ATTRIBUTES
*
EQU CM$TECHNICAL.MENU TO 15
EQU CM$FILLER4 TO 16
EQU CM$FILLER5 TO 17
EQU CM$FILLER6 TO 18
EQU CM$FILLER7 TO 19
EQU CM$FILLER8 TO 20
EQU CM$DAILY.PROCESSING TO 21
EQU CM$DEPOSIT.ENTRIES TO 22
EQU CM$BATCH.MAINT TO 23
EQU CM$DOC.PROCESSING TO 24
EQU CM$DAILY.REPORTS TO 25
EQU CM$ACK.LETTERS TO 26
EQU CM$BALANCE.CLOSE.DAY TO 27
EQU CM$ACCOUNT.MAINT TO 28
EQU CM$FINANCIAL.INQ TO 29
EQU CM$UPDATE.ACCOUNT TO 30
EQU CM$XFER.TRANS TO 31
EQU CM$BACKOUT.TRANS TO 32
EQU CM$WORD.PROCESSING TO 33
EQU CM$LETTER.MAINT TO 34
EQU CM$ACKNOWLEDGE.UPDT TO 35
EQU CM$REPORTS.MAIN.MENU TO 36
EQU CM$ORDER.AND.INV TO 37
EQU CM$PROCESS.ORDERS TO 38
EQU CM$INV.CONTROL TO 39
EQU CM$SYSTEM.UTILS TO 40
EQU CM$TABLE.FILE.MAINT TO 41
EQU CM$PRINTER.FUNCTIONS TO 42
EQU CM$SECURITY TO 43
EQU CM$MONTHLY.ON.REQ TO 44
EQU CM$SETUP.NEW.ACCOUNT TO 45
EQU CM$SPECIAL.FEATURES TO 46
EQU CM$PLEDGE.AND.CLUB TO 47
EQU CM$SUBS.PROCESSING TO 48
EQU CM$LEADER.ACCESS TO 49
EQU CM$ATTENDANCE.SYSTEM TO 50
EQU CM$CASSETTE.LABEL TO 51
EQU CM$SPECIAL.CUSTOM TO 52
EQU CM$EDIT.MENUS TO 53
EQU CM$ONLINE.TABLE.UPDT TO 54
EQU CM$VIP.ACCESS TO 55
EQU CM$ACCOUNT.DELETE TO 56
EQU CM$SPECIAL.UTILITIES TO 57
EQU CM$800.PHONE.CENTER TO 58 ; * IN-HOUSE ACCOUNTS ONLY
*
OPEN 'CM' TO CM ELSE ABORT 201,'CM'
OPEN 'PT' TO PT ELSE ABORT 201,'PT'
OPEN 'CM.XREF' TO XREF ELSE ABORT 201,'CM.XREF'
OPEN 'USER' TO USER.FILE ELSE ABORT
OPEN 'PROJECT' TO PROJECT ELSE ABORT
OPEN 'CLOCKFILE' TO CLOCKFILE ELSE ABORT
OPEN 'PORTS' TO PT.FILE ELSE ABORT
*
EMSG=@(0,22):BEEP:"Access to CMS has been denied - check with your supervisor!!"
*EMSG2=@(0,22):BEEP:"You are already logged on!!"
READ XREF.REC FROM XREF,@LOGNAME ELSE
CRT EMSG:
RQM;RQM
CHAIN "OFF"
STOP
END
UID=XREF.REC<1>
USER=UID[2,4]
READ CM.DATA FROM CM,UID ELSE
CRT EMSG:
RQM;RQM
CHAIN "OFF"
STOP
END
IF CM.DATA<CM$STATUS> # "A" THEN
CRT EMSG:
RQM;RQM
CHAIN "OFF"
STOP
END
PROMPT ""
PORT=@USERNO
*
READV PT FROM PT.FILE,PORT,1 ELSE PT=''
BEGIN CASE
CASE PT='2020'; ADDS=1
CASE PT='4000'; ADDS=2
CASE PT='2025'; ADDS=2
CASE 1 ; ADDS=0
END CASE
* IF ADDS THEN
* TA ON; TA CLEAR
* END
*
CRT CS
HELP.TBL=''; GOSUB 4000 ;* LOAD PROJECT CODES INTO ARRAY
COL=0
POS=10
PSW=0
CSW=0
OLD.TIME="0"
NEW=0
DONE=0
TOTAL.HRS = ''
*
*FLOATING MODE*
*
ANY=''
LOOP
TIME=TIME()
TODAY=DATE()
IF ADDS THEN
IF TIME = OLD.TIME AND NEW#0 ELSE
OLD.TIME=TIME
IF REM(TIME,10)=0 OR NEW='0' THEN
GOSUB 500
GOSUB 50
GOSUB 75
END
GOSUB 200
END
NEW=1
ANY=''
INPUTIF ANY,1 THEN
*TA CLEAR
GOSUB 1000
POS=10; COL=0
*TA CLEAR
NEW=0
END
END ELSE
GOSUB 1000
DONE=1
END
UNTIL DONE DO REPEAT
STOP
40 * 2020 LOGIC
TLEN=LEN(TSTRING1)
TSTRING1.TEMP=''
FOR TL=1 TO TLEN
TSTRING1.TEMP=TSTRING1.TEMP:TSTRING1[TL,1]:" "
NEXT TL
TSTRING1=TSTRING1.TEMP
RETURN
50 * DRAW BOX
CRT CS
IF ADDS THEN
CRT CHAR(23)
TSTRING1="#<<<<<<<<<<<<<<<<<<D"
TCOL=COL; TPOS=POS; GOSUB 100
TSTRING1=">"
TCOL=COL; TPOS=POS+2; GOSUB 100
TSTRING1=">"
IF ADDS=1 THEN
TCOL=COL+38; GOSUB 100
END ELSE
TCOL=COL+19; GOSUB 100
END
TSTRING1="B<<<<<<<<<<<<<<<<<<F"
TCOL=COL; TPOS=POS+4; GOSUB 100
END ELSE
TSTRING1="|~~~~~~~~~~~~~~~~~~|"
TCOL=COL+9; TPOS=POS+1; GOSUB 175
TSTRING1="| |"
TPOS=POS+2; GOSUB 175
TPOS=POS+3; GOSUB 175
TSTRING1=" ~~~~~~~~~~~~~~~~~~ "
TPOS=POS+4; GOSUB 175
END
RETURN
75 * MESSAGES
TSTRING1="TIMECLOCK"
IF ADDS=1 THEN
TCOL=COL+13; TPOS=POS-1; GOSUB 175
END ELSE
TCOL=(COL*2)+13; TPOS=POS-1; GOSUB 175
END
TSTRING1="PRESS ANY KEY"
IF ADDS=1 THEN
TCOL=COL+11; TPOS=POS+6; GOSUB 175
END ELSE
TCOL=(COL*2)+11; TPOS=POS+6; GOSUB 175
END
RETURN
100 * PRINT GRAPHICS
IF ADDS=1 THEN GOSUB 40
CRT @(TCOL,TPOS):CHAR(27):CHAR(72):CHAR(2):CHAR(27):CHAR(9):"2":TSTRING1:CHAR(27):CHAR(72):CHAR(3)
CRT @(TCOL,TPOS+1):CHAR(27):CHAR(72):CHAR(2):CHAR(27):CHAR(9):"3":TSTRING1:CHAR(27):CHAR(72):CHAR(3)
RETURN
150 * DOUBLE HIGH/WIDE
IF ADDS=1 THEN GOSUB 40
CRT @(TCOL,TPOS):CHAR(27):CHAR(9):"2":TSTRING1:
CRT @(TCOL,TPOS+1):CHAR(27):CHAR(9):"3":TSTRING1:
RETURN
175 * REGULAR PRINT
CRT @(TCOL+1,TPOS):TSTRING1
RETURN
200 * PRINT DOUBLE WIDE/DOUBLE HIGH
TSTRING1=OCONV(TIME,"MTHS")
TSTRING1=OCONV(TSTRING1,'MCL')
IF ADDS THEN
TCOL=COL+6; TPOS=POS+2; GOSUB 150
IF ADDS=1 THEN TCOL=TCOL+2
END ELSE
TCOL=COL+14; TPOS=POS+2; GOSUB 175
END
RETURN
500 * CALCULATE POS/COL
IF POS < 3 OR POS > 15 THEN PSW=PSW+1
IF COL < 1 OR COL > 17 THEN CSW=CSW+1
IF REM(PSW,2) THEN
POS=POS-1
END ELSE
POS=POS+1
END
IF REM(CSW,2) THEN
COL=COL+2
END ELSE
COL=COL-2
END
RETURN
1000 *
CRT CS
POS=0; COL=0; GOSUB 50; GOSUB 200
IF ADDS THEN
TSTRING1="Today Is"
TLEN=LEN(TSTRING1)
IF ADDS=1 THEN
TCOL=COL+60-(INT(TLEN/2)); TPOS=POS
END ELSE
TCOL=COL+30-(INT(TLEN/2)); TPOS=POS
END
GOSUB 150
TSTRING1=OCONV(TODAY,'DWA'):" "
TLEN=LEN(TSTRING1)
IF ADDS=1 THEN
TCOL=COL+60-(INT(TLEN/2)); TPOS=POS+2
IF REM(TCOL,2) THEN TCOL=TCOL+1
END ELSE
TCOL=COL+30-(INT(TLEN/2)); TPOS=POS+2
END
GOSUB 150
END ELSE
TSTRING1="Today Is"
TLEN=LEN(TSTRING1)
TCOL=COL+50-(INT(TLEN/2)); TPOS=POS+1
GOSUB 175
TSTRING1=OCONV(TODAY,'DWA'):" ":OCONV(TODAY,'D2/')
TLEN=LEN(TSTRING1)
TCOL=COL+50-(INT(TLEN/2)); TPOS=POS+2
GOSUB 175
END
IF ADDS THEN
CRT CHAR(24)
END
CRT @(COL+10,POS+6):"WELCOME TO TIMECLOCK"
*
*CRT @(0,22):RV:"Enter Your 4 digit Employee Identification Number":ERV:CL
TSTRING="EMPLOYEE ID #:":USER
TLEN=LEN(TSTRING)
CRT @(COL+20-(INT(TLEN/2)),POS+10):TSTRING
*CRT @(COL+20-(INT(TLEN/2))+14,POS+10):
*INPUT USER
*IF USER='OFF' THEN STOP
*IF USER='' OR USER='/' THEN
* CRT @(0,22):RV:"Thank You - Goodbye!":ERV:CL:
* RQM
* GO 1999
*END
READ UREC FROM USER.FILE,USER THEN
TSTRING=UREC<1>:" ":UREC<2>
TLEN=LEN(TSTRING)
CRT @(COL+20-(INT(TLEN/2)),POS+8):RV:TSTRING:ERV
END ELSE
CRT @(0,22):RV:BEEP:"INVALID USER CODE - See Supervisor!":ERV:CL
RQM
GO 1000
END
*
GO 1599
TRY=0
1500 * PASSWORD INPUT
POS=0; COL=0
CRT @(0,22):RV:"Please enter your Password Now - It'll be our secret!":ERV:CL
TSTRING="PASSWORD :"
TLEN=LEN(TSTRING)
CRT @(COL+20-(INT(TLEN/2)),POS+11):TSTRING
CRT @(COL+20-(INT(TLEN/2))+10,POS+11):
ECHO OFF
INPUT PSWD
ECHO ON
IF PSWD='' OR PSWD='/' THEN
CRT @(0,22):RV:"Thank You - Goodbye!":ERV:CL:
RQM
GO 1999
END
IF UREC<4> = PSWD ELSE
IF TRY THEN
CRT @(0,22):RV:BEEP:"You have TWICE entered an incorrect password - Goodbye":ERV:CL
RQM
GO 1999
END ELSE
TRY=1
CRT @(0,22):RV:BEEP:"INVALID PASSWORD - Try Again!":ERV:CL
RQM
GO 1500
END
END
1599 *
PRJCT=''
CLKKEY=USER:"|":TODAY
READ CLKREC FROM CLOCKFILE,CLKKEY THEN
GOSUB 2500
END ELSE
CLKREC=''
END
GOSUB 6000
*
1750 * PROJECT CODES
POS=0; COL=0
CRT @(0,22):RV:"Enter Project # to CLOCK IN, 'OFF' to CLOCK OUT, '?'(help), 'T'(timecard)":ERV:CL:
TSTRING="PROJECT :___"
TLEN=LEN(TSTRING)
CRT @(COL+20-(INT(TLEN/2)),POS+12):TSTRING
CRT @(COL+20-(INT(TLEN/2))+TLEN-3,POS+12):
INPUT PRJCT
PRJCT=OCONV(PRJCT,"MCU")
IF PRJCT='T' THEN GOSUB 2000; GOSUB 2500; GO 1750
IF PRJCT='?' THEN PRJCT=''; GOSUB 3000; GOSUB 2500
IF PRJCT='OUT' THEN PRJCT='OFF'
IF PRJCT='OFF' THEN
GOSUB 5000
IF CLKREC # '' THEN
* GOSUB 2500
END ELSE
GO 1750
END
CRT @(0,22):RV:"Hit Return to Continue":ERV:CL:
INPUT ANY
GO 1999
END
IF PRJCT='/' THEN
CRT @(0,22):"Thank You - Goodbye!":CL:
RQM
GO 1999
END
IF PRJCT='' THEN GO 1750
LOCATE(PRJCT,HELP.TBL,1;INDX) THEN
TSTRING=HELP.TBL<2,INDX>
TLEN=LEN(TSTRING)
CRT @(COL+20-(INT(TLEN/2)),POS+14):TSTRING
GOSUB 5000 ;* UPDATE RECORD
GOSUB 2500 ;* DISPLAY TODAYS CARD
END ELSE
CRT @(0,22):RV:BEEP:"INVALID PROJECT CODE - Try Again!":ERV:CL
RQM
GO 1750
END
1999 *
PSW=0;CSW=0
RETURN
*
2000 * TIMECARD HEADER
POS=0; COL=0
TIME=TIME()
GOSUB 200
POS=6; COL=0
CRT @(COL,POS):CR
GOSUB 2225
TSTRING=" DATE"'L#9':"TIME IN"'L#9':"TIME OUT"'L#9':"PROJECT"'L#9'
CRT @(COL+2,POS):TSTRING
CRT @(COL+42,POS):TSTRING
*
EDATE=0; SDATE=0
PRDAYS=14; PRDATE=ICONV('12/23/90','D')
SDATE=TODAY-PRDATE
IF SDATE <= PRDAYS THEN
EDATE=PRDATE
END ELSE
EDATE=PRDATE+(INT(SDATE/PRDAYS)*PRDAYS)
END
*
Z=0; ZCT=0; ZPOS=0; MAX=14; SW=0; POS=6; COL=2
D=TODAY+1
TOTAL.HRS = 0
LOOP
D=D-1
UNTIL D < EDATE DO
DKEY=USER:"|":D
READ DREC FROM CLOCKFILE,DKEY THEN
ZCT=DCOUNT(DREC<1>,VM)
DAILY.HRS = 0
FOR Z=1 TO ZCT STEP 2
DATE=D
INTIME = DREC<1,Z>
OUTTIME = DREC<1,Z + 1>
IF OUTTIME = '' THEN INTIME = 0
DAILY.HRS = DAILY.HRS + (OUTTIME - INTIME)
ZPOS=ZPOS+1
IF INT(ZPOS/MAX) THEN
SW=SW+1
IF REM(SW,2) THEN
COL=42
END ELSE
COL=2
GOSUB 2100
IF ANS='B' THEN GO 2000
END
ZPOS=1
END
ZTIME=OCONV(DREC<1,Z>,"MTH")
ZTIME=OCONV(ZTIME,"MCL")
TSTRING=OCONV(DATE,"D2/")'L#9':ZTIME'L#9':SPACE(10):DREC<2,Z>'L#7'
CRT @(COL,POS+ZPOS):TSTRING
IF DREC<2,Z+1>='OFF' THEN
TSTRING=OCONV(DREC<1,Z+1>,"MTH")
TSTRING=OCONV(TSTRING,'MCL')
CRT @(COL+18,POS+ZPOS):TSTRING
END ELSE
Z=Z-1
END
NEXT Z
TOTAL.HRS = TOTAL.HRS + DAILY.HRS ;*CALCS TOTAL HRS FOR DISPLAY
ZPOS=ZPOS+1 ;* THIS WILL CAUSE THE BLANK LINE BETWEEN DAYS
END
REPEAT
*
GOSUB 2100
IF ANS='B' THEN GO 2000
COL=0; POS=6
CRT @(COL,POS):CR
PRJCT=''; INDX=''; GOSUB 2550
RETURN
*
2100 *
CRT @(54,22):"TOTAL HOURS: ":RV:OCONV(TOTAL.HRS,"MT"):ERV:
CRT @(0,22):RV:"Enter N(next page), B(back page), else RETURN ":ERV:
INPUT ANS
IF ANS='' OR ANS='/' THEN
GO 2199
END
IF ANS='B' THEN
Z=Z-(ZPOS+(MAX*6))
IF Z < 0 THEN Z=0
SW=0
END ELSE
IF ANS='N' THEN
IF Z > ZCT THEN
CRT @(0,22):"End of list!":CL
RQM
GO 2100
END
END ELSE
CRT @(0,22):BEEP:"INVALID ENTRY - Try Again!":CL:
END
END
2199 *
COL=2; POS=6
RETURN
*
2225 * DRAW BOX
IF ADDS THEN
FOR X=POS TO 21
IF X=POS THEN
TSTRING1="#"
TCOL=COL; TPOS=X; GOSUB 2275
TSTRING1="L"
TCOL=COL+39; GOSUB 2275
TSTRING1="D"
TCOL=COL+79; GOSUB 2275
END ELSE
IF X=21 THEN
TSTRING1="B":STR("<",38):"M":STR("<",39):"F"
TCOL=COL; TPOS=X; GOSUB 2275
END ELSE
TSTRING1=">"
TCOL=COL; TPOS=X; GOSUB 2275
TCOL=COL+39; GOSUB 2275
TCOL=COL+79; GOSUB 2275
END
END
NEXT X
END ELSE
FOR X=POS TO 21
IF X=POS THEN
TSTRING1="|"
TCOL=COL; TPOS=X; GOSUB 2285
TSTRING1="|"
TCOL=COL+39; GOSUB 2285
TSTRING1="|"
TCOL=COL+79; GOSUB 2285
END ELSE
IF X=21 THEN
TSTRING1=STR("~",80)
TCOL=COL; TPOS=X; GOSUB 2285
END ELSE
TSTRING1="|"
TCOL=COL; TPOS=X; GOSUB 2285
TCOL=COL+39; GOSUB 2285
TCOL=COL+79; GOSUB 2285
END
END
NEXT X
END
RETURN
2275 * PRINT GRAPHICS
CRT CHAR(27):CHAR(72):CHAR(2)
CRT @(TCOL,TPOS):TSTRING1:
CRT CHAR(27):CHAR(72):CHAR(3)
RETURN
2285 * PRINT LINE
CRT @(TCOL,TPOS):TSTRING1:
RETURN
*
2500 * TIMECARD HEADER
POS=0; COL=0
GOSUB 200 ;* UPDATE TIME IN BOX
POS=6
GOSUB 2550
GOSUB 2525
POS=6; COL=0
TSTRING="TIME IN"'L#9':"TIME OUT"'L#9':"PROJECT DESCRIPTION"
CRT @(COL+41,POS):TSTRING
*
ZPOS=0
ZCT=DCOUNT(CLKREC<1>,VM)
FOR Z=1 TO ZCT
DATE=FIELD(CLKKEY,"|",2)
IF CLKREC<2,Z>='OFF' THEN
TSTRING=OCONV(CLKREC<1,Z>,"MTH")
TSTRING=OCONV(TSTRING,'MCL')
CRT @(COL+50,POS+ZPOS):TSTRING
END ELSE
ZPOS=ZPOS+1
ZTIME=OCONV(CLKREC<1,Z>,"MTH")
ZTIME=OCONV(ZTIME,"MCL")
LOCATE(OCONV(CLKREC<2,Z>,'G0-1'),HELP.TBL,1;ZINDX) THEN
ZDESC=HELP.TBL<2,ZINDX>
END ELSE
ZDESC='UNKNOWN'
END
TSTRING=ZTIME'L#9':SPACE(9):CLKREC<2,Z>'L#7':ZDESC'L#12'
CRT @(COL+41,POS+ZPOS):TSTRING
END
NEXT Z
*
IF PRJCT='' ELSE
CRT @(0,22):RV:"Press RETURN to continue":ERV:CL:
INPUT ANY
END
RETURN
*
2525 * 1/2 DRAW BOX
COL=0; POS=6
CRT @(COL,POS):CR
GOSUB 2550
IF ADDS THEN
FOR X=POS TO 21
IF X=POS THEN
TSTRING1="#"
TCOL=COL+39; TPOS=X; GOSUB 2275
TSTRING1="D"
TCOL=COL+79; GOSUB 2275
END ELSE
IF X=21 THEN
TSTRING1="B":STR("<",39):"F"
TCOL=COL+39; TPOS=X; GOSUB 2275
END ELSE
TSTRING1=">"
TCOL=COL+39; TPOS=X; GOSUB 2275
TCOL=COL+79; GOSUB 2275
END
END
NEXT X
END ELSE
FOR X=POS TO 21
IF X=POS THEN
TSTRING1="|"
TCOL=COL+39; TPOS=X; GOSUB 2285
TCOL=COL+79; GOSUB 2285
END ELSE
IF X=21 THEN
TSTRING1=STR("~",41)
TCOL=COL+39; TPOS=X; GOSUB 2285
END ELSE
TSTRING1="|"
TCOL=COL+39; TPOS=X; GOSUB 2285
TCOL=COL+79; GOSUB 2285
END
END
NEXT X
END
RETURN
2550 * REDISPLAY USER INFORMATION
POS=6; COL=0
CRT @(COL+10,POS):"WELCOME TO TIMECLOCK"
TSTRING="EMPLOYEE ID #:":USER
TLEN=LEN(TSTRING)
CRT @(COL+20-(INT(TLEN/2)),POS+4):TSTRING
TSTRING=UREC<1>:" ":UREC<2>
TLEN=LEN(TSTRING)
CRT @(COL+20-(INT(TLEN/2)),POS+2):RV:TSTRING:ERV
TSTRING="PROJECT :":PRJCT
TLEN=LEN(TSTRING)
CRT @(COL+20-(INT(TLEN/2)),POS+6):TSTRING
IF INDX = '' OR PRJCT='OFF' OR PRJCT='' ELSE
TSTRING=HELP.TBL<2,INDX>
TLEN=LEN(TSTRING)
CRT @(COL+20-(INT(TLEN/2)),POS+8):TSTRING
END
GOSUB 6000
RETURN
*
3000 * HELP HEADER
POS=0; COL=0
TIME=TIME()
GOSUB 200
POS=6; COL=0
CRT @(COL,POS):CR
GOSUB 2225
TSTRING="PROJECT"'L#9':"DESCRIPTION"'L#27'
CRT @(COL+2,POS):TSTRING
CRT @(COL+42,POS):TSTRING
*
X=0;XX=0; MAX=14; SW=0; COL=2
XCT=DCOUNT(HELP.TBL<1>,VM)
LOOP
X=X+1
XX=XX+1
TSTRING=HELP.TBL<1,X>'L#9':HELP.TBL<2,X>[1,27]'L#27'
CRT @(COL,POS+XX):TSTRING
IF INT(XX/MAX) THEN
SW=SW+1
IF REM(SW,2) THEN
COL=42
END ELSE
COL=2
GOSUB 3100
END
XX=0
END
UNTIL PRJCT # '' DO REPEAT
IF PRJCT='/' THEN PRJCT=''
RETURN
*
3100 *
CRT @(0,22):RV:"Enter Project #, N(next page), B(back page)":ERV:CL:
INPUT ANS
IF ANS='' OR ANS='/' THEN
PRJCT='/'
GO 3199
END
IF ANS='B' THEN
X=X-(XX+(MAX*3))
IF X < 0 THEN X=0
SW=0
END ELSE
IF ANS='N' THEN
IF X > XCT THEN
CRT @(0,22):"End of list!":CL
RQM
*X=X-(MAX*2)
GO 3100
END
END ELSE
LOCATE(ANS,HELP.TBL,1;INDX) THEN
PRJCT=ANS
END ELSE
CRT @(0,22):RV:BEEP:"INVALID PROJECT CODE - Try Again!":ERV:CL:
END
END
END
3199 *
RETURN
*
4000 * LOAD PROJECT TABLE
IF HELP.TBL # '' ELSE
SELECT PROJECT
LOOP
READNEXT ID ELSE ID='EOF'
UNTIL ID='EOF' DO
READ PREC FROM PROJECT,ID THEN
LOCATE(PREC<1>,HELP.TBL,2;INDX;'AL') ELSE
HELP.TBL=INSERT(HELP.TBL,1,INDX;ID)
HELP.TBL=INSERT(HELP.TBL,2,INDX;OCONV(PREC<1>,'MCU'))
END
END
REPEAT
END
RETURN
*
5000 * HANDLE TIME DATA
*---------------------------------------*
* THIS PORTION OF LOGIC BUILDS THE TIMECLOCK ENTRIES
*
* CLOCKFILE RECORD LAYOUT AS FOLLOWS:
* <0> USER|DATE
* <1> TIME MV
* <2> PROJECT MV
*
*---------------------------------------*
CLKKEY=USER:"|":TODAY
TIME=TIME()
IF TODAY # DATE() THEN
TODAY=DATE()
CLKKEY=USER:"|":TODAY
READ CLKREC FROM CLOCKFILE,CLKKEY ELSE
CLKREC=''
END
END
IF CLKREC # '' THEN
LAST=DCOUNT(CLKREC<1>,VM)
IF PRJCT='OFF' THEN
IF CLKREC<2,LAST> = 'OFF' THEN
CRT @(0,22):BEEP:"HEY! YOU ARE ALREADY CLOCKED OUT!":CL:
RQM
END ELSE
CLKREC=INSERT(CLKREC,1,-1;TIME)
CLKREC=INSERT(CLKREC,2,-1;PRJCT)
CRT @(0,22):"You are now OFF THE CLOCK!":CL:
RQM
END
END ELSE
IF CLKREC<2,LAST> # 'OFF' THEN
CLKREC=INSERT(CLKREC,1,-1;TIME)
CLKREC=INSERT(CLKREC,2,-1;"OFF")
CLKREC=INSERT(CLKREC,1,-1;TIME)
CLKREC=INSERT(CLKREC,2,-1;PRJCT:"-00")
CRT @(0,22):"Your work Project has been Logged - Thanks!":CL:
RQM
END ELSE
CLKREC=INSERT(CLKREC,1,-1;TIME)
CLKREC=INSERT(CLKREC,2,-1;PRJCT:"-00")
CRT @(0,22):"Welcome Back! You are now ON THE CLOCK!":CL:
RQM
END
END
END ELSE
CLKREC=''
IF PRJCT='OFF' THEN
YKEY=OCONV(CLKKEY,"G0|1"):"|":OCONV(CLKKEY,"G1|1")-1
READ YREC FROM CLOCKFILE,YKEY THEN
YCT=DCOUNT(YREC<1>,VM)
IF YREC<2,YCT>#'OFF' THEN
CLKREC<1>=0
CLKREC<2>=YREC<2,YCT>
WRITE CLKREC ON CLOCKFILE,CLKKEY
YREC=INSERT(YREC,1,-1;'86400');* 11:59 PM
YREC=INSERT(YREC,2,-1;'OFF') ;* CLOCK OUT
WRITE YREC ON CLOCKFILE,YKEY
GO 5000
END
END
CRT @(0,22):BEEP:"HEY! YOU ARE ALREADY CLOCKED OUT!":CL:
RQM
GO 5999
END ELSE
CLKREC=TIME
CLKREC<2>=PRJCT:'-00'
CRT @(0,22):"You are now ON THE CLOCK! - Have a great day":CL:
RQM
END
END
WRITE CLKREC ON CLOCKFILE,CLKKEY
GOSUB 6000 ;*CALCULATES TOTAL HOURS FOR DISPLAY
5999 *
RETURN
*********************************************
6000 ;*CALCULATES TOTAL HOURS FOR DISPLAY
*
EDATE=0; SDATE=0 ; WEEK.ONE=0 ; WEEK.TWO=0
PRDAYS=14; PRDATE=ICONV('12/23/90','D')
SDATE=TODAY-PRDATE
IF SDATE <= PRDAYS THEN
EDATE=PRDATE
END ELSE
EDATE=PRDATE+(INT(SDATE/PRDAYS)*PRDAYS)
END
*
Z=0; ZCT=0
D=TODAY+1
TOTAL.HRS = 0
LOOP
D=D-1
UNTIL D < EDATE DO
DKEY=USER:"|":D
READ DREC FROM CLOCKFILE,DKEY THEN
DAILY.HRS=0
ZCT=DCOUNT(DREC<1>,VM)
FOR Z=1 TO ZCT STEP 2
DATE=D
INTIME = DREC<1,Z>
OUTTIME = DREC<1,Z + 1>
IF OUTTIME = '' THEN INTIME = 0
DAILY.HRS = DAILY.HRS + (OUTTIME - INTIME)
*CRT "HERE ":DAILY.HRS:" ":OUTTIME:" ":INTIME:;INPUT DUMMY
NEXT Z
IF D >= EDATE+7 THEN
WEEK.TWO=WEEK.TWO+DAILY.HRS
END ELSE
WEEK.ONE=WEEK.ONE+DAILY.HRS
END
TOTAL.HRS = TOTAL.HRS + DAILY.HRS
END
REPEAT
IF TOTAL.HRS > 0 THEN
CRT @(12,17):" WEEK ONE HOURS: ":OCONV(WEEK.ONE,"MT")
CRT @(12,18):" WEEK TWO HOURS: ":OCONV(WEEK.TWO,"MT")
END
CRT @(0,19):SPACE(3):" TOTAL PAY PERIOD HOURS: ":RV:OCONV(TOTAL.HRS,"MT"):ERV:
RETURN
***********************************************************
9999 * END OF PROCESS
STOP