home *** CD-ROM | disk | FTP | other *** search
/ Freesoft 1997 June / Freesoft_1997-06_cd.bin / nerecenz / programmers / FOXWEB / DATA.Z / customer.PRG < prev    next >
Text File  |  1996-12-19  |  10KB  |  308 lines

  1. ******************************************
  2. *            CUSTOMER.PRG                *
  3. *                                        *
  4. *        Sample Code for FoxWeb          *
  5. *                                        *
  6. *   Written by Pandelis Tiritas 9/6/95   *
  7. ******************************************
  8.  
  9.  
  10.  
  11. ******************************************
  12. * NOTES:
  13. *
  14. * MergeTxt is included in FoxWeb.  It takes
  15. * the contents of the parameter passed to it,
  16. * performs a text merge and returns the results
  17. *
  18. * Every procedure includes the variables
  19. * ProcFile and MergeFile.  These variables
  20. * are used for the [Display Source Code] and
  21. * [Display Merge Code] options.  They are
  22. * not integral to the functionality of the
  23. * application
  24. * The two procedures: send_prg and send_memo
  25. * are also used for the same purpose
  26. *
  27. * All links in the merge table HTML_Frm have
  28. * a question mark (?) as the last character.
  29. * This is not necessary in most cases, but is
  30. * included as a work-around to a limitation of
  31. * EMWAC HTTPS
  32. ******************************************
  33.  
  34.  
  35.  
  36. ******************************************
  37. PROCEDURE customer
  38. * Sends the main menu
  39.  
  40. PRIVATE FormTxt
  41. ProcFile='customer'        && Used to display source code
  42. MergeFile='cust_menu'    && Used to display merge code
  43. * Find the merge text in the html_frm table
  44. SELECT form_text FROM html_frm WHERE form_id LIKE 'cust_menu' INTO ARRAY FormTxt
  45. html_out = MergeTxt(M.FormTxt)
  46. RETURN
  47.  
  48.  
  49.  
  50. ******************************************
  51. PROCEDURE cust_list
  52. * Creates a list of all customers
  53.  
  54. PRIVATE ListTxt, FormTxt
  55. * Create the table if it does not exist
  56. DO chk_table
  57. SELECT cust_no, lname, fname, UPPER(lname+fname) AS name;
  58.     FROM customer;
  59.     ORDER BY name;
  60.     INTO CURSOR cur_cust
  61. ProcFile='cust_list'    && Used to display source code
  62. IF RECCOUNT() > 0
  63.     M.ListTxt = '<SELECT NAME="customer" SIZE="10"><OPTION SELECTED VALUE="'+cust_no+'">'+TRIM(lname)+', '+TRIM(fname)
  64.     SKIP
  65.     SCAN REST
  66.         M.ListTxt = M.ListTxt+'<OPTION VALUE="'+cust_no+'">'+TRIM(lname)+', '+TRIM(fname)
  67.     ENDSCAN
  68.     M.ListTxt = M.ListTxt+'</SELECT>'
  69.     MergeFile='cust_list'    && Used to display merge code
  70.     * Find the merge text in the html_frm table
  71.     SELECT form_text FROM html_frm WHERE form_id LIKE 'cust_list' INTO ARRAY FormTxt
  72. ELSE
  73.     MergeFile='no_cust'    && Used to display merge code
  74.     * Find the merge text in the html_frm table
  75.     SELECT form_text FROM html_frm WHERE form_id LIKE 'no_cust' INTO ARRAY FormTxt
  76. ENDIF
  77. * See description of MergeTxt at the beginning of this file
  78. html_out = MergeTxt(M.FormTxt)
  79. RETURN
  80.  
  81.  
  82.  
  83.  
  84. ******************************************
  85. PROCEDURE cust_opt
  86. * Displays custumer record and offers
  87. * different options for action
  88.  
  89. PRIVATE FormTxt, cust_no
  90. * Read customer number
  91. M.cust_no = formField('customer')
  92.  
  93. * If there was no selection
  94. SELECT * FROM customer;
  95.     WHERE cust_no = M.cust_no;
  96.     INTO CURSOR cur_cust
  97. ProcFile='cust_opt'        && Used to display source code
  98. MergeFile='cust_opt'    && Used to display merge code
  99. * Find the merge text in the html_frm table
  100. SELECT form_text FROM html_frm WHERE form_id LIKE 'cust_opt' INTO ARRAY FormTxt
  101. * See description of MergeTxt at the beginning of this file
  102. html_out = MergeTxt(M.FormTxt)
  103. RETURN
  104.  
  105.  
  106.  
  107.  
  108. ******************************************
  109. PROCEDURE cust_form
  110. * Decodes data from form REG_NEW.HTM
  111.  
  112. PRIVATE FormTxt, cust_no, fname, lname, address, city,;
  113.     state, zip,    error_txt, mode
  114. STORE '' TO M.error_txt, M.cust_no, M.fname, M.lname, M.address,;
  115.     M.city, M.state, M.zip
  116. ProcFile='cust_form'        && Used to display source code
  117. MergeFile='cust_form'        && Used to display merge code
  118. * Find the merge text in the html_frm table
  119. SELECT form_text FROM html_frm WHERE form_id LIKE 'cust_form' INTO ARRAY FormTxt
  120. * See description of MergeTxt at the beginning of this file
  121. html_out = MergeTxt(M.FormTxt)
  122. RETURN
  123.  
  124.  
  125.  
  126. ******************************************
  127. PROCEDURE cust_result
  128. * Decodes data from form REG_NEW.HTM
  129.  
  130. PRIVATE FormTxt, cust_no, fname, lname, address, city, state, zip,;
  131.     error_txt, max_no, mode
  132. error_txt = ''
  133. * Read field contents
  134. M.cust_no = formField('cust_no')
  135. M.fname   = formField('fname')
  136. M.lname   = formField('lname')
  137. M.address = formField('address')
  138. M.city    = formField('city')
  139. M.state   = formField('state')
  140. M.zip     = formField('zip')
  141.  
  142. * Check the validity of the data
  143. IF EMPTY(M.fname)
  144.     error_txt = M.error_txt + '<LI><I>The first name was left blank</I><BR>'
  145. ENDIF
  146. IF EMPTY(M.lname)
  147.     error_txt = M.error_txt + '<LI><I>The last name was left blank</I><BR>'
  148. ENDIF
  149.  
  150. ProcFile='cust_result'        && Used to display source code
  151. * If there were errors return the form
  152. IF !EMPTY(M.error_txt)
  153.     error_txt = '<UL>'+M.error_txt+'</UL>'
  154.     MergeFile='cust_form'        && Used to display merge code
  155.     * Find the merge text in the html_frm table
  156.     SELECT form_text FROM html_frm WHERE form_id LIKE 'cust_form' INTO ARRAY FormTxt
  157.     * See description of MergeTxt at the beginning of this file
  158.     html_out = MergeTxt(M.FormTxt)
  159. ELSE
  160.     * Create the table if it does not exist
  161.     DO chk_table
  162.     * If new customer record
  163.     IF EMPTY(M.cust_no)
  164.         * Find the next available cust_no
  165.         DIMENSION max_no[1]
  166.         max_no='0'
  167.         SELECT MAX(cust_no) FROM customer INTO ARRAY max_no
  168.         cust_no = RIGHT('00'+LTRIM(STR(VAL(M.max_no)+1,3,0)),3)
  169.         * Save the data
  170.         INSERT INTO customer (cust_no, fname, lname, address, city, state, zip);
  171.             VALUE (M.cust_no, M.fname, M.lname, M.address, M.city, M.state, M.zip)
  172.     ELSE
  173.         UPDATE customer;
  174.             SET fname = M.fname,;
  175.                 lname = M.lname,;
  176.                 address = M.address,;
  177.                 city = M.city,;
  178.                 state = M.state,;
  179.                 zip = M.zip;
  180.             WHERE cust_no = M.cust_no
  181.     ENDIF
  182.     MergeFile='cust_result'        && Used to display merge code
  183.     * Find the merge text in the html_frm table
  184.     SELECT form_text FROM html_frm WHERE form_id LIKE 'cust_result' INTO ARRAY FormTxt
  185.     * See description of MergeTxt at the beginning of this file
  186.     html_out = MergeTxt(M.FormTxt)
  187. ENDIF
  188. RETURN
  189.  
  190.  
  191.  
  192. ******************************************
  193. PROCEDURE cust_edit
  194. * Places customer data in form for editing
  195.  
  196. PRIVATE FormTxt, cust_no, fname, lname, address, city,;
  197.     state, zip, error_txt
  198. error_txt = ''
  199. cust_no = FormField('cust_no')
  200. SELECT * FROM customer INTO CURSOR cur_cust;
  201.     WHERE cust_no LIKE M.cust_no
  202. SCATTER MEMVAR
  203. ProcFile='cust_edit'        && Used to display source code
  204. MergeFile='cust_form'        && Used to display merge code
  205. * Find the merge text in the html_frm table
  206. SELECT form_text FROM html_frm WHERE form_id LIKE 'cust_form' INTO ARRAY FormTxt
  207. * See description of MergeTxt at the beginning of this file
  208. html_out = MergeTxt(M.FormTxt)
  209. RETURN
  210.  
  211.  
  212.  
  213.  
  214. ******************************************
  215. PROCEDURE cust_del
  216. * Deletes a customer
  217.  
  218. PRIVATE FormTxt, cust_no
  219. cust_no = FormField('cust_no')
  220. SELECT TRIM(fname)+' '+TRIM(lname) FROM customer;
  221.     WHERE cust_no LIKE M.cust_no;
  222.     INTO ARRAY cust_name
  223.  
  224. DELETE FROM customer WHERE cust_no LIKE M.cust_no
  225.  
  226. ProcFile='cust_del'        && Used to display source code
  227. MergeFile='cust_del'    && Used to display merge code
  228. * Find the merge text in the html_frm table
  229. SELECT form_text FROM html_frm WHERE form_id LIKE 'cust_del' INTO ARRAY FormTxt
  230. * See description of MergeTxt at the beginning of this file
  231. html_out = MergeTxt(M.FormTxt)
  232. RETURN
  233.  
  234.  
  235.  
  236.  
  237. ******************************************
  238. PROCEDURE chk_table
  239. * Creates customer table if it does not exist
  240.  
  241. IF !FILE('CUSTOMER.DBF')
  242.     CREATE TABLE customer FREE;
  243.         (cust_no C(3), fname C(12), lname C(12), address C(30),;
  244.         city C(15), state C(2), zip C (10))
  245.     IF !FILE('CUSTOMER.CDX')
  246.         INDEX ON cust_no TAG cust_no
  247.         INDEX ON lname+fname TAG name
  248.     ENDIF
  249. ENDIF
  250. RETURN
  251.  
  252.  
  253.  
  254. ******************************************
  255. PROCEDURE send_prg
  256. * Creates HTML with the source code of a
  257. * specified program
  258. * This procedure assumes that all
  259. * procedures start with "PROCEDURE".
  260. * It is not meant to  be an example of
  261. * good programming.
  262.  
  263. PRIVATE FormTxt, ProcName, SourceCode, count
  264. CREATE CURSOR cr_proc (memo m)
  265. APPEND BLANK
  266. APPEND MEMO memo FROM customer.prg
  267. ProcName = UPPER(CGI.QueryString)
  268. * If procedure exists
  269. IF CHR(13)+CHR(10)+'PROCEDURE '+M.ProcName $ UPPER(memo)
  270.     * Get text from the beginning of the procedure
  271.     * to the end of the file
  272.     SourceCode = SUBSTR(memo, ATC(CHR(13)+CHR(10)+'PROCEDURE '+M.ProcName, memo)+2)
  273.     * If our procedure is not the last one in the file
  274.     IF CHR(13)+CHR(10)+'PROCEDURE' $ M.SourceCode
  275.         * Remove the rest of the procedures
  276.         SourceCode = LEFT(M.SourceCode, ATC(CHR(13)+CHR(10)+'PROCEDURE', M.SourceCode)-1)
  277.     ENDIF
  278. ELSE
  279.     SourceCode = memo
  280. ENDIF
  281. SELECT form_text FROM html_frm WHERE form_id LIKE 'source_code' INTO ARRAY FormTxt
  282. html_out = MergeTxt(M.FormTxt)
  283. * Replace '<' and '>' with '<' and '>' in
  284. * the preformatted portion of html_txt
  285. html_out = LEFT(M.html_out, ATC('<PRE>', M.html_out)+4);
  286.     + STRTRAN(STRTRAN(SUBSTR(M.html_out, ATC('<PRE>', M.html_out)+5, RAT('</PRE>', M.html_out)-ATC('<PRE>', M.html_out)-5), '<', '<'), '>', '>');
  287.     + SUBSTR(M.html_out, RAT('</PRE>', M.html_out))
  288. RETURN
  289.  
  290.  
  291.  
  292. ******************************************
  293. PROCEDURE send_memo
  294. * Creates HTML with the merge code of a
  295. * specified program
  296.  
  297. PRIVATE FormTxt
  298. SELECT form_text FROM html_frm WHERE form_id LIKE CGI.QueryString INTO ARRAY FormTxt
  299. MergeCode = M.FormTxt
  300. SELECT form_text FROM html_frm WHERE form_id LIKE 'merge_code' INTO ARRAY FormTxt
  301. html_out = MergeTxt(M.FormTxt)
  302. * Replace '<' and '>' with '<' and '>' in
  303. * the preformatted portion of html_txt
  304. html_out = LEFT(M.html_out, ATC('<PRE>', M.html_out)+4);
  305.     + STRTRAN(STRTRAN(SUBSTR(M.html_out, ATC('<PRE>', M.html_out)+5, RAT('</PRE>', M.html_out)-ATC('<PRE>', M.html_out)-5), '<', '<'), '>', '>');
  306.     + SUBSTR(M.html_out, RAT('</PRE>', M.html_out))
  307. RETURN
  308.