home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / cpmug / cpmug045.ark / P_R291.BAS < prev    next >
Encoding:
BASIC Source File  |  1984-04-29  |  9.2 KB  |  278 lines

  1.     REMARK    *************************************\
  2.         *  P/R291.BAS   JOB POSTING UPDATE  *\
  3.         *  5/17/79                 3:46 PM  *\
  4.         *************************************
  5.  
  6. %INCLUDE CURSOR
  7.  
  8.     DIM S(96),R1(2),R2(5),G3(5),G2$(5),J(4),D(4),T2(8)
  9.     DIM W(2),W1(2),W2$(2),W2(14),R$(5)
  10.  
  11.     DEF FNR(X9)=INT(X9*100+.5)/100                    REMARK  ROUNDING FUNCTION
  12.  
  13.     DEF FNEXACT(M1,M2)=M1*1000+M2                    REMARK  KEY LOCATOR FUNCTION
  14.  
  15.     YES=1
  16.     GOTO 6000
  17.  
  18. 680.5    X0$=STR$(X0)                            REMARK  USE ONE ROUTINE FROM SUBS1.BAS
  19. 681    IF LEN(X0$)<6 THEN X0$="0"+X0$:GOTO 681
  20.     PRINT LEFT$(X0$,2);"/";MID$(X0$,3,2);"/";RIGHT$(X0$,2);:RETURN
  21.  
  22. %INCLUDE GENINFO
  23. %INCLUDE MSTRIN
  24.  
  25. 825    A1=115                                REMARK    ****    LINE PRINTER ROUTINE    ****
  26.     IF LINE.COUNT% < 58 THEN RETURN                    REMARK  IF SPACE REMAINS ON REPORT PAGE, RETURN
  27.     P=P+1
  28.     PRINT CHR$(12);TAB(A1);"DATE ";                    REMARK  SKIP TO TOP OF FORM AND PRINT DATE
  29.     X0=G3(1):GOSUB 680.5
  30.     PRINT 
  31.     PRINT TAB((A1-LEN(X4$))/2);X4$;TAB(A1);"PAGE";P
  32.     PRINT
  33.     LINE.COUNT%=4                            REMARK  RESET LINE COUNTER FOR NEW REPORT PAGE
  34.  
  35.  
  36. 836    PRINT "JOB ";                            REMARK  PRINT JOB HEADER DATA ON PRINTER
  37.     PRINT USING "######";W(1);
  38.     PRINT "  ";W1$;TAB(70);"STARTED ";
  39.     X0=W1(1):GOSUB 680.5
  40.  
  41.     IF W2$(1)<>"0"  THEN PRINT "   COMPLETED "; \
  42.     ELSE PRINT "   DUE DATE  ";
  43.     X0=W1(2):GOSUB 680.5                        REMARK  PRINT JOB COMPLETION OR DUE DATE
  44.     PRINT "   TYPE ";W2$(2);
  45.  
  46.     IF W2$(1)<>"0" THEN GOTO 840
  47.  
  48.     X0=INT(W1(2)/100)*100                        REMARK  COMPARE REPORT DATE AND DUE DATE; PRINT 'OVERDUE'\
  49.                                             IF DUE DATE <= REPORT DATE
  50.     X0=(W1(2)-X0)*10000+(X0/100)
  51.     X1=INT(G3(1)/100)*100
  52.     X1=(G3(1)-X1)*10000+(X1/100)
  53.     IF X0 <= X1 THEN PRINT TAB(120);"**OVERDUE**";
  54.  
  55.  
  56. 840    PRINT 
  57.     PRINT
  58.     PRINT "   EMPLOYEE NAME";TAB(46);"HOURS    COST-1    COST-2";
  59.     PRINT "   P/R OHD   GEN OHD   PRS OHD   OTH OHD   TOT OHD      COST"
  60.  
  61.     LINE.COUNT%=LINE.COUNT%+3
  62.     RETURN 
  63.  
  64.  
  65. %INCLUDE JOBFILE
  66. %INCLUDE PR-SEARC
  67.  
  68.  
  69. 2210    LPRINTER                            REMARK  SELECT PRINTER TO PRINT NONZERO EMPLOYEE POSTING TOTALS
  70.     IF F1=0 THEN 2245
  71.     IF T2(6)<>J(1) THEN 2221                    REMARK  PRINT TOTALS IF JOB OR EMPLOYEE NUMBER HAVE CHANGED
  72.     IF T2(1)=D(1) THEN 2270
  73. 2221    IF EMPLOYEE.DETAILS% <= 1 THEN 2230                REMARK  DON'T PRINT TOTALS FOR ONLY ONE EMPLOYEE POSTING
  74.  
  75.     IF D(2)+D(3)+D(4)>0\                        REMARK  PRINT EMPLOYEE POSTING TOTALS IF GREATER THAN ZERO
  76.     THEN\
  77.     LINE.COUNT%=LINE.COUNT%+1:\
  78.     GOSUB 825:\                            REMARK  CHECK FOR END OF PAGE BEFORE PRINTING TOTALS
  79.     PRINT USING"     ......  EMPLOYEE TOTALS........"+\
  80.     "  ... #####.## ######.## ######.##";D(2),D(3),D(4)
  81.  
  82. 2230    FOR I%=2 TO 4                            REMARK  ACCUMULATE EMPLOYEE TOTALS TO JOB POSTING TOTALS
  83.     J(I%)=J(I%)+D(I%)
  84.     D(I%)=0
  85.     NEXT I%
  86.     EMPLOYEE.DETAILS%=0
  87.  
  88. 2245    D(1)=T2(1)                            REMARK  PRINT JOB POSTING TOTALS
  89.     IF F1=0 THEN 2267
  90.     IF T2(6)=J(1) THEN 2270                        REMARK  PRINT JOB TOTALS IF JOB NUMBER HAS CHANGED
  91.  
  92.     IF J(2)+J(3)+J(4)>0\
  93.     THEN\
  94.     LINE.COUNT%=LINE.COUNT%+1:\
  95.     GOSUB 825:\                            REMARK  CHECK FOR END OF PAGE BEFORE PRINTING TOTALS
  96.     PRINT "     ------  JOB TOTALS--------------";
  97.     PRINT USING " -->######.## ######.## ######.##";J(2),J(3),J(4)
  98. 2265    PRINT
  99.     J(2)=0:J(3)=0:J(4)=0                        REMARK  RESET JOB POSTING TOTALS
  100.     LINE.COUNT%=LINE.COUNT%+1
  101.  
  102. 2267    J(1)=T2(6)                            REMARK  SET CURRENT JOB NUMBER TO NEW JOB NUMBER
  103. 2269    IF FLAG%=99  THEN RETURN                    REMARK  IF END-OF-FILE REACHED ON POSTINGS, RETURN
  104.     IF F1 <> 0 THEN GOSUB 836
  105.  
  106.  
  107. 2270    GOSUB 825                            REMARK  PRINT POSTING DETAILS
  108.     F1=1
  109.     D(2)=D(2)+T2(7)                            REMARK  ADD HOURS, COST-1 AND COST-2 TO JOB POSTING TOTALS
  110.     D(3)=D(3)+Z1
  111.     D(4)=D(4)+Z2
  112.     PRINT USING MASKA$;T2(1);R$(1);T2(3);T2(7);Z1;Z2;        REMARK  PRINT EMPLOYEE NUMBER, NAME, PAY TYPE, HOURS, ETC.
  113.     PRINT "  ";ERROR.MESSAGE$
  114.     LINE.COUNT%=LINE.COUNT%+1
  115.     EMPLOYEE.DETAILS%=EMPLOYEE.DETAILS%+1
  116.     CONSOLE
  117.     ERROR.MESSAGE$=" "
  118.     RETURN 
  119.  
  120.  
  121. 5300    Z1=FNR(T2(7)*S(8))                        REMARK  CALCULATE COST-1
  122.     IF S(73)+S(80)>0 THEN Z2=FNR(S(74)*T2(7)/(S(73)+S(80)))        REMARK  CALCULATE COST-2 IF HOURS EXIST ON EMPLOYEE RECORD
  123.  
  124. 5305    W2(3)=W2(3)+Z2                            REMARK  ACCUMULATE COST-2
  125.     W2(10)=W2(10)+Z2
  126.  
  127.     IF T2(3)=6 THEN Z1=0                        REMARK  ZERO OUT COST-1 FOR COMP TIME TRANSACTIONS
  128.     W2(2)=W2(2)+Z1
  129.     W2(9)=W2(9)+Z1
  130.  
  131.     W2(1)=W2(1)+T2(7)                        REMARK  ACCUMULATE HOURS FROM JOB POSTING TO JOB RECORD
  132.     W2(8)=W2(8)+T2(7)
  133.     RETURN 
  134.  
  135. 5310    IF R2(1)<>1 THEN 5300
  136.  
  137. 5315    Z1=T2(8):Z2=T2(8)                        REMARK CALCULATE COST-1 AND COST-2 FOR HOURLY EMPLOYEES
  138.     GOTO 5305
  139.  
  140. 5320    Z1=FNR(T2(7)*S(8)*G3.0)                        REMARK  CALCULATE COST-1 AND COST-2 FOR OVERTIME POSTINGS
  141.     Z2=Z1
  142.     GOTO  5305
  143.  
  144.  
  145. 6000    MASKA$="     ######  /2345678901234567890123/"            REMARK  SET UP PRINT MASKS
  146.     MASKA$=MASKA$+" ### #####.## ######.## ######.##"
  147.     X4$="JOB POSTINGS"
  148.     W1$="NO HEADER RECORD"
  149.     LINE.COUNT%=60
  150.     Y6=2
  151.     Y9=4
  152.     PRINT CLEAR.SCREEN$;"JOB POSTING UPDATE"
  153.     OPEN "P/R0F110.DAT" RECL 1150 AS 1
  154.     OPEN "JOB0F100.DAT" RECL 160 AS Y6
  155.     OPEN "JOB0F110.DAT" RECL 42 AS 3
  156.     OPEN "G/I0F010.DAT" RECL 200 AS Y9
  157.     CREATE "WORKFILE.DAT" RECL 160 AS 5
  158.     GOSUB 700                            REMARK  READ SYSTEM GENERAL INFORMATION
  159.     Y2=Y6
  160.     RECORD.COUNT=JOB.RECORDS
  161.  
  162.     IF END #3 THEN 6060                        REMARK SET EOF TRAP
  163.     GOTO 6070
  164. 6060    FLAG%=99                            REMARK  END-OF-FILE PROCESSING FOR JOB POSTING FILE
  165.     OUTPUT.COUNT%=OUTPUT.COUNT%+1
  166.     X0=OUTPUT.COUNT%                        REMARK  WRITE LAST JOB POSTING RECORD
  167.  
  168.     Y6=5:GOSUB 1110
  169.     Y6=2
  170.     GOTO 6200
  171. 6070    READ #3;T2(1),T2(2),T2(3),T2(4),T2(5),T2(6),T2(7),T2(8)        REMARK  READ JOB POSTING RECORD
  172.  
  173.     IF T2(6)=0\                            REMARK  IF A ZERO JOB NUMBER WAS READ, PRINT ERROR ON PRINTER
  174.     THEN\
  175.     Z1=0:Z2=0:ERROR.MESSAGE$="ILLEGAL JOB":\
  176.     GOSUB 2210:GOTO 6070
  177.  
  178.     IF T2(7)+T2(8)=0 THEN GOTO 6070                    REMARK  IF NO HOURS OR COSTS FOR THIS POSTING, GET NEXT RECORD
  179.  
  180.  
  181.     IF END #2 THEN 6087                        REMARK  SET EOF TRAP FOR JOB FILE PROCESSING
  182.  
  183.     IF FNEXACT(W(1),W(2)) <> FNEXACT(T2(6),T2(1))\            REMARK  WRITE OUT THE POSTED JOB RECORD
  184.     AND POST.RECORD%=YES\                        REMARK  IF JOB POSTING RECORD KEY IS GREATER
  185.     THEN\
  186.     OUTPUT.COUNT%=OUTPUT.COUNT%+1:\
  187.     X0=OUTPUT.COUNT%:\
  188.     Y6=5:GOSUB 1110:\
  189.     POST.RECORD%=0:\
  190.     Y6=2
  191.  
  192.  
  193.     WHILE FNEXACT(W(1),W(2)) < FNEXACT(T2(6),T2(1))
  194.  
  195.         INPUT.COUNT%=INPUT.COUNT%+1                REMARK  READ THROUGH JOB FILE FOR A MATCH ON POSTING FILE
  196.         X0=INPUT.COUNT%
  197.         Y6=2
  198.         GOSUB 1100
  199.         IF FNEXACT(W(1),W(2)) >= FNEXACT(T2(6),T2(1))\        REMARK  GET OUT OF LOOP IF A MATCH WAS FOUND...
  200.         OR\
  201.         W2$(1)="D" OR W2(3)=-1 THEN GOTO 6085            REMARK  DISCARD ANY LOGICALLY DELETED JOB RECORDS
  202.  
  203.         OUTPUT.COUNT%=OUTPUT.COUNT%+1                REMARK  WRITE OUT JOB RECORDS OCCURRING BEFORE POSTINGS
  204.         X0=OUTPUT.COUNT%
  205.         Y6=5
  206.         GOSUB 1110
  207.  
  208. 6085    WEND
  209.  
  210.     JOB.NUMBER=W(1):EMPLOYEE=W(2)
  211.  
  212. 6087    IF W(1)=T2(6) THEN 6090                        REMARK  SEARCH JOB FILE FOR HEADER RECORD IF IT IS NEW
  213.     W1$="NO HEADER RECORD"
  214.     K=FNEXACT(T2(6),0):GOSUB 1060
  215.     IF H=-1 THEN 6090                        REMARK  IF HEADER NOT FOUND, SET DESCRIPTION TO ERROR MESSAGE
  216.     X0=L:GOSUB 1100                            REMARK  READ HEADER RECORD FROM JOB FILE
  217.  
  218.     IF W2$(1)="D" THEN W1$="NO HEADER RECORD"            REMARK  IF RECORD WAS DELETED, SET HEADER ERROR
  219.  
  220. 6090    IF FNEXACT(JOB.NUMBER,EMPLOYEE) > FNEXACT(T2(6),T2(1))\        REMARK  IF NO MATCH WAS FOUND, CREATE NEW DETAIL
  221.     THEN\
  222.     INPUT.COUNT%=INPUT.COUNT%-1:\
  223.     W(1)=T2(6):W(2)=T2(1):\
  224.     FOR I%=1 TO 14:W2(I%)=0:NEXT I%
  225.  
  226.  
  227. 6120    IF T2(1)=S(1) THEN 6130                        REMARK  SKIP MASTER FILE READ IF EMPLOYEE HAS NOT CHANGED
  228.     S(1)=0
  229.     IF T2(1)>0 AND T2(1)<=MSTR.RECORDS THEN X0=T2(1):GOSUB 745    REMARK  GET EMPLOYEE RECORD IF IT IS WITHIN EXTENTS
  230.  
  231.     IF S(1)>0 THEN GOTO 6125
  232.     R$(1)=""                            REMARK  IF INVALID EMPLOYEE WAS POSTED, PRINT ERROR
  233.     ERROR.MESSAGE$="NO EMPLOYEE RECORD - AMOUNT NOT POSTED"        REMARK  WITHOUT UPDDATING THE FILE
  234.     GOSUB 2210
  235.     IF FNEXACT(W(1),W(2))=FNEXACT(T2(6),T2(1)) THEN\
  236.     POST.RECORD%=YES
  237.     GOTO 6070
  238.  
  239. 6125    IF R2(1) <> 1 THEN S(8)=S(8)/80                    REMARK  SIMULATE HOURLY RATE FOR SALARIED EMPLOYEES
  240. 6130    Z1=0:Z2=0
  241.     ON T2(3) GOSUB 5300,5310,5320,5315,5320,5300            REMARK  CALCULATE POSTING COSTS BASED ON WORK TYPE
  242.  
  243. 6140    ERROR.MESSAGE$=" ":GOSUB 2210                    REMARK  PRINT NORMAL POSTING DETAIL
  244.     POST.RECORD%=YES
  245.     GOTO  6070                            REMARK  BRANCH BACK TO READ NEXT JOB POSTING RECORD
  246.  
  247. 6200    INPUT.COUNT%=INPUT.COUNT%+1
  248.     WHILE INPUT.COUNT% <= JOB.RECORDS                REMARK  COPY THE REMAINDER OF THE JOB FILE IF RECORDS
  249.                                     REMARK  STILL NEED TO BE COPIED INTO THE WORKFILE
  250.     READ #2,INPUT.COUNT%;LINE DATA$                    REMARK  READ IN JOB RECORD
  251.     A%=MATCH(",-1,",DATA$,1)
  252.     IF A%>0 THEN GOTO 6200.1                    REMARK  IF A DELETED DETAIL RECORD WAS READ, SKIP IT
  253.     A%=0
  254.     FOR I%=1 TO 5                            REMARK  TEST FOR DELETED HEADER; SKIP IF TRUE
  255.     A%=MATCH(",",DATA$,A%+1)
  256.     NEXT I%
  257.     IF MID$(DATA$,A%+1,3)=CHR$(22H)+"D"+CHR$(22H) THEN GOTO 6200.1
  258.  
  259.     OUTPUT.COUNT%=OUTPUT.COUNT%+1                    REMARK  COPY THE REMAINDER OF DATA FILE
  260.     PRINT USING "&";#5,OUTPUT.COUNT%;DATA$
  261. 6200.1    INPUT.COUNT%=INPUT.COUNT%+1
  262.     WEND
  263.  
  264. 6200.5    J(1)=-1
  265.     ERROR.MESSAGE$=" ":GOSUB 2210                    REMARK  PRINT TOTALS FOR LAST JOB
  266.     CLOSE 1,2,3,4,5                            REMARK  CLOSE ALL FILES
  267.     OPEN "JOB0F100.DAT" AS 1
  268.     DELETE 1                            REMARK  DELETE JOB FILE
  269.     A%=RENAME("JOB0F100.DAT","WORKFILE.DAT")            REMARK  RENAME WORK FILE AS JOB FILE
  270.     CREATE "JOB0F110.DAT" AS 1                    REMARK  SET UP A BLANK JOB POSTING FILE
  271.     OPEN "G/I0F010.DAT" RECL 200 AS Y9
  272.     JOB.RECORDS=OUTPUT.COUNT%
  273.     GOSUB 720                            REMARK  WRITE OUT NEW JOB FILE EXTENTS
  274.  
  275.     CONSOLE
  276.     PRINT CLEAR.SCREEN$;"JOB POSTING UPDATE ENDED"
  277.     CHAIN "P/R000"                            REMARK  LOAD MENU
  278.