;** Rm_4200 ********************************************************************
;*  Relatorio p/ Conferencia Faturamento                                       *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 06/09/2009 por Anivel Augusto Rodrigues
;Ultima Alteracao: 29/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes valores -0.00
;Ultima Alteracao: 10/07/2012 por Bruno Carvalho
;Motivo Alteracao: Adicionado filtro na ask do NotaI "Situacao_Item"
;Ultima Alteracao: 16/04/2013 por Karina Andrade
;Motivo Alteracao: InclusÆo TG_TPDOCTO
;Ultima Alteracao: 01/10/2014 por Bruno/Anivel
;Motivo Alteracao: Ajustes Processa(), onde NDecimal() estava com sintaxe incorreta
;Ultima Alteracao: 27/10/2016 por Rafael Matos
;Motivo Alteracao: Ajustes Layout para padroniza‡Æo
;Ultima Alteracao: 10/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog
;Ultima Alteracao: 11/11/2019 por Bruno Carvalho          
;Motivo Alteracao: Adicionado MODELO "02" onde verifica a sequˆncia de nota 
;Ultima Alteracao: 11/11/2019 por Bruno Carvalho          
;Motivo Alteracao: Adicionado MODELO "1X" e "2X" -> Conferˆncia Redu‡Æo Z x Cupons **Play a partir do RM_0249
;Ultima Alteracao: 05/02/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado ValidarModelosRelatorios()

;*******************************************************************************
;* Cabe‡alho                                                                   *
;*******************************************************************************
Proc Cabecalho()

Print File ARQIMP CI_F_TIMES+CI_15CPP
Print File ARQIMP "\n\n\n"
Print File ARQIMP Spaces(2)+Fill(chr(196),135) + "\n"
Print File ARQIMP Spaces(2)+Format("W135,AC","CONFERENCIA DE NOTAS")+ "\n"
Print File ARQIMP Spaces(2)+Fill(chr(196),135)+ "\n"
Print File ARQIMP "\n"                                  
Print File ARQIMP Format("W135,AC","Per¡odo de "+StrVal(VSDGDTINI)+" … "+StrVal(VSDGDTFIM))+ "\n\n"
Print File ARQIMP "  Sequencia Faltante de Notas -> "+VSDGTPDOCTO+"\n"
Print File ARQIMP Spaces(2)+Fill(chr(196),122)+ "\n"
NLINHA = 11

EndProc ;Cabecalho()

;*******************************************************************************
;* Rotina de Impressao                                                         *
;*******************************************************************************
Proc Imprime(PARAM)
Private PARAM

If Not IsAssigned(NLINHA) Then NLINHA = 0 EndIf

If Not IsFile(ARQIMP) Or NLINHA >= 66
   Then If Not IsFile(ARQIMP)
           Then ;ConfGeral("Deseja imprimir em PDF a rela‡„o das inconsistˆncias localizadas?")
                ;If OK<>"S"
                ;   Then Return False     
                ;   Else DISPOSITIVO_OPCAO = "V"
                ;        PDFZEBRA = False
                ;EndIf
       EndIf              
       If NLINHA >= 66
           Then Print File ARQIMP "\f"
       EndIf
       Cabecalho()
EndIf   

Print File ARQIMP PARAM + "\n"    
NLINHA = NLINHA + 1

Return True

EndProc ;Imprime()

;*******************************************************************************
;* Rotina para Selecionar Registros                                            *
;*******************************************************************************
Proc Verifica_Sequencia_Nota()

ARQIMP=PrivDir()+"tmp_erro.Txt"
If IsFile(ARQIMP)
   Then Deleta_Arquivo(ARQIMP)
EndIf
CONTA_SEQ  = 0
CONTA_ERRO = 0
DynArray ARRAY_ERRO[]

{Ask} {NotaC} 
Moveto [Codigo da Empresa  ] Check TypeIn "~VSDGEMPRESA.."
Moveto [Numero do Documento] Check
Moveto [Serie do Documento ] Check 
Moveto [Codigo do Documento]       TypeIn "~VSDGTPDOCTO.."
Do_it!
ClearAll

TabelaNFE=Adiciona_Indice_Temp("Codigo da Empresa,Numero do Documento,Serie do Documento")

CONTA_EMPRESA = 0
DynArray EMPRESA[]

