Option Strict Off
Option Explicit On


Imports System.Linq
Imports System.Data
Imports fatd_faturamento.BLL.Repositorio
Imports fatd_faturamento.ENTIDADE

Friend Class frmFinalizarMes
    Inherits System.Windows.Forms.Form

    Private dt1 As DataTable

    Dim istrMesAno As String
    Dim vResp As Short

#Region "Propriedades"
    Private Sub frmFinalizaMes_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load


        Try

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

            Me.lblMsg.Text = "Esta rotina finalizará o mês de " & istrMesAno & ", impossibilitando alterações nas notas fiscais deste mês. Não é possível realizar este processo se todas as rotas não estiverem finalizadas."
            Me.lblMsg.Refresh()

            Me.lblInfo.Text = String.Empty
            Me.lblInfo.Refresh()

            'vResp = MessageBox.Show("Deseja abrir a rotina de backup ?", "Informação", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)

            'If vResp = DialogResult.Yes Then
            '    frmBackup.Show()
            '    lClose()
            'End If

            'Comentado por Nader 25/04/2023
            'VerificaSemLeitura()
            'Fim do Comentado

            'LimpaDadosAgenciaVirtual()

            'Comentado por Nader 25/04/2023
            'VerificaFaturados()
            'Fim do Comentado

            Verifica_Leituras_Faturas()


        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)
            Me.Close()
            Exit Sub
        End Try

    End Sub

    Private Sub cmdFechar_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdFechar.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 cmdEncerrar_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdEncerrar.Click

        'Nf
        Dim lstrIte As String
        Dim lstrZon As String
        Dim lstrLiv As String
        Dim lstrCon As String
        Dim llngCId As Integer
        Dim llngUid As Integer
        Dim lstrDia As String
        Dim ldtePag As Date
        Dim ldblVlr As Double
        Dim lintTBr As Short

        'LeitMensal
        Dim lstrLei As String 'Leitura Atual
        Dim lstrLIr As String 'Leitura atual irrigante
        Dim ldblCon As Double 'Consumo
        Dim ldblConP As Double 'Consumo ponta
        Dim ldblConI As Double 'Consumo intermediario
        Dim ldblConF As Double 'Consumo fora ponta
        Dim llngOco As Integer 'Ocorrência
        Dim llngMed As Integer 'Média
        Dim llngVAt As Integer 'Reativo Atual
        Dim llngVAn As Integer 'Reativo Anterior
        Dim ldblResiduo As Double
        Dim lstrLeitRev As String

        'Branca
        Dim ldblLeiAtualPonta As Double
        Dim ldblLeiAtualInter As Double
        Dim ldblLeiAtualForaP As Double

        'Outros
        Dim lblnAux As Boolean
        Dim llngAnoMes As Integer
        Dim ldteBase As Date

        Dim dt As DataTable

        Dim vlist

        Dim objNfTransicao As New entidadeNfTransicao
        Dim repositorioNfTransicao As New repositorioNfTransicao

        Dim objLeitmensalBKP As New entidadeLeitmensalBKP
        Dim repositorioLeitmensalBKP As New repositorioLeitmensalBKP

        Dim objNf As New entidadeNf
        Dim repositorioNf As New repositorioNf

        Dim objUCFaturamento As New entidadeUCFaturamento
        Dim repositorioUCFaturamento As New repositorioUCFaturamento

        Dim objLeitmensal As New entidadeLeitmensal
        Dim repositorioLeitmensal As New repositorioLeitmensal

        Dim objConsumos As New entidadeConsumos
        Dim repositorioConsumos As New repositorioConsumos

        Dim objBxRendaFaturamento As New entidadeBxRendaFaturamento
        Dim repositorioBxRendaFaturamento As New repositorioBxRendaFaturamento

        Dim objNfv As New entidadeNfv
        Dim repositorioNfv As New repositorioNfv

        Try

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

            Me.cmdEncerrar.Enabled = False
            Me.cmdFechar.Enabled = False

            ldteBase = Date.Now

            Me.lblInfo.Text = " Verificando as Notas Fiscais..."
            Me.lblInfo.Refresh()

            System.Windows.Forms.Application.DoEvents()


            'Verifica se ainda tem alguma coisa em faturamento

            objNfTransicao.MESANO = istrMesAno

            dt = repositorioNfTransicao.SelectCount(objNfTransicao)

            If Convert.ToInt32(dt.Rows(0).ItemArray(0).ToString()) > 0 Then
                Me.Cursor = System.Windows.Forms.Cursors.Default
                MessageBox.Show("Existem rotas não finalizadas. " & Chr(13) & "Você deve finalizar todas as rotas antes de finalizar o mês.", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Else

                Me.lblInfo.Text = " Criando tabela backup leituras..."
                Me.lblInfo.Refresh()

                objLeitmensalBKP.MEDIA = Microsoft.VisualBasic.Left(istrMesAno, 2) & Microsoft.VisualBasic.Right(istrMesAno, 2)

                repositorioLeitmensalBKP.Execute(objLeitmensalBKP)


                '----- Finalização do Grupo A ---------------------------

                Me.lblInfo.Text = " Finalizando Grupo A..."
                Me.lblInfo.Refresh()

                System.Windows.Forms.Application.DoEvents()

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

                vlist = repositorioNf.Select_2(objNf)

                If vlist.Count <> 0 Then

                    BarraProgresso((Me.ProgressBar), (Me.lblPerc), (Me.lblInfo), 0, vlist.Count)

                    For Each objNfFor As entidadeNf In vlist

                        lstrZon = Trim(IIf(IsDBNull(objNfFor.ZONA), "", objNfFor.ZONA))
                        lstrLiv = Trim(IIf(IsDBNull(objNfFor.LIVRO), "", objNfFor.LIVRO))
                        lstrCon = Trim(IIf(IsDBNull(objNfFor.CONTA), "", objNfFor.CONTA))
                        llngCId = CInt(IIf(IsDBNull(objNfFor.CONS_ID), 0, objNfFor.CONS_ID))
                        llngUid = CInt(IIf(IsDBNull(objNfFor.UNID_ID), 0, objNfFor.UNID_ID))
                        lstrIte = Trim(IIf(IsDBNull(objNfFor.ITENSSERV), "", objNfFor.ITENSSERV))


                        'Atualiza o arredondamento do grupo A

                        'LEITURA
                        objUCFaturamento.ULT_LEIT_KWH_P = Replace(CStr(BuscaValorItem(lstrIte, "0302040008")), ",", ".")
                        objUCFaturamento.ULT_LEIT_KWH_FP = Replace(CStr(BuscaValorItem(lstrIte, "0302040010")), ",", ".")
                        objUCFaturamento.ULT_LEIT_KW_P = Replace(CStr(BuscaValorItem(lstrIte, "0302040012")), ",", ".")
                        objUCFaturamento.ULT_LEIT_KW_FP = Replace(CStr(BuscaValorItem(lstrIte, "0302040014")), ",", ".")
                        objUCFaturamento.ULT_LEIT_KVARH_P = Replace(CStr(BuscaValorItem(lstrIte, "0302040016")), ",", ".")
                        objUCFaturamento.ULT_LEIT_KVARH_FP = Replace(CStr(BuscaValorItem(lstrIte, "0302040018")), ",", ".")
                        objUCFaturamento.ULTLEIT_REVERSO_P = Replace(CStr(BuscaValorItem(lstrIte, "0302040022")), ",", ".")
                        objUCFaturamento.ULTLEIT_REVERSO_FP = Replace(CStr(BuscaValorItem(lstrIte, "0302040024")), ",", ".")
                        ' objUCFaturamento.ULT_LEIT_IRRIGANTE_P = Replace(CStr(BuscaValorItem(lstrIte, "")), ",", ".")
                        ' objUCFaturamento.ULT_LEIT_IRRIGANTE_FP = Replace(CStr(BuscaValorItem(lstrIte, "")), ",", ".")

                        ' CONSUMO
                        objUCFaturamento.ULT_CONS_KWH_P = Replace(CStr(BuscaValorItem(lstrIte, "0302010010")), ",", ".")
                        objUCFaturamento.ULT_CONS_KWH_FP = Replace(CStr(BuscaValorItem(lstrIte, "0302010011")), ",", ".")
                        objUCFaturamento.ULT_CONS_KW_P = Replace(CStr(BuscaValorItem(lstrIte, "0302010019")), ",", ".")
                        objUCFaturamento.ULT_CONS_KW_FP = Replace(CStr(BuscaValorItem(lstrIte, "0302010023")), ",", ".")
                        objUCFaturamento.ULT_CONS_KVARH_P = Replace(CStr(BuscaValorItem(lstrIte, "0302010013")), ",", ".")
                        objUCFaturamento.ULT_CONS_KVARH_FP = Replace(CStr(BuscaValorItem(lstrIte, "0302010014")), ",", ".")

                        ' RESIDUO
                        ' objUCFaturamento.KWH_RES_P = Replace(CStr(BuscaValorItem(lstrIte, "")), ",", ".")
                        ' objUCFaturamento.KWH_RES_FP = Replace(CStr(BuscaValorItem(lstrIte, "")), ",", ".")
                        ' objUCFaturamento.KWH_IRRIGANTE_RES_P = Replace(CStr(BuscaValorItem(lstrIte, "")), ",", ".")
                        ' objUCFaturamento.KWH_IRRIGANTE_RES_FP = Replace(CStr(BuscaValorItem(lstrIte, "")), ",", ".")
                        ' objUCFaturamento.KWH_REVERSO_RES_P = Replace(CStr(BuscaValorItem(lstrIte, "")), ",", ".")
                        objUCFaturamento.KWH_REVERSO_RES_FP = Replace(CStr(BuscaValorItem(lstrIte, "0302013011")), ",", ".")

                        'ARREDONDAMENTO

                        objUCFaturamento.ID = llngUid

                        lUpdate(objUCFaturamento)

                        BarraProgresso((Me.ProgressBar), (Me.lblPerc), (Me.lblInfo), 1,  , " Grupo A")

                    Next

                End If

                '----- Finalização do Grupo B ---------------------------
                Me.lblInfo.Text = " Finalizando Grupo B..."
                Me.lblInfo.Refresh()

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

                vlist = repositorioNf.Select_3(objNf)

                If vlist.Count <> 0 Then

                    BarraProgresso((Me.ProgressBar), (Me.lblPerc), (Me.lblInfo), 0, vlist.Count)

                    For Each objNfFor As entidadeNf In vlist

                        lstrIte = Trim(IIf(IsDBNull(objNfFor.ITENSSERV), "", objNfFor.ITENSSERV))
                        lstrZon = Trim(IIf(IsDBNull(objNfFor.ZONA), "", objNfFor.ZONA))
                        lstrLiv = Trim(IIf(IsDBNull(objNfFor.LIVRO), "", objNfFor.LIVRO))
                        lstrCon = Trim(IIf(IsDBNull(objNfFor.CONTA), "", objNfFor.CONTA))
                        llngCId = CInt(IIf(IsDBNull(objNfFor.CONS_ID), 0, objNfFor.CONS_ID))
                        llngUid = CInt(IIf(IsDBNull(objNfFor.UNID_ID), 0, objNfFor.UNID_ID))
                        lstrDia = Trim(IIf(IsDBNull(objNfFor.DIAS), "", objNfFor.DIAS))
                        ldtePag = CDate(IIf(IsDBNull(objNfFor.DATAPAG), "1900-01-01", objNfFor.DATAPAG))
                        ldblVlr = CDbl(IIf(IsDBNull(objNfFor.VALORTOT), "0", objNfFor.VALORTOT))
                        lintTBr = CShort(Trim(IIf(IsDBNull(objNfFor.TARIFA_BRANCA), 0, objNfFor.TARIFA_BRANCA)))
                        ldblResiduo = BuscaVlrItem(lstrIte, "0302020998")

                        'Busca as leituras da tabela leitmensal
                        lstrLei = "0"
                        lstrLIr = "0"
                        ldblCon = 0
                        ldblConP = 0
                        ldblConI = 0
                        ldblConF = 0
                        llngOco = 0
                        llngMed = 0
                        llngVAt = 0
                        llngVAn = 0
                        lstrLeitRev = CStr(0)
                        ldblLeiAtualPonta = 0
                        ldblLeiAtualInter = 0
                        ldblLeiAtualForaP = 0


                        objLeitmensal.UNID_ID = llngUid
                        objLeitmensal.ZONA = lstrZon
                        objLeitmensal.LIVRO = lstrLiv
                        objLeitmensal.CONTA = lstrCon

                        vlist = repositorioLeitmensal.Select(objLeitmensal)

                        If vlist.Count <> 0 Then


                            For Each objLeitmensalFor As entidadeLeitmensal In vlist

                                lstrLei = Trim(Replace(Replace(IIf(IsDBNull(objLeitmensalFor.LEIT_ATUAL), "0", objLeitmensalFor.LEIT_ATUAL), ",", ""), ".", ""))
                                lstrLIr = Trim(Replace(Replace(IIf(IsDBNull(objLeitmensalFor.LEIT_IRRIGANTE_ATUAL), "0", objLeitmensalFor.LEIT_IRRIGANTE_ATUAL), ",", ""), ".", ""))
                                ldblCon = CDbl(IIf(IsDBNull(objLeitmensalFor.CONSUMO), "0", objLeitmensalFor.CONSUMO))
                                ldblConP = CDbl(IIf(IsDBNull(objLeitmensalFor.KWH_PONTA), "0", objLeitmensalFor.KWH_PONTA))
                                ldblConI = CDbl(IIf(IsDBNull(objLeitmensalFor.KWH_INTERMEDIARIO), "0", objLeitmensalFor.KWH_INTERMEDIARIO))
                                ldblConF = CDbl(IIf(IsDBNull(objLeitmensalFor.KWH_FORA_PONTA), "0", objLeitmensalFor.KWH_FORA_PONTA))
                                llngOco = CInt(IIf(IsDBNull(objLeitmensalFor.OCORRENC), 0, objLeitmensalFor.OCORRENC))
                                llngMed = CInt(IIf(IsDBNull(objLeitmensalFor.MEDIA), 0, objLeitmensalFor.MEDIA))
                                llngVAt = CInt(IIf(IsDBNull(objLeitmensalFor.KVARHATUAL), 0, objLeitmensalFor.KVARHATUAL))
                                llngVAn = CInt(IIf(IsDBNull(objLeitmensalFor.KVARH), 0, objLeitmensalFor.KVARH))
                                lstrLeitRev = IIf(IsDBNull(objLeitmensalFor.LEIT_REVERSO_ATUAL), "0", objLeitmensalFor.LEIT_REVERSO_ATUAL)

                                'Branca
                                ldblLeiAtualPonta = Val(IIf(IsNumeric(IIf(IsDBNull(objLeitmensalFor.LEITURA_ATUAL_PONTA), 0, objLeitmensalFor.LEITURA_ATUAL_PONTA)), IIf(IsDBNull(objLeitmensalFor.LEITURA_ATUAL_PONTA), 0, objLeitmensalFor.LEITURA_ATUAL_PONTA), 0))
                                ldblLeiAtualInter = Val(IIf(IsNumeric(IIf(IsDBNull(objLeitmensalFor.LEITURA_ATUAL_INTERMEDIARIO), 0, objLeitmensalFor.LEITURA_ATUAL_INTERMEDIARIO)), IIf(IsDBNull(objLeitmensalFor.LEITURA_ATUAL_INTERMEDIARIO), 0, objLeitmensalFor.LEITURA_ATUAL_INTERMEDIARIO), 0))
                                ldblLeiAtualForaP = Val(IIf(IsNumeric(IIf(IsDBNull(objLeitmensalFor.LEITURA_ATUAL_FORA_PONTA), 0, objLeitmensalFor.LEITURA_ATUAL_FORA_PONTA)), IIf(IsDBNull(objLeitmensalFor.LEITURA_ATUAL_FORA_PONTA), 0, objLeitmensalFor.LEITURA_ATUAL_FORA_PONTA), 0))


                            Next

                        End If


                        AtualizaConsumosGrupoB(llngUid, lstrZon, lstrLiv, lstrCon)

                        lblnAux = VerificaExisteRegistro("consumos", "unid_id = " & llngUid)

                        objConsumos.ZONA = lstrZon
                        objConsumos.LIVRO = lstrLiv
                        objConsumos.CONTA = lstrCon
                        objConsumos.UNID_ID = llngUid
                        objConsumos.CONS_ID = llngCId
                        objConsumos.DIAS11 = If(lstrDia = "", 0, lstrDia)
                        objConsumos.LEIT11 = IIf(IsNumeric(lstrLei), lstrLei, "0")
                        objConsumos.MESANO11 = istrMesAno
                        objConsumos.CONSUMO11 = Replace(CStr(ldblCon), ",", ".")
                        objConsumos.OCORRENCIA11 = llngOco
                        objConsumos.MEDIA11 = llngMed

                        If lblnAux Then
                            lUpdate_1(objConsumos)
                        Else
                            lInsert(objConsumos)
                        End If


                        'Atualiza a tabela da unidade consumidora do grupo B

                        ''objUCFaturamento.ULTLEIT = IIf(IsNumeric(lstrLei), lstrLei, "0")
                        objUCFaturamento.KVARH = llngVAt
                        objUCFaturamento.ULTKVARH = llngVAn
                        objUCFaturamento.LEIT = 0

                        'Irrigação
                        objUCFaturamento.ULTLEIT_IRRIGANTE = IIf(IsNumeric(lstrLIr), lstrLIr, "0")
                        'objUCFaturamento.ult_leit_irrigante_p =  IIf(IsNumeric(lstrLIr), lstrLIr, "0") 
                        'objUCFaturamento.ult_leit_irrigante_i =  IIf(IsNumeric(lstrLIr), lstrLIr, "0") 
                        objUCFaturamento.ULT_LEIT_IRRIGANTE_FP = IIf(IsNumeric(lstrLIr), lstrLIr, "0")
                        objUCFaturamento.KWH_IRRIGANTE_RES = 0
                        objUCFaturamento.KWH_IRRIGANTE_RES_P = 0
                        objUCFaturamento.KWH_IRRIGANTE_RES_I = 0
                        objUCFaturamento.KWH_IRRIGANTE_RES_FP = 0

                        'Micro Geração
                        objUCFaturamento.ULTLEIT_REVERSO = IIf(IsNumeric(lstrLeitRev), lstrLeitRev, "0")
                        'objUCFaturamento.ultleit_reverso_p = IIf(IsNumeric(lstrLeitRev), lstrLeitRev, "0")
                        'objUCFaturamento.ultleit_reverso_i = IIf(IsNumeric(lstrLeitRev), lstrLeitRev, "0")
                        objUCFaturamento.ULTLEIT_REVERSO_FP = IIf(IsNumeric(lstrLeitRev), lstrLeitRev, "0")
                        objUCFaturamento.KWH_REVERSO_RES_P = 0
                        objUCFaturamento.KWH_REVERSO_RES_I = 0
                        objUCFaturamento.KWH_REVERSO_RES_FP = 0
                        'objUCFaturamento.ult_leit_kvarh_p  = llngVAn 
                        'objUCFaturamento.ult_leit_kvarh_i  =  llngVAn 
                        objUCFaturamento.ULT_LEIT_KVARH_FP = llngVAn
                        'objUCFaturamento.ult_cons_kvarh_p  =  llngVAt 
                        'objUCFaturamento.ult_cons_kvarh_i  =  llngVAt 
                        objUCFaturamento.ULT_CONS_KVARH_FP = llngVAt
                        objUCFaturamento.ULT_LEIT_KWH_P = Replace(CStr(ldblLeiAtualPonta), ",", ".")
                        objUCFaturamento.ULT_LEIT_KWH_I = Replace(CStr(ldblLeiAtualInter), ",", ".")
                        objUCFaturamento.ULT_CONS_KWH_P = Replace(CStr(ldblConP), ",", ".")
                        objUCFaturamento.ULT_CONS_KWH_I = Replace(CStr(ldblConI), ",", ".")

                        If lintTBr = 0 Then
                            objUCFaturamento.ULT_LEIT_KWH_FP = IIf(IsNumeric(lstrLei), lstrLei, "0")
                            objUCFaturamento.ULT_CONS_KWH_FP = Replace(CStr(ldblCon), ",", ".")
                            objUCFaturamento.ULTLEIT = IIf(IsNumeric(lstrLei), lstrLei, "0")
                        Else
                            objUCFaturamento.ULT_LEIT_KWH_FP = Replace(CStr(ldblLeiAtualForaP), ",", ".")
                            objUCFaturamento.ULT_CONS_KWH_FP = Replace(CStr(ldblConF), ",", ".")
                            objUCFaturamento.ULTLEIT = Replace(CStr(ldblLeiAtualForaP), ",", ".")
                        End If

                        If ldblResiduo > 0 Then
                            objUCFaturamento.RESIDUO_CONSUMO = 0
                            objUCFaturamento.KWH_RES_P = 0
                            objUCFaturamento.KWH_RES_I = 0
                            objUCFaturamento.KWH_RES_FP = 0
                        Else
                            objUCFaturamento.RESIDUO_CONSUMO = 1
                            objUCFaturamento.KWH_RES_P = 1
                            objUCFaturamento.KWH_RES_I = 1
                            objUCFaturamento.KWH_RES_FP = 1
                        End If

                        objUCFaturamento.ID = llngUid

                        lUpdate_1(objUCFaturamento)

                        Call BarraProgresso((Me.ProgressBar), (Me.lblPerc), (Me.lblInfo), 1,  , " Finalizando Grupo B")

                    Next

                End If


                'Transfere convenios, taxas, diversos e devolucoes para o proximo mes de quem nao foi cobrado ou devolvido.
                Me.lblInfo.Text = " Transferindo convênios,taxas e diversos..."
                Me.lblInfo.Refresh()

                If gstrEmpresa_Sigla <> "EFLUL" Then
                    TransfereConveniosNaoCobradosProxMes()
                End If

                Me.lblInfo.Text = " Backup das leituras..."
                Me.lblInfo.Refresh()

                objLeitmensalBKP.MEDIA = Microsoft.VisualBasic.Left(istrMesAno, 2) & Microsoft.VisualBasic.Right(istrMesAno, 2)

                repositorioLeitmensalBKP.Execute_1(objLeitmensalBKP)

                lDelete(objLeitmensal)

                '----- Incrementa o Mês/Ano de faturamento ----------------------------
                Me.lblInfo.Text = " Alterando o mês do faturamento..."
                Me.lblInfo.Refresh()

                llngAnoMes = CInt(Microsoft.VisualBasic.Right(istrMesAno, 4) & Microsoft.VisualBasic.Left(istrMesAno, 2))

                If Microsoft.VisualBasic.Left(istrMesAno, 2) = "12" Then
                    istrMesAno = "01/" & (CDbl(Microsoft.VisualBasic.Right(istrMesAno, 4)) + 1)
                Else
                    istrMesAno = VB6.Format(CDbl(Microsoft.VisualBasic.Left(istrMesAno, 2)) + 1, "00") & "/" & Microsoft.VisualBasic.Right(istrMesAno, 4)
                End If

                SetConfig("mes.ano.faturamento", "String", istrMesAno, istrMesAno)
                SetConfig("iniciou.faturamento", "Boolean", "False", "False")

                '----------------------------------------------------------------------
                'Zera o numero da fatura
                If GetConfig("reiniciar.nr.fiscal") = "S" Then

                    If gstrEmpresa_Sigla.ToUpper() = "CERES" Then

                        If gstrEmpresa_UF.ToUpper() = "RJ" Then
                            SetConfig("ultimo.nr.fiscal.rj", "String", CStr(0), CStr(0))
                        ElseIf gstrEmpresa_UF.ToUpper() = "MG" Then
                            SetConfig("ultimo.nr.fiscal.mg", "String", CStr(0), CStr(0))
                        End If

                    Else
                        SetConfig("ultimo.nr.fiscal", "String", CStr(0), CStr(0))
                    End If

                End If

                ' ----- Zera a tabela BxRendaFaturamento
                lDelete(objBxRendaFaturamento)

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

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


                If gstrEmpresa_Sigla = "EFLUL" Then

                    objNfv.MESANO_REFERENCIA = llngAnoMes
                    objNfv.FASE = VB6.Format(ldteBase, "yyyy-MM-dd")

                    repositorioNfv.Execute(objNfv)

                End If

                objConsumos.DIAS0 = llngAnoMes
                objConsumos.CONSUMO0 = VB6.Format(ldteBase, "yyyy-MM-dd")

                repositorioConsumos.Execute(objConsumos)

                MessageBox.Show("O fechamento do mês foi concluído com sucesso!", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information)

                Me.cmdFechar.Text = "&Fechar"

                Me.cmdEncerrar.Enabled = False
                Me.cmdFechar.Enabled = True

                'Limpar Tabelas para carregar dados para APP de Leitura
                LimpaDadosAgenciaVirtual()

                System.Windows.Forms.Application.DoEvents()


            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 lClose()

        Try

            Close()

        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Private Sub TransfereConveniosNaoCobradosProxMes()

        'Tem que ser todos os lançamentos e não somente as UC que tiveram Fatura.
        Dim ldteBas As Date
        Dim ldteIni As Date
        Dim ldteFim As Date
        Dim lstrZona As String
        Dim lstrLivro As String
        Dim lstrConta As String
        Dim llngConsId As Integer
        Dim llngUnidId As Integer

        Dim vlist

        Dim objConvenios As New entidadeConvenios
        Dim repositorioConvenios As New repositorioConvenios

        Dim objTaxas As New entidadeTaxas
        Dim repositorioTaxas As New repositorioTaxas

        Try

            ldteBas = CDate("01/" & istrMesAno) 'Data do faturamento atual

            'Data do próximo faturamento
            ldteFim = CDate(UltimoDiaMes(Month(ldteBas), Year(ldteBas)) & "/" & VB6.Format(ldteBas, "mm/yyyy"))
            ldteIni = System.DateTime.FromOADate(ldteFim.ToOADate + 1)
            ldteFim = CDate(UltimoDiaMes(Month(ldteIni), Year(ldteIni)) & "/" & VB6.Format(ldteIni, "mm/yyyy"))

            vlist = repositorioConvenios.Select(objConvenios)

            If vlist.Count <> 0 Then

                For Each objConveniosFor As entidadeConvenios In vlist

                    lstrZona = Trim(IIf(IsDBNull(objConveniosFor.ZONA), "", objConveniosFor.ZONA))
                    lstrLivro = Trim(IIf(IsDBNull(objConveniosFor.LIVRO), "", objConveniosFor.LIVRO))
                    lstrConta = Trim(IIf(IsDBNull(objConveniosFor.CONTA), "", objConveniosFor.CONTA))
                    llngConsId = CInt(Trim(IIf(IsDBNull(objConveniosFor.CONS_ID), "", objConveniosFor.CONS_ID)))
                    llngUnidId = CInt(Trim(IIf(IsDBNull(objConveniosFor.UNID_ID), "", objConveniosFor.UNID_ID)))
                    My.Computer.Clipboard.SetText(IIf(IsDBNull(objConveniosFor.VALOR), "", objConveniosFor.VALOR))

                    objConvenios.DT_INI = ldteIni
                    objConvenios.DT_FIM = ldteFim
                    objConvenios.ZONA = lstrZona
                    objConvenios.LIVRO = lstrLivro
                    objConvenios.CONTA = lstrConta
                    objConvenios.CONS_ID = llngConsId
                    objConvenios.UNID_ID = llngUnidId
                    objConvenios.DT_ALTERACAO = ldteBas

                    lUpdate(objConvenios)

                Next

            End If

            vlist = repositorioTaxas.Select(objTaxas)

            If vlist.Count <> 0 Then

                For Each objTaxasFor As entidadeTaxas In vlist

                    lstrZona = Trim(IIf(IsDBNull(objTaxasFor.ZONA), "", objTaxasFor.ZONA))
                    lstrLivro = Trim(IIf(IsDBNull(objTaxasFor.LIVRO), "", objTaxasFor.LIVRO))
                    lstrConta = Trim(IIf(IsDBNull(objTaxasFor.CONTA), "", objTaxasFor.CONTA))
                    llngConsId = CInt(Trim(IIf(IsDBNull(objTaxasFor.CONS_ID), "", objTaxasFor.CONS_ID)))
                    llngUnidId = CInt(Trim(IIf(IsDBNull(objTaxasFor.UNID_ID), "", objTaxasFor.UNID_ID)))


                    objTaxas.DT_INI = ldteIni
                    objTaxas.DT_FIM = ldteFim
                    objTaxas.ZONA = lstrZona
                    objTaxas.LIVRO = lstrLivro
                    objTaxas.CONTA = lstrConta
                    objTaxas.CONS_ID = llngConsId
                    objTaxas.UNID_ID = llngUnidId
                    objTaxas.DT_ALTERACAO = ldteBas

                    lUpdate(objTaxas)



                Next

            End If

        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Private Sub AtualizaConsumosGrupoB(ByVal alngUnidId As Integer, ByVal astrZona As String, ByVal astrLivro As String, ByVal astrConta As String)


        Dim objConsumos As New entidadeConsumos

        Try

            objConsumos.ZONA = astrZona
            objConsumos.LIVRO = astrLivro
            objConsumos.CONTA = astrConta
            objConsumos.UNID_ID = alngUnidId

            lUpdate(objConsumos)

        Catch ex As Exception
            Exit Sub
        End Try

    End Sub

    Private Function lInsert(ByRef objConsumos As entidadeConsumos) As Boolean
        Dim repositorioConsumos As New repositorioConsumos
        Try

            repositorioConsumos.Insert(objConsumos)

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

    Private Function lUpdate(ByRef objConsumos As entidadeConsumos) As Boolean
        Dim repositorioConsumos As New repositorioConsumos
        Try

            repositorioConsumos.Update(objConsumos)

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

    Private Function lUpdate_1(ByRef objConsumos As entidadeConsumos) As Boolean
        Dim repositorioConsumos As New repositorioConsumos
        Try

            repositorioConsumos.Update_1(objConsumos)

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

    Private Function lUpdate(ByRef objConvenios As entidadeConvenios) As Boolean
        Dim repositorioConvenios As New repositorioConvenios
        Try

            repositorioConvenios.Update(objConvenios)

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

    Private Function lUpdate(ByRef objTaxas As entidadeTaxas) As Boolean
        Dim repositorioTaxas As New repositorioTaxas
        Try

            repositorioTaxas.Update(objTaxas)

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

    Private Function lUpdate(ByRef objUCFaturamento As entidadeUCFaturamento) As Boolean
        Dim repositorioUCFaturamento As New repositorioUCFaturamento
        Try

            repositorioUCFaturamento.Update_6(objUCFaturamento)

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

    Private Function lUpdate_1(ByRef objUCFaturamento As entidadeUCFaturamento) As Boolean
        Dim repositorioUCFaturamento As New repositorioUCFaturamento
        Try

            repositorioUCFaturamento.Update_7(objUCFaturamento)

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

    Private Function lDelete(ByRef objLeitmensal As entidadeLeitmensal) As Boolean
        Dim repositorioLeitmensal As New repositorioLeitmensal
        Dim repositorioLeituraMensalFoto As New repositorioLeituraMensalFoto
        Try

            repositorioLeitmensal.Delete(objLeitmensal)
            repositorioLeituraMensalFoto.Delete()
            Return True
        Catch ex As Exception
            Return False
        End Try
    End Function

    Private Function lDelete(ByRef objBxRendaFaturamento As entidadeBxRendaFaturamento) As Boolean
        Dim repositorioBxRendaFaturamento As New repositorioBxRendaFaturamento
        Try

            repositorioBxRendaFaturamento.Delete(objBxRendaFaturamento)

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

    Private Sub VerificaFaturados()
        Dim dt As DataTable
        Dim lstrsql As String
        Dim objABD As New entidadeAtualizaBancoDados
        Dim repABD As New repositorioAtualizaBancoDados

        Try
            lstrsql = "DROP TEMPORARY TABLE tmp_nf_anomes"
            objABD.QUERY_NAME = lstrsql
            repABD.Execute(objABD)
        Catch ex As Exception

        End Try
        lstrsql = "CREATE TEMPORARY TABLE tmp_nf_anomes select nf.rota AS rota,nf.zona AS zona,nf.livro AS livro,nf.conta AS conta,nf.unid_id AS unid_id,nf.cons_id AS cons_id,nf.anomes_fat AS anomes_fat,left(nf.grupo,1) AS grupo from nf join configuracoes where configuracoes.nome = 'mes.ano.faturamento' and concat(substr(configuracoes.valor,4,4),substr(configuracoes.valor,1,2)) = nf.anomes_fat "

        objABD.QUERY_NAME = lstrsql
        repABD.Execute(objABD)

        lstrsql = "SELECT COUNT(*) FAT FROM leitmensal lm WHERE NOT EXISTS( SELECT 1 FROM  tmp_nf_anomes tmpnf WHERE   tmpnf.rota = lm.rota  AND  tmpnf.zona = lm.zona AND tmpnf.livro = lm.livro AND  tmpnf.conta = lm.conta  and tmpnf.unid_id = lm.unid_id  and  tmpnf.cons_id = lm.cons_id)"

        objABD.QUERY_NAME = lstrsql
        dt = repABD.Consultar(objABD)

        lstrsql = "DROP TEMPORARY TABLE tmp_nf_anomes"
        objABD.QUERY_NAME = lstrsql
        repABD.Execute(objABD)

        If dt.Rows(0).ItemArray(0) > 0 Then
            MessageBox.Show("Existem consumidores sem fatura no mês " & istrMesAno & ", Verificar Relatório  >> Faturas >> UC sem Fatura... ", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Me.Close()
        End If

    End Sub

    Private Sub VerificaSemLeitura()
        Dim dt As DataTable
        Dim lstrsql As String
        Dim objABD As New entidadeAtualizaBancoDados
        Dim repABD As New repositorioAtualizaBancoDados

        lstrsql = "SELECT COUNT(*) FAT FROM uc_faturamento lm WHERE NOT EXISTS( SELECT 1 FROM  leitmensal tmpnf WHERE   tmpnf.rota = lm.rota  AND  tmpnf.zona = lm.zona AND tmpnf.livro = lm.livro AND  tmpnf.conta = lm.conta  and tmpnf.unid_id = lm.unid_id  and  tmpnf.cons_id = lm.cons_id) AND lm.situacao = 'L'"

        objABD.QUERY_NAME = lstrsql
        dt = repABD.Consultar(objABD)

        If dt.Rows(0).ItemArray(0) > 0 Then
            MessageBox.Show("Existem consumidores sem leitura " & istrMesAno & ", Verificar Relatório  >> Faturas >> UC sem Fatura... Sem Leitura ", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End If

    End Sub


    Private Function Verifica_Leituras_Faturas() As Boolean

        Dim ucs_com_erro = ""

        Dim dt As DataTable
        Dim lstrsql As String = ""
        Dim objABD As New entidadeAtualizaBancoDados
        Dim repABD As New repositorioAtualizaBancoDados


        lstrsql += " SELECT " &
                   " CONCAT(`lm`.`zona`, '.', `lm`.`livro`, '.', `lm`.`conta`) AS `zlc`," &
                   " LPAD(`lm`.`rota`, `max_length_rota`, '0') AS `rota`," &
                   " LPAD(`lm`.`seq`, `max_length_seq`, '0') AS `sequencia`" &
                   " FROM `leitmensal` `lm`" &
                   " LEFT JOIN (SELECT MAX(LENGTH(`rota`)) AS `max_length_rota`, MAX(LENGTH(`sequencia`))  AS `max_length_seq` FROM `uc_faturamento`) AS `max_length_rota_seq` ON 1 = 1" &
                   " WHERE `ocorrenc` = 97"
        objABD.QUERY_NAME = lstrsql
        dt = repABD.Consultar(objABD)

        If dt.Rows.Count > 0 Then
            ucs_com_erro = "Existem " & dt.Rows.Count & " leituras com a Ocorrencia 97 marcada!" & vbCrLf
            For Each row As DataRow In dt.Rows
                ucs_com_erro += " - ZLC: " + row.Item("zlc").ToString & " - ROTA: " & row.Item("rota").ToString & " - SEQ: " & row.Item("sequencia").ToString & vbCrLf
            Next
            ucs_com_erro += "Favor, verificar leituras, faturas e desmarcar ocorrência antes do fechamento do mês!" & vbCrLf
            MessageBox.Show(ucs_com_erro, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

            Me.Close()
            Return False
        End If



        moduleGlobal.Consulta_Unidades_Sem_Leituras_Ou_Sem_Faturas(dt1)


        'Verifica se existe unidade consumidora apta a ter fatura, sem leitura.
        Dim semLeituraQuantidade = dt1.AsEnumerable().Where(Function(row) row.Field(Of String)("dt_leitura").ToString = "").Count()
        Dim semLeitura = dt1.AsEnumerable().Where(Function(row) row.Field(Of String)("dt_leitura").ToString = "")

        If semLeituraQuantidade > 0 Then
            ucs_com_erro = "Existem " & semLeituraQuantidade & " unidades consumidoras sem leitura!" & vbCrLf
            For Each row As DataRow In semLeitura
                ucs_com_erro += " - ZLC: " + row.Item("zlc").ToString & " - ROTA: " & row.Item("rota").ToString & " - SEQ: " & row.Item("sequencia").ToString & vbCrLf
            Next
            MessageBox.Show(ucs_com_erro, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

            Me.Close()
            Return False
        End If


        'Verifica se existe unidade consumidora apta a ter fatura, sem fatura.
        Dim semFaturaQuantidade = dt1.AsEnumerable().Where(Function(row) row.Field(Of String)("numnf").ToString = "").Count()
        Dim semFatura = dt1.AsEnumerable().Where(Function(row) row.Field(Of String)("numnf").ToString = "")

        If semFaturaQuantidade > 0 Then
            ucs_com_erro = "Existem " & semFaturaQuantidade & " unidades consumidoras sem fatura!" & vbCrLf
            For Each row As DataRow In semFatura
                ucs_com_erro += " - ZLC: " + row.Item("zlc").ToString & " - ROTA: " & row.Item("rota").ToString & " - SEQ: " & row.Item("sequencia").ToString & vbCrLf
            Next
            MessageBox.Show(ucs_com_erro, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

            Me.Close()
            Return False
        End If

        Return True

    End Function

    Private Sub LimpaDadosAgenciaVirtual()
        Dim repositorioAgenciaVirtual As New repositorioAgenciaVirtual
        Dim M
        Try

            repositorioAgenciaVirtual.TruncateAgenciaVirtual(istrMesAno)

        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)
        End Try

    End Sub
#End Region

End Class