%option explicit%>
<%
shopcheckadmin "shopa_displaycustomers.asp"
'**************************************************************************
' Version 6.50 Display Customers
' March 8, 2004
'**************************************************************************
'
dim Selectvalue
dim mysql
Dim Fieldcount
Dim Headnames(20)
Dim Fieldnames(20)
Dim SortType
Dim Sortfield
Dim SortUpDown, sortupdowncount
Dim Sortupdownnames(2)
Dim Sortupdownvalues(2)
Dim Idfield
Dim SearchFieldvalue, searchfieldname,searchfieldtype
Dim SelectFields, selectfieldcount
Dim i
dim orderfieldcount, orderfields
Dim item
dim dbtable
Dim scriptresponder
Dim editresponder
dim orderresponder
dim displayfields
Dim dbc
dim fieldname
Dim orderdbc, orders, orderlastdate, ordersum
dim databaseflag, multidatabase
dim formbycustomer
dim arrayfields, arrayfieldcount, arrayheaders
Dim displayfield, displayfieldcount
dim specialsearchcount
dim Specialsearch
dim Selectioncritereontext
specialsearchcount=4
Specialsearch="YES"
setsess "currenturl","shopa_displaycustomers.asp"
if request.form("advanced") > "" then
if request.form("advanced") <> getsess("advanced") then
setsess "advanced", request.form("advanced")
responseredirect "shopa_displaycustomers.asp"
end if
end if
'**********************************************************************
' main program logic
'***********************************************************************
AdminPageHeader
Opendatabases
SetDefaults
GetInputValues
Displayform
Closedatabases
adminpagetrailer
'**************************************************************
' Get parameters from request or session variables
'*************************************************************
Sub GetInputvalues
mypage = Request.querystring("page")
Searchfieldvalue=request("criterionvalue99")
Searchfieldname=request("txtfielddropdown")
'Searchfieldname=request("criterion99")
Searchfieldtype=request("criteriontype99")
'first time we need everything, othertimes sql is set up
sortfield=request("Sortfield")
' See how we are sorting
If Sortfield="" then
sortfield="contactid"
end if
SortUpdown=request("SortUpdown")
If SortUpdown="" then
sortupdown="DESC"
end if
CheckOrderSort sortfield
if mypage="" then
mypage=1
GenerateSQL
else
Mysql=GetSess("custsqlquery")
sortfield=GetSess("custsortfield")
sortupdown=GetSess("custsortupdown")
DisplayFields=GetSess("custDisplayFields")
DisplayFieldCount=GetSess("custDisplayFieldCount")
Formbycustomer=getsess("Custformbycustomer")
end if
If displayfieldcount<>0 then
arrayfields=displayfields
arrayfieldcount=displayfieldcount-1
arrayheaders=displayfields
else
arrayfields=fieldnames
arrayfieldcount=fieldcount
arrayheaders=headnames
end if
Selectfields=orderfields
selectfieldcount=orderfieldcount
AddOrderFields selectfields, selectfieldcount
end sub
'*****************************************************************
' if split databases use two opens otherwise use one
'*****************************************************************
Sub Opendatabases
multidatabase=false
If getconfig("xorderdb")<>"" or getconfig("xcustomerdb")<>"" then
opencustomerdb dbc
openorderdb orderdbc
multidatabase=true
else
shopopendatabase dbc
multidatabase=false
end if
end sub
Sub CloseDatabases
shopclosedatabase dbc
if multidatabase=false then exit sub
shopclosedatabase orderdbc
end sub
'************************************************************************
' Set default field names
'******************************************************************
Sub setDefaults
GetFieldNames ' field names for table
SetFieldnames ' default fields
GetDisplayfields ' Field to display
scriptresponder="shopa_formatcustomer.asp"
editresponder="shopa_editrecord.asp"
orderresponder="shopa_displayorders.asp"
formbycustomer=true
Idfield="contactid"
maxrecs=getconfig("xeditdisplaymaxrecords")
mypagesize=maxrecs
dbtable="customers"
end sub
'*************************************************************************
' sql has already been set up in mysql
' we are displaying data by customer
'*********************************************************************
Sub Displayform
GenerateDisplayheader
ShopopenRecordSet mysql, rsorder, mypagesize, mypage
GenerateTableByCustomer ' write the tabe
Call PageNavBar (Mysql) ' put bottom navigation bar
closerecordset rsorder
end sub
'*************************************************************************
' generate SQL
' SQL is generate by using fields on form
'*************************************************************************
Sub GenerateSQL
If formbycustomer=false then
GenerateSqlByOrder
exit sub
end if
dim sqlproc
dim key
dim sqladd
if Request("Selectioncritereontext")<>"" then
if trim(ucase(request("Selectioncritereontext"))) <> trim(ucase(session("sqlquery"))) then
mysql=request("Selectioncritereontext")
setsess "sqlquery", request("Selectioncritereontext")
exit sub
end if
end if
sqladd=" Where"
MySql = "SELECT * from " & lcase(dbtable)
dim i
dim bracketopen
bracketopen=false
simplespecialsearchterm MYSQL,sqladd,Request("criterion99"),Request("criterionvalue99"),Request("criteriontype99"),bracketopen
For i = 1 to specialsearchcount
specialsearchterm MYSQL,sqladd,Request("criterion" & i),Request("criterionvalue" & i ),Request("Selection" & i),bracketopen
Next
if bracketopen then MYSQl=MYSQL & ")"
if Selectvalue<> "" then
key = SelectValue & "%"
mySQL = MySQL & " where " & SelectField & " like '" & replace(key, "'", "''") & "'"
sqladd=" AND "
end if
If sortfield="" then sortfield=idfield
If sortfield<>"" then
mysql=mysql & " order by " & sortfield & " " & sortupdown
end if
SetSess "custsqlquery",MySQL
Setsess "custsortfield",sortfield
Setsess "custsortupdown",sortupdown
SetSess "custformbycustomer",formbycustomer
If getconfig("xdebug")="Yes" then
debugwrite "generated sql=" & mysql & " "
end if
End sub
Sub GenerateSQL_OLD
If formbycustomer=false then
GenerateSqlByOrder
exit sub
end if
dim sqlproc
dim dbtable, whereok
dbtable="customers"
MySql = "SELECT contactid from " & dbtable
whereok=" WHERE "
If searchfieldvalue<>"" and searchfieldname<> getlang("Langcommonselect") then
mysql = mysql & whereOK & searchfieldname & " LIKE '%" & replace(searchfieldvalue,"'","''") & "%'"
end if
If sortfield<>"" then
mysql=mysql & " order by " & sortfield & " " & sortupdown
end if
SetSess "custsqlquery",MySQL
SetSess "custsortfield",sortfield
SetSess "custsortupdown",sortupdown
SetSess "sortupdown",sortupdown
SetSess "custformbycustomer",formbycustomer
'debugwrite mysql
End sub
'
'**********************************************************************
' recordset rsorder has been opened, array tells us want to display
' arrayfields=displayfields
' arrayfieldcount=displayfieldcount
' arrayheaders=displayfields
'*****************************************************************
Sub GenerateTableByCustomer
dim howmanyfields
dim howmanyrecs
dim my_link
dim rc
dim customeridfield, custrs
dim orderid, fieldname, fieldvalue, customerid
If formbycustomer=True then
customeridfield="contactid"
else
customeridfield="ocustomerid"
end if
howmanyfields=arrayfieldcount
GenerateDisplayHeaderFlat
GenerateDisplayBodyHeader
%>
<%
GenerateDisplayBodyFooter
end sub
'********************************************************************
' Basic Fields to display
'********************************************************************
Sub SetFieldNames
Fieldcount=5
fieldnames(0)="lastname"
fieldnames(1)="firstname"
fieldnames(2)="country"
fieldnames(3)="state"
fieldnames(4)="email"
AddOrderFields fieldnames, fieldcount
fieldcount=fieldcount-1
'
headnames(0)=getlang("langcustlastname")
headnames(1)=getlang("langcustfirstname")
HeadNames(2)=getlang("langCustCountry")
HeadNames(3)=getlang("langCustState")
HeadNames(4)=getlang("langCustemail")
Headnames(5)=getlang("LangAffViewOrders")
Headnames(6)=getlang("LangAffAmount")
Headnames(7)=getlang("LangAffLastDate")
Sortupdownnames(0)=getlang("langAscending")
Sortupdownnames(1)=getlang("langDescending")
Sortupdownvalues(0)="ASC"
Sortupdownvalues(1)="DESC"
sortupdowncount=2
end sub
Sub AddOrderFields (darray, darraycount)
darray(darraycount)="ordercount"
darraycount=darraycount+1
darray(darraycount)="ordertotal"
darraycount=darraycount+1
darray(darraycount)="orderlastdate"
darraycount=darraycount+1
end sub
'********************************************************************
' Basic form used to dispaly customers to allow selection
'*********************************************************************
'
Sub GenerateDisplayHeader_old
%>
<%end sub
Sub GenerateSelect (iFieldnames,ifieldvalues,currentvalue,selectname, count)
%>
<%
end sub
Sub GenerateSearch
%>
<%
end sub
'****************************************************************************
' allow merchant to display fields they want to see
'*****************************************************************************
Sub GenerateFieldSelection
%>
<%
end sub
'********************************************************************
' we need to know fields in customer table
'*******************************************************************
Sub GetFieldNames
dim sqltemp, rstemp
If GetSess("custfieldcount")<>"" then
Orderfields=GetSessA("CustFields")
OrderfieldCount=GetSess("CustFieldCount")
exit sub
end if
redim orderfields(200)
sqltemp="select * from customers "
set rstemp=dbc.execute(sqltemp)
orderfieldcount=rstemp.fields.count -1
for i=0 to orderfieldcount
OrderFields(i)= rstemp(i).name
next
SetSessA "CustFields",Orderfields
SetSess "CustFieldCount",Orderfieldcount
rstemp.close
set rstemp=nothing
end sub
'*************************************************************************
' Need to get number of orders for this customer
'***********************************************************************
Sub Getorderdetails (contactid)
Dim sql, rs
orders=0
orderlastdate=""
ordersum=0
sql="select * from orders where ocustomerid=" & contactid
sql=sql & " order by orderid"
If Multidatabase=True then
set rs=orderdbc.execute(sql)
else
set rs=dbc.execute(sql)
end if
do while not rs.eof
orders=orders+1
ordersum=ordersum+rs("orderamount")
orderlastdate=rs("odate")
rs.movenext
loop
closerecordset rs
end sub
'*************************************************************************
' Need to get number of orders for this customer
'***********************************************************************
Sub GetCustomerdetails (contactid, custrs, rc)
Dim sql
If contactid<>"" then
sql="select * from customers where contactid=" & contactid
set custrs=dbc.execute(sql)
If custrs.eof then
rc=4
else
rc=0
end if
else
rc=4
end if
end sub
Sub AddCustEdit (rsorder)
dim my_link
my_link=editresponder & "?which=" & rsorder(idfield) & "&idfield=" & idfield & "&table=customers"
%>
<%
end sub
'
Sub GetDisplayFields
dim i
Dim displayArray(200)
DisplayFieldCount = Request("DisplayFields").Count
'Debugwrite DisplayfieldCount
if DisplayfieldCount=0 then
SetSess "CustDisplayfieldcount",displayfieldcount
exit sub
end if
displayField=Request("DisplayFields")
DisplayFields= Split(DisplayField, ", ", -1, 1)
If DisplayFields(0)="All" then
Displayfieldcount=0
end if
SetSessA "CustDisplayFields",DisplayFields
SetSess "CustDisplayfieldcount",displayfieldcount
end sub
Sub CheckorderSort (sortfield)
dim prefix
prefix=left(sortfield,5)
if prefix="order" then
formbycustomer=False ' do form by orders
end if
end sub
'*****************************************************************
' If doing order Fields
'*****************************************************************
Sub GenerateSQlBYOrder
mysql="SELECT ocustomerid, Sum(orders.orderamount) AS ordertotal, Count(orders.orderid) AS ordercount "
mysql=mysql & " FROM orders GROUP BY orders.ocustomerid"
If sortfield<>"" then
Select case sortfield
case "ordercount"
mysql=mysql & " ORDER BY Count(orders.orderid)"
case "ordertotal"
mysql=mysql & " Order by Sum(orders.orderamount)"
case else
mysql=mysql & " Order by ocustomerid"
end select
mysql=mysql & " " & sortupdown
end if
SetSess "custsqlquery",MySQL
SetSess "custsortfield",sortfield
SetSess "custsortupdown",sortupdown
SetSess "sortupdown",sortupdown
SetSess "custformbycustomer",formbycustomer
'debugwrite mysql
end sub
'==============================================
' SPECIAL SEARCH CUSTOMISATION
' Writes the Table
'==============================================
Sub WriteSelectTable (num)
dim i
Selectioncritereontext=MYSQL
%>
<%
For i = 1 to num
%>
Select <%=i%>
<%
Next
%>
<%
For i = 1 to num
%>
<%Writetableallfields dbtable,i,""%>
<%
Next
%>
<%
For i = 1 to num
%>
" name=criterionvalue<%=i%> size="15">
<%
Next
%>
<%
For i = 1 to num
%>
<%RadioButtons i%>
<%
Next
%>
<%
End Sub
'==============================================
'==============================================
' SPECIAL SEARCH CUSTOMISATION
' Write all the fields for that table
'==============================================
Sub callSpecialSearch
WriteSelectTable specialsearchcount
End Sub
Sub Writetableallfields (dbtable,num,selecttype)
dim sql,rs,fieldnamestable,fieldcount,strselect,fldName,selected
fieldcount=0
if selecttype="multiple" then
strselect=" type=multiple size=5 "
else
strselect=" size=1"
end if
SQL = "SELECT * FROM " & dbtable
Set rs = dbc.Execute(SQL)
%>
<%
closerecordset rs
End Sub
Sub RadioButtons (num)
if num=specialsearchcount then exit sub
dim value,i,selected
dim valuearray(3)
valuearray(0)="And"
valuearray(1)="Or"
valuearray(2)="Not"
value=Request("Selection"&num)
%>
<%
if value="" then value="Or"
For i = 0 to 2
if value=valuearray(i) then
selected=" CHECKED"
else
selected=""
end if
%>
<%=valuearray(i)%>
<%=Selected%>>
<%
Next
%>
<%
End Sub
Sub Writeselect(table,num,idfield,fieldname)
sql="select * from " & table & ""
set rs=dbc.execute(sql)
%>
<%
closerecordset rs
End Sub
dim prevandor
prevandor=""
Sub specialsearchterm (SQL,sqladd,criterion,criterionvalue,andor,bracketopen)
dim openbracket,closebracket
openbracket=""
closebracket=""
if criterionvalue="" then exit sub
if lcase(Sqladd)=" where" then
sql=sql & sqladd
sqladd="AND"
end if
if lcase(andor) = "not" then
andor=" and "
sql = sql & prevandor
sql = sql & " " & criterion & " Not like '%" & replace(criterionvalue,"'","''") & "%'"
prevandor=andor
else
select case (lcase(andor))
case "or"
if bracketopen=false then
openbracket="("
bracketopen=true
end if
case "and"
if bracketopen then
closebracket=")"
bracketopen=false
end if
end select
sql = sql & " " & prevandor & " " & openbracket & criterion & " like '%" & replace(criterionvalue,"'","''") & "%'" & closebracket & " "
prevandor=andor
end if
sqladd="AND"
End Sub
Sub simplespecialsearchterm (SQL,sqladd,criterion,criterionvalue,criteriontype,bracketopen)
dim openbracket,closebracket
openbracket=""
closebracket=""
if criterionvalue="" then exit sub
if lcase(Sqladd)=" where" then
sql=sql & sqladd
sqladd="AND"
end if
if bracketopen then
closebracket=")"
bracketopen=false
end if
select case criteriontype
case "equals"
criterionvalue = " like '" & replace(criterionvalue,"'","''") & "' "
case "starts with"
criterionvalue = " like '" & replace(criterionvalue,"'","''") & "%' "
case "contains"
criterionvalue = " like '%" & replace(criterionvalue,"'","''") & "%' "
end select
sql = sql & " " & openbracket & criterion & criterionvalue & closebracket
sqladd="AND"
End Sub
'==============================================
Sub AddHowMany
%>