View Complete Thread | FoxWeb Forum Home
Search:
Date:    Msg ID:   
From:    Thread:   
Subject:   

<% PARAMETERS CartAction

   SET DEFAULT TO \\NewServer\POS\WT\Data\
  IF !USED("Portal")  && Table that has the authentication stuff to be used with the login script
    USE Portal in 0
  ENDIF
 SELECT Portal
 SET ORDER TO UserName
 IF SEEK(UPPER(ALLTRIM(Auth.USERID))) AND Portal.Active
  lcCust = UPPER(ALLTRIM(Portal.StoreID))  && Every user has a unique Store ID
  lcPrivilegeLevel = UPPER(ALLTRIM(Portal.Level))  
 ELSE
  RETURN .F.
 ENDIF
%>

<html>
<head>
<style type="text/css">
<!--
 <%=FILETOSTR('\\toyzportal\programs\wt\Portal.css')%>
-->
</style>
</head>
<body>
<basefont face="verdana, arial, helvetica" size=2>
<form name="IFrame" method="Post" action="NewIFrame.fwx">
<%
   m.ItemAction = request.item("ItemAction")   && passed from the link 
   M.CartAction = request.item("CartAction")   && passed from the URL link
   m.CheckoutAction = request.item("Checkoutbutton")  
   m.ConfirmClearCart = request.item("emptybutton")
   M.lSpecial = session.getVar("lSpecial")  && if special order or not passed from neworder by request.item

   IF NOT EMPTY(m.CheckoutAction) AND m.CheckoutAction="Submit Order"
    CheckOut(lcCust,.T.)  && Proceed to checkout and the .t. param telling the function, yes, checkout now.
    RETURN
   ENDIF

   IF NOT EMPTY(m.ConfirmClearCart) AND m.ConfirmClearCart = "Empty Cart"
    EmptyCart(lcCust,.T.)  && empty the carp (Zap the cart.dbf table)
    RETURN
   ENDIF
   IF m.CartAction = "Checkout"
    CheckOut(lcCust)  && Doesn't checkout right away, rather display with confirmation
    RETURN
   ENDIF
   IF m.CartAction = "Display"
     DisplayCart(lcCust)  && Display the content of the cart.
     RETURN
   ENDIF
   IF m.CartAction = "Empty" AND m.ConfirmClearCart != "Cancel"
         EmptyCart(lcCust)  && Empty the Cart
         RETURN
   ENDIF

   M.cCarrier = session.getVar("varCarrier")  && Session variable that help me to display the data of the items based on the filter
   M.cCategory = session.getVar("varCategory") && same as above


   IF M.cCarrier = 'All'
    M.cCarrier = ""
   ENDIF
   IF M.cCategory = 'All'
    M.cCategory = ""
   ENDIF
   cCarrierFilt = ""
   cCategoryFilt = ""
   SpecialFilt = ""
   IF !M.lSpecial
    SpecialFilt = "lPortal AND !AccAct"
   ELSE
    SpecialFilt = "SpecialOrder AND !AccAct"
   ENDIF

   IF NOT EMPTY(M.cCarrier)
    cCarrierFilt = "And Company="+["]+M.cCarrier+["]
   ENDIF
   IF NOT EMPTY(M.cCategory)
  cCategoryFilt = "And Category="+["]+M.cCategory+["]
   ENDIF
 IF NOT USED("Acc")
  USE Acc IN 0  && Table that holds the Items available for ordering (Inventory table)
 ENDIF
 m.FormCount = request.formcount()

 IF m.FormCount > 0 AND EMPTY(M.CartAction)
  *Dime arFields(m.FormCount,2)
  *nTotFields = Request.FormArray(@arFields)
  y = 1
  FOR x = 1 TO CEILING(m.FormCount/2)
   cFieldQty  = request.form("OrderQty"+alltrim(str(x)))
   cFieldRec  = val(request.form("RecNum"+alltrim(str(x))))
   IF NOT EMPTY(cFieldQty) && cFieldQty > 0
    cFieldQty = VAL(cFieldQty)
    nRec=cFieldRec && val(substr(cFieldName,9)) && Extract the record number from the name
    IF nRec > 0
     SELECT Acc
     GOTO nRec
     cItem = Acc.No
     nPrice = Acc.Cost
     nHandling = IIF(m.lSpecial,0,IIF(Acc.Category="PHONES",2,0))
     nInsurance = IIF(m.lSpecial,0,.25)
     nRecNum = RECNO()
     oFieldQty = cFieldQty && Capture the current qty before it gets changed.
     cFieldQty = VerifyItem(nRecNum,cFieldQty)
     IF cFieldQty >= 0
      lAdjust = .F.
      IF cFieldQty <> oFieldQty && the qty was adjust by the verify function
       lAdjust = .T.
      ENDIF
      AddToCart(cItem,cFieldQty,nPrice,nHandling,nInsurance,lcCust,nRecNum,lAdjust)  && Add to the Table
     ENDIF
    ENDIF
   ENDIF
  ENDFOR
  RefreshCart(lcCust)  && Just to display the totals in the main parent frame.
 ENDIF
 IF USED("Cart")
  USE IN Cart
 ENDIF
 OpenCart(lcCust)  && Open the Cart Table

  SELECT No,Name,Cost,Qty,eDate,RECNO() AS nRec FROM ACC WHERE &SpecialFilt  &cCarrierFilt &cCategoryFilt ORDER BY company,no INTO CURSOR curTemp
  SELECT curTemp
  SELECT curTemp.*,NVL(OrderQty,0) AS OrderQty,lAdjust FROM curTemp LEFT OUTER JOIN cart ON curTemp.no = cart.modelno INTO CURSOR curTemp
  SELECT curTemp

 %>
