Solved

Simplify calculation of discount promotional code

Posted on 2010-11-17
5
1,461 Views
Last Modified: 2012-05-10
Hello,

I have a user control built on Visual Studio 2005 using vb.net with a sql2008 backend.
I am attempting to simplify the calculation of promo codes to offer discounts on event ticktets.  
The code that calculates this is as follows:
-------
Protected Sub btnVerifyPromos_Click(ByVal sender As Object, ByVal e As System.EventArgs)
               
        ' Creates myConnection as a new sqlconnection and sets it equal to DSN_PROD
        Dim myConnection As System.Data.SqlClient.SqlConnection = New System.Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings("DSN_PROD").ConnectionString)
     
        myConnection.Open()

        ' Build a sql statement string    
        Dim query1 As String = "Select PromoCode, DiscountValue, Start_Date, End_Date FROM tblPromoCodes WHERE End_Date >= GetDate() AND PromoCode = @PromoCode"

        ' Initialize the sqlCommand with the new sql string.  
        Dim Command1 As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(query1, myConnection)
       
        ' Declare txtPromoCode As TextBox and find in the form.
        Dim txtPromoCode As TextBox = DirectCast(RSVPForm1.FindControl("txtPromoCode"), TextBox)
        Dim lbl_Discount As Label = DirectCast(RSVPForm1.FindControl("lbl_Discount"), Label)
       
        Dim txtPromoStartDate As TextBox = DirectCast(RSVPForm1.FindControl("txtPromoStartDate"), TextBox)
       
        Dim lbl_PromoStartDate As Label = DirectCast(RSVPForm1.FindControl("lbl_PromoStartDate"), Label)
       
        Dim txtPromoEndDate As TextBox = DirectCast(RSVPForm1.FindControl("txtPromoEndDate"), TextBox)
       
        Dim lbl_PromoEndDate As Label = DirectCast(RSVPForm1.FindControl("lbl_PromoEndDate"), Label)
       
       
        Command1.Parameters.AddWithValue("@PromoCode", txtPromoCode.Text)
       
       
        'If there is a single quote in the string below (Dim PromoCode As String = ""),            this causes validation of the PromoCode to fail
       
        Dim PromoCode As String = ""

        Dim DiscountValue As Integer = 0
       
        Dim PromoStartDate As Date
        Dim PromoEndDate As Date
       


        'Create new parameters for the sqlCommand object and initialize them to the input values.    

        'Execute the command
        Dim reader As System.Data.SqlClient.SqlDataReader = Command1.ExecuteReader
       
        If reader IsNot Nothing AndAlso reader.HasRows Then
            reader.Read()
            PromoCode = reader.GetString(0)
            DiscountValue = reader.GetInt32(1)
           
            PromoStartDate = reader.GetDateTime((2))
            PromoEndDate = reader.GetDateTime((3))
           
           
        End If

        ' Display whether the page passed validation.
        Dim lbl_message As Label = DirectCast(RSVPForm1.FindControl("lbl_message"), Label)
         
        If Not String.IsNullOrEmpty(PromoCode) Then
         
            lbl_message.Text = "Promo Code Accepted."
            lbl_Discount.Text = "Discount Applied."
           
            txtPromoStartDate.Text = PromoStartDate.ToShortDateString()
            txtPromoEndDate.Text = PromoEndDate.ToShortDateString()
           
            lbl_PromoStartDate.Text = "Pomo Start Date Accepted"
            lbl_PromoEndDate.Text = "Promo End Date Accepted"
           
           
           
           
           
        Else
            lbl_message.Text = "Promo Code Invalid."
            lbl_Discount.Text = "Discount Not Applied."
           
            txtPromoStartDate.Text = ""
            txtPromoEndDate.Text = ""
           
            lbl_PromoStartDate.Text = "Promo Start Date Expired"
            lbl_PromoEndDate.Text = "Promo End Date Expired"

        End If

        ' args.IsValid = False
       
        If Not String.IsNullOrEmpty(PromoCode) Then
         
            lbl_message.Text = "Promo Code Accepted."
            lbl_Discount.Text = "Discount Applied."
           
            txtPromoStartDate.Text = PromoStartDate.ToShortDateString()
            txtPromoEndDate.Text = PromoEndDate.ToShortDateString()
           
            lbl_PromoStartDate.Text = "Promo Start Date Accepted"
            lbl_PromoEndDate.Text = "Promo End Date Accepted"
           
        Else
            lbl_message.Text = "Promo Code Invalid."
            lbl_Discount.Text = "Discount Not Applied."
           
            txtPromoStartDate.Text = ""
            txtPromoEndDate.Text = ""
           
            lbl_PromoStartDate.Text = "Promo Start Date Expired"
            lbl_PromoEndDate.Text = "Promo End Date Expired"
                       
         

        End If

        '******* Calculate the event price if PromoCode isValid *********
        Dim txtTotal As TextBox = DirectCast(RSVPForm1.FindControl("txtTotal"), TextBox)
       
        Dim txtNumberofTickets As TextBox = DirectCast(RSVPForm1.FindControl("txtNumberofTickets"), TextBox)

        Dim hdnTotal As HiddenField = DirectCast(RSVPForm1.FindControl("hdnTotal"), HiddenField)
             
       
       
        If Not String.IsNullOrEmpty(txtNumberofTickets.Text) Then

            Dim nt As Integer = Convert.ToInt32((txtNumberofTickets.Text))
           
            'below this line, the numer after the asterisk is the price of the event
            Dim price As Integer = nt * 100
           
            'to have a percent discount from price, use the formula below like this:
            'Dim total As Decimal = price - (price * DiscountValue / 100)
           
            'to have a hard-dollar discount from price, use the formula below like this:
            Dim total As Decimal = price - DiscountValue
           
            txtTotal.Text = total.ToString()        
           
            hdnTotal.Value = Convert.ToInt32((txtTotal.Text))
   
            hdnTotal.Value = Convert.ToInt32((total))
           

        Else
            txtTotal.Text = "0"
        End If
     
        myConnection.Close()

    End Sub
