;** INUTILIZA ******************************************************************
;*  Inutiliza‡Æo de Notas Fiscais Eletronicas                                  *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 15/04/2011 por Karina Andrade             
;Ultima Alteracao: 09/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NFE pra todas as series
;Ultima Alteracao: 14/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 27/11/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NFe e NFCe                   

;*******************************************************************************
; Script para inutilizar faixa de numera‡Æo j  autorizada no Manager.
; 
;*******************************************************************************
;Rotina                                                                        *
;*******************************************************************************
Proc Seleciona()
private tpdocto

tpdocto="???"
switch
  case SubStr(VSDGTPDOCTO,1,3)="NFE" : tpdocto="* * NF-e INUTILIZADA * *"
  case SubStr(VSDGTPDOCTO,1,3)="NCE" : tpdocto="* * NFC-e INUTILIZADA * *"
endswitch

{Ask} {\\Sistemas\\Vendas\\NotaC} Enter Check
Moveto [Codigo da Empresa      ] TypeIn "~VSDGEMPRESA.." 
Moveto [Numero do Documento    ] TypeIn ">=~VSDGNUMINI,<=~VSDGNUMFIM" 
Moveto [Serie do Documento     ] TypeIn "~VSDGSDOCTO"
Moveto [Codigo do Documento    ] TypeIn "~VSDGTPDOCTO"
Do_It!
ClearAll

If Not IsEmpty("Answer")
  Then Return
EndIf
ClearAll

NUMDOC=VSDGNUMINI
Coedit "NotaI","NotaC"
End 
While NUMDOC<=VSDGNUMFIM
 
 Down
 [Codigo da Empresa        ]=VSDGEMPRESA
 [Numero do Documento      ]=NUMDOC
 [Serie do Documento       ]=VSDGSDOCTO
 [Codigo do Documento      ]=VSDGTPDOCTO
 [Data de Emissao          ]=VSDGDTINI
 [Situacao                 ]="C"
 [Codigo da Destinacao     ]=""
 [Descricao da Destinacao  ]="INUTILIZADA"
 [CFO                      ]=""
 [Razao Social             ]=tpdocto
 [Tipo Movimento Estoque   ]="S"
 [Sistema Gerador          ]="IN"
 [Observacao na Nota Fiscal]=VSDGJUST
 UnLockRecord

 Moveto "NotaI"
  End Down
  [Codigo da Empresa  ]=VSDGEMPRESA
  [Numero do Documento]=NUMDOC
  [Serie do Documento ]=VSDGSDOCTO
  [Item do Documento  ]=1
  [Descricao do Item  ]=tpdocto
  UnLockRecord

 Moveto "NotaC"
 NUMDOC=AlinhM(StrVal(NumVal(NUMDOC)+1),6)

EndWhile 
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_DTINI"         : Campo="TG_EMPRESA"
            Case Campo="TG_TPDOCTO"       : Campo="TG_DTINI"
            Case Campo="TG_NUMINI"        : Campo="TG_TPDOCTO"
            Case Campo="TG_NUMFIM"        : Campo="TG_NUMINI"
            Case Campo="TG_JUST"          : Campo="TG_NUMFIM"
            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"  :
                         VSDGEMPRESA=ControlValue("TG_EMPRESA")
                         If Not IsBlank(VSDGEMPRESA) 
                           Then VSDGEMPRESA=ALINHE(VSDGEMPRESA)
                                Campo="TG_DTINI"
                         EndIf  
                    Case Campo="TG_DTINI"    : 
                         VSDGDTINI=ControlValue("TG_DTINI")
                         If Not IsBlank(VSDGDTINI) 
                           Then Campo="TG_TPDOCTO"
                         EndIf  
                    Case Campo="TG_TPDOCTO"  : 
                         VSDGTPDOCTO=ControlValue("TG_TPDOCTO")
                         If Not IsBlank(VSDGTPDOCTO) 
                           Then If SubStr(VSDGTPDOCTO,1,3)="NFE" or
                                   SubStr(VSDGTPDOCTO,1,3)="NCE"   
                                   Then VSDGSDOCTO=VSDGSERTPDOCTO 
                                       Campo="TG_NUMINI"
                                   Else Mensagem("Inutiliza‡Æo v lida somente para NFe e NFCe !")
                                EndIf   
                         EndIf  
                    Case Campo="TG_NUMINI"   : 
                         VSDGNUMINI=ControlValue("TG_NUMINI")
                         If Not IsBlank(VSDGNUMINI) 
                           Then VSDGNUMINI=AlinhM(VSDGNUMINI,6)
                                Campo="TG_NUMFIM"
                         EndIf  
                    Case Campo="TG_NUMFIM"   :
                         VSDGNUMFIM=ControlValue("TG_NUMFIM")
                         If Not IsBlank(VSDGNUMFIM)   
                           Then VSDGNUMFIM=AlinhM(VSDGNUMFIM,6)
                                If VSDGNUMFIM<VSDGNUMINI
                                  Then Mensagem("Numero Final deve ser igual ou maior que o Inicial!")
                                  Else Campo="TG_JUST"
                                EndIf  
                         EndIf  
                    Case Campo="TG_JUST"     : 
                         VSDGJUST=ControlValue("TG_JUST")
                         If Not IsBlank(VSDGJUST) 
                           Then Campo="YES"
                         EndIf
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_EMPRESA" : MSG_CAMPO="Codigo da Empresa"
  Case Campo="TG_DTINI"   : MSG_CAMPO="Informe a Data da Inutiliza‡Æo"
  Case Campo="TG_TPDOCTO" : MSG_CAMPO="Informe o Tipo de Documento"
  Case Campo="TG_NUMINI"  : MSG_CAMPO="Numero Inicial"
  Case Campo="TG_NUMFIM"  : MSG_CAMPO="Numero Final"
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bibliot"
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE="" EndIf
LimpAguarde()

