home *** CD-ROM | disk | FTP | other *** search
/ Software Du Jour / SoftwareDuJour.iso / BUSINESS / DBASE / DBASEACC.ARC / PAYBILLS.PRG < prev    next >
Text File  |  1979-12-31  |  9KB  |  254 lines

  1.  
  2.  
  3. * PAYBILLS.CMD
  4. * Before this procedure can be accessed, the check number and balance must
  5. * be verified in the PAYMENU command file.
  6. *   This is one of the longer files, but the individual portions of it are
  7. * not too complicated..  Repetitive procedures in the main loop (controlled
  8. * by the variable "Finished") could have been put in separate command files
  9. * to make this file easier to understand and maintain, but this way it
  10. * minimizes disk accesses and increases speed.
  11. *   This file finds bills to be paid in the CostBase, generates the next
  12. * check number, writes a check in the CheckFil and maintains the checkbook
  13. * balance.
  14. *   The next check number and checkbook balance are recalled from a file
  15. * called Constant.MEM. The final values for both of these are stored in the
  16. * same file after all the bills have been paid.
  17. *   The date is entered once at the start of the procedure, then is
  18. * automatically inserted into each entry.  The date is checked to see that
  19. * it is in the YYMMDD format, and that the values are within possible
  20. * limits )month from 1 to 12, day from 1 to 31, year=This Year).
  21. *   Entries must include at least the name of the party being paid.
  22. *   Balances are automaically computed and shown to the operator.
  23. *   Check numbers are automaically assigned by the computer.
  24. *   If several entries are made against a single check number (the
  25. * opeeerator has this option), these are added and shown as a single
  26. * item in the printout
  27.  
  28.  
  29. RESTORE FROM Constant
  30. DO GetDate
  31.  
  32. SELECT PRIMARY
  33. USE CostBase INDEX $Supp
  34.  
  35. * Initialize.  "New" is used to determine whether the program should generate
  36. * a new check number or use the old one (where several bills to a single
  37. * supplier are being paid).  "Finished" is the control variable that determines
  38. * whether we should run through the procedure again, or are done paying bills.
  39.  
  40. STORE 'N' TO New
  41. STORE 'N' TO Finished
  42. DO WHILE !(Finished) <> 'F'
  43.     STORE "C" TO Entering
  44.     DO WHILE !(Entering) = 'C'
  45.  ERASE
  46.  @ 3, 0 SAY 'CHECK NUMBER:  '+NextCheck+'    BALANCE: '+STR(MBalance,9,2)
  47.  ? CHR(7)
  48.  @ 4,0
  49.  ACCEPT '     MAKE CHECK TO  ' TO MName
  50.  ACCEPT '    INVOICE NUMBER  ' TO MBill:Nmbr
  51.  ACCEPT '      ENTER AMOUNT  ' TO Temp
  52.  STORE !(MName) TO MName
  53.  STORE !(MBill:Nmbr) TO MBill:Nmbr
  54.  STORE VAL(Temp) TO MAmount
  55.  STORE MAmount*1.00 TO MAmount
  56.  @  6,19 SAY MName
  57.  @  7,19 SAY MBill:Nmbr
  58.  @  8,19 SAY MAmount
  59.  @ 11, 0 SAY '       C to CHANGE,'
  60.  ? '   <Return> to continue.'
  61.  WAIT TO Entering
  62.     ENDDO Entering
  63.  
  64.     IF LEN(MName) > 10
  65.  STORE $(MName,1,10) TO Key
  66.     ELSE
  67.  STORE MName TO Key
  68. ENDIF
  69.  
  70. IF Key > ' '
  71.     STORE T TO Looking
  72.     @ 11, 0 SAY "I'M LOOKING, I'M LOOKING!!"
  73.     @ 12, 0
  74.     @ 13, 0
  75.     STORE 0 TO Start
  76.     FIND &Key
  77.     IF # = 0
  78.  ?
  79.  ? "  GEE, I CAN'T FIND THE NAME.  Please check the spelling."
  80.  ? "  Or Maybe it hasn't been posted to the COSTBASE yet."
  81.  ? '<Return> to continue.'
  82.  WAIT
  83.  ERASE
  84.     ELSE
  85.  DO PayFind
  86.     ENDIF there is an unpaid bill for the supplier
  87.  
  88.     * "Start" is brought in from PayFind.CMD.  If we started at the first
  89.     * entry for a name (had only the name), Start=0.  If we had mmore than
  90.     * the name, Start contains the record number we started on.  Since this
  91.     * could be in the middle of the listing, we use "Counter" so that we can
  92.     * come back to the top of the listing for the name once.
  93.     IF Start > 0
  94.  STORE 0 TO Counter
  95.     ELSE
  96.  STORE 1 TO Counter
  97.     ENDIF
  98.  
  99.     STORE ' ' TO Confirm
  100.     DO WHILE !(Confirm) <> 'P' .AND. .NOT. Looking
  101.  @ 9,0
  102.  ? 'RECORD        NAME               AMOUNT  BILL #';
  103.    +'     DATE'
  104.  ?
  105.  DISPLAY '    '+Name, Amount, Bill:Nmbr, Bill:Date
  106.  ?
  107.  ? CHR(7)
  108.  ? '             P to PAY this bill,'
  109.  ? '             Q to QUIT without paying,'
  110.  ? '          <Return> to continue.'
  111.  ACCEPT '                ' TO Confirm
  112.  
  113.  IF !(Confirm) = 'Q'
  114.      IF !(New) = 'S'
  115.   STORE STR(VAL(NextCheck)+1,4) TO NextCheck
  116.      ENDIF
  117.      STORE ' ' TO New
  118.      STORE T TO Looking
  119.  ELSE
  120.      IF !(Confirm) = 'P'
  121.   STORE STR(#,5) TO Found
  122.   REPLACE Check:Date WITH Date, Check:Nmbr WITH NextCheck
  123.   STORE (MBalance-Amount) TO MBalance
  124.  
  125.   SELECT SECONDARY
  126.   USE Checkfil
  127.   APPEND BLANK
  128.   REPLACE Check:Date WITH P.Check:Date, Name WITH P.Name,;
  129.    Check:Nmbr WITH P.Check:Nmbr, Balance WITH MBalance,;
  130.    Amount WITH P.Amount, Bill:Nmbr WITH P.Bill:Nmbr
  131.   SELECT PRIMARY
  132.   ERASE
  133.   @ 3, 0 SAY 'CHECK WRITTEN: '+NextCheck+;
  134.       '      NEW BALANCE: '+STR(MBalance,9,2)
  135.   ?
  136.   DISPLAY 'PAYMENT MADE: '+Check:Date, Name, Amount, Bill:Nmbr,;
  137.    Bill:Date OFF
  138.   ?
  139.   ? '      S for SAME SUPPLIER (Repeats Check#)'
  140.   ? CHR(7)
  141.   ACCEPT '    <Return> to continue.' TO New
  142.   IF !(New) <> 'S'
  143.       STORE STR(VAL(NextCheck)+1,4) TO NextCheck
  144.   ELSE
  145.       STORE ' ' TO Confirm
  146.   ENDIF
  147.      ENDIF
  148.  
  149.      IF !(New) = 'S' .OR. !(Confirm) <> 'P'
  150.   * If Confirm <> 'P', we rejected the first unpaid bill that was
  151.   * shown.  Rather than going back to the beginning, the loop
  152.   * below SKIPs to the next INDEXed name until we find an unpaid
  153.   * bill, or go beyond the records for the name we are paying.
  154.   *   The same applies if we want to pay another bill to the
  155.   * same supplier (New='S').  Since we are in the file on the
  156.   * name we want we SKIP to the next recrods until we find an
  157.   * unpaid bill or run out of records for that name.
  158.   *   If we had only the name and started with the first unpaid
  159.   * bill we stop now since we have looked at all the unpaid bills
  160.   * for that supplier.
  161.   *   If we could have entered the list of records for this
  162.   * supplier in the middle (more than the name provided0, we look
  163.   * at the unpaid bills between where we are and the end of the
  164.   * list, then go up to the first entry for that name and check
  165.   * all the unpaid bills that we had previously skipped past.
  166.   * This is controlled by Counter.
  167.   *   After the second FIND in the command file (below) we
  168.   * stop looking when the record number we are on is greater than
  169.   * or equal to the number of the record we start on (Start).
  170.  
  171.   SKIP
  172.   DO WHILE Check:Nmbr <> ' ' .AND. Name=Key .AND. .NOT. EOF
  173.       SKIP
  174.   ENDDO
  175.  
  176.   * We enter this loop when we reach the end of the records with
  177.   * names that match the one we are looking for. If we started
  178.   * with the first unpaid bill, the record number is greater than
  179.   * Start (because Start=0) and Counter=1 (because we set it to
  180.   * that value). The second IF below is True and we terminate
  181.   * the search.
  182.   *   If Start>0, Counter=0 the first time we run out of
  183.   * records with a matching name, so the program does the ELSE
  184.   * commands below.
  185.   *   Start is still >0 and Count is now 1, so the last term in
  186.   * the first IF applies.  On this second pass when we get to a
  187.   * record number >=Start, we drop into the loop and do the IF to
  188.   * terminate the search because we have now looked at all the
  189.   * unpaid bills for the name we entered.
  190.   IF EOF .OR. Name <> Key .OR. (# >= Start .AND. Start <> 0;
  191.          .AND. Counter >0)
  192.       IF (# >= Start .AND. Counter > 0)
  193.    STORE T TO Looking
  194.    @ 4, 0
  195.    ? CHR(27)+CHR(121)
  196.    ? '  We have now looked at all the entries for '+MName
  197.    ? ' <Return> to continue.'
  198.    ? CHR(7)
  199.    IF !(New)='S'
  200.        STORE STR(VAL(NextCheck)+1,4) TO NextCheck
  201.        STORE 'N' TO New
  202.    ENDIF
  203.    WAIT
  204.       ELSE
  205.    STORE Counter + 1 TO Counter
  206.    @ 13, 0
  207.    @ 16, 0 SAY "I'M WORKING AS FAST AS I CAN...HANG ON!"
  208.    FIND &Key
  209.    DO WHILE Check:Nmbr <> ' '
  210.        SKIP
  211.    ENDDO
  212.       ENDIF
  213.   ENDIF
  214.      ENDIF is it the right record
  215.  ENDIF
  216.     ENDDO Confirm the record
  217. ENDIF
  218.  
  219. IF !(New) <> 'S'
  220.     @ 4,0
  221.     ? CHR(27)+CHR(121)
  222.     ? '         F if FINISHED,       '
  223.     ? CHR(7)
  224.     ACCEPT '   <Return> to continue.' TO Finished
  225. ENDIF
  226. ENDDO Finished
  227.  
  228. RELEASE Mname, MBill:Nmbr, Key, MAmount, Start, Found, Looking, New, Change,;
  229.  Entering, Counter, Temp, Abort, Continue, Finished, Confirm, Date
  230. SAVE TO Constant
  231.  
  232. USE Checkfil
  233. COUNT FOR .NOT. * TO Any
  234. ERASE
  235. @ 3,0
  236. IF Any=0
  237.     ? '         No new checks in the checkfile.'
  238.     ? '      <Return> to continue.'
  239.     WAIT
  240. ELSE
  241.     ? 'There are '-STR(Any,5)+' new checks in the CheckFile.'
  242.     ? 'Do you want to print the checkstubs now (Y or N)?'
  243.     ?
  244.     WAIT TO Hardcopy
  245.     IF !(Hardcopy) = 'Y'
  246.  DO NameTest
  247.  DO CheckStu
  248.     ENDIF
  249. ENDIF
  250.  
  251. RELEASE All
  252. RETURN
  253.  
  254.