home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 5 / 05.iso / a / a070 / 3.ddi / FOXPRO / SAMPLE / INVOICE.PRG < prev    next >
Encoding:
Text File  |  1989-11-09  |  14.6 KB  |  533 lines

  1. * ┌─────────────────────────────────────────────────────────────────────┐ *
  2. * │  PROG NAME: INVOICE.PRG   What else, but the INVOICE PROGRAM.       │ *
  3. * │  Copyright (c) 1989 Tech III, Inc. All rights reserved.             │ *
  4. * │  Tech III of San Pedro, California      (213) 547-2191.             │ *
  5. * │  "The bridge connecting people and technology."(tm)                 │ *
  6. * └─────────────────────────────────────────────────────────────────────┘ *
  7. * setup objects: windows, menus, etc.
  8. STORE ' INVOICE HEADING                       ' TO bar_label1
  9. STORE ' LINE ITEMS                          ' TO bar_label2
  10. DO setup_inv
  11. STORE 0 TO startqty
  12. STORE invoice TO minvoice
  13.  
  14. * Display invoice form & data
  15. DO disp_inv
  16. DO show_inv
  17.  
  18. * Main module loop: see setup_inv, DEFINE MENU INVOICE for logic
  19. STORE .t. TO invoicing
  20. DO WHILE invoicing
  21.   ACTIVATE MENU invoice
  22.   IF .NOT. in_prodemo
  23.     DEACTIVATE MENU
  24.   ENDIF
  25. ENDDO
  26.  
  27. * Housekeeping
  28. DO shutdn_inv
  29. RETURN
  30.  
  31. PROCEDURE add_inv
  32.   ACTIVATE WINDOW invc_wind
  33.   SELECT invoice
  34.   SET ORDER TO inv_inv
  35.   GO BOTTOM
  36.   STORE invoice+1 TO minvoice
  37.   APPEND BLANK
  38.   REPLACE NEXT 1 invoice WITH minvoice
  39.   DO disp_inv
  40.   DO show_inv
  41.   ACTIVATE WINDOW invc_wind
  42.   @ 00,69 SAY minvoice PICTURE '99999'
  43.   SELECT customer
  44.   SET ORDER TO cus_com
  45.   ACTIVATE SCREEN 
  46.   CLEAR
  47.   DEFINE POPUP getcust FROM 03,20 TO 20,50 COLOR SCHEME 4 PROMPT FIELD company ;
  48.   MESSAGE 'Press <ENTER> to select, or <ESC> to add a new company.'
  49.   ON SELECTION POPUP getcust DEACTIVATE POPUP
  50.   ACTIVATE POPUP getcust
  51.   IF EMPTY(PROMPT())
  52.     RELEASE POPUP getcust
  53.     SAVE WINDOWS invc_wind, line_wind TO invscr1 
  54.     DEACTIVATE WINDOW invc_wind
  55.     HIDE WINDOW line_wind
  56.     HIDE WINDOW lines
  57.     HIDE MENU invoice
  58.     KEYBOARD 'A'
  59.     DO customer
  60.     SELECT invoice
  61.     RESTORE WINDOW ALL FROM invscr1
  62.     ACTIVATE SCREEN 
  63.     @ 23,00 GET bar_label1 COLOR SCHEME 3
  64.     @ 23,43 GET bar_label2 COLOR SCHEME 3
  65.     CLEAR GETS
  66.     SHOW WINDOW line_wind
  67.     SHOW WINDOW lines
  68.     SHOW MENU invoice
  69.   ELSE
  70.     SEEK PROMPT()
  71.     RELEASE POPUP getcust
  72.   ENDIF
  73.   SELECT invoice
  74.   SEEK minvoice
  75.   REPLACE NEXT 1 ;
  76.   cust_id  WITH customer->cust_id, ;
  77.   company  WITH customer->company, ;
  78.   contact  WITH customer->contact, ;
  79.   address1 WITH customer->address1, ;
  80.   city     WITH customer->city, ;
  81.   state    WITH customer->state, ;
  82.   zip      WITH customer->zip, ;
  83.   s_company  WITH customer->company, ;
  84.   s_contact  WITH customer->contact, ;
  85.   s_address1 WITH customer->address1, ;
  86.   s_city     WITH customer->city, ;
  87.   s_state    WITH customer->state, ;
  88.   s_zip      WITH customer->zip, ;
  89.   inv_date   WITH DATE() , ;
  90.   taxrate  WITH customer->taxrate
  91.   DO edit_inv
  92.   DO add_line
  93.   SELECT invoice
  94.   RETURN
  95.   
  96. PROCEDURE add_line
  97.   SELECT lines
  98.   APPEND BLANK
  99.   REPLACE NEXT 1 invoice WITH minvoice 
  100.   DO browsing
  101.   REPLACE NEXT 1 taxable WITH items->taxable
  102.   DELETE NEXT 1 FOR quantity = 0 WHILE invoice = minvoice
  103.   RETURN
  104.   
  105. PROCEDURE brow_line
  106.   SELECT lines
  107.   SHOW WINDOW browhelp
  108.   ON KEY LABEL F10 KEYBOARD CHR(23)
  109.   SET SHADOW OFF
  110.   SEEK minvoice
  111.   ACTIVATE SCREEN
  112.   SHOW WINDOW line_wind TOP
  113.   
  114.   BROWSE KEY minvoice ;
  115.   NOEDIT NOAPPEND NODELETE NOMENU NOCLEAR ;
  116.   WINDOW line_wind ;
  117.   FIELDS ;
  118.   item:9,;
  119.   descript:36,;
  120.   price:p='999,999.99',;
  121.   quantity:4,;
  122.   extension = TRANSFORM(lines->price*lines->quantity,'999,999,999.99')
  123.   
  124.   ON KEY LABEL F10
  125.   SHOW WINDOW line_wind SAVE
  126.   HIDE WINDOW browhelp
  127.   SET SHADOW ON
  128.   ACTIVATE SCREEN
  129.   GO TOP
  130.   SELECT invoice
  131.   SELECT lines
  132.   RETURN
  133.   
  134. PROCEDURE browsing
  135.   SELECT lines
  136.   SHOW WINDOW browhelp
  137.   ON KEY LABEL F10 KEYBOARD CHR(23)
  138.   
  139.   SET SHADOW OFF
  140.   ACTIVATE SCREEN
  141.   SHOW WINDOW line_wind TOP
  142.   
  143.   BROWSE KEY minvoice ;
  144.   NOAPPEND NODELETE NOMENU NOCLEAR ;
  145.   WINDOW line_wind ;
  146.   FIELDS ;
  147.   item:9:v=GETITEM(item):F,;
  148.   descript:36,;
  149.   price:p='999,999.99',;
  150.   quantity:4:v=ADJINV():E='QTY or adjustment to QTY exceeds inventory on hand.':w=STOREVAL(),;
  151.   extension = TRANSFORM(lines->price*lines->quantity,'999,999,999.99')
  152.   
  153.   SHOW WINDOW line_wind SAVE 
  154.   ON KEY LABEL F10
  155.   HIDE WINDOW browhelp
  156.   SET SHADOW ON
  157.   ACTIVATE SCREEN
  158.   GO TOP
  159.   SELECT invoice
  160.   subtot = INVSUB()
  161.   subtax = INVTAX()
  162.   invtot = subtot + subtax
  163.   @ 22,00 SAY 'SUB-TOTAL:'
  164.   @ 22,11 SAY subtot PICT '999,999,999.99'
  165.   @ 22,31 SAY 'TAX:'
  166.   @ 22,36 SAY subtax PICT '999,999,999.99'
  167.   @ 22,57 SAY 'TOTAL:'
  168.   @ 22,64 SAY invtot PICT '9,999,999,999.99'
  169.   @ 23,00 GET bar_label1 COLOR SCHEME 3
  170.   @ 23,43 GET bar_label2 COLOR SCHEME 3
  171.   CLEAR GETS
  172.   SELECT lines
  173.   RETURN
  174.   
  175. PROCEDURE del_inv
  176.   IF YESNO('Are you sure you want to delete this invoice?')
  177.     SELECT lines
  178.     SEEK minvoice
  179.     SCAN WHILE lines->invoice = invoice->invoice
  180.       SELECT items
  181.       SEEK lines->item
  182.       REPLACE items->quantity WITH items->quantity + lines->quantity
  183.       SELECT lines
  184.       DELETE NEXT 1
  185.     ENDSCAN
  186.     SELECT invoice
  187.     DELETE NEXT 1
  188.     IF .NOT. EOF()
  189.       SKIP
  190.     ENDIF
  191.     IF EOF()
  192.       GO BOTTOM
  193.     ENDIF
  194.   ENDIF
  195.   DO standby WITH 'Invoice has been deleted.'
  196.   DO show_inv
  197.   RETURN
  198.   
  199. PROCEDURE del_line
  200.   DO msg2user WITH 'DELETION INSTRUCTIONS', ;
  201.   'Edit item quantity to equal zero.', 'System will then remove the item.'
  202.   SELECT lines
  203.   DO browsing
  204.   SEEK minvoice
  205.   DELETE REST FOR quantity = 0 WHILE invoice = minvoice
  206.   DO msg2user WITH 'CLOSE'
  207.   DO show_inv
  208.   RETURN
  209.   
  210. PROCEDURE disp_inv
  211.   ACTIVATE WINDOW invc_wind
  212.   CLEAR
  213.   @ 00,00 SAY '┌──────[ Customer        ]─────────────────────────────────[ Invoice       ]─┐'
  214.   @ 01,00 SAY '│  ⌐                                  ┐   ⌐                                 ┐│'
  215.   @ 02,00 SAY '│B                                      S                                    │'
  216.   @ 03,00 SAY '│I                                      H                                    │'
  217.   @ 04,00 SAY '│L                                      I                                    │'
  218.   @ 05,00 SAY '│L                                      P                                    │'
  219.   @ 06,00 SAY '│  └                                  ┘   └                                 ┘│'
  220.   @ 07,00 SAY '├──────────┬──────────────────┬───────┬────────────┬─────────────────────────┤'
  221.   @ 08,00 SAY '│  Date    │       P.O #      │ Slsmn │  Ship via  │                         │'
  222.   @ 09,00 SAY '├──────────┼──────────────────┼───────┼────────────┼─────────────────────────┤'
  223.   @ 10,00 SAY '│          │                  │       │            │                         │'
  224.   @ 11,00 SAY '└──────────┴──────────────────┴───────┴────────────┴─────────────────────────┘'
  225.   RETURN
  226.   
  227. PROCEDURE edit_inv
  228.   SELECT invoice
  229.   ACTIVATE WINDOW invc_wind
  230.   @ 00,69 SAY invoice PICT '99999'
  231.   @ 00,18 SAY cust_id
  232.   @ 02,04 GET contact
  233.   @ 03,04 GET company
  234.   @ 04,04 GET address1
  235.   @ 05,04 GET city
  236.   @ 05,25 GET state
  237.   @ 05,28 GET zip        PICTURE '99999X9999'
  238.   @ 02,43 GET s_contact
  239.   @ 03,43 GET s_company
  240.   @ 04,43 GET s_address1
  241.   @ 05,43 GET s_city
  242.   @ 05,64 GET s_state
  243.   @ 05,67 GET s_zip      PICTURE '99999X9999'
  244.   @ 10,02 GET inv_date
  245.   @ 10,13 GET po
  246.   @ 10,33 GET soldby     PICTURE '!!!' VALID VAL_SREP()
  247.   @ 10,40 GET shipvia
  248.   READ
  249.   DO show_inv
  250.   RETURN
  251.   
  252. PROCEDURE edit_line
  253.   SELECT lines
  254.   DO browsing
  255.   SEEK minvoice
  256.   DELETE REST FOR quantity = 0 WHILE invoice = minvoice
  257.   SEEK minvoice
  258.   RETURN
  259.   
  260. PROCEDURE next_inv
  261.   SELECT invoice
  262.   IF .NOT. EOF()
  263.     SKIP
  264.   ENDIF
  265.   IF EOF()
  266.     GO BOTTOM
  267.     DO standby WITH "End of file: there is no NEXT invoice."
  268.   ELSE
  269.     DO show_inv
  270.   ENDIF
  271.   RETURN
  272.   
  273. PROCEDURE prev_inv
  274.   SELECT invoice
  275.   IF .NOT. BOF()
  276.     SKIP -1
  277.   ENDIF
  278.   IF BOF()
  279.     GO TOP
  280.     DO standby WITH "Beginning of file: there is no PREVIOUS invoice."
  281.   ELSE
  282.     DO show_inv
  283.   ENDIF
  284.   RETURN
  285.   
  286. PROCEDURE pull_inv
  287.   SELECT invoice
  288.   DEFINE POPUP pullinv FROM 7,50 TO 11,78 COLOR SCHEME 4
  289.   DEFINE BAR 1 OF pullinv PROMPT 'By an Invoice Number'
  290.   DEFINE BAR 2 OF pullinv PROMPT 'First one written'
  291.   DEFINE BAR 3 OF pullinv PROMPT 'Last one written'
  292.   ON SELECTION POPUP pullinv DEACTIVATE POPUP
  293.   ACTIVATE POPUP pullinv
  294.   subchoice=BAR()
  295.   RELEASE POPUP pullinv
  296.   DO CASE
  297.     CASE subchoice=1
  298.       oldrec=RECNO()
  299.       SET ORDER TO inv_inv
  300.       DEFINE WINDOW get_inv FROM 10,12 TO 14,68 DOUBLE COLOR SCHEME 6
  301.       ACTIVATE WINDOW get_inv
  302.       STORE 0 TO mpullinv
  303.       @ 1,3 SAY 'What invoice number do you want?' GET mpullinv PICT '99999' COLOR SCHEME 7
  304.       READ
  305.       RELEASE WINDOW get_inv
  306.       IF mpullinv=0 .OR. LASTKEY()=27
  307.         GOTO oldrec
  308.       ELSE
  309.         SEEK mpullinv
  310.         IF .NOT. FOUND()
  311.           DO standby WITH "That invoice was not found."
  312.           GOTO oldrec
  313.         ELSE
  314.           DO show_inv
  315.         ENDIF
  316.       ENDIF
  317.     CASE subchoice = 2
  318.       GO TOP
  319.       DO show_inv
  320.     CASE subchoice=3
  321.       GO BOTTOM
  322.       DO show_inv
  323.   ENDCASE
  324.   RETURN
  325.   
  326. PROCEDURE quit_inv
  327.   STORE .f. TO invoicing
  328.   DEACTIVATE MENU
  329.   RETURN
  330.   
  331. PROCEDURE setup_inv
  332.   ACTIVATE SCREEN
  333.   CLEAR
  334.   * Set up files
  335.   SELECT lines
  336.   SET ORDER TO lns_inv
  337.   SELECT invoice
  338.   SET ORDER TO inv_inv
  339.   
  340.   DEFINE WINDOW invc_wind FROM 00,00 TO 13,79 DOUBLE ;
  341.   TITLE 'Invoice Header' COLOR SCHEME 10
  342.   
  343.   DEFINE WINDOW line_wind FROM 14,00 TO 21,79 ZOOM CLOSE system ;
  344.   COLOR SCHEME 10
  345.   * title 'Invoice Line Items' ;
  346.   
  347.   DEFINE WINDOW browhelp FROM 09,17 TO 12,63 DOUBLE CLOSE COLOR SCHEME 7
  348.   ACTIVATE WINDOW browhelp NOSHOW
  349.   @ 00,01 SAY 'When finished editing, press [F10].'
  350.   HIDE WINDOW browhelp
  351.   
  352.   ACTIVATE SCREEN
  353.   
  354.   DEFINE MENU invoice COLOR SCHEME 3
  355.   DEFINE PAD ifind   OF invoice PROMPT '\<Find'   AT 24,00
  356.   DEFINE PAD inext   OF invoice PROMPT '\<Next'   AT 24,07
  357.   DEFINE PAD iprev   OF invoice PROMPT '\<Prev'   AT 24,14
  358.   DEFINE PAD iadd    OF invoice PROMPT '\<Add'    AT 24,21
  359.   DEFINE PAD iedit   OF invoice PROMPT '\<Edit'   AT 24,27
  360.   DEFINE PAD idelete OF invoice PROMPT 'De\<l'    AT 24,34
  361.   DEFINE PAD lbrowse OF invoice PROMPT '\<Browse' AT 24,43
  362.   DEFINE PAD ladd    OF invoice PROMPT 'A\<dd'    AT 24,52
  363.   DEFINE PAD ledit   OF invoice PROMPT 'Ed\<it'   AT 24,58
  364.   DEFINE PAD ldelete OF invoice PROMPT 'Dele\<te' AT 24,65
  365.   DEFINE PAD QUIT    OF invoice PROMPT '\<Quit'   AT 24,74
  366.   
  367.   ON SELECTION PAD ifind     OF invoice DO pull_inv
  368.   ON SELECTION PAD inext     OF invoice DO next_inv
  369.   ON SELECTION PAD iprev     OF invoice DO prev_inv
  370.   ON SELECTION PAD iadd      OF invoice DO add_inv
  371.   ON SELECTION PAD iedit     OF invoice DO edit_inv
  372.   ON SELECTION PAD idelete   OF invoice DO del_inv
  373.   ON SELECTION PAD lbrowse   OF invoice DO brow_line
  374.   ON SELECTION PAD ladd      OF invoice DO add_line
  375.   ON SELECTION PAD ledit     OF invoice DO edit_line
  376.   ON SELECTION PAD ldelete   OF invoice DO del_line
  377.   ON SELECTION PAD QUIT      OF invoice DO quit_inv
  378.   
  379.   DEFINE POPUP getitem FROM 03,20 TO 20,50 COLOR SCHEME 4 PROMPT FIELD item ;
  380.   MESSAGE 'Press <ENTER> to select, or <ESC> to add a new item.'
  381.   ON SELECTION POPUP getitem DEACTIVATE POPUP
  382.   
  383.   RETURN
  384.   
  385. PROCEDURE shutdn_inv
  386.   RELEASE    MENU   invoice
  387.   SELECT lines
  388.   USE
  389.   USE lineitms IN 3 INDEX lns_inv,lns_itm  ALIAS lines
  390.   RELEASE    WINDOW line_wind
  391.   RELEASE    WINDOW invc_wind
  392.   RELEASE    WINDOW browhelp
  393.   RELEASE    POPUP  getitem
  394.   ACTIVATE   SCREEN
  395.   RESTORE    SCREEN FROM mainscrn
  396.   RETURN
  397.   
  398. PROCEDURE show_inv
  399.   SELECT invoice
  400.   ACTIVATE WINDOW invc_wind
  401.   @ 00,18 SAY invoice->cust_id
  402.   @ 00,69 SAY invoice->invoice PICTURE '99999'
  403.   @ 02,04 SAY invoice->contact
  404.   @ 02,43 SAY invoice->s_contact
  405.   @ 03,04 SAY invoice->company
  406.   @ 03,43 SAY invoice->s_company
  407.   @ 04,04 SAY invoice->address1
  408.   @ 04,43 SAY invoice->s_address1
  409.   @ 05,04 SAY invoice->city
  410.   @ 05,25 SAY invoice->state
  411.   @ 05,28 SAY invoice->zip
  412.   @ 05,43 SAY invoice->s_city
  413.   @ 05,64 SAY invoice->s_state
  414.   @ 05,67 SAY invoice->s_zip
  415.   @ 10,02 SAY invoice->inv_date
  416.   @ 10,13 SAY invoice->po
  417.   @ 10,33 SAY invoice->soldby
  418.   @ 10,40 SAY invoice->shipvia
  419.   minvoice=invoice->invoice
  420.   * Show line-items
  421.   SELECT lines
  422.   SEEK minvoice
  423.   ACTIVATE SCREEN
  424.   SET SHADOW OFF
  425.   BROWSE KEY minvoice ;
  426.   NOWAIT NOMENU NOCLEAR ;
  427.   WINDOW line_wind ;
  428.   FIELDS ;
  429.   item:9, ;
  430.   descript:36, ;
  431.   price:p='999,999.99', ;
  432.   quantity:4, ;
  433.   extension = TRANSFORM(lines->price*lines->quantity,'999,999,999.99')
  434.   ACTIVATE SCREEN
  435.   SET SHADOW ON
  436.   SELECT invoice
  437.   subtot = INVSUB()
  438.   subtax = INVTAX()
  439.   invtot = subtot + subtax
  440.   @ 22,00 SAY 'SUB-TOTAL:'
  441.   @ 22,11 SAY subtot PICT '999,999,999.99'
  442.   @ 22,31 SAY 'TAX:'
  443.   @ 22,36 SAY subtax PICT '999,999,999.99'
  444.   @ 22,57 SAY 'TOTAL:'
  445.   @ 22,64 SAY invtot PICT '9,999,999,999.99'
  446.   @ 23,00 GET bar_label1 COLOR SCHEME 3
  447.   @ 23,43 GET bar_label2 COLOR SCHEME 3
  448.   CLEAR GETS
  449.   SELECT lines
  450.   RETURN
  451.   
  452. FUNCTION adjinv
  453.   SELECT items
  454.   SEEK lines->item
  455.   IF quantity < lines->quantity - startqty
  456.     SELECT lines
  457.     RETURN .f.
  458.   ELSE
  459.     REPLACE quantity WITH quantity - (lines->quantity - startqty)
  460.     SELECT lines
  461.     KEYBOARD CHR(13)
  462.     RETURN .t.
  463.   ENDIF
  464.   
  465. FUNCTION getitem
  466.   * looks up item in inventory and if found, gets description and price
  467.   PARAMETER mitem
  468.   SELECT items
  469.   SEEK mitem
  470.   IF .NOT. FOUND()
  471.     ACTIVATE SCREEN
  472.     ACTIVATE POPUP getitem
  473.     IF EMPTY(PROMPT())
  474.       HIDE POPUP getitem
  475.       SAVE WINDOWS invc_wind, line_wind TO invscr1
  476.       DEACTIVATE WINDOW invc_wind
  477.       HIDE WINDOW line_wind
  478.       HIDE WINDOW lines
  479.       HIDE MENU invoice
  480.       KEYBOARD 'A'
  481.       ACTIVATE WINDOW screensim
  482.       DO inventry
  483.       DEACTIVATE WINDOW screensim
  484.       SELECT invoice
  485.       RESTORE WINDOW ALL FROM invscr1
  486.       ACTIVATE SCREEN
  487.       @ 23,00 GET bar_label1 COLOR SCHEME 3
  488.       @ 23,43 GET bar_label2 COLOR SCHEME 3
  489.       CLEAR GETS
  490.       SHOW WINDOW browhelp
  491.       ACTIVATE WINDOW line_wind
  492.       SHOW WINDOW lines
  493.       SHOW MENU invoice
  494.     ELSE
  495.       SEEK PROMPT()
  496.     ENDIF
  497.   ENDIF
  498.   SELECT lines
  499.   REPLACE NEXT 1 item WITH items->item, descript WITH items->descript ;
  500.   price WITH items->price, cost WITH items->cost
  501.   RETURN .t.
  502.   
  503. FUNCTION storeval
  504.   STORE quantity TO startqty
  505.   RETURN .t.
  506.   
  507. FUNCTION val_srep
  508.   SELECT salesrep
  509.   SET ORDER TO sal_sal
  510.   SEEK invoice->soldby
  511.   IF FOUND()
  512.     SELECT invoice
  513.     RETURN .t.
  514.   ELSE
  515.     GO TOP
  516.   ENDIF
  517.   SET ORDER TO sal_nam
  518.   IF .NOT. FOUND()
  519.     DEFINE POPUP salesrep FROM 03,40 PROMPT FIELD salename
  520.     ON SELECTION POPUP salesrep DEACTIVATE POPUP
  521.     DO WHILE .NOT. FOUND()
  522.       ACTIVATE POPUP salesrep
  523.       SEEK PROMPT()
  524.     ENDDO
  525.     RELEASE POPUP salesrep
  526.   ENDIF
  527.   SELECT invoice
  528.   REPLACE invoice->soldby WITH salesrep->soldby
  529.   SET ORDER TO sal_sal
  530.   RETURN .t.
  531.   
  532.   * EOF
  533.