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

  1.  
  2.     REMARK    #########################################################
  3.     REMARK    #    A/R STATEMENTS PROGRAM        (A/R080)    #
  4.     REMARK    #        VERS. OF 4.00 PM    3/6/79        #
  5.     REMARK    #########################################################
  6.  
  7.     DIM L4(2),D$(2),D(20),M$(5),Y(2),G2$(5),G3(5),P(6)
  8. %INCLUDE CURSOR
  9.     GOTO 6000
  10. %INCLUDE SUBS1
  11. %INCLUDE GENINFO
  12. %INCLUDE BINSEARC
  13. %INCLUDE A/R-INFO
  14. %INCLUDE READCUST
  15. %INCLUDE A/R-INV
  16.     DATA 0,3,3,6,8,11,13,16,19,21,24,26
  17.  
  18.  
  19. 4000    YEAR=100*(I/100-INT(I/100))                    REMARK    COMPUTE THE NUMBER OF DAYS BETWEEN DATE "I" AND 00/00/00
  20.     DAY=100*((I-YEAR)/10000-INT((I-YEAR)/10000))
  21.     MONTH=(I-100*DAY-YEAR)/10000
  22.     IF MONTH=0 OR MONTH>12 THEN A4=0:RETURN
  23.     RESTORE
  24.     FOR IX%=1 TO MONTH
  25.     READ A4
  26.     NEXT IX%
  27.     A4=A4+YEAR*365+INT(YEAR/4)+1+(MONTH-1)*28+DAY
  28.     IF INT(YEAR/4)=(YEAR/4) AND MONTH<3 THEN A4=A4-1
  29.     RETURN 
  30.  
  31. 4080    I=I2:GOSUB 4000                            REMARK    COMPUTE THE NUMBER OF DAYS BETWEEN "I2" AND "J2"
  32.     A=A4
  33.     I=J2:GOSUB 4000
  34.     A=A-A4
  35.     RETURN 
  36.  
  37. 4220    PRINT "** TOTAL DUE -->";TAB(62);                REMARK    PRINT CUSTOMER BALANCE
  38.     PRINT USING MASKA$;B9
  39.     PRINT CHR$(12)
  40.     B9=0:LINE.COUNT%=60:PAGE.COUNT%=0                REMARK    ZERO BALANCE AND RESET LINE AND PAGE COUNTERS
  41.     RETURN 
  42.  
  43.  
  44. 4500    XYZ$=W1$+"      "                        REMARK    LOCATE AND RETRIEVE CUSTOMER DATA
  45.     K$=LEFT$(XYZ$,6):GOSUB 1060                    REMARK    LOCATE CUSTOMER DATA
  46.     IF H=-1 OR VAR1=0 THEN \
  47.         M$(2)="NO CUSTOMER INFO":\
  48.         FOR I%=2 TO 5:\
  49.         M$(I%)=" ":\
  50.         NEXT I%:\
  51.         Y(2)=0:Y(1)=0 \
  52.     ELSE Y9=2:X0=L:GOSUB 3225                    REMARK    RETRIEVE CUSTOMER DATA
  53.     RETURN 
  54.  
  55.  
  56. 4620    IF B<>2 THEN RETURN                        REMARK    REVERSE SIGNS ON CREDIT MEMOS
  57.     FOR I%=1 TO 11
  58.     IF D(I%)<>0 THEN D(I%)=-D(I%)
  59.     NEXT I%
  60.     RETURN 
  61.  
  62.  
  63.  
  64.                                     REMARK    START OF MAIN PROGRAM
  65. 6000    MASKA$=" #######.##"
  66.     MASKB$="######"
  67.     MASKC$="#####.#"
  68.     OPEN "G/I0F010.DAT" AS 1, "A/R0F110.DAT" RECL 162 AS 2, \
  69.     "A/R0F120.DAT" RECL 226 AS 3,"A/R0F130.DAT" AS 4
  70.     FILE.NO=4:GOSUB 3.14                        REMARK    RETRIEVE A/R EXTENT INFORMATION
  71.     Y9=1:GOSUB 700                            REMARK    RETRIEVE G/I FILE DATA
  72.     RECORD.COUNT=AR.CUSTFILE.EXTENT
  73.     Y2=2
  74. 6020    CONSOLE
  75.     PRINT:PRINT CLEAR.SCREEN$;"A/R STATEMENTS"
  76.     PRINT:PRINT:PRINT 
  77.     PRINT "FIRST CUSTOMER"
  78.     PRINT "LAST CUSTOMER"
  79. 6040    X1=271:X2=6:X3=0:X4=0:GOSUB 345                    REMARK    ENTER FIRST CUSTOMER
  80.     IF X0$<=" " THEN 6480
  81.     X0$=X0$+"      "
  82.     W8$=LEFT$(X0$,6)
  83.     X1=335:X2=6:X3=0:X4=0:GOSUB 345                    REMARK    ENTER LAST CUSTOMER
  84.     X0$=X0$+"      "
  85.     W0$=LEFT$(X0$,6)
  86.     X2=1:X3=0:X4=1:X2$="ENTRY CORRECT?":GOSUB 665            REMARK    VERIFY ENTRY
  87.     IF X0=0 THEN 6020
  88.     X1=192:GOSUB 210
  89.     PRINT "PROCESSING...";
  90.     LPRINTER
  91.     LINE.COUNT%=60
  92. 6140    INVOICE.POINTER% = INVOICE.POINTER% + 1
  93.     IF AR.INVFILE.EXTENT=0 THEN 6480
  94.     IF INVOICE.POINTER%>AR.INVFILE.EXTENT THEN GOSUB 4220:GOTO 6480    REMARK    CHECK FOR END OF FILE
  95.     FILE.NO=3:REC.NO%=INVOICE.POINTER%: GOSUB 3400            REMARK    RETRIEVE NEXT INVOICE
  96.     IF W1$>W0$ THEN GOSUB 4220:GOTO 6480                REMARK    END CUSTOMER HAS BEEN PASSED
  97.     GOSUB 4620                            REMARK    REVERSE SIGNS, IF A CREDIT MEMO
  98.     IF D(7)+D(11)=0 THEN 6140                    REMARK    SKIP UNBILLED ITEMS
  99.     IF W6$=W1$ THEN 6240                        REMARK    PRINT CUSTOMER TOTALS WHEN CUSTOMERS CHANGE
  100.     IF PAGE.COUNT%<>0 THEN GOSUB 4220
  101.     W6$=W1$
  102.     GOSUB 4500                            REMARK    RETRIEVE NEXT CUSTOMER DATA
  103. 6240    IF L4(1)=0 AND L4(2)=0 THEN 6140                REMARK    IF BILL DATE AND PROGRESS DUE DATE ARE ZERO, SKIP THIS INVOICE
  104.     IF L4(1)=0 THEN D(1)=0:D(2)=0:D(3)=0:D(4)=0            REMARK    IF BILL DATE IS ZERO, PRINT INVOICE AMOUNTS AS ZERO
  105.     IF L4(2)=0 THEN D(8)=0                        REMARK    IF PROGRESS DUE DATE IS ZERO, PRINT PROGRESS BALANCE AS ZERO
  106.     IF LINE.COUNT%>17 THEN \                    REMARK    WHEN STATEMENT FORM FILLS UP...
  107.         PAGE.COUNT%=PAGE.COUNT%+1:\                REMARK    ADVANCE TO NEXT FORM
  108.         PRINT W1$;:\                        REMARK    AND REPRINT CUSTOMER DATA
  109.         FOR I%=2 TO 5:\
  110.         PRINT TAB(11);M$(I%):\
  111.         NEXT I%:\
  112.         PRINT TAB(62);:\
  113.         X0=G3(1):GOSUB 680.5:\
  114.         PRINT "    PAGE";PAGE.COUNT%:\
  115.         PRINT:PRINT:PRINT:PRINT:PRINT:\
  116.         LINE.COUNT%=1
  117.     PRINT " ";L1$;TAB(14);                        REMARK    PRINT THIS INVOICE
  118.     PRINT USING MASKB$;L1;
  119.     PRINT TAB(21);
  120.  
  121.     IF L4(1)>0 THEN AGE.DATE=L4(1)\                    REMARK    FOR AGING, USE THE BILL DATE IF IT'S NON-ZERO
  122.     ELSE AGE.DATE=L4(2)                        REMARK    OTHERWISE, USE THE PROGRESS DUE DATE
  123.     X0=AGE.DATE:GOSUB 680.5
  124.     PRINT USING MASKA$;D(4);D(7);D(11);D(7)+D(11);
  125.     I2=G3(1):J2=AGE.DATE:GOSUB 4080                    REMARK    COMPARE AGING DATE WITH TODAY'S DATE
  126. 6360    IF A<30 THEN I=79:X$="C" \                    REMARK    LESS THAN 30 DAYS SINCE INVOICE DATE IS CURRENT
  127.     ELSE I=81:X$="P"                        REMARK    MORE THAN 30 DAYS IS PAST DUE
  128.     PRINT TAB(I);X$
  129.     LINE.COUNT%=LINE.COUNT%+1
  130.     B9=B9+D(7)+D(11)                        REMARK    ACCUMULATE INVOICE TOTAL TO CUSTOMER BALANCE
  131.     GOTO 6140
  132.  
  133.  
  134.  
  135. 6480    CONSOLE                                REMARK    END PROGRAM AND RELOAD MENU
  136.     PRINT CLEAR.SCREEN$;"A/R STATEMENTS LOADING MENU"
  137.     CHAIN "A/P000"
  138.