;** FT_GNF  ********************************************************************
;*  Rotina gera‡Æo/impressÆo grupo de notas                                    *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)               
;Desenvolvido    : 23/07/2018 por Anivel Augusto Rodrigues
;Ultima Alteracao: 15/08/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Imprimir todos/carregamento romaneio

;*******************************************************************************
;* Rotina para Impressao Geral (NF)                                            *
;*******************************************************************************
Proc IMPRIGERAL()
Private OPCAOC,OPCAON,NUM_FATURA,EMP_FATURA,NF_FATURADA,FaturaOK, Cont_nof

cont_nof=0
IMPRIME_GERAL_INICIO=True                                                                                                                            

ModoNFe=""

Scan For IsBlank([Numero Nota Gerada])

 PegaPosForm()

 If IMPRIMIR_CARREGAMENTO
    Then If [Numero_Carregamento]<>PED_ORC_FATURAR
            Then Loop
         EndIf
 EndIf

 If Not Carrega_Parametros()
    Then Loop
 EndIf

 ORDFAT=[Numero da OF]
 cont_nof=cont_nof+1
 UnLockRecord
 Do_It!
 SaveTables

 CoEditKey
 FormKey

 If Not IMPRIME_GERAL_INICIO
    Then If PARAM_FATURA_IGUAL_OF="S"
            Then NOTAFISC=[FaturaC->Numero da OF]
            Else Moveto "NumeroNf"
                 While True
                   NOTAFISC = [Proximo Numero]
                   NOTAFISC = ALVAR(StrVal(NOTAFISC),6,"0")

                   LockRecord
                   If RetVal
                      Then QuitLoop
                   EndIf
                   MSG="O usu rio "+Upper(ErrorUser())+", esta gerando:// //"
                   MSG=MSG+Opcaoc+" N§ "+NOTAFISC+" !// //"
                   MSG=MSG+"Efetuar uma nova tentativa para//"
                   MSG=MSG+"libera‡„o do pr¢ximo n£mero para "+Opcaoc+" ?"
                   ConfGeral(MSG)
                   If OK<>"S"
                      Then QuitLoop
                   EndIf
                 EndWhile
         EndIF
    Else Echo Normal
         Echo Off

         While True
           FaturaOk=True

