Option Strict Off
Option Explicit On

Imports fatd_faturamento.BLL.Repositorio
Imports fatd_faturamento.ENTIDADE

Friend Class frmCadastroOcorrencias
    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 frmCadOcorrencias_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load

        Try

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

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

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

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

        Try

            If lvwOcorrencias.Items.Count > 0 Then

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

                vNew = False
                lEdit(lvwOcorrencias.FocusedItem.Name.Trim())

                If lvwOcorrencias.Items.Count = 1 Then
                    MessageBox.Show("A tabela está vazia! ", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information)
                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 txtCodigo_KeyPress(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.KeyPressEventArgs) Handles txtCodigo.KeyPress

        Dim KeyAscii As Short = Asc(eventArgs.KeyChar)

        Try

            If 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 txtDescricao_KeyPress(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.KeyPressEventArgs) Handles txtDescricao.KeyPress
        Dim KeyAscii As Short = Asc(eventArgs.KeyChar)

        Try

            If KeyAscii = 13 Then
                cmdSalvar_Click(cmdSalvar, New System.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 txtDescricao_TextChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles txtDescricao.TextChanged

        Try

            labelContChar.Text = Len(txtDescricao.Text) & "/25 caracteres."

        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

        Dim objOcorrencia As New entidadeOcorrencia
        Dim repositorioOcorrencia As New repositorioOcorrencia
        Dim dt As DataTable

        Try

            If txtDescricao.Text = String.Empty Then
                MessageBox.Show("O campo 'Descrição' está em branco!", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information)
                txtDescricao.Focus()
                Exit Sub
            End If


            If vNew = True Then

                objOcorrencia.COD = txtCodigo.Text
                dt = repositorioOcorrencia.SelectCount(objOcorrencia)


                If Convert.ToInt32(dt.Rows(0).ItemArray(0).ToString()) = 0 Then

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

                Else

                    MessageBox.Show("Já existe uma ocorrência cadastrada com este código!" & vbCrLf & vbCrLf & "Por favor, digite um código diferente.", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    txtCodigo.Focus()
                    txtCodigo.SelectionStart = 0
                    txtCodigo.SelectionLength = Len(txtCodigo.Text)

                End If

            Else

                If lUpdate() And lUpdate_1() Then
                    MessageBox.Show("Ocorrencia atualizada com sucesso!", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information)

                    txtCodigo.Enabled = True

                    lClear()
                    frmCadOcorrencias_Load(Me, New System.EventArgs())

                Else
                    MessageBox.Show("Ocorrencia 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 objOcorrencia As New entidadeOcorrencia


        Try

            If vCodOld = "00" Then
                MessageBox.Show("Ocorrencia não pode ser excluída!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                frmCadOcorrencias_Load(Me, New System.EventArgs())
            Else

                vResp = MessageBox.Show("Esta operação não possui retorno." & vbCrLf & vbCrLf & "Tem certeza de que deseja excluir a ocorrência de código: " & vCodOld & "?", "Confirmação de Exclusão", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)

                If vResp = DialogResult.Yes Then

                    objOcorrencia.COD = vCodOld

                    If Not lDelete(objOcorrencia) Then
                        MessageBox.Show("Ocorrencia não pode ser excluída!", "Confirmação de Exclusão", MessageBoxButtons.OK, MessageBoxIcon.Information)
                        Exit Sub
                    Else
                        MessageBox.Show("Ocorrencia excluída com sucesso!", "Confirmação de Exclusão", MessageBoxButtons.OK, MessageBoxIcon.Information)
                        lClear()
                        frmCadOcorrencias_Load(Me, New System.EventArgs())
                    End If


                ElseIf vResp = DialogResult.Cancel Then
                    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 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 objOcorrencia As New entidadeOcorrencia

        Try
            CarregarGrid(objOcorrencia)

            If lvwOcorrencias.Items.Count <> 0 Then

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

            Else
                objOcorrencia.COD = "00"
                objOcorrencia.DESCRICAO = "NENHUMA"
                objOcorrencia.MEDIA = 0

                lInsert_1(objOcorrencia)
                lAtualizaList()

            End If

        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Public Sub PrepararListView()

        Try

            lvwOcorrencias.Items.Clear()
            lvwOcorrencias.Columns.Clear()
            lvwOcorrencias.Columns.Add(String.Empty, "Código", 50)
            lvwOcorrencias.Columns.Add(String.Empty, "Descrição", 100)
            lvwOcorrencias.Columns.Add(String.Empty, "Média", 100)

        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Public Sub CarregarGrid(ByRef objOcorrencia As entidadeOcorrencia)

        Try
            PrepararListView()
            For Each objOcorrenciaFor As entidadeOcorrencia In New repositorioOcorrencia().Select(objOcorrencia)
                AddListItem(mItem, objOcorrenciaFor)
            Next
        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Private Sub AddListItem(ByRef xItem As System.Windows.Forms.ListViewItem, ByRef objOcorrencia As entidadeOcorrencia)

        Try

            xItem = lvwOcorrencias.Items.Add(objOcorrencia.COD.ToString(), objOcorrencia.COD.ToString(), String.Empty)

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

            If (String.IsNullOrEmpty(Convert.ToString(objOcorrencia.MEDIA))) Then
                xItem.SubItems.Add(Space(1))
            Else
                If Convert.ToString(objOcorrencia.MEDIA) = "0" Then
                    xItem.SubItems.Add("NÃO")
                ElseIf Convert.ToString(objOcorrencia.MEDIA) = "1" Then
                    xItem.SubItems.Add("SIM")
                End If
            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 lvwOcorrencias.Items

                If Item.Name = vCodigo Then

                    'Pega a Coluna 0
                    txtCodigo.Text = 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))

                    If IIf(String.IsNullOrEmpty((Item.SubItems(2).Text)), " ", (Item.SubItems(2).Text)) = "NÃO" Then
                        chkMedia.Checked = False

                    ElseIf IIf(String.IsNullOrEmpty((Item.SubItems(2).Text)), " ", (Item.SubItems(2).Text)) = "SIM" Then
                        chkMedia.Checked = True
                    End If

                    vCodOld = IIf(String.IsNullOrEmpty((Item.Text)), " ", (Item.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

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

            labelContChar.Text = Len(txtDescricao.Text) & "/25 caracteres."

            lClear()

            codigolivre()

            txtCodigo.Enabled = True
            txtDescricao.Focus()


        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Private Sub lClear()

        Try

            txtCodigo.Text = String.Empty
            txtDescricao.Text = String.Empty
            chkMedia.Checked = False

        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 Sub codigolivre()

        Dim objOcorrencia As New entidadeOcorrencia
        Dim repositorioOcorrencia As New repositorioOcorrencia
        Dim vlist

        Try

            vlist = repositorioOcorrencia.SelectMax(objOcorrencia)

            For Each objOcorrenciaFor As entidadeOcorrencia In vlist

                If IsDBNull(objOcorrenciaFor.COD) Then
                    objOcorrenciaFor.COD = "1"
                Else
                    objOcorrenciaFor.COD = Convert.ToString(Convert.ToInt32(objOcorrenciaFor.COD) + 1)
                End If

                txtCodigo.Text = Format(Convert.ToInt32(objOcorrenciaFor.COD), "00")

            Next


        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Private Function lInsert_1(ByRef objOcorrencia As entidadeOcorrencia) As Boolean

        Dim repositorioOcorrencia As New repositorioOcorrencia

        Try

            repositorioOcorrencia.Insert(objOcorrencia)

            Return True
        Catch ex As Exception
            Return False
        End Try

    End Function

    Private Sub lEdit()

        Try

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

            If txtCodigo.Text = String.Empty Then
                MessageBox.Show("Por favor, selecione uma ocorrência na lista! ", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Else

                vNew = False
                labelContChar.Text = Len(txtDescricao.Text) & "/25 caracteres."

                txtCodigo.Enabled = False
                txtDescricao.Focus()
                txtDescricao.SelectionStart = 0
                txtDescricao.SelectionLength = Len(txtDescricao.Text)

            End If

        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Private Function lInsert() As Boolean

        Dim objOcorrencia As New entidadeOcorrencia
        Dim repositorioOcorrencia As New repositorioOcorrencia

        Try

            objOcorrencia.COD = Trim(IIf(String.IsNullOrEmpty((txtCodigo.Text)), "00", txtCodigo.Text))
            objOcorrencia.DESCRICAO = Trim(IIf(String.IsNullOrEmpty((txtDescricao.Text)), " ", txtDescricao.Text))

            If chkMedia.Checked = False Then
                objOcorrencia.MEDIA = 0
            Else
                objOcorrencia.MEDIA = 1
            End If

            repositorioOcorrencia.Insert(objOcorrencia)

            Return True
        Catch ex As Exception
            Return False
        End Try

    End Function

    Private Function lInsert_1() As Boolean

        Dim objCodigo As New entidadeCodigo
        Dim repositorioCodigo As New repositorioCodigo

        Try

            objCodigo.NUM = Trim(IIf(String.IsNullOrEmpty((txtCodigo.Text)), "00", txtCodigo.Text))
            objCodigo.DESCRI = Trim(IIf(String.IsNullOrEmpty((txtDescricao.Text)), " ", txtDescricao.Text))

            repositorioCodigo.Insert_1(objCodigo)

            Return True
        Catch ex As Exception
            Return False
        End Try

    End Function

    Private Function lUpdate() As Boolean

        Dim objOcorrencia As New entidadeOcorrencia
        Dim repositorioOcorrencia As New repositorioOcorrencia


        Try


            objOcorrencia.COD_OLD = vCodOld
            objOcorrencia.COD = Trim(IIf(String.IsNullOrEmpty((txtCodigo.Text)), "00", txtCodigo.Text))
            objOcorrencia.DESCRICAO = Trim(IIf(String.IsNullOrEmpty((txtDescricao.Text)), " ", txtDescricao.Text))

            If chkMedia.Checked = False Then
                objOcorrencia.MEDIA = 0
            Else
                objOcorrencia.MEDIA = 1
            End If


            repositorioOcorrencia.Update(objOcorrencia)

            Return True
        Catch ex As Exception
            Return False
        End Try

    End Function

    Private Function lUpdate_1() As Boolean

        Dim objCodigo As New entidadeCodigo
        Dim repositorioCodigo As New repositorioCodigo


        Try


            objCodigo.SITUACAO = vCodOld
            objCodigo.NUM = Trim(IIf(String.IsNullOrEmpty((txtCodigo.Text)), "00", txtCodigo.Text))
            objCodigo.DESCRI = Trim(IIf(String.IsNullOrEmpty((txtDescricao.Text)), " ", txtDescricao.Text))


            repositorioCodigo.Update_1(objCodigo)

            Return True
        Catch ex As Exception
            Return False
        End Try

    End Function

    Private Function lDelete(ByRef objOcorrencia As entidadeOcorrencia) As Boolean
        Dim repositorioOcorrencia As New repositorioOcorrencia
        Try

            repositorioOcorrencia.Delete(objOcorrencia)

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


#End Region


End Class