home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG045.ARK / P_R321.BAS < prev    next >
BASIC Source File  |  1984-04-29  |  7KB  |  207 lines

  1.     REMARK    *********************************************\
  2.         *   P/R321.BAS   EMPLOYEE ACTIVITY REPORT   *\
  3.         *   5/18/79                      10:30 AM   *\
  4.         *********************************************
  5.  
  6. %INCLUDE CURSOR
  7.  
  8.  
  9.     DIM E1(50),S(1),R1(2),R2(5),R$(5),G3(5),G2$(5)
  10.     DIM W(2),W1(2),W2$(2),W2(14),E(2)
  11.  
  12.     DEF FNEXACT(M1,M2)=M1*1000+M2                    REMARK  FUNCTION TO LOCATE JOB FILE RECORD
  13.  
  14.     A1=10000000000
  15.     GOTO 6000
  16.  
  17. %INCLUDE SUBS1
  18. %INCLUDE GENINFO
  19.  
  20. 745    Q$=" "                                REMARK  READ PORTION OF EMPLOYEE MASTER RECORD
  21.     IF X0 <=0 OR X0 > MSTR.RECORDS THEN Q$="N"\
  22.     ELSE\
  23.     READ #1,X0;R$(1),R$(2),R$(3),R$(4),R1(1),R1(2),\
  24.     R2(1),R2(2),R2(3),R2(4),R2(5),R3$,S(1)
  25.  
  26.     RETURN
  27.  
  28.  
  29. 825    Z1=109                                REMARK  ****    LINE PRINTER ROUTINE    ****
  30.  
  31.     IF LINE.COUNT%<55 THEN RETURN                    REMARK  IF SPACE REMAINS ON REPORT PAGE, RETURN
  32.     P=P+1
  33.     PRINT CHR$(12);TAB((Z1-LEN(G2$(1)))/2);G2$(1);TAB(Z1);"DATE ";    REMARK  PRINT COMPANY NAME AND REPORT DATE
  34.     X0=G3(1):GOSUB 680.5
  35.     PRINT 
  36.  
  37.     PRINT TAB((Z1-LEN(X4$))/2);X4$;TAB(Z1);"PAGE";P            REMARK  PRINT REPORT TITLE AND PAGE NUMBER
  38.     PRINT 
  39.  
  40.     PRINT "EMPLOYEE  NAME";TAB(39);"JOB  DESCRIPTION";        REMARK  PRINT COLUMN HEADINGS
  41.     PRINT TAB(102);"MTD HOURS";"  JTD HOURS"
  42.     PRINT 
  43.     LINE.COUNT%=6                            REMARK  SET LINE COUNTER FOR NEW REPORT PAGE
  44.     RETURN 
  45.  
  46.  
  47. %INCLUDE JOBFILE
  48. %INCLUDE PR-SEARC
  49.  
  50. 4000                                    REMARK  EXTRACT EMPLOYEE, JOB NUMBERS AND POINTER 
  51.     EMP.NO=INT(WORKFILE.RECORD/A1)
  52.     W(1)=INT((WORKFILE.RECORD-(EMP.NO*A1))/10000)
  53.     DETAIL%=WORKFILE.RECORD-(EMP.NO*A1)-(W(1)*10000)
  54.     RETURN
  55.  
  56. 4100    CLOSE 5                                REMARK  FIND FIRST OCCURRENCE OF EMPLOYEE X0 IN WORK FILE
  57.     OPEN "WORKFILE.DAT" AS 5
  58.     READ #5;WORKFILE.RECORD
  59.     X0=X0*A1
  60.     IF END #5 THEN 4110
  61.  
  62. 4105    READ #5;WORKFILE.RECORD
  63.     IF X0>WORKFILE.RECORD THEN 4105
  64.     IF INT(X0/A1)<>INT(WORKFILE.RECORD/A1) THEN\
  65.     WORKFILE.RECORD=10^14
  66.     RETURN
  67.  
  68. 4110    WORKFILE.RECORD=10^14                        REMARK  SET ERROR FLAG IF END OF FILE WAS ENCOUNTERED
  69.     RETURN
  70.  
  71.  
  72. 5300    X0=EMP.NO:GOSUB 745                        REMARK  READ THE EMPLOYEE MASTER FILE
  73.     IF Q$="N" OR S(1)=0 THEN R$(1)="NOT ON FILE":S(1)=EMP.NO    REMARK  IF NOT FOUND, SET EMPLOYEE NAME TO ERROR MESSAGE
  74.  
  75.     X4$="EMPLOYEE ACTIVITY":GOSUB 825                REMARK  CHECK FOR END OF REPORT PAGE
  76.  
  77.     IF F=0 OR LINE.COUNT%=6\                    REMARK  PRINT EMPLOYEE NAME AND NUMBER IF NOT YET PRINTED
  78.     THEN\                                REMARK  ON THIS REPORT PAGE
  79.     PRINT USING "######";S(1);:\
  80.     PRINT TAB(10); R$(1);:\
  81.     F=1
  82.  
  83. 5315    K=FNEXACT(W(1),0):GOSUB 1060                    REMARK  SEARCH FOR JOB HEADER RECORD
  84.  
  85.     IF H=-1 THEN W1$="NOT ON FILE":GOTO 5350            REMARK  IF NOT FOUND OR DELETED, SET JOB NAME TO ERROR
  86.     READ #Y6,L;W(1),W(2),W1$,W1(1),W1(2),W2$(1),W2$(2)
  87.     IF W2$(1)="D" THEN W1$="NOT ON FILE":GOTO 5350
  88.  
  89.     IF W2$(1)="9" THEN 5395                        REMARK  SKIP CANCELLED JOBS
  90.  
  91. 5350    W2(1)=0:W2(8)=0                            REMARK  READ JOB DETAIL RECORD
  92.     X0=DETAIL%:GOSUB 1100
  93.     IF W2(3)=-1 THEN W2(1)=0:W2(8)=0:GOTO 5395            REMARK  SKIP DELETED JOB DETAIL RECORDS
  94.  
  95. 5370    E(1)=E(1)+W2(1):E(2)=E(2)+W2(8)                    REMARK  ADD DETAIL MTD AND JTD HOURS TO EMPLOYEE TOTALS
  96.  
  97. 5375    PRINT TAB(36);:PRINT USING "######";W(1);            REMARK  PRINT JOB NUMBER, DESCRIPTION, MTD AND JTD HOURS
  98.     PRINT "  ";W1$;TAB(100);
  99.     PRINT USING MASKA$;W2(1);W2(8)
  100.     LINE.COUNT%=LINE.COUNT%+1
  101.  
  102. 5395    IF END #5 THEN 5396                        REMARK  READ ANOTHER RECORD FROM THE WORKFILE
  103.     READ #5;WORKFILE.RECORD
  104.     GOSUB 4000
  105.     IF S(1)=EMP.NO THEN GOTO 5315 ELSE GOTO 5397
  106.  
  107. 5396    WORKFILE.RECORD=10^14
  108.  
  109. 5397    PRINT TAB(44);"EMPLOYEE TOTALS";TAB(100);            REMARK  PRINT EMPLOYEE TOTALS IF EOF OR NEW EMPLOYEE
  110.     PRINT USING MASKA$;E(1);E(2)
  111.     PRINT
  112.     LINE.COUNT%=LINE.COUNT%+2
  113.     DIM E(2)                            REMARK  RE-INITIALIZE EMPLOYEE TOTALS
  114.     F=0
  115.     RETURN
  116.  
  117.  
  118. 6000    MASK6$="######"                            REMARK  SET UP PRINT MASKS
  119.     MASKA$="  ######.##"
  120.     CTRL.C%=1                            REMARK  ENABLE CONTROL-C FOR PROGRAM EXIT IN SUBS1.BAS
  121.     Y6=2
  122.     Y9=4
  123.     Y2=Y6
  124.     OPEN "P/R0F110.DAT" RECL 1150 AS 1                REMARK  OPEN EMPLOYEE MASTER AD JOB FILES
  125.     OPEN "JOB0F100.DAT" RECL 160 AS Y6
  126.  
  127.     OPEN "G/I0F010.DAT" RECL 200 AS Y9                REMARK  OPEN AND LOAD GENERAL INFORMATION FILE
  128.     GOSUB 700
  129.  
  130.     OPEN "WORKFILE.DAT" AS 5                    REMARK  OPEN TEMPORARY WORK AND CRT MASK FILES
  131.     OPEN "CRT" RECL 1100 AS 19
  132.  
  133. 6015    X0=15:GOSUB 260                            REMARK  GET EMPLOYEE ACTIVITY REPORT CRT MASK
  134.     LINE.COUNT%=60
  135.     DIM E1(50)
  136.     P=0
  137.     RECORD.COUNT=JOB.RECORDS
  138.  
  139. 6020    X1=271:X2=3:X3=0:X4=999:GOSUB 345                REMARK  ENTER START EMPLOYEE FOR REPORT
  140.     START.EMPLOYEE=X0
  141.     IF X%=3 THEN GOTO 9999
  142.     IF START.EMPLOYEE=0 THEN GOTO 6060                REMARK  IF START EMPLOYEE=0, ENTER EMPLOYEES VIA GRID
  143.  
  144. 6025    X1=292:X2=3:X3=START.EMPLOYEE:X4=999:GOSUB 345            REMARK  ENTER END EMPLOYEE
  145.     END.EMPLOYEE=X0
  146.  
  147. 6050    X2=1:X3=0:X4=1:X2$="ENTRY CORRECT?":GOSUB 665            REMARK  VERIFY EMPLOYEE RANGE: '1'=O.K., '0'=RETRY
  148.     IF X0<>1 THEN 6020
  149.     GOTO 6100                            REMARK  BRANCH AROUND GRID ENTRY IF RANGE WAS SELECTED
  150.  
  151.  
  152. 6060    FOR I1%=1 TO 10
  153.     FOR I%=1 TO 5
  154. 6065    X1=64*I1%+7*I%+320:X2=3:X3=0:X4=999:GOSUB 345            REMARK  ENTER EMPLOYEE NUMBER INTO GRID
  155.  
  156.     IF X0>0 THEN E1(I%+5*(I1%-1))=X0\                REMARK  IF EMPLOYEE NUMBER=0, FALL OUT OF ENTRY LOOP;
  157.     ELSE\                                REMARK  OTHERWISE, ACCEPT ENTRY
  158.     I%=5:I1%=10
  159.  
  160.     NEXT I%
  161.     NEXT I1%
  162.  
  163. 6075    X2=2:X3=0:X4=10                            REMARK  PROMPT OPERATOR FOR ROW TO CHANGE
  164.     X2$="ENTER ROW TO CHANGE (0=NONE)":GOSUB 665
  165.     IF X0=0  THEN 6050                        REMARK  IF NO MORE CHANGES, PROMPT FOR VERIFICATION
  166.  
  167.     I1%=X0
  168. 6080    X2=1:X3=0:X4=5:X2$="ENTER COLUMN TO CHANGE":GOSUB 665
  169.     IF X0=0 THEN GOTO 6075
  170.     I%=X0
  171.     X1=64*I1%+7*I%+320:X2=3:X3=0:X4=999:GOSUB 345            REMARK  CHANGE EMPLOYEE NUMBER FIELD ON GRID
  172.     E1(I%+5*(I1%-1))=X0
  173.     GOTO 6075
  174.  
  175. 6100    LPRINTER                            REMARK  SELECT PRINTER AS OUTPUT DEVICE
  176. 6105    I%=0
  177.     IF START.EMPLOYEE=0 THEN GOTO 6150
  178.     X0=START.EMPLOYEE:GOSUB 4100
  179.     IF WORKFILE.RECORD=10^14 THEN GOTO 6140                REMARK  IF START EMPLOYEE NOT FOUND, RESTART PROGRAM
  180.     GOSUB 4000                            REMARK  EXTRACT EMPLOYEE NUMBER, JOB NUMBER AND POINTER
  181.     GOSUB 5300
  182.  
  183. 6120    IF WORKFILE.RECORD=10^14 THEN 6140                REMARK  RESTART IF END OF FILE WAS ENCOUNTERED
  184.     X0=INT(WORKFILE.RECORD/A1)
  185.     IF X0 > END.EMPLOYEE THEN GOTO 6140                REMARK  IF PAST EMPLOYEE RANGE, RESTART PROGRAM
  186.  
  187.     GOSUB 4000
  188.     GOSUB 5300                            REMARK  PROCESS EMPLOYEE ACTIVTY RECORD FROM WORKFILE
  189.     GOTO 6120
  190.  
  191. 6140    PRINT CHR$(12):GOTO 6015                    REMARK  PROGRAM RESTART ROUTINE
  192.  
  193.  
  194. 6150    I%=I%+1
  195.     IF I%>50 THEN GOTO 6140
  196.     IF E1(I%)=0 THEN GOTO 6140
  197. 6155    X0=E1(I%):GOSUB 4100                        REMARK  LOCATE FIRST EMPLOYEE ACTIVITY RECORD FOR\
  198.                                             EMPLOYEE WITHIN GRID
  199.     IF WORKFILE.RECORD=10^14 THEN GOTO 6150                REMARK  IF EMPLOYEE RECORD WAS FOUND, PROCESS IT
  200.     GOSUB 4000
  201.     GOSUB 5300
  202.     GOTO 6150
  203. 9999    CONSOLE
  204.     PRINT CLEAR.SCREEN$;"EMPLOYEE ACTIVITY REPORT LOADING MENU"
  205.     DELETE 5
  206.     CHAIN "P/R000"
  207.