Imports System.Data
Imports System.Data.SqlClient
Imports trata_sql
Imports System.Net.Mail
Partial Class _Default
Inherits System.Web.UI.Page
Dim aprovador, produto, descricao, data_req As String
Dim cod_ped, id_aprovador, id_produto, _
quant, quantidade_prod As Integer
Dim data_aceit As DateTime
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Page.IsPostBack Then
Dim rnd As New Random
Dim auxRnd As Integer
Dim bt As Button
Dim auxHiddenArgument As HiddenField
For Each row As GridViewRow In Me.GridView_pendentes.Rows
auxRnd = rnd.Next()
bt = CType(row.FindControl("Btnactualizar"), Button)
auxHiddenArgument = CType(row.FindControl("auxHiddenArgument_pend"), HiddenField)
bt.CommandArgument = auxRnd
auxHiddenArgument.Value = auxRnd
Next
End If
End Sub
Protected Sub GridView_pendentes_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView_pendentes.RowCommand
If (e.CommandName = "Botaoactualizar") Then
Dim auxHiddenArgument As String = ""
'Dim nome_produto As String
For Each row As GridViewRow In Me.GridView_pendentes.Rows
auxHiddenArgument = CType(row.FindControl("auxHiddenArgument_pend"), HiddenField).Value
If Not TypeOf Session("loginid") Is Object Then
Me.Lbl_mensagem.Text = " O seu login expirou ....... " & _
vbCrLf & " Agradecia que sai-se da aplicação e volta-se a entrar "
Return
End If
If (e.CommandArgument = auxHiddenArgument) Then 'encontrou o botão k fez o pedido
'capta o nome do produto do botão clicado
aprovador = row.Cells(1).Text
produto = row.Cells(4).Text
cod_ped = Val(row.Cells(3).Text)
data_req = row.Cells(5).Text
data_aceit = DateTime.Now
quant = Val(row.Cells(9).Text)
descricao = row.Cells(10).Text
'Dim data As String
'data = data_aceit.ToString("dd/MM/yyyy hh:mm:ss:ms")
'guarda id do utilizador
id_aprovador = procura_id_utilizador(aprovador)
'guarda id do produto
id_produto = procura_id_produto(produto)
' guarda a quantidade do produto existente em stock
quantidade_prod = procura_quant_prod(id_produto)
Me.Lbl_mensagem.Visible = True
Me.Lbl_mensagem.Text = "" & quant
If quant <= quantidade_prod Then
' guardar um novo registo com estado = 2 ( aceite/entregue )
Dim ligacao_stock As SqlConnection = New SqlConnection(str_ligacao)
Dim inserir_sql_stock As String = " Insert into TabPedido( " & _
" IdUtilizador,IdProduto,DataHora,Quantidade,codigo,Estado) " & _
" values (@IdUtilizador,@IdProduto,@DataHora,@Quantidade,@codigo,@Estado)"
Dim comando As SqlCommand = New SqlCommand(inserir_sql_stock, ligacao_stock)
' cria as variaveis tipo sql parameter associadas aos respectivos tipos
Dim IdUtilizador As SqlParameter = New SqlParameter("@IdUtilizador", SqlDbType.Int)
Dim IdProduto As SqlParameter = New SqlParameter("@IdProduto", SqlDbType.Int)
Dim DataHora As SqlParameter = New SqlParameter("@DataHora", SqlDbType.DateTime)
Dim Quantidade As SqlParameter = New SqlParameter("@Quantidade", SqlDbType.Int)
Dim Codigo As SqlParameter = New SqlParameter("@Codigo", SqlDbType.Int)
Dim Estado As SqlParameter = New SqlParameter("@Estado", SqlDbType.Int)
IdUtilizador.Value = id_aprovador
IdProduto.Value = id_produto
DataHora.Value = data_aceit
Quantidade.Value = quant
Codigo.Value = cod_ped
Estado.Value = 2
comando.Parameters.Add(IdUtilizador)
comando.Parameters.Add(IdProduto)
comando.Parameters.Add(DataHora)
comando.Parameters.Add(Quantidade)
comando.Parameters.Add(Codigo)
comando.Parameters.Add(Estado)
ligacao_stock.Open()
' retorna o número de registros afetados pela instrução SQL
Dim num As Integer = comando.ExecuteNonQuery
If num = 1 Then
Me.Lbl_mensagem.Visible = True
Me.Lbl_mensagem.Text = "Pedido actualizado com sucesso"
Else
Me.Lbl_mensagem.Visible = True
Me.Lbl_mensagem.Text = "Erro de sistema Favor contactar o Administrador "
End If
ligacao_stock.Close()
''****************************************************************************************
''guardar um novo registo com estado = 4 ( entregue ) =0
Dim ligacao_est As SqlConnection = New SqlConnection(str_ligacao)
Dim inserir_est As String = " Insert into TabPedido( " & _
" IdUtilizador,IdProduto,DataHora,Quantidade,codigo,Estado) " & _
" values (@IdUtilizador,@IdProduto,@DataHora,@Quantidade,@codigo,@Estado)"
Dim cmd_est As SqlCommand = New SqlCommand(inserir_est, ligacao_est)
'' cria as variaveis tipo sql parameter associadas aos respectivos tipos
Dim est_IdUtilizador As SqlParameter = New SqlParameter("@IdUtilizador", SqlDbType.Int)
Dim est_IdProduto As SqlParameter = New SqlParameter("@IdProduto", SqlDbType.Int)
Dim est_DataHora As SqlParameter = New SqlParameter("@DataHora", SqlDbType.DateTime)
Dim est_Quantidade As SqlParameter = New SqlParameter("@Quantidade", SqlDbType.Int)
Dim est_Codigo As SqlParameter = New SqlParameter("@Codigo", SqlDbType.Int)
Dim est_Estado As SqlParameter = New SqlParameter("@Estado", SqlDbType.SmallInt)
est_IdUtilizador.Value = id_aprovador
est_IdProduto.Value = id_produto
est_DataHora.Value = data_aceit
est_Quantidade.Value = 0
est_Codigo.Value = cod_ped
est_Estado.Value = 4
'' insere os valores na bd
cmd_est.Parameters.Add(est_IdUtilizador)
cmd_est.Parameters.Add(est_IdProduto)
cmd_est.Parameters.Add(est_DataHora)
cmd_est.Parameters.Add(est_Quantidade)
cmd_est.Parameters.Add(est_Codigo)
cmd_est.Parameters.Add(est_Estado)
ligacao_est.Open()
' retorna o número de registros afetados pela instrução SQL
Dim num2 As Integer = cmd_est.ExecuteNonQuery
If num2 = 1 Then
Me.Lbl_mensagem.Visible = True
Me.Lbl_mensagem.Text = "Pedido entregue com sucesso"
Else
Me.Lbl_mensagem.Visible = True
Me.Lbl_mensagem.Text = "Erro de sistema Favor contactar o Administrador "
End If
'******************************************
'update ao registo com estado=1 deste pedido
'*******************************************
Dim act_pend As SqlConnection = New SqlConnection(str_ligacao)
act_pend.Open()
Dim update_pend As String = " Update TabPedido " & _
" set quantidade = '" & 0 & _
"' where codigo = '" & cod_ped & "' and" & _
" estado= '" & 1 & "'"
Dim cmd_pend As SqlCommand = New SqlCommand(update_pend, act_pend)
cmd_pend.ExecuteNonQuery()
act_pend.Close()
'***********************************
' actualiza o stock do produto
'***********************************
ligacao_est.Close()
Dim novo_stock As Integer
novo_stock = quantidade_prod - quant
If novo_stock < 0 Then
novo_stock = 0
Else
novo_stock = novo_stock
End If
Dim act_stock As SqlConnection = New SqlConnection(str_ligacao)
act_stock.Open()
Dim update_stock As String = " Update TabProduto " & _
" set stock = '" & novo_stock & _
"' where id = '" & id_produto & "'"
Dim cmd As SqlCommand = New SqlCommand(update_stock, act_stock)
cmd.ExecuteNonQuery()
act_stock.Close()
envia_mail(produto, descricao, data_req, quant, aprovador)
' guarda um reg no historico stocks com o valor retirado em stock
Dim ligacao_historico As SqlConnection = New SqlConnection(str_ligacao)
Dim inserir_historico As String = " Insert into tabStockhistorico( " & _
"IdUtilizador, IdProduto, DataHora, Quantidade, CodigoPedido)" & _
" VALUES (@IdUtilizador, @Idproduto,GETDATE() , @Quantidade,@codigopedido)"
Dim cmd_hist As SqlCommand = New SqlCommand(inserir_historico, ligacao_historico)
'' cria as variaveis tipo sql parameter associadas aos respectivos tipos
Dim hist_IdUtilizador As SqlParameter = New SqlParameter("@IdUtilizador", SqlDbType.Int)
Dim hist_IdProduto As SqlParameter = New SqlParameter("@Idproduto", SqlDbType.Int)
Dim hist_Quantidade As SqlParameter = New SqlParameter("@Quantidade", SqlDbType.Int)
Dim hist_Codigo As SqlParameter = New SqlParameter("@Codigopedido", SqlDbType.Int)
hist_IdUtilizador.Value = id_aprovador
hist_IdProduto.Value = id_produto
hist_Quantidade.Value = quant
hist_Codigo.Value = cod_ped
'' insere os valores na bd
cmd_hist.Parameters.Add(hist_IdUtilizador)
cmd_hist.Parameters.Add(hist_IdProduto)
cmd_hist.Parameters.Add(hist_Quantidade)
cmd_hist.Parameters.Add(hist_Codigo)
ligacao_historico.Open()
' retorna o número de registros afetados pela instrução SQL
Dim num4 As Integer = cmd_hist.ExecuteNonQuery
If num4 = 1 Then
'Me.Lbl_mensagem.Visible = True
'Me.Lbl_mensagem.Text = "Pedido entregue com sucesso"
Else
'Me.Lbl_mensagem.Visible = True
'Me.Lbl_mensagem.Text = "Erro de sistema Favor contactar o Administrador "
End If
ligacao_historico.Close()
Else
Me.Lbl_mensagem.Visible = True
Me.Lbl_mensagem.Text = "0/A - " & produto & " devivo a rotura em stock não pode ser entregue"
End If
'Me.GridView_pendentes.DataBind()
''*************************** não mexer *****************************************
Exit For 'forçar saida do ciclo for each da greed view
End If 'fim do if (If (e.CommandArgument = auxHiddenArgument))
Next ' fim do ciclo ( For Each row As GridViewRow In GridView_requizitados.Rows)
End If
End Sub
#Region "funçôes"
' procura o id de utilizador
Function procura_id_utilizador(ByVal util As String) As Integer
Dim id_util As Integer
Dim ligacao_id_util As String = str_ligacao
Dim Select_id_util As String = " SELECT Id FROM TabUtilizador " & _
" where TabUtilizador.nome = '" & util & "'"
Dim id_util_SqlDataAdapter As SqlDataAdapter = New SqlDataAdapter(Select_id_util, ligacao_id_util)
Dim id_util_ds As DataSet = New DataSet
id_util_SqlDataAdapter.Fill(id_util_ds, "TabUtilizador")
Dim id_util_DataRow As DataRow
For Each id_util_DataRow In id_util_ds.Tables("TabUtilizador").Rows
id_util = Val(id_util_DataRow("Id").ToString)
Next
Return id_util
End Function
' produra o id do produto
Function procura_id_produto(ByVal prod As String) As Integer
Dim id_prod As Integer
Dim ligacao_id_prod As String = str_ligacao
Dim Select_id_prod As String = " SELECT Id FROM Tabproduto " & _
" where Tabproduto.Nome = '" & prod & "'"
Dim id_prod_SqlDataAdapter As SqlDataAdapter = New SqlDataAdapter(Select_id_prod, ligacao_id_prod)
Dim id_prod_ds As DataSet = New DataSet
id_prod_SqlDataAdapter.Fill(id_prod_ds, "TabProduto")
Dim id_prod_DataRow As DataRow
For Each id_prod_DataRow In id_prod_ds.Tables("TabProduto").Rows
id_prod = Val(id_prod_DataRow("Id").ToString)
Next
Return id_prod
End Function
' produra o quant_prod do produto
Function procura_quant_prod(ByVal id As Integer) As Integer
Dim id_ As Integer
Dim ligacao_quant_prod As String = str_ligacao
Dim Select_quant_prod As String = " SELECT stock FROM Tabproduto " & _
" where Tabproduto.id = '" & id & "'"
Dim quant_prod_SqlDataAdapter As SqlDataAdapter = New SqlDataAdapter(Select_quant_prod, ligacao_quant_prod)
Dim quant_prod_ds As DataSet = New DataSet
quant_prod_SqlDataAdapter.Fill(quant_prod_ds, "TabProduto")
Dim quant_prod_DataRow As DataRow
For Each quant_prod_DataRow In quant_prod_ds.Tables("TabProduto").Rows
id_ = Val(quant_prod_DataRow("stock").ToString)
Next
Return id_
End Function
Function envia_mail(ByVal produto As String, ByVal descricao As String, _
ByVal data_requisicao As String, ByVal quantidade As Integer, _
ByVal utilizador As String) As MailMessage
Dim oEmail As New MailMessage
'remetente do email
oEmail.From = New MailAddress("[email protected]")
'destinatario do email
oEmail.To.Add("[email protected]")
'prioridade de envio
oEmail.Priority = MailPriority.High
'define o formato do email
oEmail.IsBodyHtml = False
'define o assunto do email
oEmail.Subject = " Aceitação do pedido pendente de -> " & produto
'define a mensagem principal do email
'Dim dentro_stock As Integer = quantidade - pendente
oEmail.Body = " a quantidade --------------------------> " & quantidade & " unidade/s" & _
vbCrLf & "que ficou pendente do/s/a/as --> " & produto & _
vbCrLf & "--------------------------------------------" & _
vbCrLf & " Da categoria -----------------> " & descricao & _
vbCrLf & " pedido em --------------------> " & data_requisicao & _
vbCrLf & " devido a existencia em stock " & _
vbCrLf & " Brevemente lhe será entregue" & _
vbCrLf & " ----------------------------------------------------------" & _
vbCrLf & " assinado admin : " & utilizador
'Para evitar problemas com caracteres especiais configuramos o Charset
'oEmail.SubjectEncoding = ("ISO-8859-1")
oEmail.BodyEncoding = Text.Encoding.GetEncoding("ISO-8859-1")
'cria o objeto SMTP
Dim oSmtp As New SmtpClient
oSmtp.UseDefaultCredentials = False
oSmtp.Host = "smtp.vodafone.pt"
Try
' envia o email
oSmtp.Send(oEmail)
'Labelteste.Visible = True
'mail_env = "Email enviado com sucesso. "
Catch ex As Exception
'Labelteste.Visible = True
'mail_env = "Ocorreu um erro ao enviar o email : " & ex.Message
Finally
'limpa o objeto da memória
oEmail.Dispose()
End Try
Return oEmail
End Function
#End Region
End Class