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_R300.BAS < prev    next >
BASIC Source File  |  1984-04-29  |  11KB  |  328 lines

  1.     REMARK    **************************************\
  2.         *  P/R300.BAS   JOB COSTING REPORT   *\
  3.         *  5/18/79                10:20 AM   *\
  4.         **************************************\
  5.  
  6. %INCLUDE CURSOR
  7.  
  8.  
  9.     DIM S(1),R1(2),R2(5),G3(5),G2$(5),J(4,14),REPORT.SPEC(6),T2(8)
  10.     DIM W(2),W1(2),W2$(2),W2(14),R$(5),L$(80)
  11.     DIM L$(80)
  12.     DEF FNR(X9)=INT(X9*100+.5)/100                    REMARK  ROUNDING FUNCTION
  13.     DEF FNEXACT(M1,M2)=M1*1000+M2                    REMARK  KEY LOCATOR FUNCTION
  14.     GOTO  6000
  15.  
  16.  
  17. %INCLUDE SUBS1
  18. %INCLUDE GENINFO
  19.  
  20. 745    Q$=" "                                REMARK  READ ONLY A PORTION OF THE EMPLOYEE MASTER RECORD
  21.     R$(1)="NOT ON FILE"
  22.     IF X0 = 0 OR X0 > MSTR.RECORDS  THEN Q$="N":RETURN
  23.     READ #1,X0;R$(1),R$(2),R$(3),R$(4),R$(5),R1(1),R1(2),\
  24.     R2(1),R2(2),R2(3),R2(4),R2(5),S(1)
  25.  
  26.     IF S(1)=0 THEN R$(1)="NOT ON FILE":Q$="N":RETURN
  27.     RETURN
  28.  
  29.  
  30. 825    A1=115                                REMARK    ****    LINE PRINTER ROUTINE    ****
  31.     IF LINE.COUNT% < 56 THEN RETURN                    REMARK  IF SPACE REMAINS ON REPORT PAGE, RETURN
  32.     P=P+1
  33.     PRINT CHR$(12);TAB((A1-LEN(G2$(1)))/2);G2$(1);TAB(A1);"DATE ";    REMARK  SKIP TO TOP OF FORM AND PRINT DATE
  34.     X0=G3(1):GOSUB 680.5
  35.     PRINT 
  36.     PRINT TAB((A1-LEN(X4$))/2);X4$;TAB(A1);"PAGE";P            REMARK  PRINT REPORT TITLE AND PAGE NUMBER
  37.     PRINT
  38.     LINE.COUNT%=4                            REMARK  RESET LINE COUNTER FOR NEW REPORT PAGE
  39.  
  40.     IF P=1 THEN RETURN                        REMARK  PRINT CURRENT JOB HEADER DATA FROM PREVIOUS PAGE
  41.  
  42. 836    PRINT "JOB ";                            REMARK  PRINT JOB HEADER DATA ON PRINTER
  43.     PRINT USING "######";W(1);
  44.     PRINT "  ";W1$;TAB(70);"STARTED ";
  45.     X0=W1(1):GOSUB 680.5
  46.  
  47.     IF W2$(1)<>"0"  THEN PRINT "   COMPLETED "; \
  48.     ELSE PRINT "   DUE DATE  ";
  49.     X0=W1(2):GOSUB 680.5                        REMARK  PRINT JOB COMPLETION OR DUE DATE
  50.     PRINT "   TYPE ";W2$(2);
  51.  
  52.     IF W2$(1)<>"0" THEN GOTO 840
  53.  
  54.     X0=INT(W1(2)/100)*100                        REMARK  COMPARE REPORT DATE AND DUE DATE; PRINT 'OVERDUE'\
  55.                                             IF DUE DATE <= REPORT DATE
  56.     X0=(W1(2)-X0)*10000+(X0/100)
  57.     X1=INT(G3(1)/100)*100
  58.     X1=(G3(1)-X1)*10000+(X1/100)
  59.     IF X0 <= X1 THEN PRINT TAB(120);"**OVERDUE**";
  60.  
  61.  
  62. 840    PRINT 
  63.     PRINT
  64.     PRINT "   EMPLOYEE NAME";TAB(46);"HOURS    COST-1    COST-2";
  65.     PRINT "   P/R OHD   GEN OHD   PRS OHD   OTH OHD   TOT OHD      COST"
  66.     LINE.COUNT%=LINE.COUNT%+3
  67.  
  68.  
  69.     RETURN 
  70.  
  71.  
  72. %INCLUDE JOBFILE
  73. %INCLUDE PR-SEARC
  74.  
  75.  
  76. 4100    REMARK     ****************************************\
  77.          *  PRINT A LINE OF THE COSTING REPORT  *\
  78.          * BASED ON REPORT.SPEC AND LEVEL%      *\
  79.          ****************************************
  80.  
  81.     PRINT TAB(13);X0$;                        REMARK  PRINT EMPLOYEE NAME OR TOTAL TYPE
  82.  
  83.     IF REPORT.SPEC(4)=1\                        REMARK  PRINT MONTH-TO-DATE TOTALS IF REQUESTED
  84.     THEN\
  85.     Z=J(LEVEL%,4)+J(LEVEL%,5)+J(LEVEL%,6)+J(LEVEL%,7):\
  86.     PRINT TAB(38);"MTD";:\
  87.     PRINT USING MASKA$;J(LEVEL%,1),J(LEVEL%,2),J(LEVEL%,3),\
  88.     J(LEVEL%,4),J(LEVEL%,5),J(LEVEL%,6),J(LEVEL%,7),Z,Z+J(LEVEL%,3):\
  89.     LINE.COUNT%=LINE.COUNT%+1
  90.  
  91.     IF REPORT.SPEC(5)=1\                        REMARK  PRINT JOB-TO-DATE TOTALS IF REQUESTED
  92.     THEN\
  93.     Z=J(LEVEL%,11)+J(LEVEL%,12)+J(LEVEL%,13)+J(LEVEL%,14):\
  94.     PRINT TAB(38);"JTD";:\
  95.     PRINT USING MASKA$;J(LEVEL%,8),J(LEVEL%,9),J(LEVEL%,10),\
  96.     J(LEVEL%,11),J(LEVEL%,12),J(LEVEL%,13),J(LEVEL%,14),\
  97.     Z,Z+J(LEVEL%,10):\
  98.     LINE.COUNT%=LINE.COUNT%+1
  99.  
  100.     PRINT
  101.     LINE.COUNT%=LINE.COUNT%+1
  102.     IF LEVEL%=4 THEN RETURN                        REMARK  AVOID ACCUMULATION IF GRAND TOTALS WERE PRINTED
  103.  
  104.     FOR I1%=1TO 14                            REMARK  ACCUMULATE THIS LINE TO NEXT TOTAL LEVEL
  105.     J(LEVEL%+1,I1%)=J(LEVEL%+1,I1%)+J(LEVEL%,I1%)
  106.     J(LEVEL%,I1%)=0                            REMARK  INITIALIZE CURRENT TOTAL LEVEL
  107.     NEXT I1%
  108.     RETURN 
  109.  
  110. 5300    C=W(1)
  111.     IF W(2)>0 THEN W1$="NO HEADER RECORD"
  112.     IF W2$(1)="D" THEN DELETE.FLAG%=1:GOTO 5390            REMARK  IGNORE LOGICALLY DELETED JOB RECORDS
  113.     GOSUB 825                            REMARK  CHECK FOR END OF PAGE
  114.  
  115.     IF LINE.COUNT%<>7  THEN GOSUB 836                REMARK  PRINT JOB HEADER DATA IF NOT ALREADY PRINTED
  116.  
  117. 5310    IF REPORT.SPEC(6)=0 THEN GOTO 5313                REMARK  DELETE CANCELLED JOBS IF REQUESTED
  118.     IF W2$(1)<>"9" THEN GOTO 5313
  119.     IF W(2)>0 THEN W2(3)=-1:X0=INPUT%:GOSUB 1110:W2(3)=0        REMARK  SAVE DELETED DETAIL RECORD
  120.     IF W(2)=0 THEN W2$(1)="D":X0=INPUT%:GOSUB 1110:W2$(1)="9"    REMARK  SAVE DELETED HEADER RECORD
  121.     IF F <= 0 THEN PRINT "    *****     DELETED     *****     "
  122.     LINE.COUNT%=LINE.COUNT%+1
  123.  
  124. 5313    F=1
  125.     INPUT%=INPUT%+1
  126.     IF INPUT% > JOB.RECORDS THEN W(1)=10000000:GOTO 5380
  127.     X0=INPUT%
  128.     GOSUB 1100                            REMARK  READ JOB RECORD
  129.     IF W2(3)=-1 THEN GOTO 5313
  130.     IF C=W(1)\
  131.     THEN\
  132.     X0=W(2):GOSUB 745:\                        REMARK  GET EMPLOYEE RECORD
  133.     GOSUB 825:\
  134.     PRINT TAB(6);:\
  135.     PRINT USING MASKB$;W(2);:\                    REMARK  PRINT EMPLOYEE NUMBER ON REPORT PAGE
  136.     FOR I1%=1 TO 14:\                        REMARK  PLACE DETAIL RECORD FIELDS INTO LEVEL-1 TOTALS
  137.     J(1,I1%)=W2(I1%):\
  138.     NEXT I1%:\
  139.     LEVEL%=1:X0$=R$(1):GOSUB 4100:\                    REMARK  PRINT REMAINDER OF JOB DETAIL AND ACCUMULATE
  140.     GOTO 5310
  141.  
  142.  
  143. 5380    F=0
  144.     IF INT(C/10)<>INT(W(1)/10) THEN 5405                REMARK  IF THE NEW JOB NUMBER'S ROOT HAS CHANGED,\
  145.                                             PRINT TASK TOTALS, THEN PRINT JOB TOTALS
  146.  
  147. 5385    IF W2$(1)="0"\                            REMARK  FORCE PRINTING OF ACTIVE JOBS, OR ALL JOBS
  148.     OR REPORT.SPEC(6)=1 THEN GOTO 5395
  149.     IF REPORT.SPEC(3)=0 AND W2$(1) <> "D" THEN GOTO 5395
  150.  
  151. 5390    INPUT%=INPUT%+1                            REMARK  SEARCH FOR A JOB THAT IS PRINTABLE
  152.     IF INPUT%>JOB.RECORDS THEN W(1)=10000000:GOTO 5405
  153.     X0=INPUT%
  154.     GOSUB 1100                            REMARK  GET NEXT DETAIL RECORD
  155.     IF C<>W(1) THEN GOTO 5380 ELSE GOTO 5390
  156.  
  157.  
  158. 5395    IF DELETE.FLAG%=1 THEN DELETE.FLAG%=0:GOTO 5300            REMARK  DO NOT PRINT TASK TOTALS FOR DELETED JOBS
  159.     TASK.TOTALS%=1
  160.  
  161.     LEVEL%=2:X0$="TASK TOTALS":GOSUB 4100                REMARK  PRINT TASK TOTALS AND START PRINTING A NEW TASK
  162.  
  163.     IF W(2) > 0 THEN INPUT%=INPUT%-1
  164.     GOTO 5300
  165.  
  166. 5405    IF W(2) > 0 THEN INPUT%=INPUT%-1                REMARK  IF NEW JOB RECORD HAS NO HEADER, SUBTRACT POINTER
  167.  
  168.     IF DELETE.FLAG%=1 THEN GOTO 5415
  169.  
  170.     IF TASK.TOTALS%=0\                        REMARK  IF TASK TOTALS FLAG NOT SET, ACCUMULATE TO JOB TOTALS
  171.     THEN\
  172.     FOR I1%=1 TO 14:\
  173.     J(3,I1%)=J(2,I1%):\
  174.     J(2,I1%)=0:\
  175.     NEXT I1%\
  176.     ELSE\
  177.     LEVEL%=2:X0$="TASK TOTALS":GOSUB 4100
  178.  
  179. 5415    IF DELETE.FLAG%=1 AND TASK.TOTALS%=1\                REMARK  IF LAST TASK WAS DELETED, GO ON TO PRINT JOB TOTALS
  180.     THEN\
  181.     DELETE.FLAG%=0
  182.  
  183.     IF DELETE.FLAG%=1 THEN DELETE.FLAG%=0:RETURN            REMARK  IF DELETE FLAG WAS SET, RETURN WITHOUT JOB TOTALS
  184.  
  185.  
  186.     TASK.TOTALS%=0                            REMARK  PRINT JOB TOTALS
  187.  
  188.     LEVEL%=3:X0$="JOB TOTALS":GOSUB 4100
  189.     X0$="----"
  190.     FOR X%=1 TO 4:X0$=X0$+X0$:NEXT X%
  191.     PRINT X0$;X0$                            REMARK  PRINT A FULL LINE OF DASHES TO SEPARATE JOBS
  192.     LINE.COUNT%=LINE.COUNT%+1
  193.     RETURN 
  194.  
  195.  
  196. 6000    FOR I%=1 TO 9:MASKA$=MASKA$+" ######.##":NEXT I%        REMARK  SET UP PRINT MASKS
  197.     MASKB$="######"
  198.     Y6=2
  199.     Y9=3
  200.     CTRL.C%=1                            REMARK  ENABLE A CTRL-C PROGRAM EXIT
  201.  
  202.     OPEN "P/R0F110.DAT" RECL 1150 AS 1                REMARK  OPEN FILES
  203.     OPEN "JOB0F100.DAT" RECL 160 AS Y6
  204.     OPEN "G/I0F010.DAT" RECL 200 AS Y9
  205.     OPEN "CRT" RECL 1100 AS 19
  206.  
  207.     GOSUB 700                            REMARK  LOAD SYSTEM GENERAL INFORMATION
  208.  
  209.     RECORD.COUNT=JOB.RECORDS
  210.     Y2=Y6
  211.  
  212. 6015    LINE.COUNT%=60
  213.     X0=14:GOSUB 260                            REMARK  LOAD COSTING REPORT CRT MASK
  214.     DIM REPORT.SPEC(6),J(4,14)
  215. 6020    X1=266:X2=6:X3=0:X4=999999:GOSUB 345                REMARK  ENTER FIRST JOB TO PRINT
  216.     IF X%=3 THEN GOTO 6400
  217.     IF X0=0  THEN 6060
  218.     REPORT.SPEC(1)=X0
  219.  
  220.     X1=281:X2=6:X3=0:X4=999999:GOSUB 345                REMARK  ENTER LAST JOB TO PRINT
  221.     IF X0=0  THEN 6020
  222.     REPORT.SPEC(2)=X0
  223.  
  224. 6030    X1=302:X2=1:X3=0:X4=1:GOSUB 345                    REMARK  INPUT WHETHER TO PRINT ACTIVE JOBS ONLY
  225.     REPORT.SPEC(3)=X0
  226.     X1=309:X2=1:X3=0:X4=1:GOSUB 345                    REMARK  INPUT WHETHER TO PRINT M-T-D FIELDS
  227.     REPORT.SPEC(4)=X0
  228.  
  229.     X1=316:X2=1:X3=0:X4=1:GOSUB 345                    REMARK  INPUT WHETHER TO PRINT J-T-D FIELDS
  230.     REPORT.SPEC(5)=X0
  231.  
  232. 6043    X0$="A"                                REMARK  INPUT JOB TYPE TO PRINT--"A"=ALL
  233.     X1=334:X2=1:X3=0:X4=0:GOSUB 345
  234.     IF X0$ = "A" THEN GOTO 6045
  235.     IF X0$<"0" OR X0$ > "9" THEN GOTO 6043
  236.  
  237. 6045    JOB.TYPE$=X0$
  238.     X1=352:X2=1:X3=0:X4=1:GOSUB 345                    REMARK  INPUT WHETHER TO DELETE CANCELLED JOBS
  239.     REPORT.SPEC(6)=X0
  240.  
  241. 6050    X2=1:X3=0:X4=1:X2$="ENTRY CORRECT?":GOSUB 665            REMARK  VERIFY ENTRY:'1'=O.K.; '0'=RETRY
  242.     IF X0<>1  THEN 6015 
  243.     GOTO 6100                            REMARK  BRANCH TO PRINT REPORT
  244.  
  245.  
  246. 6060    FOR I1%=1 TO 9
  247.     FOR I%=1 TO 8
  248. 6065    X1=64*I1%+7*I%+384:X2=6:X3=0:X4=999999:GOSUB 345        REMARK  ENTER JOB NUMBERS INTO GRID (80 MAXIMUM)
  249.     IF X0=0  THEN I1%=9:I%=8:GOTO 6070                REMARK  GRID ENTRY IS TERMINATED BY JOB NUMBER=0
  250.  
  251.     L$(I%+8*(I1%-1))=X0$
  252.  
  253. 6070    NEXT I%
  254.     NEXT I1%
  255.  
  256. 6075    X2=2:X3=0:X4=10:X2$="ENTER ROW TO CHANGE (0=NONE)"        REMARK  PROMPT OPERATOR FOR CHANGES TO GRID
  257.     GOSUB 665
  258.     IF X0=0 THEN 6030                        REMARK  IF ROW TO CHANGE=0, NO MORE CHANGES ARE NEEDED
  259.     I1%=X0
  260.     X2=1:X3=1:X4=8:X2$="ENTER COLUMN TO CHANGE":GOSUB 665
  261.     I%=X0 
  262.     X1=64*I1%+7*I%+384:X2=6:X3=0:X4=999999:GOSUB 345        REMARK  ENTER AMENDED JOB NUMBER
  263.     L$(I%+8*(I1%-1))=X0$ 
  264.     GOTO 6075
  265.  
  266. 6100    LPRINTER                            REMARK  SELECT PRINTER AS OUTPUT DEVICE
  267.     X4$="JOB COSTING"
  268.     GOSUB 825                            REMARK  PRINT HEADINGS FOR FIRST PAGE
  269.  
  270.     REPORT.SPEC(4)=REPORT.SPEC(4) OR REPORT.SPEC(6)            REMARK  ENABLE MTD AND JTD PRINT IF DELETE OPTION SELECTED
  271.     REPORT.SPEC(5)=REPORT.SPEC(5) OR REPORT.SPEC(6)
  272.  
  273.  
  274. 6105    IF REPORT.SPEC(1)=0  THEN 6130                    REMARK  IF START JOB=0, PROCESS JOB FILE VIA GRID ENTRIES
  275.  
  276.     K1=FNEXACT(REPORT.SPEC(1),0)                    REMARK  LOCATE START JOB ON FILE
  277.     GOSUB 1060
  278.     INPUT%=L
  279.     X0=INPUT%
  280.     GOSUB 1100
  281. 6120    IF W(1)>REPORT.SPEC(2)  THEN 6200                 REMARK  IF JOB NUMBER IS BEYOND RANGE SPECIFIED, EXIT
  282.  
  283.     IF W(1)=10000000 THEN 6200                    REMARK  IF END OF FILE ENCOUNTERED, EXIT
  284.  
  285.     IF W2$(1)="D" THEN GOTO 6125
  286.     IF JOB.TYPE$<> "A" AND W2$(2)<>JOB.TYPE$ THEN GOTO 6125
  287.  
  288. 6123    IF REPORT.SPEC(3)=0\                        REMARK  DETERMINE WHETHER TO PRINT THIS JOB
  289.     OR W2$(1)<"1"\
  290.     OR REPORT.SPEC(6)=1\
  291.     THEN\
  292.     GOSUB 5300:GOTO 6120
  293.  
  294. 6125    VAR1=W(1)                            REMARK  LOOK FOR NEXT JOB IF THIS THIS IS NOT TO BE PRINTED
  295.     INPUT%=INPUT%+1
  296.     X0=INPUT%
  297.     GOSUB 1100
  298.     IF VAR1=W(1) THEN GOTO 6125\
  299.     ELSE\
  300.     GOTO 6120
  301.  
  302.  
  303. 6130    FOR I%=1TO 80                            REMARK  PRINT REPORT USING JOB ENTRY GRID
  304. 6135    JOB.NO=VAL(L$(I%))
  305.     IF JOB.NO=0 THEN 6155
  306.     K=FNEXACT(JOB.NO,0)
  307.     GOSUB 1060                            REMARK  SEARCH FILE FOR A MATCH FROM JOB GRID
  308.  
  309.     IF H=-1 THEN 6155                        REMARK  IF NOT FOUND, GET THE NEXT JOB ON THE GRID
  310.     INPUT%=L                            REMARK READ HEADER RECORD 
  311.     X0=INPUT%
  312.     GOSUB 1100
  313.     IF W2$(1)="D" THEN 6155
  314.  
  315.     W(2)=0                                REMARK  SET EMPLOYEE NUMBER IN ORDER TO PRINT HEADER
  316.  
  317.     GOSUB 5300
  318. 6155    NEXT I%
  319.  
  320.  
  321. 6200    LEVEL%=4:X0$="GRAND TOTALS":GOSUB 4100                REMARK  PRINT REPORT GRAND TOTALS
  322.     GOTO 6015
  323.  
  324.  
  325. 6400    CONSOLE                                REMARK  DISPLAY EXIT MESSAGE AND LOAD THE MENU
  326.     PRINT CLEAR.SCREEN$;"JOB COSTING REPORT LOADING MENU"
  327.     CHAIN "P/R000"
  328.