* MSD.INFO.ACCRUAL * * AUTHOR: SCOTT REDMOND * PURPOSE: UTILITY TO MAINTAIN VACATION/SICK ACCRUAL FOR EMPLOYEES * DATE: 03/28/95 * *-------------------------------------------------------------------* * $INCLUDE GEN.COMMON $INCLUDE USER * *-------------------------------------------------------------------* * OPEN 'USER' TO USER.FILE ELSE ABORT 201, 'USER' *OPEN 'CUSTOMER.TRANS' TO CUSTOMER.TRANS ELSE ABORT 201, 'CUSTOMER.TRANS' OPEN 'PROJECT' TO PROJECT ELSE ABORT 201, 'PROJECT' OPEN 'INFO.ACCRUAL' TO INFO.ACCRUAL ELSE ABORT 201, 'INFO.ACCRUAL' OPEN 'PT' TO PT.FILE ELSE ABORT 201, 'PT' OPEN 'CLOCKFILE' TO CLOCKFILE ELSE ABORT 201, 'CLOCKFILE' OPEN 'CLOCK.GEN.KEYS' TO CLOCK.GEN.KEYS ELSE ABORT 201, 'CLOCK.GEN.KEYS' OPEN 'CM' TO CM ELSE ABORT 201, 'CM' OPEN 'HP.CONTROL' TO HP.CONTROL ELSE ABORT 201, 'HP.CONTROL' * *-------------------------------------------------------------------* * USER.ADD='' ; USER.REC='' ; TODAY=DATE() ; PASSWORD='IXOYE' * *-------------------------------------------------------------------* 5 * CRT @(0,22):CL:RV:" ENTER PASSWORD TO CONTINUE :":ERV: HUSH ON INPUT PASS,19 HUSH OFF IF PASS # 'VVSS' THEN STOP * 10 * CRT CS HDG='MICAHTEK & IDM VACATION/SICK TIME ACCRUAL UTILITY' HDL=(80 - LEN(HDG)) / 2 CRT @(0,0):CL:RV:STR(' ',80):ERV CRT @(HDL,0):RV:HDG:ERV: * 100 *------ opening menu ------------------------------------------* CRT @(20,5):CL:RV:" 1 - QUICK VIEW ACCRUAL TOTALS ":ERV CRT @(20,7):CL:RV:" 2 - RUN CURRENT PAY PERIOD PROCESS ":ERV CRT @(20,9):CL:RV:" 3 - ACCRUAL REPORT BY DEPARTMENT ":ERV CRT @(20,11):CL:RV:" 4 - UPDATE MANAGERS/USERS RECORDS ":ERV CRT @(20,13):CL:RV:" 5 - PRINT DETAIL ACCRUAL REPORT ":ERV * 101 * CRT @(0,22):CL:RV:" ENTER SELECTION :":ERV: INPUT SELECTION,4 BEGIN CASE CASE SELECTION=PF3 OR SELECTION='' STOP CASE SELECTION='1' GOSUB 1000 CASE SELECTION='2' GOSUB 2000 CASE SELECTION='3' GOSUB 3000 CASE SELECTION='4' GOSUB 5000 CASE SELECTION='5' CALL MSD.ACCRUAL.REPORT CASE 1 GO 101 END CASE GO 10 * 9999 * STOP * 1000 *--- quick view accrual records ------------------------* EXECUTE "EX CLOCK.INFO" CRT @(0,22):CL:RV:" PROCESS COMPLETE :":ERV: INPUT ANY,2 RETURN * 2000 *--- run next pay period process / update files --------* CRT @(0,1):CR: CRT @(20,5):CL:RV:" STEP 1 - PROCESS CLOCKFILE RECORDS ":ERV CRT @(20,7):CL:RV:" STEP 2 - PROCESS MANAGER'S RECORDS ":ERV CRT @(20,9):CL:RV:" STEP 3 - PROCESS PROJECT RECORDS ":ERV * READ JEN.REC FROM CLOCK.GEN.KEYS,"NEXT.PAY.PERIOD" ELSE * * NOTE: IF CLOCK.GEN.KEYS ITEM "NEXT.PAY.PERIOD" IS MISSING: * 1.) FIND THE LATEST IN THE USER FILE. * 2.) ADD ONE DAY TO THAT. * 3.) EDIT THE CLOCK.GEN.KEYS ITEM AND PUT THAT DATE * IN ATTRIBUTE ONE OF THAT ITEM. * 4.) START THIS PROCESS OVER AGAIN. * CRT @(0,22):CL:BEEP:RV:" SERIOUS ERROR - CLOCK.GEN.KEYS (NEXT.PAY.PERIOD) MISSING! ":ERV: INPUT ANY,3 STOP END PAY.BEGIN=JEN.REC<1> 2010 * CRT @(20,12):CL:RV:" PAY PERIOD BEGIN DATE :":ERV:" ":OCONV(PAY.BEGIN,'D') PAY.END=PAY.BEGIN+13 CRT @(20,14):CL:RV:" PAY PERIOD ENDING DATE:":ERV:" ":OCONV(PAY.END,'D') * CRT @(0,22):CL:RV:" ENTER 'B' TO BEGIN PROCESSING :":ERV: INPUT BEGIN.ANS,5 IF BEGIN.ANS[1,1] # 'B' THEN RETURN IF PAY.END >= TODAY THEN CRT @(0,22):CL:BEEP:RV:" ACTIVE PAY PERIOD! TRY AGAIN ON ":OCONV(PAY.END+1,'D'):" :":ERV: INPUT ANY,3 GO 10 END CRT @(0,22):CL:RV:" SELECTING FILE...PLEASE WAIT! ":ERV: * GOSUB 35000 ;* verify manager records have been updated since last pay * JEN.REC<1>=PAY.END+1 WRITE JEN.REC ON CLOCK.GEN.KEYS,"NEXT.PAY.PERIOD" CRT @(60,5):CL:RV:" <===== ":ERV: * USER.ADD='' ; USER.REC='' ; TODAY=DATE() ; WT=0 ; FOUND=0 SDATE=ICONV('03/26/94','D') * TIME.TABLE='' START=0 FOR X = SDATE TO TODAY STEP 14 START=START+1 TIME.TABLE=INSERT(TIME.TABLE,1,START;X+1) TIME.TABLE=INSERT(TIME.TABLE,2,START;X+14) TIME.TABLE=INSERT(TIME.TABLE,3,START;START) NEXT X * CLEARFILE INFO.ACCRUAL * EOF=0 ; T=0 ; FILE.ACCESS='CLOCK FILE' SELECT CLOCKFILE LOOP READNEXT ID ELSE EOF=1 UNTIL EOF DO T=T+1 IF REM(T,2000)=0 THEN GOSUB 2900 ;* refresh totals USER.KEY =OCONV(ID,'G0|1') CLOCK.DATE=OCONV(ID,'G1|1') IF CLOCK.DATE < PAY.BEGIN OR CLOCK.DATE > PAY.END THEN GO 2500 READ CLOCK.REC FROM CLOCKFILE,ID THEN IF CLOCK.DATE=9582 THEN CLOCK.DATE=9583 ;* start date IF CLOCK.DATE < SDATE THEN GO 2500 READ USR.REC FROM USER.FILE,USER.KEY THEN IF USR.REC# 'C' THEN GO 2500 ;* time clock employee FOUND=FOUND+1 LOCATE(CLOCK.DATE,TIME.TABLE,1;WHR;"AR") THEN NULL POSITON='' IF CLOCK.DATE = TIME.TABLE<1,WHR> THEN POSITION=WHR END ELSE IF CLOCK.DATE <= TIME.TABLE<2,WHR> THEN POSITION=WHR-1 END END PERIOD=TIME.TABLE<3,POSITION> *----- initialize totals with each user, each day -----* OUT.TIME=0 ; IN.TIME=0 ; DAILY.TIME=0 VAC.TOTAL=0 ; SICK.TOTAL=0 ; HOLIDAY.TOTAL=0 ; OTHER.TOTAL=0 FUNERAL.TOTAL=0 ; JURY.TOTAL=0 ; WORKMANS.TOTAL=0 PERSONAL.TOTAL=0 ; BONUS.TOTAL=0 * TIMCT=DCOUNT(CLOCK.REC<1>,VM) FOR TIM = 1 TO TIMCT ;* calc daily time IF CLOCK.REC<2,TIM>='OFF' THEN OUT.TIME=CLOCK.REC<1,TIM> DAILY.TIME=DAILY.TIME+(OUT.TIME-IN.TIME) END ELSE JOB='' JOB=OCONV(CLOCK.REC<2,TIM>,'G1-1') JOB.TWO=JOB[2,2]'L%3' IF JOB[1,1]='V' THEN ;* compute vacation VAC.TOTAL=VAC.TOTAL+JOB.TWO END IF JOB[1,1]='S' THEN ;* compute sick SICK.TOTAL=SICK.TOTAL+JOB.TWO END IF JOB[1,1]='H' THEN ;* compute holiday HOLIDAY.TOTAL=HOLIDAY.TOTAL+JOB.TWO END IF JOB[1,1]='P' THEN ;* personal PERSONAL.TOTAL=PERSONAL.TOTAL+JOB.TWO END IF JOB[1,1]='F' THEN ;* funeral FUNERAL.TOTAL=FUNERAL.TOTAL+JOB.TWO END IF JOB[1,1]='W' THEN ;* workmans comp. WORKMANS.TOTAL=WORKMANS.TOTAL+JOB.TWO END IF JOB[1,1]='B' THEN ;* bonus day BONUS.TOTAL=BONUS.TOTAL+JOB.TWO END IF JOB[1,1]='J' THEN ;* jury duty JURY.TOTAL=JURY.TOTAL+JOB.TWO END IN.TIME=CLOCK.REC<1,TIM> END NEXT TIM DAILY.TIME =(DAILY.TIME/60)/60 ;* convert minutes to hours DAILY.HOURS=INT(DAILY.TIME) DAILY.DECI =OCONV(DAILY.TIME,'G1.1')[1,3] TWO.DECI =DAILY.DECI[1,2]'R%2' EXTRA.DECI =DAILY.DECI[3,1] IF EXTRA.DECI >= 5 THEN IF TWO.DECI=99 THEN TWO.DECI='00' DAILY.HOURS=DAILY.HOURS+1 END ELSE TWO.DECI=TWO.DECI+1'R%2' END END ELSE IF TWO.DECI=99 THEN TWO.DECI='00' DAILY.HOURS=DAILY.HOURS+1 END END OUTPUT.HOURS=DAILY.HOURS:TWO.DECI READ INFO.REC FROM INFO.ACCRUAL,USER.KEY ELSE INFO.REC='' OTHER.TOTAL=OTHER.TOTAL+VAC.TOTAL+SICK.TOTAL+HOLIDAY.TOTAL OTHER.TOTAL=OTHER.TOTAL+FUNERAL.TOTAL+PERSONAL.TOTAL+BONUS.TOTAL OTHER.TOTAL=OTHER.TOTAL+JURY.TOTAL+WORKMANS.TOTAL INFO.REC=INFO.REC+OUTPUT.HOURS ;* add hours INFO.REC=TIME.TABLE<1,POSITION> ;* beginning period date INFO.REC=TIME.TABLE<2,POSITION> ;* ending period date INFO.REC=INFO.REC+VAC.TOTAL ;* vacation hours INFO.REC=INFO.REC+SICK.TOTAL ;* sick hours used INFO.REC=INFO.REC+HOLIDAY.TOTAL ;* holiday hours INFO.REC=INFO.REC+OTHER.TOTAL ;* other hours INFO.REC=INFO.REC+FUNERAL.TOTAL ;* funeral hours INFO.REC=INFO.REC+PERSONAL.TOTAL ;* personal hours INFO.REC=INFO.REC+BONUS.TOTAL ;* bonus hours INFO.REC=INFO.REC+JURY.TOTAL ;* jury hours INFO.REC=INFO.REC+WORKMANS.TOTAL;* work comp hours WRITE INFO.REC ON INFO.ACCRUAL,USER.KEY WT=WT+1 END END 2500 * REPEAT * 2600 *---- select file & determine hours accrued/used ------------* * EOF=0 ; T=0 ; WT=0 ; FILE.ACCESS='USER FILE' * LOCATE(PAY.BEGIN,TIME.TABLE,1;BEGIN.ATT) THEN NULL LOCATE(PAY.END,TIME.TABLE,2;END.ATT) THEN NULL * SELECT INFO.ACCRUAL LOOP READNEXT ID ELSE EOF=1 UNTIL EOF DO T=T+1 IF REM(T,25)=0 THEN GOSUB 2900 ;* refresh totals TOTAL.HOURS=0 ; VAC.HOURS=0 ; OT.HOURS=0 ; SICK.HOURS=0 HOL.HOURS=0 ; OTHER.HOURS=0 ; ACCRUAL.HOURS=0 WORKED.HOURS=0 ; BONUS.HOURS=0 ; JURY.HOURS=0 WORKMANS.HOURS=0 ; PERSONAL.HOURS=0 ; FUNERAL.HOURS=0 READ IREC FROM INFO.ACCRUAL,ID THEN FOR XTX = BEGIN.ATT TO END.ATT TOTAL.HOURS=TOTAL.HOURS+IREC VAC.HOURS =IREC ;* vacation hours used SICK.HOURS =IREC ;* sick hours used HOL.HOURS =IREC ;* holiday hours used OTHER.HOURS =IREC FUNERAL.HOURS =IREC PERSONAL.HOURS =IREC BONUS.HOURS =IREC JURY.HOURS =IREC WORKMANS.HOURS =IREC WORKED.HOURS=TOTAL.HOURS-OTHER.HOURS IF WORKED.HOURS > 8000 THEN OT.HOURS=WORKED.HOURS-8000 END ELSE OT.HOURS=0 END IF WORKED.HOURS >= 8000 THEN ACCRUAL.HOURS=8000 END ELSE ACCRUAL.HOURS=WORKED.HOURS END REG.HOLD=ACCRUAL.HOURS ACCRUAL.HOURS=OCONV(ACCRUAL.HOURS,'MR2') READU USERX FROM USER.FILE,ID THEN *---- check for probation ----------* USERX=USERX+90 *---- check for part time ----------* IF USERX='P' THEN PART.TIME=1 ELSE PART.TIME='' *---- check for managers ----------* IF USERX='M' THEN GO 2699 ;* figured in 2700 *---- check for inactive status-----* IF USERX#'A' THEN GO 2699 *-----------------------------------* IF TODAY <= USERX+365 THEN ;* 0-1 year USERX='3.33' END IF TODAY >= USERX+365 THEN ;* 2-9 year USERX='6.67' END IF TODAY >= USERX+3650 THEN ;* ten year USERX='10' END IF USERX='M' THEN ;* manager rate USERX='10' END CALC.FACTOR=USERX *--- factors per John Longley 04/03/95 -------* IF CALC.FACTOR='3.33' THEN CALC.FACTOR='.020492' IF CALC.FACTOR='6.67' THEN CALC.FACTOR='.042735' IF CALC.FACTOR='10' THEN CALC.FACTOR='.066964' VAC.ACCRUAL=ACCRUAL.HOURS*CALC.FACTOR VAC.ONE=OCONV(VAC.ACCRUAL,'G0.1') VAC.TWO=OCONV(VAC.ACCRUAL,'G1.1')'L%2' VAC.ACCRUAL=VAC.ONE:VAC.TWO[1,2] SIK.ACCRUAL=ACCRUAL.HOURS*CALC.FACTOR SIK.ONE=OCONV(SIK.ACCRUAL,'G0.1') SIK.TWO=OCONV(SIK.ACCRUAL,'G1.1')'L%2' SIK.ACCRUAL=SIK.ONE:SIK.TWO[1,2] USERX =REG.HOLD IF PART.TIME THEN ;* reduce but not accrue vac USERX =OT.HOURS USERX =0 USERX =0 USERX=0 USERX =0 USERX=0 USERX=0 USERX=VAC.HOURS USERX =0 USERX =TOTAL.HOURS USERX =OTHER.HOURS USERX =PAY.END USERX=USERX-VAC.HOURS END ELSE USERX =OT.HOURS USERX =HOL.HOURS USERX=VAC.HOURS USERX =SICK.HOURS USERX =TOTAL.HOURS USERX =FUNERAL.HOURS USERX=PERSONAL.HOURS USERX =BONUS.HOURS USERX=WORKMANS.HOURS USERX=JURY.HOURS USERX =OTHER.HOURS USERX =PAY.END USERX=USERX+VAC.ACCRUAL-VAC.HOURS USERX=USERX+SIK.ACCRUAL-SICK.HOURS END WRITE USERX ON USER.FILE,ID ; WT=WT+1 END RELEASE USER.FILE,ID NEXT XTX END 2699 * REPEAT * 2700 *--- calculate managers totals ---------------------------* * CRT @(60,5):CL: CRT @(60,7):CL:RV:" <===== ":ERV: * EOF=0 ; T=0 ; WT=0 ; FILE.ACCESS='MANAGER' * LOCATE(PAY.BEGIN,TIME.TABLE,1;BEGIN.ATT) THEN NULL LOCATE(PAY.END,TIME.TABLE,2;END.ATT) THEN NULL * SELECT USER.FILE LOOP READNEXT ID ELSE EOF=1 UNTIL EOF DO T=T+1 IF REM(T,25)=0 THEN GOSUB 2900 ;* refresh totals READ MAN.REC FROM USER.FILE,ID ELSE GO 2799 IF MAN.REC#'M' THEN GO 2799 TOTAL.HOURS=0 ; VAC.HOURS=0 ; OT.HOURS=0 ; SICK.HOURS=0 HOL.HOURS=0 ; OTHER.HOURS=0 ; ACCRUAL.HOURS=0 WORKED.HOURS=0 ; BONUS.HOURS=0 ; JURY.HOURS=0 WORKMANS.HOURS=0 ; PERSONAL.HOURS=0 ; FUNERAL.HOURS=0 * TOTAL.HOURS=OCONV(MAN.REC,'MR2') VAC.HOURS =OCONV(MAN.REC,'MR2') SICK.HOURS =OCONV(MAN.REC,'MR2') HOL.HOURS =OCONV(MAN.REC,'MR2') OT.HOURS =OCONV(MAN.REC,'MR2') BONUS.HOURS =OCONV(MAN.REC,'MR2') JURY.HOURS =OCONV(MAN.REC,'MR2') WORKMANS.HOURS =OCONV(MAN.REC,'MR2') PERSONAL.HOURS =OCONV(MAN.REC,'MR2') FUNERAL.HOURS =OCONV(MAN.REC,'MR2') OTHER.HOURS =OCONV(MAN.REC,'MR2') * ACCRUAL.HOURS =TOTAL.HOURS-OTHER.HOURS *---- check for inactive status-----* IF MAN.REC#'A' THEN GO 2799 *-----------------------------------* IF MAN.REC # 'M' THEN GO 2799 *-----------------------------------* CALC.FACTOR='.066964' VAC.ACCRUAL=ACCRUAL.HOURS*CALC.FACTOR VAC.ONE=OCONV(VAC.ACCRUAL,'G0.1') VAC.TWO=OCONV(VAC.ACCRUAL,'G1.1')'L%2' VAC.ACCRUAL=VAC.ONE:VAC.TWO[1,2] SIK.ACCRUAL=ACCRUAL.HOURS*CALC.FACTOR SIK.ONE=OCONV(SIK.ACCRUAL,'G0.1') SIK.TWO=OCONV(SIK.ACCRUAL,'G1.1')'L%2' SIK.ACCRUAL=SIK.ONE:SIK.TWO[1,2] MAN.REC =MAN.REC MAN.REC =MAN.REC MAN.REC =MAN.REC MAN.REC=MAN.REC MAN.REC =MAN.REC MAN.REC =MAN.REC MAN.REC =MAN.REC MAN.REC=MAN.REC MAN.REC=MAN.REC MAN.REC =MAN.REC MAN.REC=MAN.REC MAN.REC =MAN.REC MAN.REC =PAY.END MAN.REC=MAN.REC+VAC.ACCRUAL-VAC.HOURS MAN.REC =MAN.REC+SIK.ACCRUAL-SICK.HOURS *--- clear next info attributes -----* MAN.REC =0 MAN.REC =0 MAN.REC =0 MAN.REC =0 MAN.REC =0 MAN.REC =0 MAN.REC =0 MAN.REC =0 MAN.REC =0 MAN.REC =0 MAN.REC =0 MAN.REC =0 WRITE MAN.REC ON USER.FILE,ID ; WT=WT+1 RELEASE USER.FILE,ID 2799 * REPEAT * GO 55555 ;*********** TEMP * 2800 *--- process project (programmers) records ---------------* CRT @(60,7):CL: CRT @(60,9):CL:RV:" <===== ":ERV: * EOF=0 ; T=0 ; WT=0 ; FILE.ACCESS='PROJECT' * LOCATE(PAY.BEGIN,TIME.TABLE,1;BEGIN.ATT) THEN NULL LOCATE(PAY.END,TIME.TABLE,2;END.ATT) THEN NULL * SELECT CUSTOMER.TRANS * LOOP READNEXT ID ELSE EOF=1 UNTIL EOF DO T=T+1 IF REM(T,100)=0 THEN GOSUB 2900 ;* refresh totals READ CUST.REC FROM CUSTOMER.TRANS,ID ELSE GO 2899 READ PRO.REC FROM USER.FILE,ID ELSE GO 2899 IF PRO.REC#'P' THEN GO 2899 TOTAL.HOURS=0 ; VAC.HOURS=0 ; OT.HOURS=0 ; SICK.HOURS=0 HOL.HOURS=0 ; OTHER.HOURS=0 ; ACCRUAL.HOURS=0 WORKED.HOURS=0 * ACCRUAL.HOURS=TOTAL.HOURS-VAC.HOURS-SICK.HOURS-HOL.HOURS *---- check for probation ----------* PRO.REC=PRO.REC+90 *---- check for part time ----------* IF PRO.REC='P' THEN GO 2899 *---- check for inactive status-----* IF PRO.REC#'A' THEN GO 2899 *-----------------------------------* IF PRO.REC#'P' THEN GO 2899 ;* project only *-----------------------------------* IF TODAY <= PRO.REC+365 THEN ;* 0-1 year PRO.REC='3.33' END IF TODAY >= PRO.REC+365 THEN ;* 2-9 year PRO.REC='6.67' END IF TODAY >= PRO.REC+3650 THEN ;* ten year PRO.REC='10' END CALC.FACTOR=PRO.REC IF CALC.FACTOR='3.33' THEN CALC.FACTOR='.020492' IF CALC.FACTOR='6.67' THEN CALC.FACTOR='.042735' IF CALC.FACTOR='10' THEN CALC.FACTOR='.066964' VAC.ACCRUAL=ACCRUAL.HOURS*CALC.FACTOR VAC.ONE=OCONV(VAC.ACCRUAL,'G0.1') VAC.TWO=OCONV(VAC.ACCRUAL,'G1.1')'L%2' VAC.ACCRUAL=VAC.ONE:VAC.TWO[1,2] SIK.ACCRUAL=ACCRUAL.HOURS*CALC.FACTOR SIK.ONE=OCONV(SIK.ACCRUAL,'G0.1') SIK.TWO=OCONV(SIK.ACCRUAL,'G1.1')'L%2' SIK.ACCRUAL=SIK.ONE:SIK.TWO[1,2] PRO.REC =WORKED.HOURS PRO.REC =OT.HOURS PRO.REC =HOL.HOURS PRO.REC=VAC.HOURS PRO.REC =SICK.HOURS PRO.REC =TOTAL.HOURS PRO.REC =PAY.END PRO.REC=PRO.REC+VAC.ACCRUAL-VAC.HOURS PRO.REC =PRO.REC+SIK.ACCRUAL-SICK.HOURS *--- clear next info attributes -----* PRO.REC =0 PRO.REC =0 PRO.REC =0 PRO.REC =0 PRO.REC =0 PRO.REC =0 WRITE PRO.REC ON USER.FILE,ID ; WT=WT+1 RELEASE USER.FILE,ID 2899 * REPEAT * 55555 * ;* TEMP * CRT @(0,22):CL:RV:" PROCESS COMPLETE :":ERV: INPUT ANY,3 RETURN 2900 *--- refrsh processing totals ----------------------------* LINE='' LINE=FILE.ACCESS:" RECORDS READ :" CRT @(20,16):CR:LINE'L#25':":":T'L,' CRT @(20,17):CL:"RECORDS FOUND :":WT'L,' RETURN * 3000 *--- print accrual report ------------------------------* CRT @(0,0):CL:RV:STR(' ',80):ERV CRT @(HDL,0):RV:HDG:ERV: DEPT='ALL' READ LAND FROM HP.CONTROL,'LANDSCAPE' ELSE LAND='' READ SMALL FROM HP.CONTROL,'16.PITCH' ELSE SMALL='' CRT @(0,1):CR: CRT @(17,3):CL:RV:" CREATE / PRINT ACCRUAL REPORTS BY DEPARTMENT ":ERV: CRT @(27,5):CL:RV:" 1 - SPECIAL ACCOUNTS ":ERV: CRT @(27,7):CL:RV:" 2 - PERSONNEL ":ERV: CRT @(27,9):CL:RV:" 3 - PROGRAMMING ":ERV: CRT @(27,11):CL:RV:" 4 - PHONE CENTER ":ERV: CRT @(27,13):CL:RV:" 5 - WOF PROCESSING ":ERV: CRT @(27,15):CL:RV:" 6 - WAREHOUSE ":ERV: CRT @(27,17):CL:RV:" 7 - ALL DEPARTMENTS ":ERV: CRT @(0,22):CL:RV:" ENTER DEPARTMENT : ":ERV: INPUT DEPT,9 IF DEPT='' OR DEPT=PF3 THEN RETURN IF NUM(DEPT) ELSE GO 3000 CRT @(0,22):CL:RV:" SEND REPORT TO PRINTER (Y/N) :":ERV: INPUT PRINTER.ANS,3 IF PRINTER.ANS[1,1]='Y' THEN CRT @(0,18):CR: EXECUTE "EX PRINTER" CRT @(0,18):CR: END CMD='' CMD='SORT USER ' CMD=CMD:' FNAME LNAME BREAK.ON DEPT STATUS TOTAL VAC TOTAL SICK ' CMD=CMD:'BY DEPT BY LNAME BY FNAME' CMD=CMD:' WITH DEPT ' BEGIN CASE CASE DEPT='1' CMD=CMD:' \511\ ' CASE DEPT='2' CMD=CMD:' \517\ ' CASE DEPT='3' CMD=CMD:' \504\\512\ ' CASE DEPT='4' CMD=CMD:' \800\ ' CASE DEPT='5' CMD=CMD:' \500\\501\\502\\503\\505\\509\\514\\525\ ' CASE DEPT='6' CMD=CMD:' \506\\507\ ' CASE DEPT='7' CASE DEPT='8' END CASE IF PRINTER.ANS='Y' THEN CMD=CMD:\ HEADING "PAGE 'P' ACCRUAL REPORT BY DEPARTMENT 'D' 'L' 'L'" (P \ END ELSE CMD=CMD:\ HEADING "PAGE 'P' ACCRUAL REPORT BY DEPARTMENT 'D' 'L' 'L'" \ END *HUSH ON EXECUTE CMD *HUSH OFF CRT @(0,22):CL:RV:" REPORT COMPLETE :":ERV: INPUT ANY,2 GO 3000 RETURN * 5000 *--- update manager/user records ------------------------* CRT @(0,1):CR * GOSUB 5800 ;* refresh main screen * 5001 * CRT @(0,22):CL:RV:" ENTER USER CODE OR LAST NAME (OR PARTIAL LAST NAME) ":ERV: CRT @(5,3):CL:RV:" USER CODE/LAST NAME :":ERV: INPUT REQUEST,30 IF REQUEST=PF3 OR REQUEST='' THEN GO 10 IF NUM(REQUEST) THEN READ USER.REC FROM USER.FILE,REQUEST THEN USER.CODE=REQUEST HOLD.REC=USER.REC GOSUB 5850 ;* display data GOSUB 5875 ;* display last pay period data END ELSE CRT @(0,22):CL:BEEP:RV:" USER NOT ON FILE 'A'dd :":ERV: INPUT ADD.ANS,4 IF ADD.ANS[1,1]='A' THEN USER.CODE=REQUEST USER.REC='' ADD.USER=1 UPDATE='' GO 5010 ;* input data in fields END GO 5001 ;* return to prompt END END ELSE GOSUB 10000 ;* search & display users meeting criteria HOLD.REC=USER.REC GOSUB 5800 ;* display main screen GOSUB 5850 ;* display data GOSUB 5875 ;* display last pay period data END * 5005 *---- main screen prompt -----------------------------------* CRT @(0,22):CL:RV:" ENTER # to change, 'N'ext period, 'L'ast period, 'E'nd, :":ERV: INPUT FIVE.ANS,8 BEGIN CASE CASE NUM(FIVE.ANS) IF FIVE.ANS >= 1 AND FIVE.ANS <= 23 THEN UPDATE=1 ON FIVE.ANS GOSUB 5010,5020,5030,5040,5050,5060,5070,5080,5090,5100,5110,5120,5130,5140,5150,5160,5161,5162,5163,5164,5165,5170,5170 UPDATE='' END CASE FIVE.ANS='VV' ; GOSUB 30000 CASE FIVE.ANS='SS' ; GOSUB 31000 CASE FIVE.ANS='DELETE' ; GOSUB 32000 CASE FIVE.ANS='N' IF USER.REC # 'M' THEN CRT @(0,22):CL:BEEP:RV:" THIS USER IS NOT A MANAGER! :":ERV: INPUT ANY,3 ; GO 5005 END GOSUB 5885 ;* display next period data CASE FIVE.ANS='L' ; GOSUB 5875 ;* display last period data CASE FIVE.ANS='E' GOSUB 7000 ;* write record GO 5000 ;* return to screen prompt CASE FIVE.ANS=PF3 IF USER.REC # HOLD.REC THEN 5007 * CRT @(0,22):CL:BEEP:RV:" RECORD HAS BEEN UPDATED! 'X'exit or 'S'ave changes :":ERV: INPUT SAVE.ANS,5 IF SAVE.ANS[1,1]='S' THEN GOSUB 7000 ;* write changes GO 5000 END IF SAVE.ANS[1,1]='X' THEN GO 5000 ;* return to user prompt GO 5007 END ELSE CRT @(0,22):CL:RV:" RECORD HAS NOT BEEN UPDATED! :":ERV: INPUT ANY,4 GO 5000 ;* return to user prompt END CASE 1 GO 5005 END CASE GO 5005 * 5010 *--- add/update user code ----------------------------------* HOLD='' IF UPDATE THEN CRT @(0,22):CL:BEEP:RV:" THE USER CODE MAY NOT BE UPDATED! ":ERV: INPUT ANY RETURN END ELSE CRT @(25,5):USER.CODE'L#20' END * 5020 *--- add/update last name ----------------------------------* HOLD='' IF UPDATE THEN HOLD=USER.REC ELSE HOLD='' CRT @(0,22):CL:RV:" ENTER THE USER LAST NAME ":ERV: CRT @(25,6):HOLD'L#15' CRT @(24,6): INPUT LNAME,15 IF LNAME='' THEN LNAME=HOLD IF LNAME=PF3 THEN STOP IF LNAME='' OR LNAME='*' THEN GO 5020 CRT @(25,6):LNAME'L#15' USER.REC=LNAME IF UPDATE THEN RETURN * 5030 *--- add/update first name ---------------------------------* HOLD='' IF UPDATE THEN HOLD=USER.REC ELSE HOLD='' CRT @(0,22):CL:RV:" ENTER THE USER FIRST NAME ":ERV: CRT @(25,7):HOLD'L#15' CRT @(24,7): INPUT FNAME,15 IF FNAME='' THEN FNAME=HOLD IF FNAME=PF3 THEN STOP IF FNAME='' OR FNAME='*' THEN GO 5030 CRT @(25,7):FNAME'L#15' USER.REC=FNAME IF UPDATE THEN RETURN * 5040 *--- add/update department ---------------------------------* HOLD='' IF UPDATE THEN HOLD=USER.REC ELSE HOLD='' CRT @(0,22):CL:RV:" ENTER THE USER DEPARTMENT ":ERV: CRT @(25,8):HOLD'L#15' CRT @(24,8): INPUT DEPT,20 IF DEPT='' THEN DEPT=HOLD IF DEPT=PF3 THEN STOP IF DEPT='' OR DEPT='*' THEN GO 5040 CRT @(25,8):DEPT'L#15' USER.REC=DEPT IF UPDATE THEN RETURN * 5050 *--- add/update type code ---------------------------------* HOLD='' IF UPDATE THEN HOLD=USER.REC ELSE HOLD='' CRT @(0,22):CL:RV:" ENTER USER TYPE CODE 'M'anager, 'F'ull-time, 'P'art-time ":ERV: CRT @(25,9):HOLD'L#15' CRT @(24,9): INPUT TYPE.CODE,4 IF TYPE.CODE='' THEN TYPE.CODE=HOLD IF TYPE.CODE=PF3 THEN STOP IF TYPE.CODE='' OR TYPE.CODE='*' THEN GO 5050 IF TYPE.CODE='M' OR TYPE.CODE='F' OR TYPE.CODE='P' ELSE GO 5050 CRT @(25,9):TYPE.CODE'L#15' USER.REC=TYPE.CODE IF UPDATE THEN RETURN * 5060 *--- add/update status -------------------------------------* HOLD='' IF UPDATE THEN HOLD=USER.REC ELSE HOLD='' CRT @(0,22):CL:RV:" ENTER THE USER STATUS 'A'ctive, 'I'nactive :":ERV: CRT @(25,10):HOLD'L#15' CRT @(24,10): INPUT STATUS.CODE,4 IF STATUS.CODE='' THEN STATUS.CODE=HOLD IF STATUS.CODE=PF3 THEN STOP IF STATUS.CODE='' OR STATUS.CODE='*' THEN GO 5060 IF STATUS.CODE='A' OR STATUS.CODE='I' ELSE GO 5060 CRT @(25,10):STATUS.CODE'L#15' USER.REC=STATUS.CODE IF UPDATE THEN RETURN * 5070 *--- add/update hire date ----------------------------------* HOLD='' IF UPDATE THEN HOLD=USER.REC ELSE HOLD='' CRT @(0,22):CL:RV:" ENTER THE USER HIRE DATE ":ERV: CRT @(25,11):OCONV(HOLD,'D2/')'L#15' CRT @(24,11): INPUT HIRE.DATE,20 IF HIRE.DATE='' THEN HIRE.DATE=OCONV(HOLD,'D') IF HIRE.DATE=PF3 THEN STOP HIRE.DATE=ICONV(HIRE.DATE,'D') IF HIRE.DATE='' OR HIRE.DATE='*' THEN GO 5070 IF HIRE.DATE <= 0 THEN GO 5070 CRT @(25,11):OCONV(HIRE.DATE,'D2/')'L#15' USER.REC=HIRE.DATE IF UPDATE THEN RETURN * 5080 *--- add/update calc factor --------------------------------* HOLD='' IF UPDATE THEN HOLD=USER.REC ELSE HOLD='' CRT @(0,22):CL:RV:" ENTER CALCULATION FACTOR (0-1yr = 3.33, 2-9yr = 6.67, Mgr=10) ":ERV: CRT @(25,12):HOLD'L#15' CRT @(24,12): INPUT CALC.FACTOR,20 IF CALC.FACTOR='' THEN CALC.FACTOR=HOLD IF CALC.FACTOR=PF3 THEN STOP IF CALC.FACTOR='3' THEN CALC.FACTOR='3.33' IF CALC.FACTOR='6' THEN CALC.FACTOR='6.67' IF CALC.FACTOR='3.33' OR CALC.FACTOR=0 OR CALC.FACTOR='6.67' OR CALC.FACTOR='10' ELSE GO 5080 CRT @(25,12):CALC.FACTOR'L#15' USER.REC=CALC.FACTOR IF UPDATE THEN RETURN * 5090 *--- add/update clock system -------------------------------* HOLD='' IF UPDATE THEN HOLD=USER.REC ELSE HOLD='' CRT @(0,22):CL:RV:" ENTER THE USER CLOCK SYSTEM: 'C'lock, 'P'roject, 'M'anager ":ERV: CRT @(25,13):HOLD'L#15' CRT @(24,13): INPUT CLOCK.SYSTEM,3 IF CLOCK.SYSTEM='' THEN CLOCK.SYSTEM=HOLD IF CLOCK.SYSTEM=PF3 THEN STOP IF CLOCK.SYSTEM='' OR CLOCK.SYSTEM='*' THEN GO 5090 IF CLOCK.SYSTEM='C' OR CLOCK.SYSTEM='P' OR CLOCK.SYSTEM='M' ELSE GO 5090 CRT @(25,13):CLOCK.SYSTEM'L#15' USER.REC=CLOCK.SYSTEM IF UPDATE THEN RETURN * 5100 *--- add/update last update date----------------------------* HOLD='' IF UPDATE THEN CRT @(0,22):CL:BEEP:RV:" SYSTEM UPDATED FIELD - CANNOT UPDATE! ":ERV: INPUT ANY RETURN END ELSE CRT @(25,14):OCONV(TODAY,'D2/') END 5110 *--- add/update operator ----------------------------------* UNK.SW='' PORT=FIELD(OCONV(0, "U50BB")," ",1) READ PT.REC FROM PT.FILE,PORT ELSE UNK.SW=1 ADD.OPER='UNKNOWN' ADD.LNAME='' END IF NOT(UNK.SW) THEN ADD.OPER=PT.REC<1> ADD.FNAME=PT.REC<2> ADD.LNAME=PT.REC<3> END HOLD='' IF UPDATE THEN CRT @(0,22):CL:BEEP:RV:" SYSTEM UPDATED FIELD - CANNOT UPDATE! ":ERV: INPUT ANY RETURN END ELSE CRT @(25,15):ADD.OPER:" ":ADD.LNAME'L#14' END * GO 5005 ;* return to prompt after adding * 5120 *--- add/update regular time -------------------------------* IF NEXT.FLAG THEN CRT @(0,22):CL:RV:" ENTER THE TIME (In Quarter-hour increments, Ex. 14.25) ":ERV: ONE.NUM='' ; TWO.NUM='' ; HOLD='' ; COLN='' HOLD=USER.REC'R26' CRT @(70,4):HOLD'L#6' CRT @(69,4): INPUT REG.HRS,7 IF REG.HRS='' THEN REG.HRS=(HOLD*100)'R26' COLN=INDEX(REG.HRS,":",1) IF COLN > 0 THEN GO 5120 END ELSE ONE.NUM=OCONV(REG.HRS,'G0.1') TWO.NUM=OCONV(REG.HRS,'G1.1') REG.HRS=ONE.NUM'R%2':TWO.NUM'L%2' END CRT @(70,4):REG.HRS'L26(#5)' USER.REC=REG.HRS * GOSUB 5175 ;* calc total time * END ELSE CRT @(0,22):CL:BEEP:RV:" CANNOT UPDATE LAST PERIOD TOTALS! :":ERV: INPUT ANY,3 END RETURN 5130 *--- add/update overtime -----------------------------------* IF NEXT.FLAG THEN CRT @(0,22):CL:RV:" ENTER THE TIME (In Quarter-hour increments, Ex. 14.25) ":ERV: ONE.NUM='' ; TWO.NUM='' ; HOLD='' ; COLN='' ; REG.HRS='' HOLD=USER.REC'R26' CRT @(70,5):HOLD'L#6' CRT @(69,5): INPUT REG.HRS,7 IF REG.HRS='' THEN REG.HRS=(HOLD*100)'R26' COLN=INDEX(REG.HRS,":",1) IF COLN > 0 THEN GO 5130 END ELSE ONE.NUM=OCONV(REG.HRS,'G0.1') TWO.NUM=OCONV(REG.HRS,'G1.1') REG.HRS=ONE.NUM'R%2':TWO.NUM'L%2' END CRT @(70,5):REG.HRS'L26(#5)' USER.REC=REG.HRS * GOSUB 5175 ;* calc total time * END ELSE CRT @(0,22):CL:BEEP:RV:" CANNOT UPDATE LAST PERIOD TOTALS! :":ERV: INPUT ANY,3 END RETURN 5140 *--- add/update vacation time ---------------------------------* IF NEXT.FLAG THEN CRT @(0,22):CL:RV:" ENTER THE TIME (In Quarter-hour increments, Ex. 14.25) ":ERV: ONE.NUM='' ; TWO.NUM='' ; HOLD='' ; COLN='' ; REG.HRS='' HOLD=USER.REC'R26' CRT @(70,6):HOLD'L#6' CRT @(69,6): INPUT REG.HRS,7 IF REG.HRS='' THEN REG.HRS=(HOLD*100)'R26' COLN=INDEX(REG.HRS,":",1) IF COLN > 0 THEN GO 5140 END ELSE ONE.NUM=OCONV(REG.HRS,'G0.1') TWO.NUM=OCONV(REG.HRS,'G1.1') REG.HRS=ONE.NUM'R%2':TWO.NUM'L%2' END CRT @(70,6):REG.HRS'L26(#5)' USER.REC=REG.HRS * GOSUB 5175 ;* calc total time * END ELSE CRT @(0,22):CL:BEEP:RV:" CANNOT UPDATE LAST PERIOD TOTALS! :":ERV: INPUT ANY,3 END RETURN 5150 *--- add/update sick used--------------------------------* IF NEXT.FLAG THEN CRT @(0,22):CL:RV:" ENTER THE TIME (In Quarter-hour increments, Ex. 14.25) ":ERV: ONE.NUM='' ; TWO.NUM='' ; HOLD='' ; COLN='' ; REG.HRS='' HOLD=USER.REC'R26' CRT @(70,7):HOLD'L#6' CRT @(69,7): INPUT REG.HRS,7 IF REG.HRS='' THEN REG.HRS=(HOLD*100)'R26' COLN=INDEX(REG.HRS,":",1) IF COLN > 0 THEN GO 5150 END ELSE ONE.NUM=OCONV(REG.HRS,'G0.1') TWO.NUM=OCONV(REG.HRS,'G1.1') REG.HRS=ONE.NUM'R%2':TWO.NUM'L%2' END CRT @(70,7):REG.HRS'L26(#5)' USER.REC=REG.HRS * GOSUB 5175 ;* calc total time * END ELSE CRT @(0,22):CL:BEEP:RV:" CANNOT UPDATE LAST PERIOD TOTALS! :":ERV: INPUT ANY,3 END RETURN 5160 *--- add/update holiday used ---------------------------------* IF NEXT.FLAG THEN CRT @(0,22):CL:RV:" ENTER THE TIME (In Quarter-hour increments, Ex. 14.25) ":ERV: ONE.NUM='' ; TWO.NUM='' ; HOLD='' ; COLN='' HOLD=USER.REC'R26' CRT @(70,8):HOLD'L#6' CRT @(69,8): INPUT REG.HRS,7 IF REG.HRS='' THEN REG.HRS=(HOLD*100)'R26' COLN=INDEX(REG.HRS,":",1) IF COLN > 0 THEN GO 5160 END ELSE ONE.NUM=OCONV(REG.HRS,'G0.1') TWO.NUM=OCONV(REG.HRS,'G1.1') REG.HRS=ONE.NUM'R%2':TWO.NUM'L%2' END CRT @(70,8):REG.HRS'L26(#5)' USER.REC=REG.HRS * GOSUB 5175 ;* calc total time * END ELSE CRT @(0,22):CL:BEEP:RV:" CANNOT UPDATE LAST PERIOD TOTALS! :":ERV: INPUT ANY,3 END RETURN 5161 *--- add/update funeral used--------------------------------* IF NEXT.FLAG THEN CRT @(0,22):CL:RV:" ENTER THE TIME (In Quarter-hour increments, Ex. 14.25) ":ERV: ONE.NUM='' ; TWO.NUM='' ; HOLD='' ; COLN='' ; REG.HRS='' HOLD=USER.REC'R26' CRT @(70,9):HOLD'L#6' CRT @(69,9): INPUT REG.HRS,7 IF REG.HRS='' THEN REG.HRS=(HOLD*100)'R26' COLN=INDEX(REG.HRS,":",1) IF COLN > 0 THEN GO 5150 END ELSE ONE.NUM=OCONV(REG.HRS,'G0.1') TWO.NUM=OCONV(REG.HRS,'G1.1') REG.HRS=ONE.NUM'R%2':TWO.NUM'L%2' END CRT @(70,9):REG.HRS'L26(#5)' USER.REC=REG.HRS * GOSUB 5175 ;* calc total time * END ELSE CRT @(0,22):CL:BEEP:RV:" CANNOT UPDATE LAST PERIOD TOTALS! :":ERV: INPUT ANY,3 END RETURN 5162 *---- add/update personal time -------------------------------* IF NEXT.FLAG THEN CRT @(0,22):CL:RV:" ENTER THE TIME (In Quarter-hour increments, Ex. 14.25) ":ERV: ONE.NUM='' ; TWO.NUM='' ; HOLD='' ; COLN='' ; REG.HRS='' HOLD=USER.REC'R26' CRT @(70,10):HOLD'L#6' CRT @(69,10): INPUT REG.HRS,7 IF REG.HRS='' THEN REG.HRS=(HOLD*100)'R26' COLN=INDEX(REG.HRS,":",1) IF COLN > 0 THEN GO 5150 END ELSE ONE.NUM=OCONV(REG.HRS,'G0.1') TWO.NUM=OCONV(REG.HRS,'G1.1') REG.HRS=ONE.NUM'R%2':TWO.NUM'L%2' END CRT @(70,10):REG.HRS'L26(#5)' USER.REC=REG.HRS * GOSUB 5175 ;* calc total time * END ELSE CRT @(0,22):CL:BEEP:RV:" CANNOT UPDATE LAST PERIOD TOTALS! :":ERV: INPUT ANY,3 END RETURN 5163 *--- add/update bonus used--------------------------------* IF NEXT.FLAG THEN CRT @(0,22):CL:RV:" ENTER THE TIME (In Quarter-hour increments, Ex. 14.25) ":ERV: ONE.NUM='' ; TWO.NUM='' ; HOLD='' ; COLN='' ; REG.HRS='' HOLD=USER.REC'R26' CRT @(70,11):HOLD'L#6' CRT @(69,11): INPUT REG.HRS,7 IF REG.HRS='' THEN REG.HRS=(HOLD*100)'R26' COLN=INDEX(REG.HRS,":",1) IF COLN > 0 THEN GO 5150 END ELSE ONE.NUM=OCONV(REG.HRS,'G0.1') TWO.NUM=OCONV(REG.HRS,'G1.1') REG.HRS=ONE.NUM'R%2':TWO.NUM'L%2' END CRT @(70,11):REG.HRS'L26(#5)' USER.REC=REG.HRS * GOSUB 5175 ;* calc total time * END ELSE CRT @(0,22):CL:BEEP:RV:" CANNOT UPDATE LAST PERIOD TOTALS! :":ERV: INPUT ANY,3 END RETURN 5164 *--- add/update workmans comp used--------------------------------* IF NEXT.FLAG THEN CRT @(0,22):CL:RV:" ENTER THE TIME (In Quarter-hour increments, Ex. 14.25) ":ERV: ONE.NUM='' ; TWO.NUM='' ; HOLD='' ; COLN='' ; REG.HRS='' HOLD=USER.REC'R26' CRT @(70,12):HOLD'L#6' CRT @(69,12): INPUT REG.HRS,7 IF REG.HRS='' THEN REG.HRS=(HOLD*100)'R26' COLN=INDEX(REG.HRS,":",1) IF COLN > 0 THEN GO 5150 END ELSE ONE.NUM=OCONV(REG.HRS,'G0.1') TWO.NUM=OCONV(REG.HRS,'G1.1') REG.HRS=ONE.NUM'R%2':TWO.NUM'L%2' END CRT @(70,12):REG.HRS'L26(#5)' USER.REC=REG.HRS * GOSUB 5175 ;* calc total time * END ELSE CRT @(0,22):CL:BEEP:RV:" CANNOT UPDATE LAST PERIOD TOTALS! :":ERV: INPUT ANY,3 END RETURN 5165 *--- add/update jury duty time ------------------------------* IF NEXT.FLAG THEN CRT @(0,22):CL:RV:" ENTER THE TIME (In Quarter-hour increments, Ex. 14.25) ":ERV: ONE.NUM='' ; TWO.NUM='' ; HOLD='' ; COLN='' ; REG.HRS='' HOLD=USER.REC'R26' CRT @(70,13):HOLD'L#6' CRT @(69,13): INPUT REG.HRS,7 IF REG.HRS='' THEN REG.HRS=(HOLD*100)'R26' COLN=INDEX(REG.HRS,":",1) IF COLN > 0 THEN GO 5150 END ELSE ONE.NUM=OCONV(REG.HRS,'G0.1') TWO.NUM=OCONV(REG.HRS,'G1.1') REG.HRS=ONE.NUM'R%2':TWO.NUM'L%2' END CRT @(70,13):REG.HRS'L26(#5)' USER.REC=REG.HRS * GOSUB 5175 ;* calc total time * END ELSE CRT @(0,22):CL:BEEP:RV:" CANNOT UPDATE LAST PERIOD TOTALS! :":ERV: INPUT ANY,3 END RETURN 5170 *--- add/update total time ---------------------------------* CRT @(0,22):CL:BEEP:RV:" SYSTEM CALCULATES TOTALS! :":ERV: INPUT ANY,3 RETURN * 5175 *--- add/update total time ---------------------------------* TOTAL.TIME=0 ; OTHER.TIME=0 OTHER.TIME=OTHER.TIME+USER.REC OTHER.TIME=OTHER.TIME+USER.REC OTHER.TIME=OTHER.TIME+USER.REC OTHER.TIME=OTHER.TIME+USER.REC OTHER.TIME=OTHER.TIME+USER.REC OTHER.TIME=OTHER.TIME+USER.REC OTHER.TIME=OTHER.TIME+USER.REC OTHER.TIME=OTHER.TIME+USER.REC USER.REC=OTHER.TIME * TOTAL.TIME=TOTAL.TIME+USER.REC TOTAL.TIME=TOTAL.TIME+USER.REC TOTAL.TIME=TOTAL.TIME+USER.REC USER.REC=TOTAL.TIME CRT @(70,14):CL:USER.REC'R26' CRT @(70,15):CL:RV:USER.REC'R26':ERV: RETURN * 5800 *---- display screen ----------------------------------------* CRT @(0,1):CR: CRT @(5,3):CL:RV:" USER CODE/LAST NAME :":ERV: CRT @(5,5):CL:RV:" 1. USER CODE :":ERV CRT @(5,6):CL:RV:" 2. LAST NAME :":ERV CRT @(5,7):CL:RV:" 3. FIRST NAME :":ERV CRT @(5,8):CL:RV:" 4. DEPARTMENT :":ERV CRT @(5,9):CL:RV:" 5. TYPE CODE :":ERV CRT @(5,10):CL:RV:" 6. STATUS :":ERV CRT @(5,11):CL:RV:" 7. HIRE DATE :":ERV CRT @(5,12):CL:RV:" 8. FACTOR :":ERV CRT @(5,13):CL:RV:" 9. CLOCK SYSTEM :":ERV CRT @(5,14):CL:RV:"10. LAST UPDATE :":ERV CRT @(5,15):CL:RV:"11. LAST OPERATOR:":ERV * CRT @(5,18):RV:" VACATION AVAILABLE :":ERV: CRT @(5,20):RV:" SICK TIME AVAILABLE :":ERV: CRT @(43,1):CL:"LAST PAY PERIOD PROCESSED :" RETURN * 5850 *---- display data ------------------------------------------* CRT @(28,3):USER.CODE'L#20' CRT @(25,5):USER.CODE CRT @(25,6):USER.REC CRT @(25,7):USER.REC CRT @(25,8):USER.REC CRT @(25,9):USER.REC CRT @(25,10):USER.REC CRT @(25,11):OCONV(USER.REC,'D2/') CRT @(25,12):USER.REC CRT @(25,13):USER.REC CRT @(25,14):OCONV(USER.REC,'D2/') CRT @(25,15):USER.REC READ CM.REC FROM CM,USER.REC THEN LAST.OPER=CM.REC<2> END ELSE LAST.OPER='UNKNOWN' END CRT @(31,15):LAST.OPER'L#14' * CRT @(70,1):OCONV(USER.REC,'D2/') CRT @(28,18):OCONV(USER.REC,'MR2')'L#7' CRT @(28,20):OCONV(USER.REC,'MR2')'L#7' RETURN * 5875 *---- display last pay period info --------------------------* CRT @(48,3):RV:"LAST PAY PERIOD.....":OCONV(USER.REC,'D2/'):" ":ERV: * CRT @(48,4):CL:"12. Regular Hours : ":USER.REC'R26' CRT @(48,5):CL:"13. Overtime Hours : ":USER.REC'R26' CRT @(48,6):CL:"14. Vacation Hours : ":USER.REC'R26' CRT @(48,7):CL:"15. Sick Hours : ":USER.REC'R26' CRT @(48,8):CL:"16. Holiday Hours : ":USER.REC'R26' CRT @(48,9):CL:"17. Funeral Hours : ":USER.REC'R26' * CRT @(48,10):CL:"18. Personal Hours : ":USER.REC'R26' CRT @(48,11):CL:"19. Bonus Hours : ":USER.REC'R26' CRT @(48,12):CL:"20. Workmans Comp. : ":USER.REC'R26' CRT @(48,13):CL:"21. Jury Duty Hours : ":USER.REC'R26' CRT @(48,14):CL:"22. Non-Accrual Hrs.: ":USER.REC'R26' CRT @(48,15):CL:"23. Total Hours : ":RV:USER.REC'R26':ERV: NEXT.FLAG='' RETURN * 5885 *---- display next pay period info --------------------------* CRT @(48,3):RV:"NEXT PAY PERIOD.....":OCONV(USER.REC+15,'D2/'):" ":ERV: * CRT @(48,4):CL:"12. Regular Hours : ":USER.REC'R26' CRT @(48,5):CL:"13. Overtime Hours : ":USER.REC'R26' CRT @(48,6):CL:"14. Vacation Hours : ":USER.REC'R26' CRT @(48,7):CL:"15. Sick Hours : ":USER.REC'R26' CRT @(48,8):CL:"16. Holiday Hours : ":USER.REC'R26' CRT @(48,9):CL:"17. Funeral Hours : ":USER.REC'R26' * CRT @(48,10):CL:"18. Personal Hours : ":USER.REC'R26' CRT @(48,11):CL:"19. Bonus Hours : ":USER.REC'R26' CRT @(48,12):CL:"20. Workmans Comp. : ":USER.REC'R26' CRT @(48,13):CL:"21. Jury Duty Hours : ":USER.REC'R26' CRT @(48,14):CL:"22. Non-Accrual Hrs.: ":USER.REC'R26' CRT @(48,15):CL:"23. Total Hours : ":RV:USER.REC'R26':ERV: * NEXT.FLAG=1 RETURN * 7000 *---write changes to disk ----------------------------------* PORT=FIELD(OCONV(0, "U50BB")," ",1) READ PT.REC FROM PT.FILE,PORT THEN NEW.OPER=PT.REC<1> END ELSE NEW.OPER='' END USER.REC=TODAY USER.REC=NEW.OPER WRITE USER.REC ON USER.FILE,USER.CODE CRT @(0,22):CL:RV:" RECORDS HAVE BEEN UPDATED! :":ERV: INPUT ANY,2 RETURN * 10000 *--- search & display users meeting criteria ----------------* USER.FIND='' EOF=0 HUSH ON EXECUTE "SELECT USER WITH LNAME \[":REQUEST:"]\" HUSH OFF LOOP READNEXT USER.CODE ELSE EOF=1 UNTIL EOF DO READ USER.REC FROM USER.FILE,USER.CODE THEN LOCATE(USER.REC,USER.FIND,2;FND;'AL') THEN NULL USER.FIND=INSERT(USER.FIND,1,FND;USER.CODE) USER.FIND=INSERT(USER.FIND,2,FND;USER.REC) USER.FIND=INSERT(USER.FIND,3,FND;USER.REC) USER.FIND=INSERT(USER.FIND,4,FND;USER.REC) END REPEAT 13000 * LINENUM=10 IF USER.FIND='' THEN CRT @(0,22):CL:BEEP:RV:"NO MATCHING USERS FOUND - RETURN: ":ERV: INPUT DUMMY RETURN TO 5000 END * CT=DCOUNT(USER.FIND<1>,VM) CRT @(0,9):CR CRT @(0,9):RV:STR(' ',80):ERV: CRT @(32,9):RV:" U S E R S ":ERV FOR X = 1 TO CT LN=X'L#4' LN=LN:USER.FIND<1,X>'L#8' NAME=USER.FIND<2,X>:", ":USER.FIND<3,X> DIS.STATUS=USER.FIND<4,X> IF DIS.STATUS[1,1]='A' THEN DIS.STATUS='Active' IF DIS.STATUS[1,1]='C' THEN DIS.STATUS='Cancelled' IF DIS.STATUS[1,1]='I' THEN DIS.STATUS='Inactive' RSW='' LN=LN:SPACE(5):NAME'L#25':DIS.STATUS'L#15' GOSUB 14000 ;* DISPLAY THE LINE IF RSW THEN RETURN NEXT X GO 15000 * 14000 * DISPLAY THE LINE CRT @(0,LINENUM):LN LN='' LINENUM=LINENUM+1 IF LINENUM = 20 THEN 14100 * 15000 * CRT @(0,22):CL:"Enter number next to User, 'P'(page), 'R'(ref), else return: ": ANS='' INPUT ANS IF ANS='' THEN GO 15000 END IF ANS=PF3 THEN GO 5000 ;* go to user prompt END IF ANS='R' THEN GOTO 13000 IF ANS = 'P' THEN IF X >= CT THEN CRT @(0,22):CL:BEEP:RV:" LAST PAGE CURRENTLY DISPLAYED ":ERV: INPUT DUMMY GOTO 14100 END CRT @(0,10):CR LINENUM=10 RETURN END IF NOT(ANS MATCHES "0N") THEN GO 14100 IF ANS < 1 THEN GOTO 14100 IF USER.FIND<1,ANS>='' THEN GO 15000 USER.KEY=USER.FIND<1,ANS> USER.CODE=USER.KEY READ USER.REC FROM USER.FILE,USER.KEY THEN RSW=1 RETURN END ELSE CRT @(0,22):CL:BEEP:RV:" USER CODE NOT FOUND! ":ERV: INPUT DUMMY GOTO 15000 END 15200 * RSW=1 END RETURN RETURN * 30000 * ONE.NUM='' ; TWO.NUM='' ; HOLD='' ; COLN='' ; REG.HRS='' CRT @(0,22):CL:"ENTER VACATION TIME :": INPUT REG.HRS COLN=INDEX(REG.HRS,":",1) IF COLN > 0 THEN * GO 5150 END ELSE ONE.NUM=OCONV(REG.HRS,'G0.1') TWO.NUM=OCONV(REG.HRS,'G1.1') REG.HRS=ONE.NUM:TWO.NUM'L%2' END USER.REC=REG.HRS * GOSUB 5850 * RETURN 31000 * ONE.NUM='' ; TWO.NUM='' ; HOLD='' ; COLN='' ; REG.HRS='' CRT @(0,22):CL:"ENTER SICK TIME :": INPUT REG.HRS,7 COLN=INDEX(REG.HRS,":",1) IF COLN > 0 THEN * GO 5150 END ELSE ONE.NUM=OCONV(REG.HRS,'G0.1') TWO.NUM=OCONV(REG.HRS,'G1.1') REG.HRS=ONE.NUM:TWO.NUM'L%2' END USER.REC=REG.HRS * GOSUB 5850 RETURN * 32000 *----- delete user -----------------------------------------* CRT @(0,22):CL:BEEP:RV:" ENTER PASSWORD TO DELETE USER >>:":ERV: HUSH ON INPUT DEL.ANS,10 HUSH OFF IF DEL.ANS = PASSWORD THEN DELETE USER.FILE,USER.CODE CRT @(0,22):CL:RV:" USER RECORD DELETED! :":ERV: END ELSE CRT @(0,22):CL:RV:" INVALID PASSWORD!!! ":ERV: INPUT ANY,3 RETURN END RETURN TO 5000 * * 35000 *---- verify manager records have been updated since last pay ---* EOF=0 MAN.TABLE='' SELECT USER.FILE LOOP READNEXT MANAGER ELSE EOF=1 UNTIL EOF DO READ MREC FROM USER.FILE,MANAGER THEN IF MREC='M' THEN IF MREC='M' THEN IF MREC < PAY.BEGIN THEN MAN.TABLE=MAN.TABLE:" ":MREC END END END END REPEAT IF MAN.TABLE# '' THEN CRT @(0,21):CR:BEEP:RV:STR(' ',80):ERV: CRT @(2,21):RV:"Manager records have not been updated for:":ERV: CRT @(0,22):CR:BEEP:RV:STR(' ',80):ERV: CRT @(1,22):RV:MAN.TABLE<1>'L#78':ERV: INPUT ANY,2 GO 10 END RETURN