<table border="0">

  <%y=1
   SCAN
 DO CASE
 CASE Qty = 0
  cForeColor = [color='red']
 CASE DATE() - EDate < 15 and not empty(eDate) && NEW PHONE
  cForeColor = [color='blue']
 OTHERWISE
  cForeColor = [color='black']
 ENDCASE   
   
   
  %>
  <tr>
    <td width="110"><font face="Verdana" size="1" <%=cForeColor%>><%=No%></font></td>
    <td width="400"><font face="Verdana" size="1" <%=cForeColor%>><%=Name%></font></td>
    <td width="60" align="center"><font face="Verdana" size="1" <%=cForeColor%>><%=STR(Cost,7,2)%></font></td>
    <td width="60" align="center"><font face="Verdana" size="1" <%=cForeColor%>><%=Qty%></font></td>
    <td width="80"><input name="OrderQty<%=ALLTRIM(STR(y))%>" size="5" style="float: left" value="<%=IIF(OrderQty=0,"",OrderQty)%>"></td>
    <td width="40"><input type="submit" name="ItemAction" value="Update" class="button"></td>
    <%IF lAdjust%>
    <td><img src="/images/alert.gif"></td>
    <%ENDIF%>
    <input type="hidden" name="RecNum<%=ALLTRIM(STR(y))%>" value="<%=ALLTRIM(STR(nRec))%>">
  </tr>
  <%y = y + 1
  ENDSCAN%>
</table>

</form>
</body>
</html>

<% RETURN
 FUNCTION AddToCart(cItem,nQty,nPrice,nHandling,nInsurance,xCust,nRecNum,llAdjust)

&& This function opens the cart table and adds the item from the html form into the cart.

 IF USED("Cart")
  USE IN Cart
 ENDIF
 OpenCart(xCust)  && Opens that belongs for that user
 SELECT Cart
 LOCATE FOR ModelNo=cItem
 IF NOT FOUND()
  IF nQty > 0
   APPEND BLANK
  ELSE
   RETURN
  ENDIF
 ENDIF
 IF nQty = 0 && Cynthia's idea.. yea...
  DELETE  && basically the user doesn't want the item any longer.
 ELSE

  && Update the fields in the Cart.dbf table
  REPLACE ModelNo with cItem,OrderQty with nQty,ModelPrice with nPrice,BPHandling with nHandling,;
   ShipInS with nInsurance,nRec with nRecNum,lAdjust with llAdjust
 ENDIF
 RETURN
ENDFUNC
FUNCTION CreateCartTable(xCust)
 && This functions creates a Cart.dbf in the Users folder if the folder doesn't have a Cart.dbf (New User)

 cFile = ReturnCartPath(xCust)  && Returns the Path of the Folder on the server for the user.

 && Below is the Structure of the Cart.dbf Table

 IF NOT EMPTY(cFile)
  CREATE TABLE (cFile) FREE ;
   (ModelNo C(15), OrderQty N(6,0),ModelPrice N(7,2),BPHandling N(7,2),ShipINS N(7,2),lBack L(1),nRec N(10),lAdjust L(1))
  RETURN .T.
 ENDIF
 RETURN .F.
