* AL.CLOCK * OPEN "USER" TO USER ELSE ABORT 201,"USER" OPEN "CLOCKFILE" TO CFILE ELSE ABORT 201,"CLOCKFILE" OPEN "HP.CONTROL" TO HPC ELSE ABORT 201,"HP.CONTROL" * $INCLUDE GEN.COM2 STR=STR("=",177) CURR.DT=OCONV(DATE(),"D2") CRT @(0,0):CS * EXECUTE "EX PRINTER" * CRT @(0,0):CS * *----------* 10 * Promt for department to do report for CRT @(4,4):CR:"Please input DEPARTMENT CODES that will be used seperated by" CRT @(4,5):"a comma (EX: 506,507) :": INPUT DEPT.CODES IF DEPT.CODES="" OR DEPT.CODES=PF3 THEN STOP *--------* 20 * Prompt for name of department CRT @(4,7):CR:"Please enter NAME of department for which the report is to" CRT @(4,8):"processed for (EX: FULFILLMENT CENTER) :": INPUT DEPT.NAME IF DEPT.NAME="" THEN GO 20 IF DEPT.NAME=PF3 OR DEPT.NAME=PF1 THEN GO 10 DEPT.NAME=TRIM(OCONV(DEPT.NAME,"MCU")) *--------* 30 * Begin date prompt CRT @(4,10):CR:"Please input BEGINNING date range (EX: 01/01/95) :": INPUT BDATE IF BDATE="" OR BDATE=PF3 THEN GO 10 IF BDATE=PF1 THEN GO 20 BEGIN.DATE=ICONV(BDATE,"D") IF BEGIN.DATE="" OR BEGIN.DATE=0 THEN CRT @(0,22):"INVALID DATE FORMAT":CL RQM ; GO 30 END OBDATE=OCONV(BEGIN.DATE,"D2/") *------* 40 * Ending date prompt CRT @(4,12):CR:"Please input ENDING date range (EX: 01/31/95) :": INPUT EDATE IF EDATE="" OR EDATE=PF3 THEN GO 10 IF EDATE=PF1 THEN GO 30 END.DATE=ICONV(EDATE,"D") IF END.DATE="" OR END.DATE=0 THEN CRT @(0,22):"INVALID DATE FORMAT":CL RQM ; GO 40 END OEDATE=OCONV(END.DATE,"D2/") *-----* DC.LEN=LEN(DEPT.CODES) DC.CD=DEPT.CODES FOR B=1 TO DC.LEN IF DC.CD[B,1]="," THEN DC.CD=DC.CD[1,B-1]:VM:DC.CD[B+1,DC.LEN] NEXT B D.CODES="" DC.CNT=DCOUNT(DC.CD,VM) FOR B=1 TO DC.CNT D.CODES=D.CODES:'"':DC.CD<1,B>:'"' NEXT B D.CODES=TRIM(D.CODES) *-----* * ACCT.ARRAY='' ACCT.ARRAY<1>="001":VM:"002" ACCT.ARRAY<2>="0000":VM:"0" * EOF=0 ; REC.READ=0 ; REC.SEL=0 * CMND=\SSELECT CLOCKFILE WITH IDATE GE "\:BEGIN.DATE:\" \ CMND=CMND:\AND WITH IDATE LE "\:END.DATE:\" BY LNAME BY FNAME BY IDATE \ * EXECUTE CMND * CRT @(0,0):CS LOOP READNEXT ID ELSE EOF=1 UNTIL EOF DO USER.ID=OCONV(ID,"G0|1") ; REC.READ=REC.READ+1 READ REC FROM CFILE,ID THEN READ USER.REC FROM USER,USER.ID THEN DC=USER.REC<5> LOCATE(DC,DC.CD,1;FND) THEN FND.USER=0 FOR Z=6 TO 100 IF ACCT.ARRAY=USER.ID THEN FND.USER=Z ; Z=999 END NEXT Z IF FND.USER=0 THEN CHK.CT=DCOUNT(ACCT.ARRAY,AM) IF CHK.CT LE 5 THEN CHK.CT=6 ELSE CHK.CT=CHK.CT+1 FND.USER=CHK.CT ACCT.ARRAY=USER.ID END LG.CNT=DCOUNT(REC<1>,VM) FOR B=1 TO LG.CNT STEP 2 CLT=OCONV(REC<2,B>,"G0-1") ST.TM=REC<1,B> ; END.TM=REC<1,B+1> TM=END.TM-ST.TM 100 * LOCATE(CLT,ACCT.ARRAY,1;FND.CL;'AL') THEN ACCT.ARRAY=ACCT.ARRAY+TM ; * user/client time ACCT.ARRAY=ACCT.ARRAY+TM ; * user total time ACCT.ARRAY<2,2>=ACCT.ARRAY<2,2>+TM ; * total time ACCT.ARRAY<2,FND.CL>=ACCT.ARRAY<2,FND.CL>+TM ; * total for client END ELSE DN.CT=DCOUNT(ACCT.ARRAY,AM) ACCT.ARRAY=INSERT(ACCT.ARRAY,1,FND.CL;CLT) FOR Z=2 TO DN.CT ACCT.ARRAY=INSERT(ACCT.ARRAY,Z,FND.CL;'') NEXT Z GO 100 END REC.SEL=REC.SEL+1 NEXT B END END END * IF REM(REC.READ,200)=0 THEN CRT @(0,10):"RECORDS READ: ":REC.READ CRT @(0,12):"RECORDS QUAL: ":REC.SEL END REPEAT * CHK.DATA=TRIM(ACCT.ARRAY<6,1>) IF CHK.DATA='' THEN STOP * HD="LABOR REPORT FOR ":DEPT.NAME HD.LEN=LEN(HD) XLNG=INT((160-HD.LEN)/2) YLNG=XLNG LEN.TEST=XLNG+YLNG+HD.LEN IF LEN.TEST GT 160 THEN YLNG=YLNG-1 HDLN1=CURR.DT:SPACE(XLNG):HD:SPACE(YLNG) HDLN2=SPACE(68):"REPORT DATE RANGE - (":OBDATE:" - ":OEDATE:")" ACCT.CT=DCOUNT(ACCT.ARRAY<1>,VM) USER.CT=DCOUNT(ACCT.ARRAY,AM) ACROSS.CT=INT(((ACCT.CT-2)/19)+1) DOWN.CT=INT(((USER.CT-5)/13)+1) CLT.CT=ACCT.CT HDLN3='' ; DATA.ARRAY='' ; DA.CNT=1 FOR B=3 TO ACCT.CT HDLN3=HDLN3:ACCT.ARRAY<1,B>'L#8' NEXT B HDLN3="Employees(Hrs)":SPACE(11):HDLN3 FOR B=6 TO USER.CT LN='' TTL.HRS=((ACCT.ARRAY/60)/60)*100 TTL.HRS=OCONV(TTL.HRS,"MR2") USER.ID=ACCT.ARRAY READ REC FROM USER,USER.ID ELSE REC='' LN<1>=REC<1>[1,1]:". ":REC<2>:" (":TTL.HRS:")" LN<1>=LN<1>'L#25' ; LN<2>=LN<2>'L#25' FOR X=3 TO CLT.CT LN.HR=((ACCT.ARRAY/60)/60)*100 LN.HR=OCONV(LN.HR,"MR2") LN.PC=(ACCT.ARRAY/ACCT.ARRAY)*10000 LN.PC=OCONV(LN.PC,"MR2"):"%" LN<1>=LN<1>:LN.HR'L#8' LN<2>=LN<2>:LN.PC'L#8' NEXT X DATA.ARRAY=LN<1> ; DA.CNT=DA.CNT+1 DATA.ARRAY=LN<2> ; DA.CNT=DA.CNT+1 DATA.ARRAY='' ; DA.CNT=DA.CNT+1 NEXT B LN='' LN.HR=((ACCT.ARRAY<2,2>/60)/60)*100 LN.HR=OCONV(LN.HR,"MR2") LN.PC=(ACCT.ARRAY<2,2>/ACCT.ARRAY<2,2>)*10000 LN.PC=OCONV(LN.PC,"MR2"):"%" LN<1>="TOTAL HOURS (":LN.HR:")" LN<1>=LN<1>'L#25' LN<2>=SPACE(13):LN.PC'L#12' FOR B=3 TO CLT.CT LN.HR=((ACCT.ARRAY<2,B>/60)/60)*100 LN.HR=OCONV(LN.HR,"MR2") LN.PC=(ACCT.ARRAY<2,B>/ACCT.ARRAY<2,2>)*10000 LN.PC=OCONV(LN.PC,"MR2"):"%" LN<1>=LN<1>:LN.HR'L#8' LN<2>=LN<2>:LN.PC'L#8' NEXT B DATA.ARRAY=LN<1> ; DA.CNT=DA.CNT+1 DATA.ARRAY=LN<2> ; DA.CNT=DA.CNT+1 * PRINTER ON READ SXTN.PITCH FROM HPC,"16.PITCH" ELSE SXTN.PITCH='' READ LN.SCP FROM HPC,"LANDSCAPE" ELSE LN.SCP='' READ RESET.PRT FROM HPC,"RESET" ELSE RESET.PRT='' * PRINT SXTN.PITCH PRINT LN.SCP * HDLN3.HOLD=HDLN3 DATA.ARRAY.HOLD=DATA.ARRAY PG.CNT=0 PG.CNT.ACROSS="A":VM:"B":VM:"C":VM:"D":VM:"E":VM:"F" ACROSS.VL=0 HDLN3.VL=1 DA.CNT=DCOUNT(DATA.ARRAY,AM) GR.TTL.LN=DA.CNT-2 * FOR B=1 TO ACROSS.CT FOR X=1 TO DA.CNT IF REM(X,39)=0 OR X=1 THEN PRINT CHAR(12) PG.CNT=PG.CNT+1 IF HDLN3.VL LE 1 THEN HDLN1.PT=HDLN1:"PAGE ":PG.CNT END ELSE HDLN1.PT=HDLN1:"PAGE ":PG.CNT:PG.CNT.ACROSS<1,ACROSS.VL> END HDLN3.PT=HDLN3[HDLN3.VL,177] PRINT HDLN1.PT PRINT HDLN2 PRINT PRINT HDLN3.PT PRINT STR PRINT END LN=DATA.ARRAY[1,177] PRINT LN DATA.ARRAY=DATA.ARRAY[178,10000] IF X=GR.TTL.LN THEN PRINT STR LN=DATA.ARRAY[1,177] PRINT LN DATA.ARRAY=DATA.ARRAY[178,10000] LN=DATA.ARRAY[1,177] PRINT LN DATA.ARRAY=DATA.ARRAY[178,10000] X=DA.CNT END NEXT X PG.CNT=0 ACROSS.VL=ACROSS.VL+1 HDLN3.VL=HDLN3.VL+177 NEXT B PRINT RESET.PRT STOP *