home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 5 / 05.iso / a / a031 / samples.exe / ORDERS.PRG < prev    next >
Encoding:
Text File  |  1992-03-10  |  11.1 KB  |  308 lines

  1. ******************************************************************************
  2. * PROGRAM NAME: ORDERS.PRG
  3. *               ORDERS TRANSACTIONS DATABASE SCREEN
  4. *               SAMPLE BUSINESS APPLICATION PROGRAM
  5. * LAST CHANGED: 09/25/89 09:26AM
  6. * WRITTEN BY:   Borland International Inc.
  7. ******************************************************************************
  8. *
  9. *       FILES USED IN CUSTOMER FILE:
  10. *       Database    =  Orders.dbf
  11. *       Index file  =  Orders.mdx
  12. *        TAG: Order =  cust_id+DTOC(date_trans)+po_number <= Master index
  13. *       External Procedure File used: Library.prg
  14. ******************************************************************************
  15.  
  16. * Main procedure
  17. PROCEDURE Orders
  18.  
  19.    * Link to external procedure file of 'tool' procedures
  20.    SET PROCEDURE TO Library
  21.  
  22.    * Set database environment
  23.    DO Set_env
  24.    SET NEAR on
  25.    SET COLOR TO &c_standard.
  26.  
  27.    * Declare Variables Used:
  28.    * Database memory variables
  29.    STORE "" TO cust_id, po_number, emp_id, part_id
  30.    STORE {  /  /  } TO date_trans
  31.    part_qty = 0
  32.    invoiced = .F.
  33.  
  34.    * Misc variables - used to pass parameters to Library
  35.    * for Find record, Output reports, List records and other options
  36.    dbf   = "ORDERS"                   && std report is available
  37.    mlist = "NOT AVAILABLE"            && no mailing list is available
  38.    STORE "N/A" TO cust_rpt            && no custom reports are available
  39.    key  = "m->cust_id+DTOC(m->date_trans)+m->po_number"
  40.    key1 = "m->cust_id"
  41.    key2 = "m->date_trans"
  42.    key3 = "m->po_number"
  43.    keyname1 = "Cust ID:"
  44.    keyname2 = "Date of Order:"
  45.    keyname3 = "P.O. Number:"
  46.    list_flds = "CUST_ID,DATE_TRANS,PO_NUMBER,PART_ID,PART_QTY,Goods->PRICE"
  47.    STORE "" TO mcustid, mpartid, mempid
  48.  
  49.    * Open databases and choose active indexes
  50.    SELECT 1
  51.    USE Orders   ORDER Order
  52.    USE Goods    ORDER Part_id IN 2
  53.    USE Cust     ORDER Cust_id IN 3
  54.    USE Employee ORDER Emp_id  IN 4
  55.    SET RELATION TO part_id INTO Goods, cust_id INTO Cust, emp_id INTO Employee
  56.    GO TOP
  57.  
  58.    record_num = RECNO()
  59.    DO Load_fld
  60.  
  61.    * Show data screen
  62.    CLEAR
  63.    DO Dstatus
  64.    DO Backgrnd
  65.    DO Show_data
  66.  
  67.    * Define popup bar menus of user choices
  68.    DO Bar_def
  69.  
  70.    * Activate main popup bar menu - execute user choices
  71.    SET COLOR TO &c_popup.
  72.    ACTIVATE POPUP main_mnu
  73.    DO Sub_ret
  74.    *
  75. RETURN
  76. *==============================end of main procedure==========================
  77.  
  78. *  UTILITY PROCEDURES (PROPRIETARY TO Orders)
  79.  
  80. PROCEDURE Filter
  81.    * Filter (group) data into subset
  82.    * Select subset to set up filter condition  (Y=turn on, N=abort selection,
  83.    * T=turn off). If filter is already on, set default choice to Turn off, 
  84.    * show window. If filter is not on, set default choice to Yes; show window.
  85.    choice = IIF(filters_on,"T","Y")
  86.    DO Filt_ans
  87.    IF choice = "Y"
  88.       * Start process of choosing filter condition.
  89.       *
  90.       mcustid    = SPACE(6)
  91.       mpartid    = SPACE(10)
  92.       mempid     = SPACE(11)
  93.       ACTIVATE WINDOW alert
  94.          * Get user's filter condition selection(s)
  95.          @  0, 0 SAY "-------- ENTER FILTER CONDITION -------"
  96.          @  2, 0 SAY "CUST.I.D.:"     GET mcustid     FUNCTION "!" ;
  97.             MESSAGE "Enter a six digit customer ID beginning with a " + ;
  98.                     " letter - Esc to quit"
  99.          @  3, 0 SAY "PART I.D.:"     GET mpartid     FUNCTION "!"
  100.          @  4, 0 SAY "EMPLOYEE I.D.:" GET mempid
  101.          @  5, 0 SAY "Enter one or more conditions"
  102.          READ
  103.      DEACTIVATE WINDOW alert
  104.      * Initialize filter condition variable to null (empty)
  105.      subset = " "
  106.      * Process user's entries to build filter condition
  107.      mcustid   = TRIM(mcustid)
  108.      mpartid   = TRIM(mpartid)
  109.      mempid    = TRIM(mempid)
  110.      subset =  subset + IIF("" <> mcustid,"cust_id = '&mcustid.' .AND. ","")
  111.      subset =  subset + IIF("" <> mpartid,"part_id = '&mpartid.' .AND. ","")
  112.      subset =  subset + IIF("" <> mempid, "emp_id = '&mempid.'  .AND. ","")
  113.      *
  114.      IF "" = TRIM(subset)     && Check whether data entered into subset string
  115.         * If nothing entered, exit
  116.         DO Warnbell
  117.         filters_on = .F.
  118.      ELSE
  119.         * If string is not empty, truncate the .AND. from end of subset string
  120.         subset = SUBSTR(subset,1,LEN(subset)-6)
  121.         SET FILTER TO &subset.   && Filter on entered filter string condition
  122.         GO TOP                   && Activate filter by moving record pointer
  123.         * Check whether filter condition matches any records (no match=EOF)
  124.         filters_on = .NOT. EOF()
  125.         IF .NOT. filters_on           && Filter is off if filters_on = .F.
  126.            DO Warnbell
  127.            DO Show_msg WITH "No Orders records match the Filter condition."
  128.            SET FILTER TO
  129.            GO record_num
  130.         ENDIF
  131.       ENDIF
  132.    ELSE
  133.       * If user selects "T", turn off filter
  134.       SET FILTER TO
  135.       filters_on = .F.
  136.    ENDIF
  137. RETURN
  138.  
  139. PROCEDURE Indexer
  140.    * Create/rebuild index
  141.    INDEX ON cust_id+DTOC(date_trans)+po_number TAG Order
  142.    GO TOP
  143. RETURN
  144.  
  145. PROCEDURE Init_fld
  146.    * Initialize memory variables values for data entry
  147.    cust_id    = SPACE(6)
  148.    date_trans = DATE()
  149.    po_number  = SPACE(5)
  150.    emp_id     = SPACE(11)
  151.    part_id    = SPACE(10)
  152.    part_qty   = 0
  153.    invoiced   = .F.
  154. RETURN
  155.  
  156. PROCEDURE Load_fld
  157.    * Copy fields from ORDERS database record into memory variables
  158.    cust_id    = cust_id
  159.    date_trans = date_trans
  160.    po_number  = po_number
  161.    emp_id     = emp_id
  162.    part_id    = part_id
  163.    part_qty   = part_qty
  164.    invoiced   = invoiced
  165. RETURN
  166.  
  167. PROCEDURE Repl_fld
  168.    * Replace database file fields with contents of memory variables
  169.    REPLACE cust_id WITH m->cust_id, po_number WITH m->po_number,;
  170.            date_trans WITH m->date_trans, emp_id WITH m->emp_id, ;
  171.            part_id WITH m->part_id, part_qty WITH m->part_qty, ;
  172.            invoiced  WITH m->invoiced
  173. RETURN
  174.  
  175. FUNCTION Prof_mgn
  176.    PARAMETERS cost,price
  177.    * Calculate profit margin
  178.    margin = ROUND((price-cost)/price*100,1)
  179. RETURN margin
  180.  
  181. PROCEDURE Backgrnd
  182.    * Show background screen
  183.    @  1,18 TO  3,49 DOUBLE COLOR &c_blue.
  184.    @  5, 2 TO  8,56 DOUBLE COLOR &c_red.
  185.    @ 16, 2 TO 16,56        COLOR &c_red.
  186.    @  9, 2 TO 18,56        COLOR &c_red.
  187.    @  2,19 FILL TO  2,48   COLOR &c_blue.
  188.    @  6, 3 FILL TO  7,55   COLOR &c_red.
  189.    @ 10, 3 FILL TO 17,55   COLOR &c_red.
  190.    @  6, 3 FILL TO 17,55   COLOR &c_red.
  191.    SET COLOR TO &c_data.
  192.    @  2,20 SAY "ORDERS TRANSACTIONS DATABASE"
  193.    @  6, 4 SAY "CUSTOMER ID:"
  194.    @  7, 4 SAY "ORDER DATE:"
  195.    @  7,35 SAY "P.O. NUMBER:"
  196.    @ 10, 4 SAY "PART #:"
  197.    @ 11, 4 SAY "PART NAME:"
  198.    @ 12, 4 SAY "QTY. ORDERED:"
  199.    @ 12,25 SAY "each"
  200.    @ 12,35 SAY "PRICE: $"
  201.    @ 13, 4 SAY "QTY. AVAILABLE:"
  202.    @ 13,25 SAY "each"
  203.    @ 13,35 SAY "MARGIN:"
  204.    @ 13,53 SAY "%"
  205.    @ 14, 4 SAY "EMPLOYEE #:"
  206.    @ 15, 4 SAY "INVOICED:"
  207.    @ 17, 4 SAY "NOTES:"
  208.    SET COLOR TO &c_standard.
  209. RETURN
  210.  
  211. PROCEDURE Show_data
  212.    * Show data screen
  213.    SET COLOR TO &c_fields.
  214.    @  6,18 SAY cust_id
  215.    @  7,18 SAY date_trans
  216.    @  7,48 SAY po_number
  217.    @ 10,18 SAY part_id
  218.    @ 12,21 SAY part_qty   PICTURE "999"
  219.    @ 14,16 SAY emp_id
  220.    @ 15,14 SAY invoiced  PICTURE  "Y"
  221.    @ 17,14 SAY Notes
  222.    IF .NOT. BAR() = 2           && not Add mode
  223.       @  6,26 SAY Cust->Customer                        COLOR &c_yelowhit.
  224.       @ 11,18 SAY Goods->Part_name                      COLOR &c_yelowhit.
  225.       @ 12,44 SAY Goods->Price      PICTURE "99,999.99" COLOR &c_yelowhit.
  226.       @ 13,21 SAY Goods->Qty_onhand PICTURE "999"       COLOR &c_yelowhit.
  227.       @ 13,48 SAY Prof_mgn(Goods->Cost,Goods->Price) ;
  228.               PICTURE "99.9" COLOR &c_yelowhit.
  229.       @ 14,30 SAY TRIM(Employee->Firstname)+" "+ Employee->Lastname ;
  230.               COLOR &c_yelowhit.
  231.    ELSE
  232.       * Mode is Add: clear screen field areas of related data
  233.       @  6,26 SAY SPACE(30)    && CUSTOMER
  234.       @ 11,18 SAY SPACE(20)    && PARTNAME
  235.       @ 12,44 SAY SPACE(9)     && PRICE
  236.       @ 13,21 SAY SPACE(3)     && QTY ONHAND
  237.       @ 13,48 SAY SPACE(4)     && MARGIN
  238.       @ 14,30 SAY SPACE(26)    && EMPLOYEE
  239.    ENDIF
  240.    IF ISCOLOR()
  241.       @ 20, 4 SAY "Yellow text/numbers - from related databases or calc." ;
  242.          COLOR &c_yelowhit.
  243.    ELSE
  244.       @ 20, 4 SAY "Dim text/numbers - from related databases or calc." ;
  245.          COLOR &c_red.
  246.    ENDIF
  247.    SET COLOR TO &c_standard.
  248. RETURN
  249.  
  250. PROCEDURE Get_data
  251.    * Show screen for data entry
  252.    SET COLOR TO &c_data.
  253.    @  6,18 GET m->cust_id    PICTURE  "!99999" ;
  254.            VALID Lookupid(m->cust_id,"Cust","Customer", 2) ;
  255.            ERROR "Invalid customer I.D. number, please re-enter." ;
  256.            MESSAGE "Enter a six digit customer ID (beginning with a " + ;
  257.                    "letter) - Esc to quit"
  258.    @  7,18 GET m->date_trans FUNCTION "D" ;
  259.            MESSAGE "Enter date of this order"
  260.    @  7,48 GET m->po_number  FUNCTION "!" ;
  261.            MESSAGE "Enter customer's P.O. number"
  262.    @ 10,18 GET m->part_id    FUNCTION "!" ;
  263.            VALID Lookupid(m->part_id,"Goods", "Part", 3) ;
  264.            ERROR "Invalid part ID number, please re-enter." ;
  265.            MESSAGE "Enter a part ID number, or Esc to quit"
  266.    @ 12,21 GET m->part_qty   PICTURE "999" ;
  267.            MESSAGE "Enter quantity of parts ordered"
  268.    @ 14,16 GET m->emp_id PICTURE "999-99-9999" ;
  269.            VALID Lookupid(m->emp_id, "Employee", "Employee", 6) ;
  270.            ERROR "Invalid employee ID number, please re-enter." ;
  271.            MESSAGE "Enter an employee ID number, or Esc to quit"
  272.    @ 15,14 GET m->invoiced  PICTURE  "Y" ;
  273.            MESSAGE "Enter whether this order has been invoiced " + ;
  274.                    "(usually done by system)"
  275.    @ 17,14 GET Notes WINDOW memo_windo ;
  276.            MESSAGE "Enter notes into memo field, press " + ;
  277.                    "Ctrl-Home to enter (Ctrl-End to exit)"
  278.    IF .NOT. BAR() = 2           && not Add mode
  279.       @  6,26 SAY Cust->Customer                        COLOR &c_yelowhit.
  280.       @ 11,18 SAY Goods->Part_name                      COLOR &c_yelowhit.
  281.       @ 12,44 SAY Goods->Price      PICTURE "99,999.99" COLOR &c_yelowhit.
  282.       @ 13,21 SAY Goods->Qty_onhand PICTURE "999"       COLOR &c_yelowhit.
  283.       @ 13,48 SAY Prof_mgn(Goods->Cost,Goods->Price) ;
  284.               PICTURE "99.9" COLOR &c_yelowhit.
  285.       @ 14,30 SAY TRIM(Employee->Firstname)+" "+ Employee->Lastname ;
  286.               COLOR &c_yelowhit.
  287.    ELSE
  288.       * Mode is Add: clear screen field areas of related data
  289.       @  6,26 SAY SPACE(30)    && CUSTOMER
  290.       @ 11,18 SAY SPACE(20)    && PARTNAME
  291.       @ 12,44 SAY SPACE(9)     && PRICE
  292.       @ 13,21 SAY SPACE(3)     && QTY ONHAND
  293.       @ 13,48 SAY SPACE(4)     && MARGIN
  294.       @ 14,30 SAY SPACE(26)    && EMPLOYEE
  295.    ENDIF
  296.    IF ISCOLOR()
  297.       @ 20, 4 SAY "Yellow text/numbers - from related databases or calc." ;
  298.          COLOR &c_yelowhit.
  299.    ELSE
  300.       @ 20, 4 SAY "Dim text/numbers - from related databases or calc." ;
  301.          COLOR &c_red.
  302.    ENDIF
  303.    SET COLOR TO &c_standard.
  304.    ON KEY LABEL F9 DO Findcust WITH m->cust_id
  305.    ON KEY LABEL F10 DO Findpart WITH m->part_id
  306. RETURN
  307. ************************************** END OF ORDERS.PRG *********************
  308.