{Ask} TypeIn TabelaNFE  Enter
Moveto [Codigo da Empresa] Check
Do_it!
Scan
  CONTA_EMPRESA = CONTA_EMPRESA + 1
  EMPRESA[CONTA_EMPRESA] = [Codigo da Empresa]
EndScan
CleaRAll

AUX_EMP = "" 
PULA_LINHA = 0
For ii From 1 To DynArraySize(EMPRESA)
   IMPRESSAO = False
   CABECALHO  = Spaces(2)+"Empresa: "+EMPRESA[ii]
   {Ask} TypeIn TabelaNFE  Enter
   Moveto [Codigo da Empresa  ]       TypeIn EMPRESA[ii]
   Moveto [Numero do Documento] Check 
   Do_it!
   CleaRAll
   
   TabelaNFE_Empresa=Adiciona_Indice_Temp("Numero do Documento")
   
   {Ask} TypeIn TabelaNFE_Empresa Enter 
   Moveto [Numero do Documento] TypeIn "Calc Min as Numero do Documento"
   Do_it!
   SEQ_INICIAL_NFE = [Numero do Documento]  
   CleaRAll
   
   {Ask} TypeIn TabelaNFE_Empresa Enter 
   Moveto [Numero do Documento] TypeIn "Calc Max as Numero do Documento"
   Do_it!
   SEQ_FINAL_NFE = [Numero do Documento]  
   CleaRAll
   
   If SEQ_INICIAL_NFE=0 
      Then Delete TabelaNFE_Empresa
           Loop 
   EndIf
   
   CONTA   = 0
   SEQ_MSG = ""
   SEQ_AUX = SEQ_INICIAL_NFE
   View TabelaNFE_Empresa
   While True
      CONTA = CONTA + 1
    
      Barra(NRecords(TabelaNFE),CONTA)
      Aguarde("Aguarde, verificando a sequencia de "+VSDGTPDOCTO+" "+BARRA_STRING)
    
      ACHOU_NOTA=False
      Home
      Moveto [Numero do Documento]
      Locate SEQ_AUX
      If RetVal
         Then ACHOU_NOTA=True
      EndIf      
        
      If Not ACHOU_NOTA
         Then If SEQ_MSG = "" Then SEQ_MSG = SEQ_AUX EndIf
         Else If SEQ_MSG<>"" 
                 Then If SEQ_MSG <> AlinhM(StrVal(StrVal(NumVal(SEQ_AUX) - 1)),6)
                         Then SEQ_MSG = SEQ_MSG + " at‚ " + AlinhM(StrVal(StrVal(NumVal(SEQ_AUX) - 1)),6)
                      EndIf  
                      If (AUX_EMP="" And PULA_LINHA = 0) Or (AUX_EMP<>"" And Not IMPRESSAO)
                         Then IMPRESSAO = True
                              If AUX_EMP="" And PULA_LINHA = 0
                                 Then
                                 Else CONTA_ERRO = CONTA_ERRO + 1
                                      ARRAY_ERRO[CONTA_ERRO] = ""
                              EndIf
                              AUX_EMP = EMPRESA[ii]        
                      EndIf
                      If CABECALHO<>""
                         Then CONTA_ERRO = CONTA_ERRO + 1
                              ARRAY_ERRO[CONTA_ERRO] = CABECALHO 
                              CONTA_ERRO = CONTA_ERRO + 1
                              ARRAY_ERRO[CONTA_ERRO] = "" 
                              CABECALHO = ""
                      EndIf     
                      CONTA_ERRO = CONTA_ERRO + 1
                      ARRAY_ERRO[CONTA_ERRO] = Spaces(2)+EMPRESA[ii]+" "+SEQ_MSG 
                      SEQ_MSG = ""
              EndIf           
      EndIf 
      If SEQ_FINAL_NFE = SEQ_AUX Then QuitLoop EndIf
      SEQ_AUX = AlinhM(StrVal(StrVal(NumVal(SEQ_AUX) + 1)),6)
   EndWhile
   ClearAll
   Delete TabelaNFE_Empresa 
EndFor                                 
   
Switch
  Case CONTA_ERRO>0  :
       For ty From 1 To DynArraySize(ARRAY_ERRO)
         Imprime(ARRAY_ERRO[ty])                          
       EndFor
       ImpriArq(ARQIMP)
       Deleta_Arquivo(ARQIMP)
  OtherWise                            :
       MENSAGEM("NÆo foram localizadas inconsistˆncias")
