Option Strict Off
Option Explicit On

Imports fatd_faturamento.BLL.Repositorio
Imports fatd_faturamento.ENTIDADE
Imports CrystalDecisions.CrystalReports.Engine
Imports System.Net.Mail
Friend Class frmFinalizarRota
    Inherits System.Windows.Forms.Form

    Private mItem As System.Windows.Forms.ListViewItem ' Objeto que controla a linha do listview
    Dim vResp As Short
    Dim istrTabela As String
    Dim strUsuarioGeradorFatura As String

#Region "Propriedades"

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

        Try

            chkMicrogeracao.Enabled = Not GetConfig("finalizar.microgeracao.rota")
            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 lvwRotas_Click(sender As Object, e As EventArgs) Handles lvwRotas.Click

        Try

            If lvwRotas.Items.Count > 0 Then

                If lvwRotas.FocusedItem.[Text].ToString() = "Todas as rotas" Then

                    If lvwRotas.FocusedItem.Checked = True Then
                        CheckAllListView(lvwRotas, False)
                    ElseIf lvwRotas.FocusedItem.Checked = False Then
                        CheckAllListView(lvwRotas, True)
                    End If

                Else
                    If lvwRotas.FocusedItem.Checked = False Then
                        lvwRotas.Items.Item(0).Checked = False
                        lvwRotas.FocusedItem.Checked = True
                    Else
                        lvwRotas.Items.Item(0).Checked = False
                        lvwRotas.FocusedItem.Checked = False
                    End If
                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 txtZona_Enter(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles txtZona.Enter

        Try

            With Me.txtZona
                .SelectionStart = 0
                .SelectionLength = Len(.Text)
            End With

        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 txtZona_KeyPress(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.KeyPressEventArgs) Handles txtZona.KeyPress

        Dim KeyAscii As Short = Asc(eventArgs.KeyChar)

        Try

            If KeyAscii <> 8 And (KeyAscii < 48 Or KeyAscii > 57) Then
                KeyAscii = 0
            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 txtZona_Leave(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles txtZona.Leave

        Try

            With Me.txtZona
                .Text = VB6.Format(.Text, "000")
            End With

        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 txtLivro_Enter(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles txtLivro.Enter

        Try

            With Me.txtLivro
                .SelectionStart = 0
                .SelectionLength = Len(.Text)
            End With

        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 txtLivro_KeyPress(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.KeyPressEventArgs) Handles txtLivro.KeyPress

        Dim KeyAscii As Short = Asc(eventArgs.KeyChar)

        Try

            If KeyAscii <> 8 And (KeyAscii < 48 Or KeyAscii > 57) Then
                KeyAscii = 0
            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 txtLivro_Leave(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles txtLivro.Leave

        Try

            With Me.txtLivro
                .Text = VB6.Format(.Text, "00")
            End With

        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 txtConta_Enter(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles txtConta.Enter

        Try

            With Me.txtConta
                .SelectionStart = 0
                .SelectionLength = Len(.Text)
            End With

        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 txtConta_KeyPress(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.KeyPressEventArgs) Handles txtConta.KeyPress

        Dim KeyAscii As Short = Asc(eventArgs.KeyChar)

        Try

            If KeyAscii <> 8 And (KeyAscii < 48 Or KeyAscii > 57) Then
                KeyAscii = 0
            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 txtConta_Leave(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles txtConta.Leave

        Try

            With Me.txtConta
                .Text = VB6.Format(.Text, "000000")
            End With

        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 opbIndividual_CheckedChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles opbIndividual.CheckedChanged

        Try

            If eventSender.Checked Then
                Call LigDesCampos(Me.opbPorRota.Checked, Me.opbIndividual.Checked)
            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 opbPorRota_CheckedChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles opbPorRota.CheckedChanged

        Try

            If eventSender.Checked Then
                Call LigDesCampos(Me.opbPorRota.Checked, Me.opbIndividual.Checked)
            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 cmbFechar_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmbFechar.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

    Private Sub cmbFinalizar_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmbFinalizar.Click

        Try

            Me.Cursor = System.Windows.Forms.Cursors.WaitCursor
            Me.cmbFinalizar.Enabled = False
            Me.cmbFechar.Enabled = False
            'Me.gbEnviarEmail.Enabled = False

            Finalizar()
            lAtualizaList()

            Me.Cursor = System.Windows.Forms.Cursors.Default
            Me.cmbFinalizar.Enabled = (Me.lvwRotas.Items.Count > 0)
            Me.cmbFechar.Enabled = True
            'Me.gbEnviarEmail.Enabled = True

        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 frmFinalizarRota_KeyPress(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress

        Dim KeyAscii As Short = Asc(eventArgs.KeyChar)

        Try

            Select Case KeyAscii
                Case System.Windows.Forms.Keys.Return
                    TabEnter(KeyAscii, eventArgs)
                Case System.Windows.Forms.Keys.Escape
                    Call cmbFechar_Click(cmbFechar, New System.EventArgs())
            End Select

            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

#End Region

#Region "Métodos"

    Private Sub lAtualizaList()

        Dim objNfTransicao As New entidadeNfTransicao

        Try

            objNfTransicao.MESANO = GetConfig("mes.ano.faturamento")

            CarregarGrid(objNfTransicao)

            If lvwRotas.Items.Count <> 0 Then

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

            End If

        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Public Sub PrepararListView()

        Try

            lvwRotas.Items.Clear()
            lvwRotas.Columns.Clear()
            lvwRotas.Columns.Add(String.Empty, "Rota", 100)
            lvwRotas.Columns.Add(String.Empty, "Grupo", 50)
            lvwRotas.Columns.Add(String.Empty, "Qtde.", 50)

        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Public Sub CarregarGrid(ByRef objNfTransicao As entidadeNfTransicao)

        Try

            PrepararListView()

            mItem = lvwRotas.Items.Add("", "Todas as rotas", String.Empty)
            mItem.SubItems.Add("T")

            For Each objNfTransicaoFor As entidadeNfTransicao In New repositorioNfTransicao().Select_2(objNfTransicao)
                AddListItem(mItem, objNfTransicaoFor)
            Next

        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Private Sub AddListItem(ByRef xItem As System.Windows.Forms.ListViewItem, ByRef objNfTransicao As entidadeNfTransicao)

        Try

            xItem = lvwRotas.Items.Add(objNfTransicao.ROTA.ToString(), objNfTransicao.ROTA.ToString(), String.Empty)

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

            If (String.IsNullOrEmpty(Convert.ToInt32(objNfTransicao.Qtde))) Then
                xItem.SubItems.Add(Space(1))
            Else
                xItem.SubItems.Add(objNfTransicao.Qtde)
            End If

        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Private Sub LigDesCampos(ByVal ablnRota As Boolean, ByVal ablnInd As Boolean)

        Try

            Me.lvwRotas.Enabled = ablnRota
            Me.txtZona.Enabled = ablnInd
            Me.txtLivro.Enabled = ablnInd
            Me.txtConta.Enabled = ablnInd
            Me.txtZona.BackColor = System.Drawing.ColorTranslator.FromOle(IIf(ablnInd, System.Drawing.ColorTranslator.ToOle(System.Drawing.SystemColors.Window), System.Drawing.ColorTranslator.ToOle(System.Drawing.SystemColors.Control)))
            Me.txtLivro.BackColor = System.Drawing.ColorTranslator.FromOle(IIf(ablnInd, System.Drawing.ColorTranslator.ToOle(System.Drawing.SystemColors.Window), System.Drawing.ColorTranslator.ToOle(System.Drawing.SystemColors.Control)))
            Me.txtConta.BackColor = System.Drawing.ColorTranslator.FromOle(IIf(ablnInd, System.Drawing.ColorTranslator.ToOle(System.Drawing.SystemColors.Window), System.Drawing.ColorTranslator.ToOle(System.Drawing.SystemColors.Control)))
            Me.lvwRotas.BackColor = System.Drawing.ColorTranslator.FromOle(IIf(ablnRota, System.Drawing.ColorTranslator.ToOle(System.Drawing.SystemColors.Window), System.Drawing.ColorTranslator.ToOle(System.Drawing.SystemColors.Control)))


        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Private Sub Finalizar()

        Dim lstrMAn As String
        Dim lstrAux As String
        Dim lintLin As Short
        Dim lblnAux As Boolean

        Dim dt As DataTable
        Dim dt_1 As DataTable
        Dim dt_EnviaEmail As DataTable
        Dim dt_DadosEnviaEmail As DataTable

        Dim vlist
        Dim vlistConcorte

        Dim objNfTransicao As New entidadeNfTransicao
        Dim repositorioNfTransicao As New repositorioNfTransicao

        Dim objNf As New entidadeNf
        Dim repositorioNf As New repositorioNf

        Dim objConcorte As New entidadeConcorte
        Dim repositorioConcorte As New repositorioConcorte

        Dim objNssFaturasNet As New entidadeNssFaturasNet
        Dim repositorioNssFaturasNet As New repositorioNssFaturasNet

        Dim vNumNF As String = String.Empty
        Dim vZona As String = String.Empty
        Dim vLivro As String = String.Empty
        Dim vConta As String = String.Empty
        Dim vMesAno As String = String.Empty
        Dim vGrupo As String = String.Empty
        Dim sCaminhoPDF As String
        Dim strNomeRptFat As String
        Dim strSql As String
        Dim strNaoEnviarEmail As Boolean = False

        Dim objAtualizaBancoDados As New entidadeAtualizaBancoDados
        Dim repositorioAtualizaBancoDados As New repositorioAtualizaBancoDados
        Dim dt1 As DataTable

        Try

            lstrMAn = GetConfig("mes.ano.faturamento")

            lstrAux = String.Empty

            lblnAux = True

            sCaminhoPDF = GetConfig("caminho.pdf.email")

            ' ----- Filtra Por Rota
            If Me.opbPorRota.Checked Then

                dt_DadosEnviaEmail = New DataTable()
                dt_EnviaEmail = New DataTable()
                dt_EnviaEmail.Columns.Add("NUMNF", GetType(Integer))
                dt_EnviaEmail.Columns.Add("ZONA", GetType(String))
                dt_EnviaEmail.Columns.Add("LIVRO", GetType(String))
                dt_EnviaEmail.Columns.Add("CONTA", GetType(String))
                dt_EnviaEmail.Columns.Add("MESANO", GetType(String))
                dt_EnviaEmail.Columns.Add("CAMINHOFATURA", GetType(String))

                With Me.lvwRotas
                    If .Items.Count > 0 Then
                        For lintLin = 1 To .Items.Count - 1
                            If .Items.Item(lintLin).Checked = True Then
                                lstrAux = lstrAux & "'" & .Items.Item(lintLin).Text & "',"
                            End If
                        Next lintLin
                    End If
                End With

                If Len(Trim(lstrAux)) > 0 Then
                    objNfTransicao.ROTA = Microsoft.VisualBasic.Left(lstrAux, Len(lstrAux) - 1)
                    objNfTransicao.ZONA = String.Empty
                    objNfTransicao.LIVRO = String.Empty
                    objNfTransicao.CONTA = String.Empty
                Else
                    objNfTransicao.ZONA = String.Empty
                    objNfTransicao.LIVRO = String.Empty
                    objNfTransicao.CONTA = String.Empty
                    objNfTransicao.ROTA = String.Empty
                End If
            Else

                lstrAux = String.Empty
                If Len(Trim(Me.txtZona.Text)) > 0 And Len(Trim(Me.txtLivro.Text)) > 0 And Len(Trim(Me.txtConta.Text)) > 0 Then
                    objNfTransicao.ZONA = Me.txtZona.Text
                    objNfTransicao.LIVRO = Me.txtLivro.Text
                    objNfTransicao.CONTA = Me.txtConta.Text
                    objNfTransicao.ROTA = String.Empty
                Else
                    objNfTransicao.ZONA = String.Empty
                    objNfTransicao.LIVRO = String.Empty
                    objNfTransicao.CONTA = String.Empty
                    objNfTransicao.ROTA = String.Empty
                End If
            End If

            If Me.opbPorRota.Checked Then
                If Len(Trim(lstrAux)) = 0 And Me.lvwRotas.Items.Item(0).Checked = False Then
                    MessageBox.Show("Você precisa ao menos selecionar uma rota!", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    lblnAux = False
                End If
            Else

                If Not Len(Trim(Me.txtZona.Text)) > 0 And Not Len(Trim(Me.txtLivro.Text)) > 0 And Not Len(Trim(Me.txtConta.Text)) > 0 Then
                    MessageBox.Show("Você precisa informar a zona,livro e conta!", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    lblnAux = False
                End If
            End If

            If lblnAux Then
                dt_1 = New DataTable()

                objNfTransicao.MESANO_REF = CInt(Microsoft.VisualBasic.Right(lstrMAn, 4) & Microsoft.VisualBasic.Left(lstrMAn, 2))

                If chkMicrogeracao.Enabled Then
                    objNfTransicao.MICRO_GERACAO = If(chkMicrogeracao.Checked, 1, 0)
                    objNfTransicao.MICRO_GERACAO_DISTRIBUIDA = If(chkMicrogeracao.Checked, 1, 0)
                Else
                    objNfTransicao.MICRO_GERACAO = 2
                End If

                vlistConcorte = repositorioNfTransicao.Select_13(objNfTransicao)

                vlist = repositorioNfTransicao.Select_3(objNfTransicao)

                If vlist.Count > 0 Then
                    objNfTransicao.FLGST = "P"
                    objNfTransicao.DATAPAG = Date.Now
                    objNfTransicao.BANARREC = 952
                    objNfTransicao.BANIDENT = "BAIXA AUTOMATICA - VALOR ZERO"
                    objNfTransicao.MESANO_REF = CInt(Microsoft.VisualBasic.Right(lstrMAn, 4) & Microsoft.VisualBasic.Left(lstrMAn, 2))
                    objNfTransicao.VALORLIQ = 0

                    If Not lUpdate(objNfTransicao) Then
                        MessageBox.Show("A Rota não pode ser Atualizada!", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information)
                        Exit Sub
                    End If

                    objNfTransicao.MESANO_REF = CInt(Microsoft.VisualBasic.Right(lstrMAn, 4) & Microsoft.VisualBasic.Left(lstrMAn, 2))

                    If Me.opbPorRota.Checked Then
                        If Len(Trim(lstrAux)) > 0 Then
                            objNf.MESANO_REF = CInt(Microsoft.VisualBasic.Right(lstrMAn, 4) & Microsoft.VisualBasic.Left(lstrMAn, 2))

                            objNf.ROTA = Microsoft.VisualBasic.Left(lstrAux, Len(lstrAux) - 1)

                            objNf.ZONA = ""
                            objNf.LIVRO = ""
                            objNf.CONTA = ""
                        End If

                    Else
                        objNf.MESANO_REF = CInt(Microsoft.VisualBasic.Right(lstrMAn, 4) & Microsoft.VisualBasic.Left(lstrMAn, 2))

                        lstrAux = String.Empty

                        objNf.ROTA = lstrAux

                        If Len(Trim(Me.txtZona.Text)) > 0 And Len(Trim(Me.txtLivro.Text)) > 0 And Len(Trim(Me.txtConta.Text)) > 0 Then
                            objNf.ZONA = Me.txtZona.Text
                            objNf.LIVRO = Me.txtLivro.Text
                            objNf.CONTA = Me.txtConta.Text
                        Else
                            objNf.ZONA = ""
                            objNf.LIVRO = ""
                            objNf.CONTA = ""
                        End If
                    End If

                    If chkMicrogeracao.Enabled Then
                        objNf.MICRO_GERACAO = If(chkMicrogeracao.Checked, 1, 0)
                        objNf.MICRO_GERACAO_DISTRIBUIDA = If(chkMicrogeracao.Checked, 1, 0)
                    Else
                        objNf.MICRO_GERACAO = 2
                    End If

                    If Not lInsert(objNf) Then
                        MessageBox.Show("A Rota não pode ser Inserida!", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information)
                        Exit Sub
                    End If

                    Me.lblInfo.Text = "Validando e limpando, aguarde..."
                    Me.lblInfo.Refresh()

                    'DELETA FATURA NA BASE ONLINE
                    If Not lDelete(objNfTransicao) Then
                        MessageBox.Show("A Rota não pode ser excluída!", "Confirmação de Exclusão", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    End If

                    If vlistConcorte.Count > 0 Then
                        For Each objNfTransicaoFor As entidadeNfTransicao In vlistConcorte
                            objConcorte.ZONA = IIf(IsDBNull(objNfTransicaoFor.ZONA), "", objNfTransicaoFor.ZONA)
                            objConcorte.LIVRO = IIf(IsDBNull(objNfTransicaoFor.LIVRO), "", objNfTransicaoFor.LIVRO)
                            objConcorte.CONTA = IIf(IsDBNull(objNfTransicaoFor.CONTA), "", objNfTransicaoFor.CONTA)
                            objConcorte.CONS_ID = IIf(IsDBNull(objNfTransicaoFor.CONS_ID), 0, objNfTransicaoFor.CONS_ID)
                            objConcorte.UNID_ID = IIf(IsDBNull(objNfTransicaoFor.UNID_ID), 0, objNfTransicaoFor.UNID_ID)
                            objConcorte.SIT = "R"
                            objConcorte.IMPRESSAO = 1
                            objConcorte.FAT_NUMNF = IIf(IsDBNull(objNfTransicaoFor.NUMNF), 0, objNfTransicaoFor.NUMNF)
                            objConcorte.FAT_ANOMES_FAT = IIf(IsDBNull(objNfTransicaoFor.ANOMES_FAT), 0, objNfTransicaoFor.ANOMES_FAT)
                            dt_1 = repositorioConcorte.SelectCount(objConcorte)

                            If Convert.ToInt32(dt_1.Rows(0).ItemArray(0).ToString()) > 0 Then
                                lUpdate(objConcorte)
                            End If

                            If Me.chkEnviarFaturaEmail.CheckState = System.Windows.Forms.CheckState.Checked Then
                                istrTabela = "nftransicao"

                                vNumNF = IIf(IsDBNull(objNfTransicaoFor.NUMNF), 0, objNfTransicaoFor.NUMNF)
                                vZona = IIf(IsDBNull(objNfTransicaoFor.ZONA), "", objNfTransicaoFor.ZONA)
                                vLivro = IIf(IsDBNull(objNfTransicaoFor.LIVRO), "", objNfTransicaoFor.LIVRO)
                                vConta = IIf(IsDBNull(objNfTransicaoFor.CONTA), "", objNfTransicaoFor.CONTA)
                                vMesAno = CInt(Microsoft.VisualBasic.Right(lstrMAn, 4) & Microsoft.VisualBasic.Left(lstrMAn, 2))

                                strSql = "Select Distinct grupo From nftransicao "
                                strSql += "Where numnf = '" & vNumNF & "' "
                                strSql += "And zona = '" & vZona & "' "
                                strSql += "And livro = '" & vLivro & "' "
                                strSql += "And conta = '" & vConta & "' "
                                objAtualizaBancoDados.QUERY_NAME = strSql
                                dt1 = repositorioAtualizaBancoDados.Consultar(objAtualizaBancoDados)
                                If dt1.Rows.Count > 0 Then
                                    For Each row As DataRow In dt1.Rows
                                        vGrupo = IIf(IsDBNull(row.Item("grupo")), "", row.Item("grupo"))
                                    Next
                                End If

                                If vGrupo = "A" Then
                                    strNomeRptFat = "rptFaturaEflulGrupoAHNovo"
                                ElseIf vGrupo = "B" Then
                                    strNomeRptFat = "rptFaturaEflulGrupoB"
                                Else
                                    strNaoEnviarEmail = True
                                End If

                                If strNaoEnviarEmail = False Then
                                    Dim f As New frmImpFaturas
                                    If Me.opbPorRota.Checked = True Then
                                        f.istrTabela = "nftransicao"
                                        f.strUsuarioGeradorFatura = String.Empty
                                        f.strUsuarioGeradorFatura = $"{vUsuario.LOGIN}_{Date.Now.Day.ToString()}_{Date.Now.Month.ToString()}{Date.Now.Year.ToString()}_{Date.Now.Hour.ToString()}_{Date.Now.Minute.ToString()}_{Date.Now.Second.ToString()}_{Date.Now.Millisecond.ToString()}"
                                        f.lPrintEmail(strNomeRptFat)
                                        'dt_EnviaEmail.Rows.Add(vNumNF, vZona, vLivro, vConta, vMesAno, sCaminhoPDF & "fatura_" + Convert.ToString(vNumNF) + ".pdf")
                                        'lEnviarEmail(dt_EnviaEmail)
                                    Else
                                        f.istrTabela = "nftransicao"
                                        f.strUsuarioGeradorFatura = String.Empty
                                        f.strUsuarioGeradorFatura = $"{vUsuario.LOGIN}_{Date.Now.Day.ToString()}_{Date.Now.Month.ToString()}{Date.Now.Year.ToString()}_{Date.Now.Hour.ToString()}_{Date.Now.Minute.ToString()}_{Date.Now.Second.ToString()}_{Date.Now.Millisecond.ToString()}"
                                        f.lPrintIndividual(strNomeRptFat)
                                        'dt_EnviaEmail.Rows.Add(vNumNF, vZona, vLivro, vConta, vMesAno, sCaminhoPDF & "fatura_" + Convert.ToString(vNumNF) + ".pdf")
                                        'lEnviarEmail(dt_EnviaEmail)
                                    End If
                                End If
                            End If
                        Next
                    End If

                    MessageBox.Show("Rotas finalizadas!!", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information)

                    vResp = MessageBox.Show("Deseja imprimir o relatório?", "Confirmação de Impressão", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)

                    If vResp = DialogResult.Yes Then

                        dt = New DataTable()
                        dt.Columns.Add("ROTA_QUATRO", GetType(String))
                        dt.Columns.Add("VALORTOT", GetType(Double))
                        dt.Columns.Add("NUMNF", GetType(Double))

                        For Each objNfTransicaoFor As entidadeNfTransicao In vlist

                            dt.Rows.Add(Trim(IIf(IsDBNull(objNfTransicaoFor.ROTA_QUATRO), "", objNfTransicaoFor.ROTA_QUATRO)), CDbl(IIf(IsDBNull(objNfTransicaoFor.VALORTOT), 0, objNfTransicaoFor.VALORTOT)), IIf(IsDBNull(objNfTransicaoFor.NUMNF), 0, objNfTransicaoFor.NUMNF))

                        Next

                        lPrint(dt)

                    End If

                    Me.lblInfo.Text = ""
                    Me.lblInfo.Refresh()

                Else
                    MessageBox.Show("Não há notas fiscais a finalizar!", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    Me.cmbFinalizar.Enabled = False
                End If

            End If

        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 CheckAllListView(ByRef vlist As System.Windows.Forms.ListView, ByVal vCheck As Boolean)

        Dim i As Integer

        Try
            For i = 0 To vlist.Items.Count - 1
                vlist.Items.Item(i).Checked = vCheck
            Next i
        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Private Function lInsert(ByRef objNf As entidadeNf) As Boolean
        Dim repositorioNf As New repositorioNf
        Try

            repositorioNf.Insert(objNf)

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

    Private Function lUpdate(ByRef objNfTransicao As entidadeNfTransicao) As Boolean
        Dim repositorioNfTransicao As New repositorioNfTransicao
        Try

            repositorioNfTransicao.Update(objNfTransicao)

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

    Private Function lUpdate(ByRef objConcorte As entidadeConcorte) As Boolean
        Dim repositorioConcorte As New repositorioConcorte
        Try

            repositorioConcorte.Update_2(objConcorte)

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

    Private Function lDelete(ByRef objNfTransicao As entidadeNfTransicao) As Boolean
        Dim repositorioNfTransicao As New repositorioNfTransicao
        Try

            repositorioNfTransicao.Delete(objNfTransicao)

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

    Private Function lDelete(ByRef objNssFaturasNet As entidadeNssFaturasNet) As Boolean
        Dim repositorioNssFaturasNet As New repositorioNssFaturasNet
        Try

            repositorioNssFaturasNet.Delete(objNssFaturasNet)

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

    Private Sub lPrint(ByRef dt As DataTable)

        Dim dc As DataColumn
        Dim ds As DataSet

        Dim bytBLOBData() As Byte

        Dim rpt As New ReportDocument()

        Dim vlist

        Dim objEmpresa As New entidadeEmpresa
        Dim repositorioEmpresa As New repositorioEmpresa

        Try

            ds = New DataSet

            vlist = repositorioEmpresa.Select(objEmpresa)

            If vlist.Count <> 0 Then

                For Each objEmpresaFor As entidadeEmpresa In vlist

                    bytBLOBData = objEmpresaFor.LOGOTIPO

                Next

            End If

            If dt.Rows.Count > 0 Then

                dc = New DataColumn("IMAGE", GetType(Byte()))
                dc.DefaultValue = bytBLOBData
                dt.Columns.Add(dc)

            End If

            ds.Tables.Add(dt)
            ds.Tables(0).TableName = "REL_FINALIZAR_ROTAS"


            If ds.Tables(0).Rows.Count = 0 Then
                MessageBox.Show("Não há registros para o relatório escolhido! ", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Exit Sub
            Else

                rpt = New rptFinalizarRotas

                rpt.SetDataSource(ds)

                frmViewRelatorios.rpt = rpt

                frmViewRelatorios.CRViewer.Zoom((100))
                frmViewRelatorios.Text = "Relatório Total de Rotas Finalizadas"
                frmViewRelatorios.ShowDialog()

            End If

        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Private Sub EnviarEmail(ByVal email As String, ByVal sNomeArquivo As String, Optional ByVal sNomeContribuinte As String = "", Optional ByVal sMesRef As String = "", Optional ByVal sFatura As String = "")

        Dim emails As String() = email.Split(";")

        Dim email_unico As String

        For Each email_unico In emails

            Dim end_smtp As String = GetConfig("email.ServidorSMTP")

            If Trim(end_smtp) = "" Then
                MsgBox("Endereço SMTP não configurado, deve-se criar a configuração com a propriedade email.endereco.smtp e tentar novamente.", MsgBoxStyle.Critical)
                Exit Sub
            End If

            Dim serv_smtp As New SmtpClient
            Dim end_email As String = GetConfig("email.Endereco")

            If Trim(end_email) = "" Then
                MsgBox("Endereço de Email da Empresa não configurado, deve-se criar a configuração com a propriedade email.endereco.email e tentar novamente.", MsgBoxStyle.Critical)
                Exit Sub
            End If

            Dim assunto As String
            Dim corpo_email As String
            Dim texto_corpo_email As String
            Dim texto_complementar_corpo_email As String

            corpo_email = GetConfig("email.corpo.email")
            assunto = GetConfig("email.assunto") & sMesRef
            texto_complementar_corpo_email = GetConfig("email.corpo.email.complementar")

            texto_corpo_email = "Olá " & sNomeContribuinte & Chr(13)

            texto_corpo_email = texto_corpo_email & corpo_email & sMesRef & Chr(13) & Chr(13)

            texto_corpo_email = texto_corpo_email & texto_complementar_corpo_email

            Dim msg As New System.Net.Mail.MailMessage

            '[ se o email necessita de autenticacao ]
            If GetConfig("email.autenticacao") = "S" Then
                Dim emailAutenticacao As String = GetConfig("email.Usuario")
                Dim SenhaAutenticacao As String = GetConfig("email.Senha")

                serv_smtp.Host = end_smtp
                serv_smtp.UseDefaultCredentials = False
                serv_smtp.Credentials = New System.Net.NetworkCredential(emailAutenticacao, SenhaAutenticacao)
                serv_smtp.Port = GetConfig("porta.smtp.email") 'porta.smtp.email
                serv_smtp.EnableSsl = True
            End If

            msg.From = New MailAddress(end_email)
            msg.IsBodyHtml = True
            msg.Subject = assunto
            msg.To.Add(New MailAddress(email_unico))
            msg.Body = texto_corpo_email

            msg.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess

            msg.Priority = MailPriority.High

            '[ anexo ] 
            msg.Attachments.Add(New Attachment(sNomeArquivo))

            '[ envio ]
            Try
                Me.lblInfo.Text = "Enviando... por gentileza aguarde o término da operação."
                Me.lblInfo.Refresh()

                serv_smtp.Send(msg)
                msg.Attachments.Dispose()

                Me.lblInfo.Text = "Email enviado com sucesso - Fatura: " & sFatura & " - Email: " & email_unico & " - Contribuinte: " & sNomeContribuinte
                Me.lblInfo.Refresh()

            Catch ex As Exception

                msg.Attachments.Dispose()

                Me.lblInfo.Text = "Falha ao enviar email - Fatura: " & sFatura & " - Email: " & email_unico & " - Contribuinte: " & sNomeContribuinte
                Me.lblInfo.Refresh()

                Exit Sub

            End Try

        Next

    End Sub

    Private Sub lEnviarEmail(ByVal dados As DataTable)

        Dim dt As New DataTable
        Dim vNumNF
        Dim vZona
        Dim vLivro
        Dim vConta
        Dim vMesAno

        Dim objEnvioEmailFaturas As New entidadeEnvioEmailFaturas
        Dim repositorioEnvioEmailFaturas As New repositorioEnvioEmailFaturas

        Dim objNf As New entidadeNf
        Dim repositorioNf As New repositorioNf

        Dim objNfTransicao As New entidadeNfTransicao
        Dim repositorioNfTransicao As New repositorioNfTransicao

        If dados.Rows.Count > 0 Then

            System.Windows.Forms.Application.DoEvents()

            For Each dr As DataRow In dados.Rows

                vNumNF = dr("NUMNF")
                vZona = dr("ZONA")
                vLivro = dr("LIVRO")
                vConta = dr("CONTA")
                vMesAno = dr("MESANO")

                objEnvioEmailFaturas.NUMNF = vNumNF
                objEnvioEmailFaturas.ZONA = vZona
                objEnvioEmailFaturas.LIVRO = vLivro
                objEnvioEmailFaturas.CONTA = vConta
                objEnvioEmailFaturas.DATAENVIO = Date.Now


                If istrTabela.ToUpper() = "NF" Then

                    objNf.NUMNF = vNumNF
                    objNf.MESANO = vMesAno

                    dt = repositorioNf.SelectOthersTables_12(objNf)

                    If dt.Rows.Count > 0 Then

                        For Each dr_1 As DataRow In dt.Rows

                            Try

                                If Not String.IsNullOrWhiteSpace(dr_1("CONSUMIDOR_EMAIL").ToString()) Then

                                    EnviarEmail(dr_1("CONSUMIDOR_EMAIL").ToString(), dr("CAMINHOFATURA").ToString(), dr_1("CONSUMIDOR_NOME").ToString(), dr_1("FATURAS_MESANO").ToString(), Convert.ToString(vNumNF))

                                    objEnvioEmailFaturas.ROTA = dr_1("FATURAS_ROTA").ToString()
                                    objEnvioEmailFaturas.EMAIL = dr_1("CONSUMIDOR_EMAIL").ToString()
                                    objEnvioEmailFaturas.ENVIOEMAIL = True

                                    lInsert(objEnvioEmailFaturas)

                                Else
                                    objEnvioEmailFaturas.ROTA = dr_1("FATURAS_ROTA").ToString()
                                    objEnvioEmailFaturas.EMAIL = " "
                                    objEnvioEmailFaturas.ENVIOEMAIL = False

                                    lInsert(objEnvioEmailFaturas)
                                End If

                            Catch ex As Exception

                                objEnvioEmailFaturas.ROTA = dr_1("FATURAS_ROTA").ToString()
                                objEnvioEmailFaturas.EMAIL = IIf(String.IsNullOrWhiteSpace(dr_1("CONSUMIDOR_EMAIL").ToString()), " ", dr_1("CONSUMIDOR_EMAIL").ToString())
                                objEnvioEmailFaturas.ENVIOEMAIL = False

                                lInsert(objEnvioEmailFaturas)

                                Continue For

                            End Try

                        Next

                    End If


                ElseIf istrTabela.ToUpper() = "NFTRANSICAO" Then

                    objNfTransicao.NUMNF = vNumNF
                    objNfTransicao.MESANO = vMesAno

                    dt = repositorioNfTransicao.SelectOthersTables_5(objNfTransicao)

                    If dt.Rows.Count > 0 Then

                        For Each dr_1 As DataRow In dt.Rows

                            Try

                                If Not String.IsNullOrWhiteSpace(dr_1("CONSUMIDOR_EMAIL").ToString()) Then

                                    EnviarEmail(dr_1("CONSUMIDOR_EMAIL").ToString(), dr("CAMINHOFATURA").ToString(), dr_1("CONSUMIDOR_NOME").ToString(), dr_1("FATURAS_MESANO").ToString(), Convert.ToString(vNumNF))

                                    objEnvioEmailFaturas.ROTA = dr_1("FATURAS_ROTA").ToString()
                                    objEnvioEmailFaturas.EMAIL = dr_1("CONSUMIDOR_EMAIL").ToString()
                                    objEnvioEmailFaturas.ENVIOEMAIL = True

                                    lInsert(objEnvioEmailFaturas)

                                Else
                                    objEnvioEmailFaturas.ROTA = dr_1("FATURAS_ROTA").ToString()
                                    objEnvioEmailFaturas.EMAIL = " "
                                    objEnvioEmailFaturas.ENVIOEMAIL = False

                                    lInsert(objEnvioEmailFaturas)
                                End If

                            Catch ex As Exception

                                objEnvioEmailFaturas.ROTA = dr_1("FATURAS_ROTA").ToString()
                                objEnvioEmailFaturas.EMAIL = IIf(String.IsNullOrWhiteSpace(dr_1("CONSUMIDOR_EMAIL").ToString()), " ", dr_1("CONSUMIDOR_EMAIL").ToString())
                                objEnvioEmailFaturas.ENVIOEMAIL = False

                                lInsert(objEnvioEmailFaturas)

                                Continue For

                            End Try

                        Next

                    End If

                End If

            Next

            Me.Cursor = System.Windows.Forms.Cursors.Arrow

            Me.lblInfo.Text = "Todas as faturas foram enviadas por email."
            Me.lblInfo.Refresh()

        End If

    End Sub

    Private Function lInsert(ByRef objEnvioEmailFaturas As entidadeEnvioEmailFaturas) As Boolean
        Dim repositorioEnvioEmailFaturas As New repositorioEnvioEmailFaturas
        Try

            repositorioEnvioEmailFaturas.Insert(objEnvioEmailFaturas)

            Return True
        Catch ex As Exception

            If Not String.IsNullOrWhiteSpace(strUsuarioGeradorFatura) Then

                Dim objTempFaturaA As New entidadeTempFaturaA
                Dim repositorioTempFaturaA As New repositorioTempFaturaA

                Dim objTempHistFaturaA As New entidadeTempHistFaturaA
                Dim repositorioTempHistFaturaA As New repositorioTempHistFaturaA

                Dim objTempFatura As New entidadeTempFatura
                Dim repositorioTempFatura As New repositorioTempFatura

                objTempFaturaA.NOMEMAQUINA = strUsuarioGeradorFatura
                lDelete(objTempFaturaA)

                objTempHistFaturaA.NOMEMAQUINA = strUsuarioGeradorFatura
                lDelete(objTempHistFaturaA)

                objTempFatura.NOMEMAQUINA = strUsuarioGeradorFatura
                lDelete(objTempFatura)

            End If

            MessageBox.Show("Ocorreu o Erro: " & Err.Description & " - Rotina: lInsert  - EnvioEmailFaturas" & "", "Aviso de Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return False

        End Try
    End Function

    Private Function lDelete(ByRef objTempFaturaA As entidadeTempFaturaA) As Boolean
        Dim repositorioTempFaturaA As New repositorioTempFaturaA
        Try

            repositorioTempFaturaA.Delete(objTempFaturaA)

            Return True
        Catch ex As Exception

            If Not String.IsNullOrWhiteSpace(strUsuarioGeradorFatura) Then

                Dim objTempHistFaturaA As New entidadeTempHistFaturaA
                Dim repositorioTempHistFaturaA As New repositorioTempHistFaturaA

                Dim objTempFatura As New entidadeTempFatura
                Dim repositorioTempFatura As New repositorioTempFatura

                objTempFaturaA.NOMEMAQUINA = strUsuarioGeradorFatura
                lDelete(objTempFaturaA)

                objTempHistFaturaA.NOMEMAQUINA = strUsuarioGeradorFatura
                lDelete(objTempHistFaturaA)

                objTempFatura.NOMEMAQUINA = strUsuarioGeradorFatura
                lDelete(objTempFatura)

            End If

            MessageBox.Show("Ocorreu o Erro: " & Err.Description & " - Rotina: lDelete  - TempFaturaA" & "", "Aviso de Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return False

        End Try
    End Function

    Private Function lDelete(ByRef objTempHistFaturaA As entidadeTempHistFaturaA) As Boolean
        Dim repositorioTempHistFaturaA As New repositorioTempHistFaturaA
        Try

            repositorioTempHistFaturaA.Delete(objTempHistFaturaA)

            Return True
        Catch ex As Exception

            If Not String.IsNullOrWhiteSpace(strUsuarioGeradorFatura) Then

                Dim objTempFaturaA As New entidadeTempFaturaA
                Dim repositorioTempFaturaA As New repositorioTempFaturaA

                Dim objTempFatura As New entidadeTempFatura
                Dim repositorioTempFatura As New repositorioTempFatura

                objTempFaturaA.NOMEMAQUINA = strUsuarioGeradorFatura
                lDelete(objTempFaturaA)

                objTempHistFaturaA.NOMEMAQUINA = strUsuarioGeradorFatura
                lDelete(objTempHistFaturaA)

                objTempFatura.NOMEMAQUINA = strUsuarioGeradorFatura
                lDelete(objTempFatura)

            End If

            MessageBox.Show("Ocorreu o Erro: " & Err.Description & " - Rotina: lDelete  - TempHistFaturaA" & "", "Aviso de Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return False

        End Try
    End Function

    Private Function lDelete(ByRef objTempFatura As entidadeTempFatura) As Boolean
        Dim repositorioTempFatura As New repositorioTempFatura
        Try

            repositorioTempFatura.Delete(objTempFatura)

            Return True
        Catch ex As Exception

            If Not String.IsNullOrWhiteSpace(strUsuarioGeradorFatura) Then

                Dim objTempFaturaA As New entidadeTempFaturaA
                Dim repositorioTempFaturaA As New repositorioTempFaturaA

                Dim objTempHistFaturaA As New entidadeTempHistFaturaA
                Dim repositorioTempHistFaturaA As New repositorioTempHistFaturaA

                objTempFaturaA.NOMEMAQUINA = strUsuarioGeradorFatura
                lDelete(objTempFaturaA)

                objTempHistFaturaA.NOMEMAQUINA = strUsuarioGeradorFatura
                lDelete(objTempHistFaturaA)

                objTempFatura.NOMEMAQUINA = strUsuarioGeradorFatura
                lDelete(objTempFatura)

            End If

            MessageBox.Show("Ocorreu o Erro: " & Err.Description & " - Rotina: lDelete  - TempFatura" & "", "Aviso de Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return False

        End Try
    End Function

#End Region

End Class