COR_MENSAGEM="1"
MSG="Antes de efetuar esta rotina vocˆ deve primeiramente !    // //"
MSG=MSG+"- NFe:                                                //"
MSG=MSG+"  - Efetuar a Inutiliza‡Æo da NF-e no dDOC;           //"
MSG=MSG+"  - Confirmar esta inutiliza‡Æo da NF-e pelo eDOC;    //"
MSG=MSG+"  - Verificar/Corrigir o n£mero da pr¢xima NF-e a ser //"
MSG=MSG+"    emitida se necess rio.                            // //"
MSG=MSG+"- NFCe:                                               //"
MSG=MSG+"  - Efetuar a Inutiliza‡Æo da NFC-e no OPAF;          //"
MSG=MSG+"  - Importar NFCe novamente e verificar no sistema se //"
MSG=MSG+"    registrada como Inutilizada.                      //"
Mensagem(MSG)
Release Vars COR_MENSAGEM

VSDGEMPRESA =""
VSDGDTINI   =BlankDate()

While True

  ShowDialog "Inutiliza‡Æo de NFe, NFCe" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 05,12   Height 13 Width 72

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

    Label  @ 02,00 "Data" For "TG_DTINI"
    Accept @ 03,01 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI

    Label  @ 04,00 "Documento"  For "TG_TPDOCTO"
    Accept @ 05,01 Width 7 "A4"  Picture "!*!" Tag "TG_TPDOCTO" To VSDGTPDOCTO
		Accept @ 05,09 Width 9 "A4"  Picture "!*!" Tag "TG_SDOCTO" To VSDGSDOCTO

    Label  @ 05,18 "de" For "TG_NUMINI"
    Accept @ 05,22 Width 9 "A6"  Picture "######" Tag "TG_NUMINI" To VSDGNUMINI
    Label  @ 05,31 "at‚" For "TG_NUMFIM"
    Accept @ 05,36 Width 9 "A6"  Picture "######" Tag "TG_NUMFIM" To VSDGNUMFIM

    Label  @ 06,00 "Justificativa" For "TG_JUST"
    Accept @ 07,01 Width 45 "A255"  Picture "!*!" Tag "TG_JUST" To VSDGJUST  

    Pushbutton @ 09,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 09,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  Switch 
    Case IsBlank(VSDGDTINI)  : Mensagem("Data Inutiliza‡Æo Inv lida !") Loop
    Case IsBlank(VSDGNUMINI) And IsBlank(VSDGNUMFIM) : 
         Mensagem("Numera‡Æo Inv lida !") Loop
    Case IsBlank(VSDGJUST)   : Mensagem("Justificativa Inv lida !") Loop
  EndSwitch
  
  Seleciona()

  If Not IsEmpty("Answer")
    Then Mensagem("N„o existem registros a processar")
         Loop
  EndIf   
  Mensagem("Opera‡„o realizada com sucesso!")
   
EndWhile
ClearAll
Release Vars All
Release Procs All