ENDFUNC

FUNCTION ReturnCartPath(xCust)
 && Where the path of the cart of the folder.  In my Portal.dbf table, i have a field called StoreID which is unique for every user

 && And from it, i use the cStoreNum to know the folder name example: \WT213\DATA\ Where WT213 is a StoreID or could be anything.

 

 LOCAL cFile,cStoreNum,lSpecial
 M.lSpecial = session.getVar("lSpecial")  && if special order or not passed from neworder by request.item

 cStoreNum = RIGHT(ALLTRIM(xCust),3) && the number after the WT130 = 130

 DO CASE
 CASE 'WT' $ xCust
  cFile = "\\Newserver\pos\toyz"+cStoreNum+"\Data\"+iif(m.lSpecial,"SpecialCart.DBF","Cart.DBF")
 CASE 'SUB' $ xCust
  cFile = "\\Newserver\pos\sub"+cStoreNum+"\Data\"+iif(m.lSpecial,"SpecialCart.DBF","Cart.DBF")
 case 'CORP' $ xCust
  cFile = "\\Newserver\pos\corp\Data\"+iif(m.lSpecial,"SpecialCart.DBF","Cart.DBF")

 OTHERWISE
  cFile = ""
 ENDCASE
 RETURN(cFile)
ENDFUNC
FUNCTION OpenCart(xCust,lExclusive)
  cFile = ReturnCartPath(xCust)
  IF FILE(cFile) && The file is there
   IF NOT USED('Cart')
    IF lExclusive
     USE (cFile) IN 0 ALIAS Cart EXCLUSIVE
    ELSE
     USE (cFile) IN 0 ALIAS Cart
    ENDIF
  ENDIF
  ELSE
   IF NOT CreateCartTable(xCust)  && Cart file will be open in the function
       response.write("Could not create Shopping Cart Table.  Please contact support")
       RETURN .F.
   ENDIF
 ENDIF
 RETURN .T.
ENDFUNC

FUNCTION DisplayCart(xCust)
 && This functions takes the content of the Cart.dbf and Prints them on the page in Table Format.

 IF NOT USED("Acc")
  *USE \\Toyzportal\dev\WT\Data\Acc IN 0
  USE Acc IN 0
 ENDIF
 IF NOT USED("Cart")
  OpenCart(xCust)
 ENDIF

 SELECT No,Name,Cost,Qty,eDate,nRec,OrderQty,lAdjust FROM Acc,Cart WHERE Acc.no = cart.modelno INTO CURSOR curTemp
 SELECT curTemp
 LOCATE
 IF EOF()%>
  <font face="verdana" size=1 color="red"><b>You do not have any items in your shopping cart.</b></font>
  <%RETURN
 ENDIF

 %>
 <table border="0">

   <%y=1
    SCAN%>
   <tr>
     <td width="110"><font face="Verdana" size="1"><%=No%></font></td>
     <td width="400"><font face="Verdana" size="1"><%=Name%></font></td>
     <td width="60" align="center"><font face="Verdana" size="1"><%=STR(Cost,7,2)%></font></td>
     <td width="60" align="center"><font face="Verdana" size="1"><%=Qty%></font></td>
     <td width="80"><input name="OrderQty<%=ALLTRIM(STR(y))%>" size="5" style="float: left" value="<%=IIF(OrderQty=0,"",OrderQty)%>"></td>
     <td width="40"><input type="submit" name="ItemAction" value="Update" class="button"></td>
     <%IF lAdjust%>
     <td><img src="/images/alert.gif"></td>
     <%ENDIF%>
     <input type="hidden" name="RecNum<%=ALLTRIM(STR(y))%>" value="<%=ALLTRIM(STR(nRec))%>">
   </tr>
   <%y = y + 1
   ENDSCAN%>
 </table>
<%ENDFUNC
FUNCTION EmptyCart(xCust,lConfirm)
 IF EMPTY(lConfirm) OR !lConfirm
 %>
  <font face="verdana" size=1 color="red"><b>Are you sure you want to empty your shopping cart and start all over?</b></font>
  <input type="submit" name="emptybutton" value="Cancel" class="nicebutton">
  <input type="submit" name="emptybutton" value="Empty Cart" class="nicebutton">
 <%ELSE
  IF NOT USED("Cart")
   OpenCart(xCust)
  ENDIF
  SELECT Cart
  DELETE ALL
  RefreshCart(xcust)
  %>
  <font face="verdana" size=1 color="red"><b>You do not have any items in your shopping cart.</b></font>
  <%
 ENDIF
