ASP.NET 2005 - Criando uma site completo com carrinho de compras VII


Para acompanhar o desenvolvimento sobre a construção do site completo com carrinho de compras veja os artigos já publicados:  

Este será o último artigo da segunda parte faltando apenas as páginas da administração do site.

No artigo anterior efetuamos a gravação do pedido do usuário e seus itens nas tabelas Pedidos e ItensPedidos após identificar o cliente solicitando a sua autenticação, desta forma os dados do cliente são armazenados na sessão e exibidos na página Confirma.aspx , abaixo , onde o usuário deverá confirmar o pedido feito;

No menu WebSite->Add New Item selecione o template Web Form e informe o nome da página confirma.aspx selecionando o code-behind e a master page e clicando no botão OK.

A seguir defina o leiaute da página conforme abaixo usando os controles Label , TextBox e Button;

O código associado ao evento Click do botão Cancelar deverá esvaziar a cesta do usuário e redirecioná-lo para página padrão conforme o código a seguir:

Protected Sub btnCancelar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCancelar.Click

    Session("Cesta") = Nothing
    Response.Redirect(
"Default.aspx")

End Sub

O código do botão Confirmar irá chamar a rotina confirmaPedido()

Protected Sub btnConfirmar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnConfirmar.Click

    confirmaPedido()

End Sub

A rotina confirmaPedido() possui o seguinte código: 

Private Sub confirmaPedido()
 

Dim strcon As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\home\macoratti\dados\JcmSoft.mdb"

Dim conn As OleDbConnection = New OleDbConnection(strcon)

Dim cmd As OleDbCommand = New OleDbCommand("sp_ConfirmaPedido", conn)


cmd.CommandType = CommandType.StoredProcedure


Dim
parmConfirma As OleDbParameter = New OleDbParameter("@confirma"
, OleDbType.Boolean)

parmConfirma.Value = True

cmd.Parameters.Add(parmConfirma)


Dim
parmnumPedido As OleDbParameter = New OleDbParameter("@numeroPedido"
, OleDbType.VarChar, 50)

parmnumPedido.Value = numeroPedido

cmd.Parameters.Add(parmnumPedido)


Dim
parmCodPedido As OleDbParameter = New OleDbParameter("@pedidoID"
, OleDbType.Integer)

parmCodPedido.Value = Session("codigoPedido")

cmd.Parameters.Add(parmCodPedido)


Try

   'abre a conexao e executa a stored procedure

    conn.Open()

    cmd.ExecuteNonQuery()

Catch ex As Exception

    lblMensagem.Text = "Erro ao acessar os dados : " & vbCrLf & ex.Message

    conn.Close()

     Exit Sub

End Try

 

Try

    Email.enviaMensagemEmail(Application("emailOrigem"), Session("Email"), "", "", "Pedido no. " & numeroPedido, montaTexto())

    Response.Redirect("finalizaCompras.aspx")

Catch ex As Exception

    lblMensagem.Text = "Erro ao acessar os dados : " & vbCrLf & ex.Message

Finally

   If conn.State = ConnectionState.Open Then

      conn.Close()

    End If

End Try

End Sub

Neste código eu estou atualizando a tabela Pedidos gravando a confirmação e o número do pedido que foi gerado para identificação do pedido.

Eu estou usando um procedimento armazenado chamado sp_ConfirmaPedido que possui o seguinte código:

UPDATE Pedidos SET confirmado = [@confirma], numeroPedido = [@numeroPedido]
WHERE PedidoID=[@PedidoID];

Este procedimento usa 3 parâmetros : confirma ,numeroPedido e PedidoID que são definidos no código. A seguir o comando é executado usando a instrução ExecuteNonQuery() que não retorna nenhum registro.

Nesta rotina , na sequência, é usado o método enviaMensagem() da classe Email.  A classe Email foi criada no projeto da seguinte forma:

No menu WebSite->Add New Item selecione o template Class e informe o nome Email.vb. O arquivo será colocado na pasta App_Code. A seguir inclua o seguinte código no arquivo:

Imports System.Net.mail


Public
Class Email


' </summary>

' <param name="from">Endereco do Remetente</param>

' <param name="recepient">Destinatario</param>

' <param name="bcc">recipiente Bcc</param>

' <param name="cc">recipiente Cc</param>

' <param name="subject">Assunto do email</param>

' <param name="body">Corpo da mensagem de email</param>


Public
Shared Sub enviaMensagemEmail(ByVal from As String, ByVal recepient As String, ByVal bcc As String
, _

ByVal cc As String, ByVal subject As String, ByVal body As String)


' cria uma instância do objeto MailMessage

Dim mMailMessage As New MailMessage()


' Define o endereço do remetente

mMailMessage.From = New MailAddress(from)


' Define o destinario da mensagem

mMailMessage.To.Add(New MailAddress(recepient))


' Verifica se o valor para bcc é null ou uma string vazia

If Not bcc Is Nothing And bcc <> String.Empty Then


  ' Define o endereço bcc

   mMailMessage.Bcc.Add(New MailAddress(bcc))

End If
 

' verifica se o valor para cc é nulo ou uma string vazia

If Not cc Is Nothing And cc <> String.Empty Then

  ' Define o endereço cc

  mMailMessage.CC.Add(New MailAddress(cc))

End If
 

' Define o assunto

mMailMessage.Subject = subject

' Define o corpo da mensagem

