Option Strict Off
Option Explicit On

Imports fatd_faturamento.BLL.Repositorio
Imports fatd_faturamento.ENTIDADE

Friend Class frmCadastroExecutores
    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

#Region "Propriedades"

    Private Sub frmCadastroExecutores_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load

        Try

            Frame1.Visible = False

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

            tNome.ReadOnly = True

            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 lvwExecutores_ColumnClick(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.ColumnClickEventArgs) Handles lvwExecutores.ColumnClick

        Dim ColumnHeader As System.Windows.Forms.ColumnHeader = lvwExecutores.Columns(eventArgs.Column)

        Try
            lvwExecutores.ListViewItemSorter = New ListViewItemComparer(eventArgs.Column)
            lvwExecutores.Sort()
        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 lvwExecutores_DoubleClick(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles lvwExecutores.DoubleClick

        Try

            If lvwExecutores.Items.Count > 0 Then

                Frame1.Visible = True

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

                vNew = False
                lEdit(lvwExecutores.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 cmdNovo_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.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(ByVal eventSender As System.Object, ByVal eventArgs As System.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 cmdSalvar_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdSalvar.Click

        Try

            If vNew = True Then

                If lInsert() Then
                    MessageBox.Show("Executor criada com sucesso!", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    frmCadastroExecutores_Load(Me, New System.EventArgs())
                Else
                    MessageBox.Show("Executor não pode ser criada!", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    Exit Sub
                End If

            Else

                If lUpdate() Then
                    MessageBox.Show("Executor atualizada com sucesso!", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    frmCadastroExecutores_Load(Me, New System.EventArgs())
                Else
                    MessageBox.Show("Executor não pode ser atualizada!", "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 Sub cmdExcluir_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdExcluir.Click

        Dim objExecutor As New entidadeExecutor


        Try

            vResp = MessageBox.Show("Esta operação não possui retorno!" & vbCrLf & vbCrLf & "Tem certeza de que deseja excluir este registro?", "Confirmação de Exclusão", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)

            If vResp = DialogResult.Yes Then

                objExecutor.COD = Convert.ToInt32(vCodOld)

                If Not lDelete(objExecutor) Then
                    MessageBox.Show("Executor não pode ser excluído!", "Confirmação de Exclusão", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    Exit Sub
                Else
                    MessageBox.Show("Executor excluído com sucesso!", "Confirmação de Exclusão", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    frmCadastroExecutores_Load(Me, New System.EventArgs())
                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 Sub cmdSair_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdSair.Click

        Try

            lClose()

        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

#End Region

#Region "Métodos"

    Private Sub lAtualizaList()

        Dim objExecutor As entidadeExecutor

        Try
            CarregarGrid(objExecutor)

            If lvwExecutores.Items.Count <> 0 Then

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

            End If

        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Public Sub PrepararListView()

        Try

            lvwExecutores.Items.Clear()
            lvwExecutores.Columns.Clear()
            lvwExecutores.Columns.Add(String.Empty, "Código", 50)
            lvwExecutores.Columns.Add(String.Empty, "Matrícula", 100)
            lvwExecutores.Columns.Add(String.Empty, "Nome", 100)

        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Public Sub CarregarGrid(ByRef objExecutor As entidadeExecutor)

        Try
            PrepararListView()
            For Each objExecutorFor As entidadeExecutor In New repositorioExecutor().Select(objExecutor)
                AddListItem(mItem, objExecutorFor)
            Next
        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Private Sub AddListItem(ByRef xItem As System.Windows.Forms.ListViewItem, ByRef objExecutor As entidadeExecutor)

        Try

            xItem = lvwExecutores.Items.Add(objExecutor.COD.ToString(), objExecutor.COD.ToString(), String.Empty)

            If (String.IsNullOrEmpty(Convert.ToString(objExecutor.MATRICULA))) Then
                xItem.SubItems.Add(Space(1))
            Else
                xItem.SubItems.Add(objExecutor.MATRICULA)
            End If

            If (String.IsNullOrEmpty(objExecutor.DESCRICAO)) Then
                xItem.SubItems.Add(Space(1))
            Else
                xItem.SubItems.Add(objExecutor.DESCRICAO)
            End If

        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 lvwExecutores.Items

                If Item.Name = vCodigo Then

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

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



                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

    Private Sub lNew()

        Try

            vNew = True

            Frame1.Visible = True

            lClear()

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

            tMatricula.ReadOnly = False
            tNome.ReadOnly = False

            tMatricula.Focus()
            tMatricula.SelectionStart = 0
            tMatricula.SelectionLength = Len(tMatricula.Text)


        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Private Sub lClear()

        Try

            tMatricula.Text = String.Empty
            tNome.Text = String.Empty

        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Private Sub lEdit()

        Try

            vNew = False

            cmdSalvar.Enabled = True

            lEdit(lvwExecutores.FocusedItem.Name.Trim())

            tMatricula.ReadOnly = False
            tNome.ReadOnly = False

            tMatricula.Focus()
            tMatricula.SelectionStart = 0
            tMatricula.SelectionLength = Len(tMatricula.Text)


        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Private Sub lClose()

        Try

            Close()

        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Private Function lInsert() As Boolean

        Dim objExecutor As New entidadeExecutor
        Dim repositorioExecutor As New repositorioExecutor

        Try

            objExecutor.DESCRICAO = Trim(IIf(String.IsNullOrEmpty((tNome.Text)), " ", tNome.Text))
            objExecutor.MATRICULA = Convert.ToInt32(Trim(IIf(String.IsNullOrEmpty(tMatricula.Text), " ", tMatricula.Text)))


            repositorioExecutor.Insert(objExecutor)

            Return True
        Catch ex As Exception
            Return False
        End Try

    End Function

    Private Function lUpdate() As Boolean

        Dim objExecutor As New entidadeExecutor
        Dim repositorioExecutor As New repositorioExecutor


        Try




            objExecutor.COD = Convert.ToInt32(Trim(IIf(String.IsNullOrEmpty((vCodOld)), " ", vCodOld)))
            objExecutor.DESCRICAO = Trim(IIf(String.IsNullOrEmpty((tNome.Text)), " ", tNome.Text))
            objExecutor.MATRICULA = Convert.ToInt32(Trim(IIf(String.IsNullOrEmpty(tMatricula.Text), " ", tMatricula.Text)))


            repositorioExecutor.Update(objExecutor)

            Return True
        Catch ex As Exception
            Return False
        End Try

    End Function

    Private Function lDelete(ByRef objExecutor As entidadeExecutor) As Boolean
        Dim repositorioExecutor As New repositorioExecutor
        Try

            repositorioExecutor.Delete(objExecutor)

            Return True
        Catch ex As Exception
            Return False
        End Try
    End Function

#End Region


End Class