quarta-feira, 15 de dezembro de 2010

Quinto Dia Útil em ASP.NET

Nesse post irei explicar como encontrar o quinto dia útil do mês a partir do que for digitado no textbox.
- Criar uma pagina Dia_util.aspx
- Inserir um textbox
- Inserir um button

Na página dia_util.aspx.vb criar as funções abaixo:

Private Shared Function RetornaQuintoDiaUtil(ByVal Data As DateTime, ByVal vdtvcto As Integer) As String

Dim primeiroDiaUtil As Int32 = RetornaPrimeiroDiaUtil(Data, vdtvcto)

Dim auxDiasUteisLocalizados As Int32 = 1
Dim auxContadorDiaVerificados As Int32 = 1
Dim mes As Int32 = vdtvcto
Dim quintoDiaUtil As DateTime = DateTime.Now
Dim dataPrimeiroDiaUtil As New DateTime(Data.Year, vdtvcto, primeiroDiaUtil)

While auxDiasUteisLocalizados < 5
quintoDiaUtil = dataPrimeiroDiaUtil.AddDays(auxContadorDiaVerificados)

If VerificaDiaUtil(quintoDiaUtil) Then
auxDiasUteisLocalizados += 1
End If

auxContadorDiaVerificados += 1
End While

Return quintoDiaUtil.ToString("dd/MM/yyyy")
End Function

Private Shared Function RetornaPrimeiroDiaUtil(ByVal Data As DateTime, ByVal vdtvcto As Integer) As Integer

Dim primeiroDiaMes As New DateTime(Data.Year, vdtvcto, 1)

While Not VerificaDiaUtil(primeiroDiaMes)
primeiroDiaMes = primeiroDiaMes.AddDays(1.0F)
End While

Return primeiroDiaMes.Day
End Function

Private Shared Function VerificaDiaUtil(ByVal DiaMes As DateTime) As Boolean

If DiaMes.DayOfWeek = DayOfWeek.Saturday Or DiaMes.DayOfWeek = DayOfWeek.Sunday Then

''''''''''''''Se for utilizar a tabela substituir a linha acima pela linha abaixo e tirar o comentario da funcao abaixo'''''''''''''''''
' If DiaMes.DayOfWeek = DayOfWeek.Saturday Or DiaMes.DayOfWeek = DayOfWeek.Sunday Or VerificaFeriado(DiaMes) Then

Return False

End If

Return True

End Function 'VerificaDiaUtil

No on_click do botão criado:

Protected Sub btn_OK_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn_OK.Click

'''''Só passar o mes nessa variavel, lembrando que deve ser numerico
Dim vdtvcto As Integer = txt_mes.Text

Dim dt As String
dt = RetornaQuintoDiaUtil(New Date(2010, vdtvcto, 1), (vdtvcto))

lbl_msg_superior.Text = dt
End Sub

End Class


Qualquer dúvida entrar em contato!
Espero que gostem do meu primeiro post!