--------
The code that calls the sun above is as follows:
-------
<!--Promo Code call starts here -->
 
 <tr>
  <td style="text-align: right; white-space: nowrap; height: 25px; background-color:#FFFFFF">
<asp:Label ID="Label2" runat="server" Text="Promo Code:"></asp:Label>&nbsp;</td>
     
<td style="text-align: left; white-space: nowrap; height: 25px;">
    <asp:TextBox ID="txtPromoCode" Width="150px" runat="server"></asp:TextBox>  
 </td>    
   
 <td style="text-align: left; white-space: nowrap; height: 25px;">&nbsp; </td>
 
 <td style="text-align: left; white-space: nowrap; height: 25px;"><asp:Button ID="btnVerifyPromos" runat="server" OnClick="btnVerifyPromos_Click" Text="Verify"  />
     <asp:Label ID="lbl_message" runat="server" Text="" ></asp:Label><br />
     <asp:Label ID="lbl_Discount" runat="server" Text="" BackColor="white"></asp:Label>
 </td>      
 
  </tr>
     <!--Promo Code call ends here -->
   
  <tr>
  <td style="text-align: right; white-space: nowrap; height: 25px;">
<asp:Label ID="Label3" runat="server" Text="Number of Tickets:"></asp:Label>&nbsp;</td>
     
<td style="text-align: left; white-space: nowrap; height: 25px;">    
<asp:TextBox ID="txtNumberofTickets" runat="server" Text="1" Width="150px" ReadOnly="true" BackColor="#ebebeb" ></asp:TextBox>
 </td>    
   
 <td style="text-align: left; white-space: nowrap; height: 25px;">&nbsp;</td>
 
 <td style="text-align: left; white-space: nowrap; height: 25px;">&nbsp; </td>      
  </tr>
-----
What I'm attempting to do is to remove the "txtNumberofTickets" option (at this time, I'm assuming that one user will purchase one ticket)  such that the calculation of the discount promo codes is not dependent on the number of tickets (which is 1).

a working example: http://www.h-gac.com/TRAINING/discount_coupon_test.aspx
ANY help would be greatly appreciated.
0
Comment
Question by:Codeaddict7423
  • 3
  • 2
5 Comments
 
LVL 83

Expert Comment

by:CodeCruiser
ID: 34159383
So the discount amount remains same whether its one ticket or more?

You could use a stored procedure and return an integer value which would indicate whether the code is valid or not and if not whether its expired or invalid.
0
 

Author Comment

by:Codeaddict7423
ID: 34159439
CodeCruiser,
At this time, I'm evisioning a situation where one  user will purchase one ticket (this will expand to where one user can purchase multiple tickets and still use the promo code)
but for now: one user=one discount.
what I'm trying to do is to get away from the "txtNumberofTickets" and pull the calculation out of this statement:
"If Not String.IsNullOrEmpty(txtNumberofTickets.Text) Then
End IF"  
so that we can have this line:
-----------
 'below this line, the numer after the asterisk is the price of the event
            Dim price As Integer = nt * 100
----------
stand on its own without the txtNumbeofTickets.Text condition.

ANY hel p would be greatly appreciated.
0
 
LVL 83

Accepted Solution

by:
CodeCruiser earned 500 total points
ID: 34159514
Then replace this

If Not String.IsNullOrEmpty(txtNumberofTickets.Text) Then

            Dim nt As Integer = Convert.ToInt32((txtNumberofTickets.Text))
           
            'below this line, the numer after the asterisk is the price of the event
            Dim price As Integer = nt * 100
           
            'to have a percent discount from price, use the formula below like this:
            'Dim total As Decimal = price - (price * DiscountValue / 100)
           
            'to have a hard-dollar discount from price, use the formula below like this:
            Dim total As Decimal = price - DiscountValue
           
            txtTotal.Text = total.ToString()        
           
            hdnTotal.Value = Convert.ToInt32((txtTotal.Text))
   
            hdnTotal.Value = Convert.ToInt32((total))
           

        Else
            txtTotal.Text = "0"
        End If

with


            Dim price As Integer = 100
            Dim total As Decimal = price - DiscountValue
            txtTotal.Text = total.ToString()        
            hdnTotal.Value = Convert.ToInt32((txtTotal.Text))
            hdnTotal.Value = Convert.ToInt32((total))
0
 

Author Comment

by:Codeaddict7423
ID: 34159624
CodeCruiser,
THANK You. this worked perfectly.
I have two more tasks on my list for th is user control and I'll post each as a separate question.  Hopefully you can help me.
0
 
LVL 83

Expert Comment

by:CodeCruiser
ID: 34159656
Sure.
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Introduction HTML checkboxes provide the perfect way for a web developer to receive client input when the client's options might be none, one or many.  But the PHP code for processing the checkboxes can be confusing at first.  What if a checkbox is…
This article discusses how to create an extensible mechanism for linked drop downs.
The viewer will learn the basics of jQuery, including how to invoke it on a web page. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery.: (CODE)
The viewer will learn the basics of jQuery including how to code hide show and toggles. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery…

747 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now