;          If PARAM_DOC_NF="NFE0" Or
;             PARAM_DOC_NF="NFE1"
;             Then
;                  If PARAM_DOC_NF="NFE0" Or
;                     PARAM_DOC_NF="NFE1"
;                     Then
;                          If Not Nfeautorizada("Status")
;                             Then FaturaOk=False
;                                  QuitLoop
;                 
;                          Endif   
;                  EndIf
;                   
;                  titnfe="~N~ota Fiscal - "+ModoNFe
;        
;                  Echo Normal
;                  Echo Off
;                  ShowPopup " Gera‡„o NF-e " CENTERED
;                    "~S~uspende"    : " N„o gera no momento         ":"Suspende",
;                    titnfe          : " Gera Nota Fiscal eletronica em modo "+ModoNFe :"NF-e"
;                  EndMenu To Opcaoc
;
;             Else
                   If Not IsBlank(PARAM_RELAT_ROMA) And Not IsBlank(PARAM_RELAT_NF)
                      Then Echo Normal
                           Echo Off
                           ShowPopup " Impress„o " CENTERED
                               "~R~omaneio"    : " Imprime apartir da OF N§ "+[Numero da OF]:"Romaneio",
                              ;"~N~ota Fiscal" : " Imprime apartir da OF N§ "+[Numero da OF]:"Nota Fiscal",
                               "~C~ancela"     : " Cancelar Impress„o"                      :"Cancelar"
                           EndMenu
                           To Opcaoc
                      Else If Not IsBlank(PARAM_RELAT_ROMA)
                              Then Echo Normal
                                   Echo Off
                                   ShowPopup " Impress„o" CENTERED
                                     "~R~omaneio"    : " Imprime apartir da OF N§ "+[Numero da OF]:"Romaneio",
                                          "~C~ancela"     : " Cancelar Impress„o"                      :"Cancelar"
                                     EndMenu
                                     To Opcaoc
                              Else Echo Normal
                                   Echo Off
                                   ShowPopup " Impress„o" CENTERED
                                      ;"~N~ota Fiscal" : " Imprime apartir da OF N§ "+[Numero da OF]:"Nota Fiscal",
                                       "~C~ancela"     : " Cancelar Impress„o"                      :"Cancelar"
                                    EndMenu
                                    To Opcaoc
                           EndIf
                   EndIf
 ;         EndIf

           echo off

           If Not Retval or Opcaoc="Esc" or Opcaoc="Cancelar"
              Then Opcaoc="Cancelar"
              Else If Not Datas_of()
                      Then Opcaoc="Cancelar"
                   EndIf
           EndIf

           If Opcaoc="Cancelar"
              Then FaturaOk=False
                   QuitLoop
           EndIf

          ;***** Obtendo o Numero da Nota Fiscal *******
          NOTAFISC ="000000"

          Switch
            Case Opcaoc="NF-e":
                 CODFISC  ="NFE1"  ; PadrÆo
                 SERIEFISC="1"
        
                ; CODFISC  =PARAM_DOC_NF
                ; SERIEFISC=PARAM_SER_NF
                 Switch
                   Case ModoNFe="SCAN"      : CODFISC  ="NFE9"  SERIEFISC="900"
                   OtherWise                : CODFISC  ="NFE1"  SERIEFISC="1" 
                 EndSwitch
            Case Opcaoc="Nota Fiscal":
                 CODFISC  ="NF1"  ; PadrÆo
                 SERIEFISC="M-1"

                 If IsBlank([FaturaC->Numero Nota Gerada])
                    Then CODFISC  =PARAM_DOC_NF
                         SERIEFISC=PARAM_SER_NF
                    Else NOTAFISC =[FaturaC->Numero Nota Gerada]
                         CODFISC  =[FaturaC->Docto Nota Gerada ]
                         SERIEFISC=[FaturaC->Serie Nota Gerada ]
                 EndIf  

                 Switch
                   Case SYS_CODIGO_CLIENTE="0075" And
                        ([FaturaC->Codigo da Destinacao]="020" Or
                         [FaturaC->Codigo da Destinacao]="022"):
                        CODFISC  ="NF2"
                        SERIEFISC="S-1"
                 EndSwitch
            Case Opcaoc="Romaneio":
                 CODFISC  ="ROM"  ; PadrÆo
                 SERIEFISC="RO"
        
                 If IsBlank([FaturaC->Numero Nota Gerada])
                    Then CODFISC  =PARAM_DOC_ROM
                         SERIEFISC=PARAM_SER_ROM
                    Else NOTAFISC =[FaturaC->Numero Nota Gerada]
                         CODFISC  =[FaturaC->Docto Nota Gerada ]
                         SERIEFISC=[FaturaC->Serie Nota Gerada ]
                 EndIf  
                 
          EndSwitch

          If PARAM_FATURA_IGUAL_OF="S"
						 Then NOTAFISC=[FaturaC->Numero da OF]
									Moveto "NumeroNf"
									Moveto [Codigo da Empresa]
									Locate [FaturaC->Codigo da Empresa],CODFISC
									If Not RetVal
										 Then Mensagem("Empresa Sem Controle de Numera‡„o de "+Opcaoc+" !")
                          FaturaOk=False
                          QuitLoop
									EndIf
                  If [FaturaC->Data de Emissao]<[Data Ultima Emissao]
                     Then UnLockRecord
                          MSG=Opcaoc+" com Data de Emiss„o inferior a data da ultima emiss„o!// //"
                          MSG=MSG+"Verificar no controle de numera‡„o !"
                          Mensagem(MSG)
                          FaturaOk=False
                          QuitLoop
                  EndIf
             Else Moveto "NumeroNf"
                  Moveto [Codigo da Empresa]
                  Locate [FaturaC->Codigo da Empresa],CODFISC
                  If RetVal
                     Then While True
                            NOTAFISC = [Proximo Numero]
                            NOTAFISC = ALVAR(StrVal(NOTAFISC),6,"0")

                            LockRecord
                            If RetVal
                               Then QuitLoop
                            EndIf
                            MSG="O usu rio "+Upper(ErrorUser())+", esta gerando:// //"
                            MSG=MSG+Opcaoc+" N§ "+NOTAFISC+" !// //"
                            MSG=MSG+"Efetuar uma nova tentativa para//"
                            MSG=MSG+"libera‡„o do pr¢ximo n£mero para "+Opcaoc+" ?"
                            ConfGeral(MSG)
                            If OK<>"S"
                               Then FaturaOk=False
                                    QuitLoop
                            EndIf
                          EndWhile
                          If VSDGDTEMI<[Data Ultima Emissao]
                             Then MSG=Opcaoc+" com Data de Emiss„o inferior a data da ultima emiss„o!// //"
                                  MSG=MSG+"Verificar no controle de numera‡„o !"
                                  Mensagem(MSG)
                                  FaturaOk=False
                                  QuitLoop
                          EndIf
                     Else Mensagem("Empresa Sem Controle de Numera‡„o de "+Opcaoc+" !")
                          FaturaOk=False
                          QuitLoop
                  EndIf
           EndIf

           Moveto "FaturaC"
           NUM_FATURA=[Numero da OF     ]
           EMP_FATURA=[Codigo da Empresa]

           Moveto [Numero Nota Gerada]
           Locate NOTAFISC
           If RetVal
              Then NF_FATURADA=False
                   While True
                     If [Codigo da Empresa]=EMP_FATURA
                        Then
                             Switch
                               Case SubStr([FaturaC->Sistema Gerador],1,1)="n" And ModoNfe="Normal": NF_FATURADA=True
                               Case SubStr([FaturaC->Sistema Gerador],1,1)="s" And 
                                    (ModoNfe="SCAN" Or ModoNfe="SCAN" )                            : NF_FATURADA=True
                               OtherWise                                                           : NF_FATURADA=True  
                             EndSwitch
                             
                             If NF_FATURADA
                                Then QuitLoop
                             EndIf   
                     EndIf   
                     Skip
                     If EOT() Then Quitloop EndIf
                     Locate Next NOTAFISC
                     If Not RetVal
                        Then QuitLoop
                     EndIf
                   EndWhile
                   If NF_FATURADA
                      Then MSG=    "O pr¢ximo n§ "+Opcaoc+" "+NOTAFISC+" J  foi gerado pela //"
                           MSG=MSG+"Ordem de Faturamento n§ "+[FaturaC->Numero da OF]+"// //"
                           MSG=MSG+"Verificar no controle da numera‡„o se //"
                           MSG=MSG+"a ordem esta correta ou//"
                           MSG=MSG+"no registro das notas a atual situa‡„o da mesma. !// //"
                           MSG=MSG+"Emiss„o n„o permitida !"
                           Mensagem(MSG)
                           FaturaOk=False
                           QuitLoop
                   EndIf
           EndIf

           Moveto [Numero da OF]
           Locate NUM_FATURA
           If Not RetVal
              Then Mensagem("Erro ao localizar Ordem de Fatura: "+NUM_FATURA)
                   FaturaOk=False
                   QuitLoop
              Else While True
                     If Not IsLockRecord()
                        Then QuitLoop
                     EndIf
                   EndWhile
           EndIf


           Moveto "NotaC"
           Moveto [Codigo da Empresa]
           Locate [FaturaC->Codigo da Empresa], NOTAFISC, SERIEFISC
           If RetVal
              Then Moveto "FaturaC"
                   If [NotaC->Situacao]<>"C"
                      Then MSG=Opcaoc+" N§ "+NOTAFISC+" J  existe no Sistema !// //"
                           If IsBlank([FaturaC->Numero Nota Gerada])
                              Then MSG=MSG+"Verificar no controle da numera‡„o se //"
                                   MSG=MSG+"a ordem esta correta ou//"
                                   MSG=MSG+"no registro das notas a atual situa‡„o da mesma. !// //"
                                   MSG=MSG+"Emiss„o n„o permitida !"
                              Else If [NotaC->Numero da OF]<>[FaturaC->Numero da OF]
                                      Then MSG=MSG+"E esta foi gerada pela Ordem de Fatura "+[NotaC->Numero da OF]+".//"
                                           MSG=MSG+"Verificar no controle da numera‡„o se //"
                                           MSG=MSG+"a ordem esta correta ou Ordem de Faturamento e Registro de notas.// //"
                                           MSG=MSG+"Emiss„o n„o permitida !"
                                      Else MSG=MSG+"Emiss„o n„o permitida ! // Verificar !"
                                   EndIf
                           EndIf
                           Mensagem(MSG)
                           FaturaOk=False
                           QuitLoop
                      Else Mensagem(Opcaoc+" N§ "+NOTAFISC+" J  existe no Sistema !// // Situa‡„o [CANCELADA] !")
                           FaturaOk=False
                           QuitLoop
                   EndIf
              Else Moveto "FaturaC"
                   ConfGeral("Confirma a primeira Emiss„o "+Opcaoc+" N§ "+NOTAFISC+" ?")
                   If OK="N"
                      Then FaturaOk=False
                           QuitLoop
                   EndIf
           EndIf

           If Not FaturaOk
              Then Moveto "NumeroNF"
                   UnLockRecord

                   Moveto "FaturaC"
                   UnLockRecord
                   FormKey
                   Return
           EndIf

           Switch
             Case Opcaoc="Romaneio":
                  Echo Normal
                  Echo Off
                  ShowPopup " Romaneio " CENTERED
                      "~I~mpressora"    : "Imprime Romaneio"    :"Impressora",
                      "~L~ugar Nenhum"  : "N„o Imprime Romaneio":"Lugar Nenhum"
                  EndMenu
                  To Opcaon

                  Echo off
                  If Opcaon="Esc"
                     Then FaturaOk=False
                          QuitLoop
                  EndIf

                  If Not RetVal Then Opcaon="Lugar Nenhum" EndIf
                  If Opcaon="Impressora"
                     Then NUMCOPIA=PARAM_NVIAS_ROMANEIO
                          MSGDISPOSITIVO=OpcaoC
                          DispositivoI("FAT")
                          If OK=""
                             Then Faturaok=False
                                  QuitLoop
                          EndIf
                          N_COPIAS=NUMCOPIA
                  EndIf
             Case Opcaoc="Nota Fiscal":
                  DispositivoI("FAT")
                  If OK=""
                     Then Faturaok=False
                          QuitLoop
                  EndIf
           EndSwitch

           If Opcaoc<>"NF-e" Then
           
               ;;******  Emissao Nota Promissoria  *************
               Moveto "FaturaC"
               If Not IsBlank(PARAM_RELAT_NP)
                  Then Echo Normal
                       Echo Off
                       ShowPopup " Op‡”es " CENTERED
                        "Nota ~P~romissoria" : "Imprime Nota Promissoria"    :"Nota Promissoria",
                        "~C~ancelar"         : "N„o Imprime Nota Promissoria":"Cancelar"
                       EndMenu
                       To Opcaonp
    
                       Echo off
                       Switch
                         Case Opcaonp="Cancelar" or Opcaonp="Esc":
                              FaturaOk=False
                         Case Opcaonp="Nota Promissoria":
                              MSGDISPOSITIVO=OpcaoNP
                              DispositivoI("NP")
                              If OK=""
                                 Then FaturaOk=False
                              EndIf
                       EndSwitch
                 EndIf
    
           EndIf
           
           QuitLoop
         EndWhile
         IMPRIME_GERAL_INICIO=False
 EndIf

 Moveto "FaturaC"
 NOVO_PEDIDO    =False
 NOVA_DESTINACAO=False
 NOVO_CLIENTE   =False
 

 If Not FaturaOk  OR
    Not  Checagem_Pagina1() 
    Then Moveto "NumeroNF"
         UnLockRecord

         Moveto "FaturaC"
         UnLockRecord

         FormKey
         Return
 EndIf

 Aguarde("Ordem "+StrVal(cont_nof)+", OF "+ORDFAT+" gerando NF "+NOTAFISC)

 Moveto "FaturaC"
 [Data de Emissao]=VSDGDTEMI
 [Data de Saida  ]=VSDGDTSAI
 [Hora de Saida  ]=VSDGHRSAI

 tpform="UnLinked"
 Numero_Cartao=""
 Nome_Cartao  =""
 Calc_Venctos()

 Moveto "FaturaC"
 If [Taxa de Desconto]>0
    Then TXDESCTO_TOTAL=[Taxa de Desconto]
    Else VRDESCTO=[Valor do Desconto]
         TXDESCTO_TOTAL=(VRDESCTO/[Valor Mercadoria])*100
 EndIf
 UF_ALIQUOTA_ICMS=BlankNum()
 
 DP_GERA_DUPLICATA="N"
 Moveto [Codigo da Destinacao]
 If Busca_Lookup("Codigo da Destinacao",[FaturaC->Codigo da Destinacao],"")
    Then DP_GERA_DUPLICATA=REG_BUSCA_LOOKUP["Gera Duplicata"]
 EndIf

 Switch
   Case Opcaoc="Romaneio":
        If Opcaon="Impressora"
           Then Play "FT_NOTA"
                Play PARAM_RELAT_ROMA
           Else Play "FT_NOTA"
        EndIf
   Case Opcaoc="Nota Fiscal":
        Play "FT_NOTA"
        Switch
            Case SYS_CODIGO_CLIENTE="0075":
                 If [FaturaC->Codigo da Destinacao]="020" Or
                    [FaturaC->Codigo da Destinacao]="022"
                    Then Play "NF_0075"
                    Else Play "NF_0075B"
                 EndIf
            Case SYS_CODIGO_CLIENTE="0057":
                 If [FaturaC->Codigo da Destinacao]="036"
                    Then Play "NF_0057B"
                    Else Play "NF_0057"
                 EndIf
            OtherWise: Play PARAM_RELAT_NF
        EndSwitch
    Case Opcaoc="NF-e":  
         If Not nfeautorizada("")
            Then ;[FaturaC->Data de Emissao] = Today()
                 If Not IsBlank([FaturaC->Data de Saida]) And [FaturaC->Data de Saida]<=[FaturaC->Data de Emissao]
                    Then [FaturaC->Data de Saida  ] = [FaturaC->Data de Emissao]
                         If [Hora de Saida]<=Time()
                            Then [Hora de Saida] = Time()
                         EndIf
                 EndIf
                 
                 switch
                   case VersaoNFe="3.10" : Play "NF_NFE31"
                   case VersaoNFe="4.00" : Play "NF_NFE40"
                   otherwise             : mensagem("VersÆo NF-e "+VersaoNFe+", nÆo disponivel !// //Verificar com Suporte !") 
                 endswitch
                 Play "FT_NOTA"
         EndIf        
 EndSwitch

 ;;******  Emissao Nota Promissoria  *************
 Moveto "FaturaC"
 If Opcaoc<>"NF-e" Then
    
    If Not IsBlank(PARAM_RELAT_NP)
       Then If [FaturaC->Forma de Pagamento]="NP" Or
               (SYS_CODIGO_CLIENTE="0117" And
                ([FaturaC->Forma de Pagamento]="DN" Or
                 [FaturaC->Forma de Pagamento]="CH" Or
                 [FaturaC->Forma de Pagamento]="CP"))
                Then Play PARAM_RELAT_NP
            EndIf
    EndIf
    
 EndIf

 Moveto "FaturaC"
 UnLockRecord
 FormKey

 Echo Normal
 SetaPosForm()
 Echo Off

EndScan

Moveto "FaturaC"

If IMPRIME_GERAL_INICIO
   Then Mensagem("N„o existem O.F.'s a imprimir !")
   Else SaveTables
        LimpAguarde()
        Mensagem("Fim do processo !")
EndIf
EndProc ;IMPRIGERAL()

;*******************************************************************************
;*  Rotina principal                                                           *
;*******************************************************************************

IMPRIGERAL()

Release procs IMPRIGERAL