mMailMessage.Body = body

' Define o formato do email como HTML

mMailMessage.IsBodyHtml = True

' Define a prioridade da mensagem como normal

mMailMessage.Priority = MailPriority.Normal

' Cria uma instância de SmtpClient - Nota - Define qual o host a ser usado para envio

' de mensagens, no local de smtp.server.com use o nome do SEU servidor

Dim mSmtpClient As New SmtpClient("localhost")

' Envia o email

mSmtpClient.Send(mMailMessage)

End Sub

End Class

Como o método enviaMensagemEmail é estático (shared) não precisamos instanciar a classe Email para usá-lo.

Nota:  Eu estou usando o servidor STMP padrão da minha máquina local para enviar os emails. Veja como configurar o servidor SMTP do IIS neste artigo: Configurando o servidor SMTP no IIS

Todos os dados necessários ao envio do email ao cliente são passado no método conforme vemos a seguir:

 Email.enviaMensagemEmail(Application("emailOrigem"), Session("Email"), "", "", "Pedido no. " & numeroPedido, montaTexto())

Perceba que estamos usando a função montaTexto() para montar o texto que será efetivamente enviado ao cliente. O código desta rotina esta abaixo:

Private Function montaTexto() As String

 

Dim texto As New StringBuilder(" O B R I G A D O P O R C O M P R A R N O MACORATTI.NET")

 

texto = texto.AppendLine

texto = texto.AppendLine

texto = texto.Append("Prezado(a) " & Session("nomeCliente"))

texto = texto.AppendLine

texto = texto.AppendLine

texto = texto.Append("Esta é a confirmação de que seu pedido de No. " & numeroPedido & " foi finalizado com sucesso.")

texto = texto.AppendLine

texto = texto.AppendLine

texto = texto.Append("Data do Pedido : " & DateTime.Now)

texto = texto.AppendLine

texto = texto.Append("Valor total do pedido : " & String.Format("{0:c}", Session("Total")))

texto = texto.AppendLine

texto = texto.AppendLine

texto = texto.Append("Você deve efetuar o pagamento do pedido em um dos seguintes bancos: ")

texto = texto.AppendLine

texto = texto.AppendLine

texto = texto.Append("Banco do Brasil Agência: 0057-4 Conta: 42179-0 Variação=01 POUPANÇA")

texto = texto.AppendLine

texto = texto.Append("Banco Bradesco Agência: 2962-9 Conta: 4565-9 POUPANÇA")

texto = texto.AppendLine

texto = texto.AppendLine

texto = texto.Append("Após o pagamento envie um email para macoratti@yahoo.com informando o número do documento.")

texto = texto.AppendLine

texto = texto.AppendLine

texto = texto.Append("Seu pedido será enviado via correio para o endereço: ")

texto = texto.AppendLine

texto = texto.AppendLine

texto = texto.Append(Session("endereco"))

texto = texto.AppendLine

texto = texto.Append(Session("cidade") & " - " & Session("estado"))

texto = texto.AppendLine

texto = texto.Append(Session("cep"))

texto = texto.AppendLine

texto = texto.AppendLine

texto = texto.Append("O prazo médio da entrega é 5 dias.")

Return texto.ToString

End Function

A função MontaTexto usa a classe StringBuilder para montar uma string contendo o texto a ser enviado ao cliente no corpo do email.

Nota: Para saber mais sobre a classe StringBuilder leia o artigo: VB .NET - StringBuilder : tratando Strings de modo mais eficiente

Após enviar o email o cliente é redirecionado para a página finalizaCompras.aspx que apresenta um resumo da sua compra e indica que ela foi finalizada com sucesso.

No menu WebSite->Add New Item selecione o template Web Form e informe o nome da página finalizaCompras.aspx selecionando o code-behind e a master page e clicando no botão OK.

A seguir defina o leiaute da página conforme abaixo usando os controles Label , TextBox e Hyperlink;

No evento Load desta página verificamos se o cliente esta logado e se a cesta não esta vazia, em seguida preenchemos os controles com os dados obtidos na sessão e no final esvaziamos a cesta do cliente conforme o código a seguir.

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load


Dim dia As Integer = DateTime.Now.Day

Dim mes As Integer = DateTime.Now.Month


If
Session("cesta") Is Nothing
Then

    Response.Redirect("Default.aspx")

End If

 

If Session("ClienteID") Is Nothing Then

    Response.Redirect("login.aspx")

End If

 

'obtem os valores do pedido

Dim nomeCliente As String = Session("nomeCliente")


lblCliente.Text = nomeCliente

lblNumeroPedido.Text = nomeCliente.Substring(0, 3).ToUpper & dia.ToString & mes.ToString & Session("cep") & Session("estado")

lblValorTotal.Text = String.Format("{0:c}", Session("Total"))


If Not Session("Cesta") Is Nothing Then

    Session("Cesta") = Nothing

End If

End Sub

Clicando no botão Retornar o cliente retorna a página inicial do site.

Com isso terminamos todo ciclo de compras feito pelo cliente a próxima etapa será criar as páginas para administrar o site onde serão realizadas operações de cadastramento e manutenção de produtos, artigos e cliente.

Veja a continuação do artigo em : Site completo com carrinho de compras VIII

A vídeo Aula deste artigo esta no Super DVD Vídeo Aulas

Até o próximo artigo .NET 


José Carlos Macoratti