 ASP.NET 2005 - Criando uma 
site completo com carrinho de compras VII
   
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:
| PrivateSub 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) 
 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:
| ImportsSystem.Net.mail 
 ' </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 EndClass | 
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 
 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") 
 lblNumeroPedido.Text = nomeCliente.Substring(0, 3).ToUpper & dia.ToString & mes.ToString & Session("cep") & Session("estado") lblValorTotal.Text = String.Format("{0:c}", Session("Total")) 
 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