home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpmug / cpmug045.ark / P_R200.BAS < prev    next >
Encoding:
BASIC Source File  |  1984-04-29  |  6.3 KB  |  157 lines

  1.     REMARK    **************************************\
  2.         *  P/R200.BAS  PRINT PAYROLL HISTORY *\
  3.         *   5/17/79               11:22 AM   *\
  4.         **************************************
  5.  
  6.     DIM H1(3),H2(9),A(9,2),S(96),R$(5),R1(2),R2(5),G3(5),G2$(5)
  7. %INCLUDE CURSOR
  8.  
  9.     DEF FNEXACT(X0,X1)=X0*1000000 + X1
  10.     GOTO 6000
  11. %INCLUDE SUBS1
  12. %INCLUDE GENINFO
  13. %INCLUDE MSTRIN
  14.  
  15. 825    IF LINE.COUNT% < 55  THEN RETURN                REMARK  IF SPACE REMAINS ON REPORT PAGE, RETURN
  16.     A1%=110
  17.     P=P+1
  18.     PRINT CHR$(0CH);                            REMARK  PRINT TOP-OF-FORM
  19.     PRINT TAB((A1%-LEN(G2$(1)))/2);G2$(1);TAB(A1%);"DATE ";        REMARK  PRINT COMPANY NAME AND DATE
  20.     X0=G3(1):GOSUB 680.5
  21.     PRINT 
  22.     PRINT TAB((A1%-LEN(X4$))/2);X4$;TAB(A1%);"PAGE";P        REMARK  PRINT REPORT TITLE AND PAGE NUMBER
  23.     PRINT
  24. 835    PRINT "EMP NAME ";TAB(28);                    REMARK  PRINT REPORT COLUMN HEADINGS
  25.     PRINT "PAY DATE   REG HRS O.T. HRS  VAC HRS  TOTAL PAY";
  26.     PRINT "    FED W/H STATE W/H     FICA     SDI    NET PAY  CHECK"
  27.         PRINT
  28.     LINE.COUNT%=6                            REMARK  SET LINE COUNTER FOR NEXT REPORT PAGE
  29.     RETURN 
  30.  
  31. %INCLUDE HISTORY
  32. %INCLUDE PR-SEARC
  33.  
  34. 4500    LINE.COUNT%=LINE.COUNT% + 2
  35.     GOSUB 825                            REMARK  CHECK FOR END OF REPORT PAGE
  36.     PRINT USING MASKA$;X0$,A(1,I%),A(2,I%),A(3,I%),A(4,I%),\    REMARK  PRINT Q-T-D OR TOTAL TO-DATE FOR EMPLOYEE
  37.     A(5,I%),A(6,I%),A(7,I%),A(8,I%),A(9,I%)
  38.     LINE.COUNT%=LINE.COUNT%+1
  39.     A1% = 24*I%                            REMARK  SET ARRAY POINTER FOR MASTER FILE TOTALS
  40.     IF S(1+A1%)+S(5+A1%)<>A(1,I%) THEN PRINT TAB(45);"*";        REMARK  PRINT DISCREPANCY FLAGS IF TOTALS \
  41.                                             ON THE MASTER FILE DO NOT AGREE WITH HISTORY
  42.     IF S(3+A1%) <> A(2,I%) THEN PRINT TAB(54);"*";
  43.     IF S(8+A1%) <> A(3,I%) THEN PRINT TAB(63);"*";
  44.     IF S(11+A1%) <> A(4,I%) THEN PRINT TAB(74);"*";
  45.     IF S(13+A1%) <> A(5,I%) THEN PRINT TAB(85);"*";
  46.     IF S(14+A1%) <> A(6,I%) THEN PRINT TAB(95);"*";
  47.     IF S(15+A1%) <> A(7,I%) THEN PRINT TAB(104);"*";
  48.     IF S(16+A1%) <> A(8,I%) THEN PRINT TAB(112);"*";
  49.     IF S(11+A1%)-S(18+A1%) <> A(9,I%) THEN PRINT TAB(123);"*";
  50.     PRINT
  51.     RETURN 
  52.  
  53.  
  54. 5300    FOR I%=1TO 9                            REMARK  ACCUMULATE Q-T-D TO TOTAL-TO-DATE FOR EMPLOYEE
  55.     A(I%,1)=A(I%,1)+A(I%,2)
  56.     A(I%,2)=0                            REMARK  SET QUARTERLY TOTALS TO ZERO
  57.     NEXT I%
  58.     RETURN
  59.  
  60.  
  61. 6000    MASKA$="    /######################/        ######.##"        REMARK  SET UP PRINT MASKS
  62.     MASKA$=MASKA$+" #####.## #####.## #######.## #######.##"
  63.     MASKA$=MASKA$+" ######.## #####.## ####.## #######.## ######"
  64.     MASKB$=" ######.## #####.## #####.## #######.## #######.##"
  65.     MASKB$=MASKB$+" ######.## #####.## ####.## #######.## ######"
  66.     MASK3$="###"
  67.     DEF FNA(A1)=A1-INT(A1/10000)*10000                REMARK  EXTRACT MONTH NUMBER FROM GREGORIAN DATE
  68.     DEF FNB(X0)=INT(INT(FNA(X0)/100-1)/3)
  69.     PRINT CLEAR.SCREEN$;"PAYROLL HISTORY REPORT"            REMARK  DISPLAY PROGRAM I.D. ON CRT
  70.     PRINT "ENTER START EMPLOYEE OF ZERO TO EXIT"
  71.     PRINT 
  72.     PRINT 
  73.     PRINT "START EMPLOYEE NUMBER"
  74.     PRINT "END EMPLOYEE NUMBER"
  75.     X1=279:X2=3:X3=0:X4=999:GOSUB 345                REMARK  ENTER START EMPLOYEE NUMBER
  76.     IF X0=0 THEN 6230                        REMARK  IF START EMPLOYEE IS ZERO, EXIT PROGRAM
  77.     E1=X0
  78. 6045    X1=343:X2=3:X3=E1:X4=999:GOSUB 345                REMARK  ENTER END EMPLOYEE NUMBER
  79.     E2=X0
  80.     X2=1:X3=0:X4=1:X2$="ENTRY CORRECT?":GOSUB 665            REMARK  VERIFY ENTRY: '1'=O.K.; '0'=RETRY
  81.     IF X0<>1 THEN 6000
  82.     Y1=3
  83.     Y6=2
  84.     X4$="PAYROLL HISTORY"
  85.     LPRINTER                            REMARK  SELECT PRINTER AS OUTPUT DEVICE
  86.     OPEN "P/R0F110.DAT" RECL 1150 AS 1                REMARK  OPEN EMPLOYEE MASTER FILE
  87.     OPEN "P/R0F120.DAT" RECL 102 AS Y6                REMARK  OPEN EMPLOYEE HISTORY FILE
  88.     Y9=3
  89.     OPEN "G/I0F010.DAT" RECL 200 AS Y9
  90.     GOSUB 700                            REMARK  READ GENERAL INFORMATION FILE
  91.     LINE.COUNT%=60
  92.     GOSUB 825                            REMARK  PRINT HEADINGS FOR FIRST PAGE
  93.     P=0                                REMARK  RE-INITIALIZE PAGE COUNT
  94.     IF E2 > MSTR.RECORDS THEN E2=MSTR.RECORDS
  95.     X4$="PAYROLL HISTORY"
  96.     Y2=Y6
  97.     RECORD.COUNT=HISTORY.RECORDS
  98.     K=FNEXACT(E1,0)
  99.     GOSUB 1060                            REMARK  LOCATE FIRST EMPLOYEE HISTORY RECORD
  100.     REC%=L-1                             REMARK  SET STARTING RECORD
  101.     IF END #Y6 THEN 6220                        REMARK  SET EOF BRANCH FOR HISTORY FILE
  102. 6085    REC%=REC%+1
  103.     X0=REC%
  104.     GOSUB 905                            REMARK  GET THE NEXT PAYROLL HISTORY RECORD
  105.     IF H1(1) > E2 THEN 6220                        REMARK  IF PAST RANGE, EXIT PROGRAM
  106.     IF S(1)=H1(1) THEN 6135                        REMARK  BRANCH IF EMPLOYEE NUMBER HAS NOT CHANGED
  107.     IF S(1)=0 THEN S(1)=H1(1):GOTO 6130                REMARK  IF FIRST EMPLOYEE, DON'T PRINT TOTALS
  108.     PRINT
  109.     LINE.COUNT%=LINE.COUNT% + 1
  110.     X0$="QUARTERLY":I%=2:GOSUB 4500                    REMARK  PRINT QUARTERLY TOTALS AND ACCUMULATE
  111.     GOSUB 5300
  112.     I%=1:X0$="TOTAL":GOSUB 4500                    REMARK  PRINT TOTAL-TO-DATE FOR EMPLOYEE
  113. 6115    LINE.COUNT%=60
  114.     FOR I%=1 TO 9:A(I%,1)=0:A(I%,2)=0:NEXT I%            REMARK  INITIALIZE TOTALS ARRAY
  115.     GOSUB 825                            REMARK  SKIP TO TOP OF FORM ON NEW EMPLOYEE SUMMARY
  116.     P=0
  117. 6130    C%=FNB(H1(2)):YEAR%=INT(H1(2)/10000)
  118.     IF H1(1) <= MSTR.RECORDS THEN X0 = H1(1):GOSUB 745          REMARK  READ MASTER FILE FOR EMPLOYEE RECORD
  119.     IF H1(1) > MSTR.RECORDS OR S(1)=0\
  120.     THEN R$(1)="NOT ON MASTER FILE"                    REMARK  SET EMPLOYEE NAME TO ERROR MESSAGE IF\
  121.                                             NO MASTER RECORD EXISTS
  122.     GOSUB 825                            REMARK  CHECK FOR END OF REPORT PAGE
  123.     PRINT USING MASK3$; H1(1);                    REMARK  PRINT EMPLOYEE NUMBER
  124.     PRINT " ";R$(1);                        REMARK  PRINT EMPLOYEE NAME
  125. 6135    IF FNB(H1(2)) = C% AND YEAR% = INT(H1(2)/10000) THEN 6170    REMARK  IF NOT NEW QUARTER, SKIP SUBTOTALS
  126.     C%=FNB(H1(2)):YEAR%=INT(H1(2)/10000)                REMARK  SET QUARTER TO NEW INFORMATION
  127.     IF A(4,2) > 0 THEN\                        REMARK  PRINT Q-T-D TOTALS 
  128.     PRINT:\
  129.     PRINT USING MASKA$; "QUARTERLY", A(1,2), A(2,2), A(3,2), A(4,2),\
  130.     A(5,2), A(6,2), A(7,2), A(8,2), A(9,2):\            REMARK  PRINT PREVIOUS Q-T-D TOTALS IF NEW QUARTER
  131.     PRINT:\
  132.     LINE.COUNT%=LINE.COUNT% + 2:\
  133.     GOSUB 5300                            REMARK  ACCUMULATE TO TOTAL-TO-DATE
  134. 6170    PRINT TAB(28);
  135.     X0=FNA(H1(2))*100+INT(H1(2)/10000)
  136.     GOSUB 680.5                            REMARK  CONVERT DATE OF CHECK-- YYMMDD TO MMDDYY;\
  137.                                             AND THEN PRINT IT
  138.     PRINT USING MASKB$;H2(1),H2(2),H2(3),H2(4),H2(5),H2(6),\    REMARK  PRINT HISTORY RECORD DETAIL
  139.     H2(7),H2(8),H2(4)-H2(9),H1(3)
  140.     LINE.COUNT%=LINE.COUNT%+1
  141.     FOR I%=1TO 8
  142.     A(I%,2)=A(I%,2)+H2(I%)                        REMARK  ACCUMULATE TO TOTALS
  143.     NEXT I%
  144.     A(9,2)=A(9,2)+H2(4)-H2(9)
  145.     GOTO 6085
  146. 6220    PRINT
  147.     X0$="QUARTERLY":I%=2:GOSUB 4500                    REMARK  PRINT Q-T-D TOTALS FOR LAST EMPLOYEE
  148.     GOSUB 5300
  149.     I%=1:X0$="TOTAL":GOSUB 4500
  150.  
  151. 6230    PRINT CHR$(12)                            REMARK  END OF PROGRAM
  152.     CONSOLE
  153.     PRINT CLEAR.SCREEN$;"PAYROLL HISTORY REPORT LOADING MENU"
  154.     CHAIN "P/R000"
  155.  
  156.  
  157.