EndSwitch

EndProc ;Verifica_Sequencia_Nota()

;*******************************************************************************
;* Rotina para Selecionar Registros                                            *
;*******************************************************************************
Proc Seleciona()
ClearAll

If IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC")
   Then {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC" Enter
        Moveto [Codigo da Empresa      ] Check TypeIn "~VSDGEMPRESA.."
        Moveto [Numero do Documento    ] Check
        Moveto [Serie do Documento     ] Check
        Moveto [Codigo do Documento    ] TypeIn "~VSDGTPDOCTO.."        
        Moveto [Nome Fantasia Empresa  ] Check
        Moveto [Codigo do Documento    ] Check
        Moveto [Data de Emissao        ] Check TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
        Moveto [Situacao               ] Check
        Moveto [Tipo Movimento Estoque ] Check
        Moveto [Razao Social           ] Check
        Moveto [Tipo de Pagamento      ] Check
        Moveto [Descricao CondPagto    ] Check
        Moveto [Descricao da Destinacao] Check
        Moveto [Valor Mercadoria       ] Check
        Moveto [Valor Nota Fiscal      ] Check
        Do_It!
        ClearAll

        {Ask} {Answer}
        Moveto [Codigo da Empresa      ] Example "cemp"
        Moveto [Numero do Documento    ] Example "ndoc"
        Moveto [Serie do Documento     ] Example "sdoc"
        Moveto [Nome Fantasia Empresa  ] Example "nfem"
        Moveto [Codigo do Documento    ] Example "cdoc"
        Moveto [Data de Emissao        ] Example "dtem"
        Moveto [Situacao               ] Example "stnf"
        Moveto [Tipo Movimento Estoque ] Example "tpme"
        Moveto [Razao Social           ] Example "razs"
        Moveto [Tipo de Pagamento      ] Example "tppg"
        Moveto [Descricao CondPagto    ] Example "dcpg"
        Moveto [Descricao da Destinacao] Example "ddes"
        Moveto [Valor Mercadoria       ] Example "vrme"
        Moveto [Valor Nota Fiscal      ] Example "vrnf"
        {Ask} TypeIn Tabela Enter TypeIn "Fast Insert"
        Moveto [Codigo da Empresa      ] Example "cemp"
        Moveto [Numero do Documento    ] Example "ndoc"
        Moveto [Serie do Documento     ] Example "sdoc"
        Moveto [Nome Fantasia Empresa  ] Example "nfem"
        Moveto [Codigo do Documento    ] Example "cdoc"
        Moveto [Data de Emissao        ] Example "dtem"
        Moveto [Situacao               ] Example "stnf"
        Moveto [Tipo Movimento Estoque ] Example "tpme"
        Moveto [Razao Social           ] Example "razs"
        Moveto [Tipo de Pagamento      ] Example "tppg"
        Moveto [Descricao CondPagto    ] Example "dcpg"
        Moveto [Descricao da Destinacao] Example "ddes"
        Moveto [Valor Mercadoria       ] Example "vrme"
        Moveto [Valor Nota Fiscal      ] Example "vrnf"
        Do_It!
        ClearAll

EndIf

If IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaI")
   Then {Ask} {Answer}
        Moveto [Codigo da Empresa      ] Example "cemp"
        Moveto [Numero do Documento    ] Example "ndoc"
        Moveto [Serie do Documento     ] Example "sdoc"
        {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaI" Enter
        Moveto [Codigo da Empresa      ] Example "cemp" Check
        Moveto [Numero do Documento    ] Example "ndoc" Check
        Moveto [Serie do Documento     ] Example "sdoc" Check
        Moveto [Preco Total            ] TypeIn "Calc Sum as Valor"
        Moveto [Situacao_Item          ] TypeIn "Not C"
        Do_It!
        ClearAll

        {Ask} {Answer}
        Moveto [Codigo da Empresa      ] Example "cemp"
        Moveto [Numero do Documento    ] Example "ndoc"
        Moveto [Serie do Documento     ] Example "sdoc"
        Moveto [Valor                  ] TypeIn "_vr"
        {Ask} TypeIn Tabela Enter TypeIn "Fast"
        Moveto [Codigo da Empresa      ] Example "cemp"
        Moveto [Numero do Documento    ] Example "ndoc"
        Moveto [Serie do Documento     ] Example "sdoc"
        Moveto [Soma Itens             ] TypeIn "Changeto _vr"
        Do_It!
        ClearAll

EndIf

If IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaV")
   Then {Ask} {Answer}
        Moveto [Codigo da Empresa      ] Example "cemp"
        Moveto [Numero do Documento    ] Example "ndoc"
        Moveto [Serie do Documento     ] Example "sdoc"
        {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaV" Enter
        Moveto [Codigo da Empresa      ] Example "cemp" Check
        Moveto [Numero do Documento    ] Example "ndoc" Check
        Moveto [Serie do Documento     ] Example "sdoc" Check
        Moveto [Valor                  ] TypeIn "Calc Sum as Valor"
        Do_It!
        ClearAll

        {Ask} {Answer}
        Moveto [Codigo da Empresa      ] Example "cemp"
        Moveto [Numero do Documento    ] Example "ndoc"
        Moveto [Serie do Documento     ] Example "sdoc"
        Moveto [Valor                  ] TypeIn "_vr"
        {Ask} TypeIn Tabela Enter TypeIn "Fast"
        Moveto [Codigo da Empresa      ] Example "cemp"
        Moveto [Numero do Documento    ] Example "ndoc"
        Moveto [Serie do Documento     ] Example "sdoc"
        Moveto [Soma Vencimentos       ] TypeIn "Changeto _vr"
        Do_It!
        ClearAll

EndIf

EndProc   ;  (Seleciona)

;*******************************************************************************
;* Rotina Processa                                                             *
;*******************************************************************************
Proc Processa()

Edit Tabela
Scan
  [Diferenca Itens] = NDecimal([Soma Itens]-[Valor Mercadoria ],2)

  Switch

    Case [Situacao]="C":
         [Razao Social           ]="** CANCELADA **"
         [Tipo de Pagamento      ]=""
         [Descricao CondPagto    ]=""
         [Descricao da Destinacao]=""
         [Valor Mercadoria       ]=BlankNum()
         [Valor Nota Fiscal      ]=BlankNum()
         [Diferenca Itens        ]=BlankNum()

    Case [Tipo de Pagamento]="V" Or [Tipo de Pagamento]="P" And [Tipo Movimento Estoque]="S":
         [Diferenca Vencimentos]=NDecimal([Soma Vencimentos]-[Valor Nota Fiscal],2)

    Case [Tipo de Pagamento]="O" And [Tipo Movimento Estoque]="S" And
         Search("VEND",[Descricao da Destinacao])>0:
         [Diferenca Vencimentos]=NDecimal([Soma Vencimentos]-[Valor Nota Fiscal],2)

  EndSwitch

  If [Diferenca Vencimentos]=0 Or [Diferenca Vencimentos]=-0.00 Then [Diferenca Vencimentos]=BlankNum() EndIf
  If [Diferenca Itens      ]=0 Or [Diferenca Itens      ]=-0.00 Then [Diferenca Itens      ]=BlankNum() EndIf

EndScan
Do_It!
ClearAll

EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9: Temp=False
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"        : Campo="NO"
            Case Campo="TG_TPDOCTO"        : Campo="TG_EMPRESA"
            Case Campo="TG_DTINI"          : Campo="TG_TPDOCTO"
            Case Campo="TG_DTFIM"          : Campo="TG_DTINI"
            Case Campo="TG_CODMODELO"      : Campo="TG_DTFIM"
            Case Campo="YES" Or Campo="NO" : Campo="TG_EMPRESA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA"       : Campo="TG_TPDOCTO"
                    Case Campo="TG_TPDOCTO"       : Campo="TG_DTINI"
                    Case Campo="TG_DTINI"         : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"         : Campo="TG_CODMODELO"
                    Case Campo="TG_CODMODELO"     : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;************************************
;* ROTINA PARA Ler/Gravacao Opcao   *
;************************************
Proc ModeloRelatoriosCarregaLista()

VSDGCODMODELO     = ""
VSDGMODELO        = ""

;ModeloRelatoriosAdd("XXX XX maximo 70 XX")

ModeloRelatoriosAdd("Criar") ; linha obrigatoria inicial
ModeloRelatoriosAdd("01 Conferˆncia de Faturamento")
ModeloRelatoriosAdd("02 Verifica Sequˆncia Faltante de Notas")
ModeloRelatoriosAdd("1X Conferˆncia Redu‡Æo Z x Cupons: TUDO")
ModeloRelatoriosAdd("2X Conferˆncia Redu‡Æo Z x Cupons: Sà A DIFEREN€A")
ModeloRelatoriosAdd("Fim")

EndProc ;ModeloRelatoriosCarregaLista

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,"+
        "\\Sistemas\\Cadastro\\Bib_Show,"+
        "\\Sistemas\\Cadastro\\Bib_Parm,"+
        "\\Sistemas\\Vendas\\Bib_Vend,"+
        "\\Sistemas\\Vendas\\Bib_Fat"
LimpAguarde()
SYS_Valor()

VSDGEMPRESA    = ""
VSDGNOMEMP     = ""
VSDGDTINI      = BlankDate()
VSDGDTFIM      = BlankDate()
VSDGTPDOCTO    = ""
VSDGNOMTPDOCTO = "" 
VSDGCODMODELO  = ""
VSDGMODELO     = ""
ModeloRelatoriosCarregaLista()

While True

  ShowDialog "Relat¢rio Conferencia Faturamento" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 05,05 Height 14 Width 66

    Label  @ 00,00 "Empresa"  For "TG_EMPRESA"
    Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA"    To VSDGEMPRESA
    Accept @ 01,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMEMPRESA" To VSDGNOMEMP

    Label  @ 02,00 "Tipo do Documento"  For "TG_TPDOCTO"
    Accept @ 03,01 Width 07 "A4"  Picture "!*!" Tag "TG_TPDOCTO" To VSDGTPDOCTO
    Accept @ 03,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMTPDOCTO"  To VSDGNOMTPDOCTO
    
    Label  @ 04,00 "Per¡odo de emissÆo de" For "TG_DTINI"
    Accept @ 05,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 05,16 "at‚" For "TG_DTFIM"
    Accept @ 05,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    Label  @ 07,00  "Modelo de ~R~elat¢rio"  For "TG_CODMODELO"
    Accept @ 08,01  Width 06 "A3"  Picture "!*!" Tag "TG_CODMODELO" To VSDGCODMODELO
    Accept @ 08,06  Width 57 "A60"  Picture "!*!" Tag "TG_MODELO" To VSDGMODELO        

    Pushbutton @ 10,19 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 10,33 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf
  If Not Valida_ShowDialog("") Then Loop EndIf
  If Not ValidarModelosRelatorios() Then Loop EndIf

  Switch
    Case IsBlank(VSDGDTFIM) :
         Mensagem("Data Final Invalida !")
         Loop
    Case IsBlank(VSDGTPDOCTO) And VSDGCODMODELO="02" :  
         Mensagem("C¢digo do documento inv lido!")
         Loop
    Case IsBlank(VSDGEMPRESA) And (VSDGCODMODELO="1X" Or VSDGCODMODELO="2X") :
         Mensagem("Empresa Invalida !")
         Loop
  EndSwitch
  DISPOSITIVO()
  If OK="" Then Loop EndIf
    
  Switch
    Case VSDGCODMODELO="01" : 
         AGUARDE("Aguarde, gerando o relat¢rio")
         Tabela=Cria_Temp(PrivDir())
         Copy "\\Base\\Sistemas\\Vendas\\RM_4200" Tabela
         Empty(Tabela)

         Monta_Dir_Trab(VSDGDTINI,VSDGDTFIM)
         While Novo_Dir_Trab()
           If IsTable("Answer")     Then Delete "Answer" EndIf
           Seleciona()
           If Not IsTable("Answer") Then Loop EndIf
         EndWhile

         If IsEmpty(Tabela)
            Then MENSAGEM("N„o existem registros a processar")
                 Delete Tabela
                 Loop
         EndIf

         Processa()
         IMPRIREL(Tabela,"R")
         Delete Tabela
    Case VSDGCODMODELO="02" :
         Verifica_Sequencia_Nota()
    Case VSDGCODMODELO="1X" Or VSDGCODMODELO="2X" :
         Play "RM_0249"
  EndSwitch
EndWhile         
ClearAll
Release Vars All
Release Procs All