ENDFUNC
FUNCTION RefreshCart(lcCust)
 IF USED("Cart")  && if Cart Table is open
  USE IN Cart
 ENDIF
 OpenCart(lcCust) && Opens and recreates the file if it doesn't exist

 SELECT Cart
 SUM OrderQty*(ModelPrice+BPHandling+ShipINS) TO nOrderTotal
 SUM OrderQty*BPHandling TO nHandling
 SUM OrderQty*ShipINS TO nShipINS
 SUM OrderQty*ModelPrice TO nSubTotal
 IF NOT USED("Customer")
  USE customer IN 0
 ENDIF
 SELECT Customer
 SET ORDER TO Cust_Num
 IF SEEK(lcCust)
  nAvailCredit = CRLimit-Balance
 ELSE
  nAvailCredit = 0
 ENDIF
 IF nOrderTotal > nAvailCredit
  IEMessagebox("You have exceeded your credit limit.  The last item will not be added.")
  SELECT Cart
  GO BOTTOM
  DELETE
  RefreshCart(lcCust)
 ENDIF
%>
 <script language="javascript">
  parent.NewOrder.nHandling.value = "$<%=STR(nHandling,7,2)%>"
  parent.NewOrder.nShipINS.value = "$<%=STR(nShipINS,7,2)%>"
  parent.NewOrder.nOrderTotal.value = "$<%=STR(nOrderTotal,10,2)%>"
  parent.NewOrder.nSubTotal.value = "$<%=STR(nSubTotal,10,2)%>"
 </script>
<%ENDFUNC
FUNCTION VerifyItem(nRecNum,nQty)
 m.lSpecialOrder = session.getvar("lSpecial")
 IF nRecNum <= 0 OR nQty <= 0
  RETURN 0
 ENDIF

 IF !m.lSpecialOrder
  IF NOT USED('ACC')
   *USE \\Toyzportal\dev\WT\Data\Acc IN 0
   USE Acc IN 0
  ENDIF
  SELECT Acc
  GOTO nRecNum
  AvailQty = Acc.Qty
  IF nQty > AvailQty
   RETURN AvailQty
  ELSE
   RETURN nQty
  ENDIF
 ELSE
  RETURN nQty  && special order might have 0 qty in acc, so just return the user's qty back.
 ENDIF
ENDFUNC
FUNCTION IEMessagebox(cText)
  IF EMPTY(cText)
      RETURN
  ENDIF
 %>
  <Script language= "javascript">
      alert("<%=cText%>")
  </script>
