Option Strict Off
Option Explicit On
Imports VB = Microsoft.VisualBasic
Imports fatd_faturamento.BLL.Repositorio
Imports fatd_faturamento.ENTIDADE


Friend Class frmEnviarNis
    Inherits System.Windows.Forms.Form

    Private istrArquivo As String
    Private istrCaminho As String

    Private Sub frmEnviarNis_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
        Dim lstrMesAno As String
        Dim lstrCodEmp As String
        Try

            Me.Icon = frmPrincipal.Icon
            lstrMesAno = GetConfig("mes.ano.faturamento")

            If lstrMesAno = "-1" Or lstrMesAno = "" Then
                lstrMesAno = VB6.Format(Date.Now, "MM/yyyy")
            End If
            lstrMesAno = fdataBanco(lstrMesAno)
            Me.DTPMesAno.Value = VB6.Format("01/" & lstrMesAno, "dd/MM/yyyy")

            istrCaminho = GetConfig("caminho.nis")
            If Len(Trim(istrCaminho)) = 0 Or Trim(istrCaminho) = "-1" Then
                istrCaminho = My.Application.Info.DirectoryPath
                SetConfig("caminho.nis", "String", istrCaminho, istrCaminho, "Caminho para gerar o arquivo NIS")
            End If
            If VB.Right(Trim(istrCaminho), 1) <> "\" Then
                istrCaminho = istrCaminho & "\"
            End If
            lstrCodEmp = GetConfig("empresa.cod.res89")
            If Len(Trim(lstrCodEmp)) = 0 Or Trim(lstrCodEmp) = "-1" Then
                lstrCodEmp = "0000"
                SetConfig("empresa.cod.res89", "String", lstrCodEmp, lstrCodEmp, "Código da Empresa na resolução 89 (planilha bxrenda)")
            End If
            istrArquivo = "APLBXR" & lstrCodEmp & "_"
            Me.txtSequencia.Text = "01"
            Me.txtDir.Text = istrCaminho
            Call NomeArquivoNIS()
        Catch ex As Exception
            MessageBox.Show("Ocorreu o Erro: " & Err.Description & " - Rotina: frmEnviarNis_Load" & "", "Aviso de Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End Try
    End Sub

    Private Sub NomeArquivoNIS()
        Me.txtArquivo.Text = istrArquivo & Year(Me.DTPMesAno.Value) & VB6.Format(Month(Me.DTPMesAno.Value), "00") & "_" & VB6.Format(Me.txtSequencia.Text, "00") & ".txt"
    End Sub

    Private Sub DTPMesAno_Leave(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles DTPMesAno.Leave
        Call NomeArquivoNIS()
    End Sub

    Private Sub txtSequencia_Enter(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles txtSequencia.Enter
        Try
            With Me.txtSequencia
                .SelectionStart = 0
                .SelectionLength = Len(.Text)
            End With
        Catch ex As Exception
            MessageBox.Show("Ocorreu o Erro: " & Err.Description & " - Rotina: txtSequencia_Enter" & "", "Aviso de Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End Try
    End Sub

    Private Sub txtSequencia_Leave(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles txtSequencia.Leave
        Try
            With Me.txtSequencia
                .Text = VB6.Format(.Text, "00")
                Call NomeArquivoNIS()
            End With
        Catch ex As Exception
            MessageBox.Show("Ocorreu o Erro: " & Err.Description & " - Rotina: txtSequencia_Leave" & "", "Aviso de Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End Try
    End Sub
    Private Sub cmdSalvarArq_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdSalvarArq.Click
        Try
            With Me.cmdSalvarArq
                'Me.Enabled = False
                fbdNis.ShowDialog()
                txtDir.Text = fbdNis.SelectedPath()
                'Me.Enabled = True
                'frmDir.frmQuemChama = Me
                'frmDir.intTipo = 0
                'Call frmDir.SetBounds(VB6.TwipsToPixelsX(VB6.PixelsToTwipsX(Me.Left) + VB6.PixelsToTwipsX(.Left) + 400), VB6.TwipsToPixelsY(VB6.PixelsToTwipsY(Me.Top) + VB6.PixelsToTwipsY(.Top) + 400), 0, 0, Windows.Forms.BoundsSpecified.X Or Windows.Forms.BoundsSpecified.Y)
                'Call frmDir.ShowDialog()
            End With
        Catch ex As Exception
            MessageBox.Show("Ocorreu o Erro: " & Err.Description & " - Rotina: cmdSalvarArq_Click" & "", "Aviso de Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End Try
    End Sub
    Private Sub cmdGerar_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdGerar.Click
        Call GerarArquivo()
    End Sub

    Private Sub GerarArquivo()
        'Controle dos dados na base de dados
        Dim lrstNis
        Dim lstrSql As String

        'Controle do Arquivo externo
        Dim lstrNomeArquivo As String
        Dim lintARQ As Short
        Dim lstrLinha As String

        'REGISTROS
        Dim llngUnidId As Integer
        Dim ldteCadastro As Date
        Dim ldteAlteracao As Date
        Dim ldteNascimento As Date
        Dim ldteAnterior As Date
        Dim lstrCodEmpresa As String
        Dim lstrNome As String
        Dim lstrCpf As String
        Dim lstrNis As String
        Dim lstrUfNascimento As String
        Dim lstrEvento As String
        Dim lstrBxRenda As String
        Dim lstrFase As String
        Dim lstrZona As String
        Dim lstrLivro As String
        Dim lstrConta As String
        Dim lstrIBGE As String
        Dim lstrClasse As String
        Dim lstrClasAnt As String
        Dim lstrClasAtu As String
        Dim lstrCidade As String
        Dim lstrEnd As String
        Dim lstrCompl As String
        Dim lstrNumEnd As String
        Dim lstrCep As String
        Dim lstrUf As String
        Dim lstrFlgSt As String
        Dim lstrMesAtu As String
        Dim lstrMesAnt As String
        Dim ldblConsAnt As Double
        Dim ldblConsAtu As Double
        Dim bConfArquivo As Boolean
        Dim dt As DataTable
        Dim objAtualizaBancoDados As New entidadeAtualizaBancoDados
        Dim repositorioAtualizaBancoDados As New repositorioAtualizaBancoDados

        Dim objExecAtualizaBancoDados As New entidadeAtualizaBancoDados
        Dim repositorioExecAtualizaBancoDados As New repositorioAtualizaBancoDados

        bConfArquivo = False
        'On Error GoTo ErroArquivo
        Try

            'checa e abre o arquivo
            If Len(Trim(Me.txtDir.Text)) = 0 Or Len(Me.txtArquivo.Text) = 0 Then
                Call MsgBox("Arquivo de destino não foi informado!", MsgBoxStyle.Information, gstrTituloMensagem)
                Me.txtDir.Focus()
                Exit Sub
            End If

            lstrSql = "DROP TABLE IF EXISTS `aux_nis_temp`"
            objExecAtualizaBancoDados.QUERY_NAME = lstrSql
            repositorioExecAtualizaBancoDados.Execute(objExecAtualizaBancoDados)

            lstrSql = "CREATE TABLE `aux_nis_temp` ( " & "`id` int(11) default NULL, " & "KEY `idx_id` (`id`))"
            objExecAtualizaBancoDados.QUERY_NAME = lstrSql
            repositorioExecAtualizaBancoDados.Execute(objExecAtualizaBancoDados)

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

            ldteAnterior = System.DateTime.FromOADate(DateSerial(Year(Me.DTPMesAno.Value), Month(Me.DTPMesAno.Value), 1).ToOADate - 1)
            lstrMesAnt = VB6.Format(Month(ldteAnterior), "00") & "/" & VB6.Format(Year(ldteAnterior), "0000")
            lstrMesAtu = VB6.Format(Month(Me.DTPMesAno.Value), "00") & "/" & VB6.Format(Year(Me.DTPMesAno.Value), "0000")

            'Abre Arquivo
            lintARQ = FreeFile()
            lstrNomeArquivo = Me.txtDir.Text & IIf(VB.Right(Trim(Me.txtDir.Text), 1) <> "\", "\", "") & Me.txtArquivo.Text
            'FileOpen(lintARQ, lstrNomeArquivo, OpenMode.Output)

            'Prepara os dados
            lstrCodEmpresa = PreencheCampo(Mid(GetConfig("empresa.cod.decfec"), 1, 3), 3, " ", "D")
            lstrCodEmpresa = PreparaCampo(lstrCodEmpresa, 1, 3, " ")

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

            lstrSql = ""
            lstrSql = lstrSql & "SELECT n.id, "
            lstrSql = lstrSql & "       n.cpf, "
            lstrSql = lstrSql & "       n.cpf_nis, "
            lstrSql = lstrSql & "       n.nis, "
            lstrSql = lstrSql & "       n.evento, "
            lstrSql = lstrSql & "       n.bxrenda, "
            lstrSql = lstrSql & "       n.fase, "
            lstrSql = lstrSql & "       n.unid_id, "
            lstrSql = lstrSql & "       n.data_cadastro, "
            lstrSql = lstrSql & "       n.data_alteracao, "
            lstrSql = lstrSql & "       n.data_nascimento, "
            lstrSql = lstrSql & "       n.uf_nascimento, "
            lstrSql = lstrSql & "       n.flgst, "
            lstrSql = lstrSql & "       n.nome_nis, "
            lstrSql = lstrSql & "       u.zona, u.livro, u.conta, "
            lstrSql = lstrSql & "       u.nome, "
            lstrSql = lstrSql & "       u.end, "
            lstrSql = lstrSql & "       u.numero, "
            lstrSql = lstrSql & "       u.complement, "
            lstrSql = lstrSql & "       u.cidade, "
            lstrSql = lstrSql & "       u.cep, "
            lstrSql = lstrSql & "       u.uf, "
            lstrSql = lstrSql & "       u.situacao "
            lstrSql = lstrSql & "  FROM nis n, uc_faturamento u "
            lstrSql = lstrSql & " WHERE n.cpf = u.cpf_cnpj "
            lstrSql = lstrSql & "   AND n.unid_id = u.id "
            lstrSql = lstrSql & "   AND u.situacao <> ""D"" "

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

            If dt.Rows.Count > 0 Then
                Call BarraProgresso((Me.ProgressBar), (Me.lblPerc), (Me.lblInfo), 0, dt.Rows.Count)
                For Each row As DataRow In dt.Rows

                    llngUnidId = IIf(IsDBNull(row.Item("unid_id")), 0, row.Item("unid_id"))
                    lstrZona = IIf(IsDBNull(row.Item("zona")), "", row.Item("zona"))
                    lstrLivro = IIf(IsDBNull(row.Item("livro")), "", row.Item("livro"))
                    lstrConta = IIf(IsDBNull(row.Item("conta")), "", row.Item("conta"))
                    lstrCpf = IIf(IsDBNull(row.Item("cpf_nis")), "", row.Item("cpf_nis"))
                    lstrNome = Trim(IIf(IsDBNull(row.Item("nome_nis")), "", row.Item("nome_nis")))
                    lstrEnd = Trim(IIf(IsDBNull(row.Item("end")), "", row.Item("end")))
                    lstrNumEnd = Trim(IIf(IsDBNull(row.Item("numero")), "", ", " & row.Item("numero")))
                    lstrCompl = Trim(IIf(IsDBNull(row.Item("complement")), "", " - " & row.Item("complement")))
                    lstrCidade = Trim(IIf(IsDBNull(row.Item("cidade")), "", row.Item("cidade")))
                    lstrCep = IIf(IsDBNull(row.Item("cep")), "", row.Item("cep"))
                    lstrUf = IIf(IsDBNull(row.Item("uf")), "", row.Item("uf"))
                    lstrNis = Trim(IIf(IsDBNull(row.Item("nis")), "", row.Item("nis")))
                    ldteNascimento = IIf(IsDBNull(row.Item("data_nascimento")), "1951-01-01", row.Item("data_nascimento"))
                    lstrUfNascimento = Trim(IIf(IsDBNull(row.Item("uf_nascimento")), "", row.Item("uf_nascimento")))
                    ldteCadastro = IIf(IsDBNull(row.Item("data_cadastro")), "1951-01-01", row.Item("data_cadastro"))
                    ldteAlteracao = IIf(IsDBNull(row.Item("data_alteracao")), "0000-00-00", row.Item("data_alteracao"))
                    lstrEvento = IIf(IsDBNull(row.Item("evento")), "", row.Item("evento"))
                    lstrFlgSt = Trim(IIf(IsDBNull(row.Item("flgst")), "", row.Item("flgst")))
                    lstrBxRenda = IIf(IsDBNull(row.Item("bxrenda")), "", row.Item("bxrenda"))
                    lstrFase = IIf(IsDBNull(row.Item("fase")), "", row.Item("fase"))

                    'Consumo anterior
                    ldblConsAnt = BuscaConsumo("B", llngUnidId, lstrMesAnt, 0, 1)
                    'Consumo Atual
                    ldblConsAtu = BuscaConsumo("B", llngUnidId, lstrMesAtu, 0, 1)

                    lstrClasAnt = IIf(ldblConsAnt < 80, "1", "2")
                    lstrClasAtu = IIf(ldblConsAtu < 80, "1", "2")
                    lstrClasse = lstrClasAtu
                    lstrClasse = PreparaCampo(lstrClasse, 1, 1, " ")
                    lstrCpf = PreparaCampo(lstrCpf, 1, 11, " ")
                    lstrNome = PreparaCampo(lstrNome, 1, 70, " ")
                    If InStr(1, lstrNis, "-") > 0 Or InStr(1, lstrNis, " ") > 0 Then
                        lstrNis = VB.Left(lstrNis, IIf(InStr(1, lstrNis, "-") > 0, InStr(1, lstrNis, "-"), InStr(1, lstrNis, " ")) - 1)
                    Else
                        lstrNis = lstrNis
                    End If
                    lstrNis = PreparaCampo(lstrNis, 0, 14, "0")
                    lstrUfNascimento = PreparaCampo(lstrUfNascimento, 1, 2, " ")
                    lstrEnd = PreparaCampo(lstrEnd, 1, 208, " ")
                    lstrCidade = PreparaCampo(lstrCidade, 1, 35, " ")
                    lstrIBGE = BuscaIbge(,  , lstrCidade)
                    lstrIBGE = PreparaCampo(lstrIBGE, 0, 9, "0")
                    lstrCep = PreparaCampo(lstrCep, 1, 8, " ")
                    lstrUf = PreparaCampo(lstrUf, 1, 2, " ")
                    lstrEvento = PreparaCampo(lstrEvento, 1, 1, " ")

                    'Aqui que faz a verificacao se vai ou nao vai para o arquivo
                    If lstrEvento = "D" And ((Month(ldteCadastro) <> Month(Me.DTPMesAno.Value) And Year(ldteCadastro) <> Year(Me.DTPMesAno.Value)) Or (Month(ldteAlteracao) <> Month(Me.DTPMesAno.Value) And Year(ldteAlteracao) <> Year(Me.DTPMesAno.Value))) Then
                        'GoTo PulaRegistro
                    Else
                        If (lstrFlgSt = "*") Or (lstrClasAnt <> lstrClasAtu) Or ((Month(ldteCadastro) = Month(Me.DTPMesAno.Value) And Year(ldteCadastro) = Year(Me.DTPMesAno.Value)) Or (Month(ldteAlteracao) = Month(Me.DTPMesAno.Value) And Year(ldteAlteracao) = Year(Me.DTPMesAno.Value))) Then

                            If Not bConfArquivo Then FileOpen(lintARQ, lstrNomeArquivo, OpenMode.Output)

                            'Código da convessionario no DEC/FEC
                            lstrLinha = lstrCodEmpresa
                            'Nome do consumidor
                            lstrLinha = lstrLinha & lstrNome
                            'NIS do consumidor
                            lstrLinha = lstrLinha & lstrNis
                            'Data de nascimento
                            lstrLinha = lstrLinha & VB6.Format(ldteNascimento, "dd/mm/yyyy")
                            'UF de nascimento
                            lstrLinha = lstrLinha & lstrUfNascimento
                            'Endereço
                            lstrLinha = lstrLinha & lstrEnd
                            'Cidade
                            lstrLinha = lstrLinha & lstrCidade
                            'Código do IBGE da cidade
                            lstrLinha = lstrLinha & lstrIBGE
                            'CEP
                            lstrLinha = lstrLinha & lstrCep
                            'UF
                            lstrLinha = lstrLinha & lstrUf
                            'Data do cadastro do NIS
                            lstrLinha = lstrLinha & VB6.Format(ldteCadastro, "dd/mm/yyyy")
                            'Evento do NIS
                            lstrLinha = lstrLinha & lstrEvento
                            'Data da altereçao do NIS
                            lstrLinha = lstrLinha & VB6.Format(ldteAlteracao, "dd/mm/yyyy")
                            'CPF do consumidor
                            lstrLinha = lstrLinha & lstrCpf
                            'Classe 1 < 80 e 2 >=80 a <=220
                            lstrLinha = lstrLinha & lstrClasse

                            lstrSql = "INSERT INTO `aux_nis_temp` SET `id` = " & row.Item("id")
                            objExecAtualizaBancoDados.QUERY_NAME = lstrSql
                            repositorioExecAtualizaBancoDados.Execute(objExecAtualizaBancoDados)

                            PrintLine(lintARQ, lstrLinha)
                            bConfArquivo = True

                        End If
                    End If
                    Call BarraProgresso((Me.ProgressBar), (Me.lblPerc), (Me.lblInfo), 1)
                Next
            End If

            'FileClose(lintARQ)

            'Atualiza a config com os parametros de caminho e nome de arquivo
            SetConfig("caminho.nis", "String", Me.txtDir.Text, Me.txtDir.Text, "Diretório para guardar os arquivos para envio para NIS.")

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

            If bConfArquivo Then

                FileClose(lintARQ)
                Me.lblInfo.Text = " Arquivo gerado!"
                Me.lblInfo.Refresh()
                Call MsgBox("Processo concluído! Arquivo gerado: " & Trim(Me.txtArquivo.Text), MsgBoxStyle.Information, gstrTituloMensagem)

                If MsgBox("O arquivo foi gerado corretamente (limpar eventos)?", MsgBoxStyle.YesNo, gstrTituloMensagem) = MsgBoxResult.Yes Then
                    'Limpa o flag da tabela NIS
                    lstrSql = "UPDATE `nis`, `aux_nis_temp` SET `nis`.`flgst` = '' WHERE `nis`.`id` = `aux_nis_temp`.`id`"
                    objExecAtualizaBancoDados.QUERY_NAME = lstrSql
                    repositorioExecAtualizaBancoDados.Execute(objExecAtualizaBancoDados)
                End If

            Else
                Me.lblInfo.Text = " Arquivo não foi gerado!"
                Me.lblInfo.Refresh()
                Call MsgBox("Processo concluído! ", MsgBoxStyle.Information, gstrTituloMensagem)
            End If

            lstrSql = "DROP TABLE IF EXISTS `aux_nis_temp`"
            objExecAtualizaBancoDados.QUERY_NAME = lstrSql
            repositorioExecAtualizaBancoDados.Execute(objExecAtualizaBancoDados)

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

        Catch ex As Exception
            MessageBox.Show("Ocorreu o Erro: " & Err.Description & " - Rotina: GerarArquivo" & "", "Aviso de Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End Try

    End Sub
    Private Sub cmdFechar_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdFechar.Click
        Call Me.Close()
    End Sub
End Class