Option Strict Off
Option Explicit On

Imports fatd_faturamento.BLL.Repositorio
Imports fatd_faturamento.ENTIDADE
Friend Class frmCadastroRota
    Inherits System.Windows.Forms.Form

    Private mItem As System.Windows.Forms.ListViewItem ' Objeto que controla a linha do listview
    Dim vCodigo As String
    Dim vResp As Short
    Dim vNew As Boolean
    Dim vCodOld As String
    Private dt As DataTable
    Private lstrsql As String
    ' para execuções
    Private objExecAtualizaBancoDados As New entidadeAtualizaBancoDados
    Private repositorioExecAtualizaBancoDados As New repositorioAtualizaBancoDados
    ' para consultas
    Private objAtualizaBancoDados As New entidadeAtualizaBancoDados
    Private repositorioAtualizaBancoDados As New repositorioAtualizaBancoDados

    Private Sub cmdSair_Click(sender As Object, e As EventArgs) Handles cmdSair.Click
        Me.Close()
    End Sub
    Private Sub SetaFrameDados(ByVal modo As Boolean)

        Try

            frameDados1.Enabled = modo
            frameDados1.Visible = modo

            If modo = True Then
                lswRota.Enabled = False
                cmdNovo.Enabled = False
                cmdEditar.Enabled = False
                cmdExcluir.Enabled = False
                cmdSair.Enabled = False
            ElseIf modo = False Then
                lswRota.Enabled = True
                cmdNovo.Enabled = True
                cmdEditar.Enabled = True
                cmdExcluir.Enabled = True
                cmdSair.Enabled = True
            End If

        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Private Sub frmCadastroRota_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Try

            SetaFrameDados(False)
            cmdEditar.Enabled = False
            cmdSalvar.Enabled = False
            cmdExcluir.Enabled = False
            desativaCampos(2)
            lClear()
            lAtualizaList()

        Catch ex As Exception
            MessageBox.Show("Ocorreu um Erro Inesperado. Favor, Contate o Administrador do Sistema ou a Equipe de Suporte de sua localidade! ", "Fatal - Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End Try
    End Sub

    Private Sub desativaCampos(ByRef modo As Short)

        Try

            If modo = 1 Then
                txtCodigo.ReadOnly = True
            ElseIf modo = 2 Then
                txtCodigo.ReadOnly = True
                txtCodigo.BackColor = System.Drawing.ColorTranslator.FromOle(&H80000004)

            End If

        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Private Sub lClear()

        Try

            txtCodigo.Text = String.Empty
            txtCodigo.Focus()

        Catch ex As Exception
            Exit Sub
        End Try

    End Sub
    Private Sub lAtualizaList()

        Try
            CarregarGrid()

            If lswRota.Items.Count <> 0 Then

                lswRota.Focus()
                lswRota.Items.Item(0).Selected = True
                lswRota.FocusedItem = lswRota.Items.Item(0)
                lswRota.Items.Item(0).EnsureVisible()

            End If

        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Private Sub FrmCadastroRota_KeyPress(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress

        Dim KeyAscii As Short = Asc(eventArgs.KeyChar)

        Try

            If KeyAscii = System.Windows.Forms.Keys.Escape Then
                Call Me.Close()
            ElseIf KeyAscii = System.Windows.Forms.Keys.Return Then
                TabEnter(KeyAscii, eventArgs)
            End If

            eventArgs.KeyChar = Chr(KeyAscii)

            If KeyAscii = 0 Then
                eventArgs.Handled = True
            End If

        Catch ex As Exception
            MessageBox.Show("Ocorreu um Erro Inesperado. Favor, Contate o Administrador do Sistema ou a Equipe de Suporte de sua localidade! ", "Fatal - Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End Try

    End Sub

    Private Sub txtCodigo_KeyPress(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.KeyPressEventArgs) Handles txtCodigo.KeyPress


        Try

            If Asc(eventArgs.KeyChar) = 27 Then
                txtCodigo.Text = ""
                txtCodigo.Focus()
            ElseIf asc(eventArgs.KeyChar) = 13 Then
                cmdSalvar_Click(cmdSalvar, New System.EventArgs())
            End If

            If Not IsNumeric(eventArgs.KeyChar) And Asc(eventArgs.KeyChar) <> 8 Then
                eventArgs.Handled = True
            End If

        Catch ex As Exception
            MessageBox.Show("Ocorreu um Erro Inesperado. Favor, Contate o Administrador do Sistema ou a Equipe de Suporte de sua localidade! ", "Fatal - Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End Try
    End Sub
    Private Sub lCancel()

        Try

            SetaFrameDados(False)
            cmdEditar.Enabled = False
            cmdSalvar.Enabled = False
            cmdExcluir.Enabled = False
            desativaCampos(2)
            lClear()
            lAtualizaList()

        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Private Sub cmdCancelar_Click(sender As Object, e As EventArgs) Handles cmdCancelar.Click
        Try

            lCancel()

        Catch ex As Exception
            MessageBox.Show("Ocorreu um Erro Inesperado. Favor, Contate o Administrador do Sistema ou a Equipe de Suporte de sua localidade! ", "Fatal - Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End Try
    End Sub

    Private Sub cmdSalvar_Click(sender As Object, e As EventArgs) Handles cmdSalvar.Click
        Try

            If vNew = True Then

                If lInsert() Then
                    MessageBox.Show("Rota criada com sucesso!", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    SetaFrameDados(False)
                    cmdEditar.Enabled = False
                    cmdSalvar.Enabled = False
                    cmdExcluir.Enabled = False
                    desativaCampos(2)
                    lClear()
                    lAtualizaList()
                Else
                    MessageBox.Show("Rota não pode ser criado!", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    Exit Sub
                End If

            Else

                If lUpdate() Then
                    MessageBox.Show("Rota atualizado com sucesso!", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    SetaFrameDados(False)
                    cmdEditar.Enabled = False
                    cmdSalvar.Enabled = False
                    cmdExcluir.Enabled = False
                    desativaCampos(2)
                    lClear()
                    lAtualizaList()
                Else
                    MessageBox.Show("Rota não pode ser atualizado!", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    Exit Sub
                End If

            End If


        Catch ex As Exception
            MessageBox.Show("Ocorreu um Erro Inesperado. Favor, Contate o Administrador do Sistema ou a Equipe de Suporte de sua localidade! ", "Fatal - Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End Try

    End Sub
    Private Function lUpdate() As Boolean

        Try

            lstrsql = ""
            lstrsql = "select * from rota where codrota  = '" & Trim(txtCodigo.Text) & "'"
            objAtualizaBancoDados.QUERY_NAME = lstrsql
            dt = repositorioAtualizaBancoDados.Consultar(objAtualizaBancoDados)

            If dt.Rows.Count > 0 Then
                MsgBox("A rota " & Trim(txtCodigo.Text) & " já existe no cadastro, favor informar outro valor!", vbInformation + vbOK, "Aviso!")
                Return False
                Exit Function
            End If

            lstrsql = ""
            lstrsql = "update rota set codrota = '" & Trim(txtCodigo.Text) & "' where codrota = '" & vCodOld & "'"

            objExecAtualizaBancoDados.QUERY_NAME = lstrsql
            repositorioExecAtualizaBancoDados.Execute(objExecAtualizaBancoDados)

            Return True
        Catch ex As Exception
            Return False
            'MsgBox(Err.Description)
        End Try

    End Function

    Private Function lInsert() As Boolean

        Try

            lstrsql = ""
            lstrsql = "select * from rota where codrota  = '" & Trim(txtCodigo.Text) & "'"
            objAtualizaBancoDados.QUERY_NAME = lstrsql
            dt = repositorioAtualizaBancoDados.Consultar(objAtualizaBancoDados)

            If dt.Rows.Count > 0 Then
                MsgBox("A rota " & Trim(txtCodigo.Text) & " já existe no cadastro, favor informar outro valor!", vbInformation + vbOK, "Aviso!")
                Return False
                Exit Function
            End If


            lstrsql = ""
            lstrsql = "insert into rota(codrota) values ('" & Trim(txtCodigo.Text) & "')"

            objExecAtualizaBancoDados.QUERY_NAME = lstrsql
            repositorioExecAtualizaBancoDados.Execute(objExecAtualizaBancoDados)

            Return True
        Catch ex As Exception
            Return False
        End Try

    End Function
    Private Sub lNew()

        Try

            vNew = True

            ativaCampos(2)
            SetaFrameDados(True)
            cmdEditar.Enabled = False
            cmdSalvar.Enabled = True
            cmdExcluir.Enabled = False

            lClear()


        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Private Sub lEdit_()

        Try

            vNew = False
            SetaFrameDados(True)
            ativaCampos(1)
            cmdSalvar.Enabled = True
            txtCodigo.Focus()
            txtCodigo.SelectionStart = 0

        Catch ex As Exception
            Exit Sub
        End Try

    End Sub
    Private Sub ativaCampos(ByRef modo As Short)

        Try

            If modo = 1 Then
                txtCodigo.ReadOnly = False
            ElseIf modo = 2 Then
                txtCodigo.ReadOnly = False
                txtCodigo.BackColor = System.Drawing.ColorTranslator.FromOle(&H80000005)
            End If

        Catch ex As Exception
            Exit Sub
        End Try

    End Sub
    Private Sub cmdNovo_Click(sender As Object, e As EventArgs) Handles cmdNovo.Click
        Try

            lNew()

        Catch ex As Exception
            MessageBox.Show("Ocorreu um Erro Inesperado. Favor, Contate o Administrador do Sistema ou a Equipe de Suporte de sua localidade! ", "Fatal - Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End Try
    End Sub
    Private Sub cmdEditar_Click(sender As Object, e As EventArgs) Handles cmdEditar.Click
        Try

            lEdit_()

        Catch ex As Exception
            MessageBox.Show("Ocorreu um Erro Inesperado. Favor, Contate o Administrador do Sistema ou a Equipe de Suporte de sua localidade! ", "Fatal - Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End Try
    End Sub

    Private Sub cmdExcluir_Click(sender As Object, e As EventArgs) Handles cmdExcluir.Click
        Try

            vResp = MessageBox.Show("Deseja Realmente Excluir Esta Rota ?", "Confirmação de Exclusão", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)

            If vResp = DialogResult.Yes Then

                If Not lDelete() Then
                    MessageBox.Show("Rota não pode ser excluído!", "Confirmação de Exclusão", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    Exit Sub
                Else
                    MessageBox.Show("Rota excluída com sucesso!", "Confirmação de Exclusão", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    SetaFrameDados(False)
                    cmdEditar.Enabled = False
                    cmdSalvar.Enabled = False
                    cmdExcluir.Enabled = False
                    desativaCampos(2)
                    lClear()
                    lAtualizaList()
                End If


            ElseIf vResp = DialogResult.Cancel Then
                Exit Sub
            End If


        Catch ex As Exception
            MessageBox.Show("Ocorreu um Erro Inesperado. Favor, Contate o Administrador do Sistema ou a Equipe de Suporte de sua localidade! ", "Fatal - Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End Try
    End Sub
    Private Function lDelete() As Boolean

        Try

            lstrsql = "Delete from rota where codrota = " & vCodOld

            objExecAtualizaBancoDados.QUERY_NAME = lstrsql
            repositorioExecAtualizaBancoDados.Execute(objExecAtualizaBancoDados)

            Return True
        Catch ex As Exception
            Return False
        End Try
    End Function
    Private Sub lswRota_DoubleClick(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles lswRota.DoubleClick

        Try
            If lswRota.Items.Count > 0 Then

                cmdEditar.Enabled = True
                cmdSalvar.Enabled = False
                cmdExcluir.Enabled = True

                lEdit(lswRota.FocusedItem.Name.Trim())
            End If
        Catch ex As Exception
            MessageBox.Show("Ocorreu um Erro Inesperado. Favor, Contate o Administrador do Sistema ou a Equipe de Suporte de sua localidade! ", "Fatal - Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End Try

    End Sub
    Private Sub AddListItem(ByRef xItem As System.Windows.Forms.ListViewItem, ByRef row As DataRow)

        Try

            xItem = lswRota.Items.Add(row.Item("CodRota"), row.Item("CodRota"), String.Empty)

            If (String.IsNullOrEmpty(row.Item("CodRota"))) Then
                xItem.SubItems.Add(Space(1))
            Else
                xItem.SubItems.Add(row.Item("CodRota"))
            End If

        Catch ex As Exception
            Exit Sub
        End Try

    End Sub
    Public Sub CarregarGrid()


        lstrsql = "select codRota from rota order by codrota asc"

        Try
            PrepararListView()

            objAtualizaBancoDados.QUERY_NAME = lstrsql
            dt = repositorioAtualizaBancoDados.Consultar(objAtualizaBancoDados)

            If dt.Rows.Count > 0 Then
                Call BarraProgresso((Me.ProgressBar), (Me.lblPerc), (Me.lblInfo), 0, dt.Rows.Count, " a Validação ")
                For Each row As DataRow In dt.Rows
                    'For Each objClasseFor As entidadeClasse In New repositorioClasse().Select(objClasse)
                    AddListItem(mItem, row)
                    Call BarraProgresso((Me.ProgressBar), (Me.lblPerc), (Me.lblInfo), 1,  , " Total de Rotas ")
                Next
            End If
        Catch ex As Exception
            Exit Sub
        End Try

    End Sub
    Public Sub PrepararListView()

        Try

            lswRota.Items.Clear()
            lswRota.Columns.Clear()
            lswRota.Columns.Add(String.Empty, "Código Rota", 150)
            'lvwClasses.Columns.Add(String.Empty, "Descrição", 100)

        Catch ex As Exception
            Exit Sub
        End Try

    End Sub
    Private Sub PreencherValoresList(ByRef Items As String)

        vCodigo = Items

        Dim Item As ListViewItem

        Try

            For Each Item In lswRota.Items

                If Item.Name = vCodigo Then

                    'Pega a Coluna 0
                    txtCodigo.Text = IIf(String.IsNullOrEmpty((Item.Text)), " ", (Item.Text))
                    vCodOld = IIf(String.IsNullOrEmpty((Item.Text)), " ", (Item.Text))

                    'Para pegar os SubItems e so fazer o seguinte
                    'txtDescricao.Text = IIf(String.IsNullOrEmpty((Item.SubItems(1).Text)), " ", (Item.SubItems(1).Text))

                    ativaCampos(2)
                    desativaCampos(1)

                End If


            Next

            Item = Nothing


        Catch ex As Exception
            Exit Sub
        End Try

    End Sub
    Private Sub lEdit(ByRef Item As String)

        vCodigo = Item

        Try

            PreencherValoresList(vCodigo)


        Catch ex As Exception
            Exit Sub
        End Try

    End Sub
End Class