<%ENDFUNC
FUNCTION CheckOut(xCust,lAction)
  LOCAL m.lSpecialOrder,m.ShipMethod

  M.lSpecialOrder = session.getVar("lSpecial")  && if special order or not passed from neworder by request.item
  m.ShipMethod = request.item("cShipMethod")
  IF EMPTY(m.ShipMethod) OR m.ShipMethod = "Select a Method"
   IF lAction && if user is trying to submit but not selecting a method, we must prevent them!
    lAction = .F.  && user cannot submit yet, must select a method.
    response.write([<font face="Verdana" size="1" color="red"><b>Please select a shipping method before clicking submit</b></font><br>])
   ENDIF
  ENDIF

  IF NOT USED("Acc")
   *USE \\Toyzportal\dev\WT\Data\Acc IN 0
   USE Acc IN 0
  ENDIF
  IF NOT USED("Cart")
   OpenCart(xCust)
  ENDIF

  SELECT No,Name,Cost,Qty,nRec,OrderQty,lAdjust FROM Acc,Cart WHERE Acc.no = cart.modelno INTO CURSOR curTemp
  SELECT curTemp
  LOCATE
  IF EOF()%>
   <font face="verdana" size=1 color="red"><b>You do not have any items in your shopping cart.</b></font>
   <%RETURN
  ENDIF

  IF EMPTY(lAction) OR !lAction
  %>
  <table border="0">

    <%y=1
     SCAN%>
    <tr>
      <td width="110"><font face="Verdana" size="1"><%=No%></font></td>
      <td width="230"><font face="Verdana" size="1"><%=Name%></font></td>
      <td width="60" align="center"><font face="Verdana" size="1"><%=STR(Cost,7,2)%></font></td>
      <td width="40" align="center"><font face="Verdana" size="1"><%=Qty%></font></td>
      <td width="80"><input name="OrderQty<%=ALLTRIM(STR(y))%>" size="5" style="float: left" value="<%=IIF(OrderQty=0,"",OrderQty)%>"></td>
      <input type="hidden" name="RecNum<%=ALLTRIM(STR(y))%>" value="<%=ALLTRIM(STR(nRec))%>">
    </tr>
    <%y = y + 1
    ENDSCAN%>
  </table>
  <%
  IF !USED("ShipMethods")
   USE \\NewServer\POS\BrightPoint\ShipMethods IN 0
  ENDIF
  %>
  <br>
  <table border="0" >
       <tr>
  <td width="250">
  <p align="right"><font face="Verdana" size="1" color ="red"><b>Shipping Method:</b></font></td>
  <td width="200">
  <select name="cShipMethod">
  <option value="">Select a Method</option>
  <%
   SELECT ShipMethods
   SCAN
  %>
    <option value="<%=ShortShip%>"><%=Descript%></option>
  <%
   ENDSCAN
   USE IN ShipMethods
  %>
  </select></td>
       </tr>
       <tr>
  <td width="250">
  <p align="right">

  <font face="verdana" size=1 color="red"><b>Please verify order before submitting!</b></font></td>
  <td width="200">
  <input type="submit" name="Checkoutbutton" value="Submit Order" class="nicebutton">&nbsp;<input type="submit" name="Checkoutbutton" value="Cancel" class="nicebutton"></td>
       </tr>
     </table>
 <%ELSE

  && Saving information goes below

  IF NOT USED("Acc")
   USE Acc IN 0
  ENDIF
  SELECT Acc
  SET ORDER TO No

  IF !USED("OrderHistory")
   USE \\NewServer\POS\BrightPoint\OrderHistory IN 0
  ENDIF

  IF !USED("OrderDetail")
   USE \\NewServer\POS\BrightPoint\OrderDetail IN 0
  ENDIF
  IF !USED("OrderNum")
   USE \\NewServer\POS\BrightPoint\OrderNum IN 0
  ENDIF
  IF !USED("Customer")
   USE Customer IN 0
  ENDIF
  IF !USED("CustHist")
   USE CustHist IN 0
  ENDIF

  && Verify qtys and make sure we have enough to fullfil order
  SELECT Cart
  SCAN
      nRecNum = Cart.nRec  && Record in acc saved in cart.dbf for each item.
      oQty    = Cart.OrderQty  && what the user ordered
             availQty = VerifyItem(nRecNum,oQty)
      IF oQty <> availQty  && it has been adjusted automatically.
      SELECT Cart
      REPLACE OrderQty WITH availQty
      Response.Write("Item#: " + ModelNo + " has been adjusted to Qty: " + ALLTRIM(STR(availQty)) +"<BR>")
     ENDIF
  ENDSCAN
  RefreshCart(xCust)
  SELECT Cart
  SUM OrderQty*(ModelPrice+BPHandling+ShipINS) TO nOrderTotal
  SUM OrderQty*BPHandling TO nHandling
  SUM OrderQty*ShipINS TO nShipINS

  &&  Getting a new Order ID to be used for the invoice number
  SELECT OrderNum
  LOCATE
  IF LOCK()
   lnUniqueBit = OrderNum.NextOrder
   REPLACE OrderNum.NextOrder WITH OrderNum.NextOrder + 1
   UNLOCK
  ELSE
   lcMessage = "<br>The order can not be placed at this time. Please try again later. <br>"
   RESPONSE.WRITE(lcMessage)
   response.end
  ENDIF

  && Saving info in orderhistory.dbf
  SELECT OrderHistory
  SCATTER NAME oInvoice BLANK
   oInvoice.OrderID = lnUniqueBit
   oInvoice.StoreID = xCust && STORE999[old] - format as of 8.29.2005
   oInvoice.OrderDate = DATETIME()
   oInvoice.Total = nOrderTotal
   oInvoice.HandTot = nHandling
   oInvoice.ShipInsTot = nShipIns
   oInvoice.ShipMethod = m.ShipMethod
   IF m.lSpecialOrder
    oInvoice.lSpecial = .T.  && for special order items.
   ENDIF
   oInvoice.llProcess = .F. && set this after we process the data
   oInvoice.OrderedBy = UPPER(ALLTRIM(Auth.UserID))
   APPEND BLANK
   GATHER NAME oInvoice

  && Saving in OrderDetail
  SELECT Cart
  SCAN
   SELECT OrderDetail
   SCATTER NAME oInvoiceDetail BLANK
   oInvoiceDetail.OrderID = lnUniqueBit
   oInvoiceDetail.ModelNo = Cart.ModelNo
   oInvoiceDetail.OrderQty = Cart.OrderQty
   oInvoiceDetail.ModelPrice = Cart.ModelPrice
   oInvoiceDetail.BPHandling = Cart.OrderQty*Cart.BPHandling
   oInvoiceDetail.ShipIns = Cart.OrderQty*Cart.ShipIns
   SELECT OrderDetail
   APPEND BLANK
   GATHER NAME oInvoiceDetail
  ENDSCAN

  && Saving in CustHist for the store's history invoice
  SELECT CustHist
  SCATTER MEMVAR BLANK
   m.Cust_Num = xCust
   m.Invoice = "P" + ALLTRIM(STR(lnUniqueBit))
   m.Salesman = "WEB ORDER"
   m.P_Date = DATE()
   m.A_Credit = nOrderTotal
   m.Time = TIME()
   APPEND BLANK
   GATHER MEMVAR

  && UPdate store's balance in customer.dbf
  SELECT Customer
  SET ORDER TO Cust_Num
  LOCATE FOR UPPER(ALLTRIM(Customer.Cust_Num)) == lcCust
  IF FOUND()
   IF LOCK()
    REPLACE Customer.Balance WITH Customer.Balance+nOrderTotal
    UNLOCK
   ELSE
    response.write("Order ID was not saved.  Please call IT for support.. Balance not updated")
    response.end
   ENDIF
  ELSE
   response.write("Store ID was not found.  Please call IT for support.. Balance not updated.. Order not submitted")
   response.end
  ENDIF

  && Update ACC Table to reflect qty deduction.
  IF !m.lSpecialOrder
   SELECT Cart
   SCAN
    nRecNum = Cart.nRec
    nQty    = Cart.OrderQty
    cItem   = Cart.ModelNo

    SELECT Acc
    GOTO nRecNum
    IF cItem = Acc.No
     IF LOCK()
      REPLACE Acc.Qty WITH Acc.Qty - nQty
      UNLOCK
     ELSE
      lcMessage = "The item ( " + lcNo + " ) can not be ordered at this time. Please Call IT for help. <br>"
      RESPONSE.WRITE(lcMessage)
     ENDIF
    ELSE
     Response.Write("An error occured while locating Item from shopping cart.  Please call IT for help <br>")
    ENDIF
   ENDSCAN
  ELSE
   SendEmail(xCust,m.ShipMethod,m.Invoice)
  ENDIF
  Response.Write("Order was submitted successfully.<br>")
  Response.Write("You Order ID is: " + "P" + ALLTRIM(STR(lnUniqueBit)) + "<br>")

  IF USED('Cart')
   USE IN Cart
  ENDIF
  IF OpenCart(xCust,.T.) && open exclusive
   ZAP
   USE IN Cart
  ENDIF
 ENDIF
ENDFUNC

%>

Sent by Ali Koumaiha on 03/24/2006 06:01:59 AM:
I created a shopping cart system (very simple) for our Warehouse/Ordering.  If you like, i can post the scripts here to give you an idea?
 
It can be easily made into a class or even modified to fit your application (I think)
Sent by Joe Goldsmith on 03/23/2006 11:22:35 PM:
As much as I am looking forward to my new application I equally do not look forward to  having to create a shopping cart. I did a lot of research especially where it concerns the possibility of integrating ASP or JS routines. While integration is possible it makes the code difficult to maintain.
 
Would anyone in the forum have an idea on third party shopping carts and foxpro/foxweb? Anyone have an idea about creating one myself and the best way to maintain chosen items to be purchased? Perhaps someone has already created a shopping cart and can help with pitfalls that I may encounter. And, perhaps someone had a shopping cart application they would either share with me or offer for purchase.
 
I would appreciate hearing from forum members.
 
Joe