;** GDPADR4 ********************************************************************
;*  Geracao de Duplicatas - Numero Duplicata=Numero Nota + Nota Servico        *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 27/12/2018 por Anivel Augusto Rodrigues
;Alterado em     : 03/02/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NFCE

;*******************************************************************************
;* Rotina de Geracao de Duplicatas                                             *
;*******************************************************************************
Proc Seleciona()
private NR

AGUARDE("Aguarde, Processando Dados")
ClearAll

{Ask} {Destin}
Moveto [Codigo da Destinacao] Example "destin"
Moveto [Gera Duplicata      ] TypeIn "S"

{Ask} {NotaC} Check
Moveto [Codigo da Destinacao   ] Example "destin"
Moveto [Codigo da Empresa      ] TypeIn "~VSDGEMPRESA.."
Moveto [Codigo do Documento    ] TypeIn "~VSDGTPDOCTO.."
Moveto [Data de Emissao        ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Situacao               ] TypeIn "Not C"
Moveto [Tipo Movimento Estoque ] TypeIn "S"
Moveto [Codigo                 ] TypeIn "~VSDGDESTINAT.."
If VSDGGVV="N"
   Then Moveto [Tipo de Pagamento] TypeIn "P"
EndIf
Do_It!
ClearAll

If IsEmpty("Answer")
   Then Return
EndIf

TabelaTmp2=Cria_Temp(PrivDir())
Copy "Answer" TabelaTmp2

{Ask} {Answer}
Moveto [Numero de Volumes] typein "Changeto Blank"
do_it!
Clearall

nagrup=0

CoEdit "NotaR","Answer",TabelaTmp2
scan
  if [Tipo do Documento]="NFSE" and [Valor Servico]>0
     then
          copytoarray regtmp2
          
          moveto "NotaR"
          moveto [Codigo da Empresa]
          locate regtmp2["Codigo da Empresa"],regtmp2["Numero do Documento"],regtmp2["Serie do Documento"]
          if retval
             then
                  moveto "Answer"
                  moveto [Codigo da Empresa]
                  locate regtmp2["Codigo da Empresa"],substr([NotaR->Numero_Documento],4,6),[NotaR->Serie_Documento]
                  if retval
                     then
                          nagrup=nagrup+1
                          
                          [Numero de Volumes]=nagrup
                     
                          moveto "Answer"
                          moveto [Codigo da Empresa]
                          locate regtmp2["Codigo da Empresa"],regtmp2["Numero do Documento"],regtmp2["Serie do Documento"]
                          if retval
                             then [Numero de Volumes]=nagrup
                          endif   
                  endif
          endif
          moveto TabelaTmp2
  endif   

endscan
do_it!
Clearall

Delete TabelaTmp2

release vars nagrup, TabelaTmp2, regtmp2

Sort "Answer" On "Codigo da Empresa", "Codigo", "Numero de Volumes","Data de Emissao", 
                 "Codigo do Documento","Numero do Documento", "Serie do Documento"
ClearAll


View "DupC"
View "DupNF"
CoEdit "Answer" 
SetaCorRegistro("Paginar")
While Not RecordStatus("New")
  NF_EXISTE=False
  
  Moveto "DupNF"
  Moveto [Numero da Nota]
  Locate IndexOrder by "idupnf10" [Answer->Numero do Documento],[Answer->Serie do Documento],[Answer->Codigo da Empresa],[Answer->Codigo do Documento]
  If RetVal
     Then 
          moveto "DupC"
          moveto [Codigo da Empresa]
          locate [DupNF->Codigo da Empresa],[DupNF->Numero do Documento],[DupNF->Serie do Documento]
          if retval
             then if [Situacao]<>"C"
                     then NF_EXISTE=True
                  endif
          endif   
  EndIf

  Moveto "Answer"
  If NF_EXISTE
     Then Del
          Loop
  EndIf
  Down
EndWhile
Do_It!
ClearAll

If IsEmpty("Answer")
   Then Return
EndIf

NR    = NRecords("Answer")
Mensagem(ltrim(Format("W10,EIC",NR))+" Documentos encontrados !")

CopyForm "NotaC" "10" "Answer" "F"

CoEdit "Answer"
PickForm "F"
SetaCorRegistro("Paginar")

PAGINA_ESPECIAL()

Do_It!
ClearAll


EndProc  ; (Seleciona)


;*******************************************************************************
;* Rotina Wait p/ Pagina()                                                     *
;*******************************************************************************
proc Wait_Pagina_Especial(triggertype,event,cyclenumber)
private ncampo,nrec

If Field()<>"Numero de Volumes"
   Then ImageRights ReadOnly
   Else ImageRights
EndIf

If Event["TYPE"]="KEY" And triggertype="EVENT"
   Then Switch
          Case Event["KEYCODE"]=Asc("ESC") :
               if confgeral("Deseja realmente sair sem gerar duplicatas ?")
                  then        
                       CANCELADO=True
                       return 2
                       
                  else return 1      
               endif
               
          Case event["KEYCODE"]=Asc("F35") :
               EDITFIELD()
               return 1

          Case event["KEYCODE"]=Asc("F2") :
               if confgeral("Confirmar gerar as duplicatas destes documentos ?")
                  then return 2
                       
                  else return 1      
               endif

          Case event["KEYCODE"]=Asc("F1")    Or
               event["KEYCODE"]=Asc("F2")    Or
               event["KEYCODE"]=Asc("F4")    Or
               event["KEYCODE"]=Asc("F5")    Or
               event["KEYCODE"]=Asc("F6")    Or
               event["KEYCODE"]=Asc("F7")    Or
               event["KEYCODE"]=Asc("F8")    Or
               event["KEYCODE"]=Asc("F9")    Or
               event["KEYCODE"]=Asc("F10")   Or
               event["KEYCODE"]=Asc("F11")   Or
               event["KEYCODE"]=Asc("F12")   Or
               event["KEYCODE"]=Asc("INS")   Or      
               event["KEYCODE"]=-94          Or
               event["KEYCODE"]=-31          Or
               event["KEYCODE"]=-45          Or        
               event["KEYCODE"]=6             :        
               return 1
               
          Case Event["KEYCODE"]=Asc("ZOOM"):
               PESQUISA()
               prompt TEXTO_LOCATE
               return 1         
               
          Case Event["KEYCODE"]=Asc("ZOOMNEXT"):
               PESQUISACON()
               return 1

          Case Event["KEYCODE"]=Asc("CTRLBACKSPACE") and field()<>"Numero de Volumes":
               TEXTO_LOCATE=""
               prompt TEXTO_LOCATE
               
               Return 1
          Case Event["KEYCODE"]=Asc("BACKSPACE") and field()<>"Numero de Volumes":
               If Field()<>FIELD_LOCATE
                  Then FIELD_LOCATE=Field()
                       TEXTO_LOCATE=""
                       prompt TEXTO_LOCATE
               Endif        

               TEXTO_LOCATE=SubStr(TEXTO_LOCATE,1,Len(TEXTO_LOCATE)-1)
               prompt TEXTO_LOCATE
               
               If Not IsBlank(TEXTO_LOCATE)
                  Then Zoom Select TEXTO_LOCATE+".."
               EndIf   
               
               Return 1

          Case (Event["KEYCODE"]>=32 And Event["KEYCODE"]<=125) and field()<>"Numero de Volumes":
               If Field()<>FIELD_LOCATE
                  Then FIELD_LOCATE=Field()
                       TEXTO_LOCATE=""
                       prompt TEXTO_LOCATE
               Endif        

               TEXTO_LOCATE=TEXTO_LOCATE+UPPER(Chr(Event["KEYCODE"]))
               prompt TEXTO_LOCATE
               Zoom Select TEXTO_LOCATE+".."

               Return 1
          Case Event["KEYCODE"]=Asc("DEL"):
               Del
               Return 1
                                      
          Case Event["KEYCODE"]=Asc("DOWN") : 
               If AtLast()
                  Then Return 1
               EndIf
               
          Case Event["KEYCODE"]=Asc("ENTER") :
               If not AtLast()
                  Then Down
               EndIf
               Return 1
                
          OtherWise:
              KeyPress Event["KEYCODE"]
              return 1

      EndSwitch
endif

Return 0

endProc

;*******************************************************************************
;*  ROTINA PARA PAGINACAO DE TABELA EM FORM                                    *
;*******************************************************************************
Proc PAGINA_ESPECIAL()
Private Opcao, ncampoedit

Home
Moveto [Numero de Volumes]

Mouse Show
If RecordStatus("New")=True
   Then Del
EndIf

CANCELADO=False

tpform ="MR"
PegaPosForm()

FIELD_LOCATE=Field()
TEXTO_LOCATE=""

Prompt ""

SpeedBar "["+Chr(17)+"]"     :"ESC",
         "~F2=Gerar~"        :"F2",
         "~Del=Excluir~"     :"DEL",
         "~Localizar~"       :"ZOOM",
         "~Loc~|"+Chr(16)    :"ZOOMNEXT"

Wait Workspace
  Proc "Wait_Pagina_Especial"
  Trigger "ALL"
  Message "ALL"
  Key "ALL"
EndWait

ClearSpeedBar
  
Echo Normal
Echo Off

EndProc

;*******************************************************************************
;* Rotina de Geracao de Duplicatas                                             *
;*******************************************************************************
Proc GeraDup()
AGUARDE("Aguarde, Gerando Duplicatas")
ClearAll

getsys_modo_ordemdup()

Tabela=Cria_Temp(PrivDir())
Copy "Answer" Tabela

For cci From 1 To 2
  Switch
    Case cci=1:
      {Ask} TypeIn Tabela Enter Check
      Moveto [Numero de Volumes] TypeIn "Blank"
      Do_It!
      ClearAll
      If IsEmpty("Answer")
         Then Loop
      EndIf

      Sort "Answer" On "Codigo da Empresa", "Numero do Documento", "Serie do Documento"
      ClearAll

    Case cci=2:
      {Ask} TypeIn Tabela Enter Check
      Moveto [Numero de Volumes] TypeIn "Not Blank"
      Do_It!
      ClearAll
      If IsEmpty("Answer")
         Then Loop
      EndIf

      Sort "Answer" On "Codigo da Empresa", "Nome Fantasia EmitDest", "Codigo","Numero de Volumes",
                       "Codigo do Documento","Numero do Documento", "Serie do Documento"
      ClearAll
  EndSwitch

  Array  DtNota[15]
  Array  VrNota[15]
  Array  VrComi[15]
  Array FpPagto[15]
  Array NCartao[15]      
  
  For i From 1 to 15
    DtNota[i] =BlankDate()
    VrNota[i] =0
    VrComi[i] =0
    FpPagto[i]=""
    NCartao[i]=""
  EndFor

  View "DupC"
  View "DupI"
  View "DupNF"
  View "FaturaC"
  View "NotaV"
  View "P_Cartao"
  View "\\Sistemas\\Cadastro\\Destinat"
  View "\\Sistemas\\Cadastro\\End_cob"
  Coedit "Answer"

  CODCLI    ="****"
  NVOLUMES  =0
  VAR_INICIO=True

  Scan

    switch
      case isblank([Numero de Volumes]):
        Duplicata()
        Nota()
        Desdobra()
        
      otherwise:
        If  [Codigo]<>CODCLI or
           ([Codigo] =CODCLI and [Numero de Volumes]<>NVOLUMES) 
           Then If Not VAR_INICIO
                   Then Desdobra()
                EndIf
                VAR_INICIO=False

                Moveto "Answer"
                CODCLI  =[Codigo           ]
                NVOLUMES=[Numero de Volumes]     

                Duplicata()
        EndIf
        Nota()
      
    endswitch
    Moveto "Answer"

  EndScan
  If Not isblank([Numero de Volumes])
     Then Desdobra()
  EndIf
  Do_It!
  ClearAll

EndFor          
Delete Tabela
      
EndProc  ; GeraDup()
                      
;*******************************************************************************
;* Grava Duplicata                                                             *
;*******************************************************************************
Proc Duplicata()
OF_OK=False

Switch
	Case SubStr([Answer->Codigo do Documento],1,3)="NFE":
    TPDOCTO=PARAM_DOC_DUPNFEN
    SERDUP =PARAM_SER_DUPNFEN

	Case SubStr([Answer->Codigo do Documento],1,3)="NSE":
    TPDOCTO=PARAM_DOC_DUPNSEN
    SERDUP =PARAM_SER_DUPNSEN

  Case SubStr([Answer->Codigo do Documento],1,3)="NCE":
    TPDOCTO=[Answer->Codigo do Documento]
    SERDUP =[Answer->Serie do Documento ]

  Case SubStr([Answer->Codigo do Documento],1,1)="X":
    TPDOCTO=[Answer->Codigo do Documento]
    SERDUP =[Answer->Serie do Documento ]
  Case SubStr([Answer->Tipo do Documento],1,3)="CUP":
    TPDOCTO=[Answer->Codigo do Documento]
    SERDUP =[Answer->Serie do Documento ]
  Case SubStr([Answer->Tipo do Documento],1,2)="NF": 
    TPDOCTO="DUP" ;PadrÆo
    SERDUP =""
  OtherWise:
    TPDOCTO=[Answer->Codigo do Documento]
    SERDUP =[Answer->Serie do Documento ]
EndSwitch

DUPINI=[Answer->Numero do Documento]
  
OF_OK=False
If [Answer->Tipo do Documento]<>"CUP" And
   [Answer->Tipo do Documento]<>"NFCE"
   Then Moveto "FaturaC"
        Moveto [Numero da OF]
        Locate [Answer->Numero da OF]
        If RetVal
           Then OF_OK=True
        EndIf
 EndIf       

DUPLIC_OK=True
Moveto "Dupc"
Moveto [Codigo da Empresa]
Locate [Answer->Codigo da Empresa  ], DUPINI, SERDUP
If RetVal
   Then Mensagem("Duplicata: "+DUPINI+" j  Existe, Verificar !")
        DUPLIC_OK=False
        Return
EndIf

End Down
[Codigo da Conta          ] = VSDGCONTA
[Codigo da Empresa        ] = [Answer->Codigo da Empresa     ]
[Numero do Documento      ] = DUPINI
[Codigo do Documento      ] = TPDOCTO
[Serie do Documento       ] = SERDUP
[Nome Fantasia Empresa    ] = [Answer->Nome Fantasia Empresa ]


Switch
  Case OPNUMERO_DUPLICATA="DUP<>NF" And VSDGOPCAO="N" :
       [Data de Emissao  ] = [Answer->Data de Emissao]

  Case OPNUMERO_DUPLICATA="DUP<>NF" And VSDGOPCAO="I" :
       [Data de Emissao  ] = VSDGDTREF

EndSwitch

If Substr([Answer->Descricao Condpagto],1,6)="CONTRA"
   Then [Condicoes Especiais]=[Answer->Descricao Condpagto]
EndIf

[Tipo                     ] = [Answer->Tipo                  ]
[Codigo                   ] = [Answer->Codigo                ]
[Nome Fantasia EmitDest   ] = [Answer->Nome Fantasia EmitDest]

If OF_OK 
   Then [Razao Social Fatura      ]=[FaturaC->Razao Social             ]
        [Endereco Fatura          ]=[FaturaC->Endereco                 ]
        [Bairro Fatura            ]=[FaturaC->Bairro                   ]
        [CEP Fatura               ]=[FaturaC->CEP                      ]
        [Cidade Fatura            ]=[FaturaC->Cidade                   ]
        [UF Fatura                ]=[FaturaC->UF                       ]
        [CGC Fatura               ]=[FaturaC->CGC                      ]
        [IE Fatura                ]=[FaturaC->IE                       ]
        [Numero do Pedido         ]=[FaturaC->Numero do Pedido         ]
        
        Pega_Endereco([FaturaC->Numero da OF])                                                                
        [Endereco de Cobranca     ]=VSD_C_Endereco
        [Bairro de Cobranca       ]=VSD_C_Bairro
        [CEP de Cobranca          ]=VSD_C_CEP
        [Cidade de Cobranca       ]=VSD_C_Cidade
        [UF de Cobranca           ]=VSD_C_UF
Endif

If Not OF_OK Or IsBlank([Razao Social Fatura])
   Then Moveto "\\Sistemas\\Cadastro\\Destinat"
        Moveto [Codigo]
        Locate [Answer->Codigo]
        If RetVal
           Then Moveto "Dupc"
                [Razao Social Fatura]=[\Sistemas\Cadastro\Destinat->Razao Social]
                [Endereco Fatura    ]=[\Sistemas\Cadastro\Destinat->Endereco    ]
                [Bairro Fatura      ]=[\Sistemas\Cadastro\Destinat->Bairro      ]
                [CEP Fatura         ]=[\Sistemas\Cadastro\Destinat->CEP         ]
                [Cidade Fatura      ]=[\Sistemas\Cadastro\Destinat->Cidade      ]
                [UF Fatura          ]=[\Sistemas\Cadastro\Destinat->UF          ]
                [CGC Fatura         ]=[\Sistemas\Cadastro\Destinat->CGC         ]
                [IE Fatura          ]=[\Sistemas\Cadastro\Destinat->IE          ]
        EndIf

        Moveto "\\Sistemas\\Cadastro\\End_Cob"
        Moveto [Codigo]
        Locate [Answer->Codigo]
        If RetVal
           Then Moveto "Dupc"
                [Endereco de Cobranca]=[\Sistemas\Cadastro\End_Cob->Endereco de Cobranca]
                [Bairro de Cobranca  ]=[\Sistemas\Cadastro\End_Cob->Bairro de Cobranca  ]
                [CEP de Cobranca     ]=[\Sistemas\Cadastro\End_Cob->CEP de Cobranca     ]
                [Cidade de Cobranca  ]=[\Sistemas\Cadastro\End_Cob->Cidade de Cobranca  ]
                [UF de Cobranca      ]=[\Sistemas\Cadastro\End_Cob->UF de Cobranca      ]
        EndIf
        Moveto "DupC"
EndIf

[Codigo da Destinacao     ] = [Answer->Codigo da Destinacao     ]
[Descricao da Destinacao  ] = [Answer->Descricao da Destinacao  ]
[Codigo do Representante  ] = [Answer->Codigo do Representante  ]
[Nome Fantasia Represent  ] = [Answer->Nome Fantasia Represent  ]
[Comissao do Representante] = [Answer->Comissao do Representante]
[Pedido Cliente           ] = "NF/"+[Answer->Numero do Documento]

switch
  case sys_codigo_cliente="0121":

  otherwise                     :
    Switch
     Case [Answer->Forma de Pagamento]="BO" : 
          [Duplicata Emitida  ]="S"
          [Promissoria Emitida]="S"
     Case [Answer->Forma de Pagamento]="NP" :
          [Duplicata Emitida  ]="S"
          [Boleta Emitida     ]="S"
    EndSwitch         

endswitch

[Sistema Gerador]="GD"

Controle_Dia()
SEQ_NOTA=0

EndProc  ; Duplicata()

;*******************************************************************************
;* Grava Relacao de Notas                                                      *
;*******************************************************************************
Proc Nota()
If Not DUPLIC_OK
   Then Return
Endif

SEQ_NOTA=SEQ_NOTA+1
SEQ = AlinhM(StrVal(SEQ_NOTA),2)

Moveto "DupNF"
End
Down
[Codigo da Empresa        ] = [Dupc->Codigo da Empresa    ]
[Numero do Documento      ] = [Dupc->Numero do Documento  ]
[Serie do Documento       ] = [Dupc->Serie do Documento   ]
[Sequencia                ] = SEQ

[Codigo do Documento      ] = [Answer->Codigo do Documento]
[Tipo do Documento        ] = [Answer->Tipo do Documento  ]

[Numero da Nota           ] = [Answer->Numero do Documento]
[Serie da Nota            ] = [Answer->Serie do Documento ]
[Valor da Nota Fiscal     ] = [Answer->Valor Nota Fiscal  ]
UnLockRecord

Moveto "DupC"
[Valor Nota Fiscal]=[Valor Nota Fiscal]+[Answer->Valor Nota Fiscal]

Moveto "NotaV"
Moveto [Codigo da Empresa]
Locate [Answer->Codigo da Empresa],[Answer->Numero do Documento],[Answer->Serie do Documento]
If RetVal
  Then While [Codigo da Empresa  ] = [Answer->Codigo da Empresa  ] And
             [Numero do Documento] = [Answer->Numero do Documento] And
             [Serie do Documento ] = [Answer->Serie do Documento ]

          For i From 1 To 15
            If IsBlank(DtNota[i])
               Then DtNota[i] =[Data              ]
                    VrNota[i] =[Valor             ]
                    VrComi[i] =[Valor da Comissao ]
                    FpPagto[i]=[Forma de Pagamento]
                    NCartao[i]=[Nome do Cartao    ]   
                    QuitLoop
               Else If DtNota[i]=[Data]
                       Then VrNota[i]=VrNota[i]+[Valor            ]
                            VrComi[i]=VrComi[i]+[Valor da Comissao]
                            QuitLoop
                    EndIf
            EndIf
          EndFor
          Skip
          If EOT()
             Then QuitLoop
          Endif
       EndWhile
EndIf
Moveto "DupC"

EndProc  ; Nota()
;*******************************************************************************
;* Grava Desdobramentos                                                        *
;*******************************************************************************
Proc Desdobra()

If Not DUPLIC_OK
   Then Return
EndIf

NPARC=0
For i From 1 To 15
 If Not IsBlank(DtNota[i])
    Then NPARC=NPARC+1
 EndIf
EndFor

sq=0
Moveto "DupI"
For i From 1 To 15
 If IsBlank(DtNota[i]) Then Loop EndIf
 While True
   ii=i
   For v From 1 To 15
     If Not IsBlank(DtNota[v]) And
        DtNota[v]<=DtNota[ii]
        Then ii=v
     EndIf
   EndFor
   sq=sq+1
   End
   Down
   [Codigo da Empresa        ] = [Dupc->Codigo da Empresa  ]
   [Numero do Documento      ] = [Dupc->Numero do Documento]
   [Serie do Documento       ] = [Dupc->Serie do Documento ]
   
    switch
      case sys_modo_ordemdup="N":
         [Ordem do Documento]=strval(sq)
      
      otherwise                 :
         If NPARC=1
            Then [Ordem do Documento]=""
            Else [Ordem do Documento]=CHR(65+(sq-1))
         EndIf
    
    endswitch

   [Data Vencimento          ] = DtNota[ii]
   [Valor da Comissao        ] = VrComi[ii]
   [Multa                    ] = TAXAM
   [Taxa de Juros            ] = TAXA
   [Tipo Taxa de Juros       ] = VSDGFORMA
   [Forma de Pagamento       ] = FpPagto[ii]

   If (FpPagto[ii]="CT" Or FpPagto[ii]="CD" Or FpPagto[ii]="CL") And NCartao[ii]<>""
      Then Moveto "P_Cartao"
           Moveto [Codigo_Empresa]
           Locate [DupC->Codigo da Empresa],NCartao[ii]
           If Retval
              Then NC_COD   = [Codigo Destinat         ]
                   NC_NDV   = [Numero Dias Vencimento  ]
                   NC_ADM   = [Tx_Descto_Administradora]
                   NC_CTA   = [Codigo da Conta         ]

                   Moveto "DupI"
                   [Codigo_Sacado  ] = NC_COD
                   [Codigo da Conta] = NC_CTA
                   [Valor Duplicata] = VrNota[ii]
                   [Valor Duplicata]=[Valor Duplicata]-(([Valor Duplicata]*NC_ADM)/100)

                   If DtNota[ii]=[Dupc->Data de Emissao]
                      Then [Data Vencimento ]=[Dupc->Data de Emissao]+NC_NDV
                      Else [Data Vencimento ]=DtNota[ii]
                   EndIf
                  
                   Release Vars NC_COD, NC_NDV, NC_ADM, NC_CTA   
              Else Mensagem("CartÆo: "+NCartao[ii]+" parametros nÆo cadastrado !")
           EndIf
      Else [Codigo_Sacado  ] = [DupC->Codigo         ]
           [Codigo da Conta] = [DupC->Codigo da Conta]
           [Valor Duplicata] = VrNota[ii]
   EndIf

   Switch
     Case VSDGFORMA="A" : [NDias Taxa de Juros]=365
     Case VSDGFORMA="M" : [NDias Taxa de Juros]=30
     Case VSDGFORMA="D" : [NDias Taxa de Juros]=1
   EndSwitch  
   UnLockRecord

   DtNota[ii]=BlankDate()
   If IsBlank(DtNota[i]) Then QuitLoop EndIf
 EndWhile
EndFor

For i From 1 to 15
 DtNota[i] =BlankDate()
 VrNota[i] =0
 VrComi[i] =0
 FpPagto[i]=""
 NCartao[i]=""            
EndFor

Moveto "DupI"

EndProc  ;  Desdobra()

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc Pega_Endereco(PARAM)
Private PARAM

VSD_E_Endereco=""
VSD_E_Bairro  =""
VSD_E_CEP     =""
VSD_E_Cidade  =""
VSD_E_UF      =""

VSD_C_Endereco=""
VSD_C_Bairro  =""
VSD_C_CEP     =""
VSD_C_Cidade  =""
VSD_C_UF      =""    

GetRecord "\\Sistemas\\Vendas\\FaturaCC" PARAM To REG_ENTCOB
If RetVal
   Then VSD_E_Endereco=REG_ENTCOB["Endereco de Entrega"]
        VSD_E_Bairro  =REG_ENTCOB["Bairro de Entrega"]
        VSD_E_CEP     =REG_ENTCOB["CEP de Entrega"]
        VSD_E_Cidade  =REG_ENTCOB["Cidade de Entrega"]
        VSD_E_UF      =REG_ENTCOB["UF de Entrega"]

        VSD_C_Endereco=REG_ENTCOB["Endereco de Cobranca"]
        VSD_C_Bairro  =REG_ENTCOB["Bairro de Cobranca"]
        VSD_C_CEP     =REG_ENTCOB["CEP de Cobranca"]
        VSD_C_Cidade  =REG_ENTCOB["Cidade de Cobranca"]
        VSD_C_UF      =REG_ENTCOB["UF de Cobranca"] 
EndIf   
 
EndProc ;Pega_Endereco() 

;************************************
;* ROTINA PARA Ler/Gravacao Opcao   *
;************************************
Proc ConfOpcoes(Opcao)
Private Opcao
Switch
  Case Opcao="Ler":
       If IsFile("GD_0001.sc")
           Then Play "GD_0001"
           Else VSDGOPCAO=""
       EndIf
  Case Opcao="Gravar":
       FileWrite        "GD_0001.sc" From ";****** Variaveis de Configura‡„o DTGERACAO FATURA"+"\n"
       FileWrite Append "GD_0001.sc" From "VSDGOPCAO="+Chr(34)+VSDGOPCAO+Chr(34)+"\n"
EndSwitch

EndProc ; ConfOpcoes()               
                      
;*******************************************************************************
;* Rotina do ShowDialog                                                        *
;*******************************************************************************
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_CONTA"         : Campo="TG_EMPRESA"
            Case Campo="TG_TPDOCTO"       : Campo="TG_CONTA"
            Case Campo="TG_DESTINAT"      : Campo="TG_TPDOCTO"
            Case Campo="TG_DTINI"         : Campo="TG_DESTINAT" 
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="TG_TAXAM"         : Campo="TG_DTFIM"
            Case Campo="TG_TAXA"          : Campo="TG_TAXAM"
            Case Campo="TG_FORMA"         : Campo="TG_TAXA"
            Case Campo="TG_GVV"           :
                 If IsBlank(VSDGTAXA)
                    Then Campo="TG_TAXA"
                    Else Campo="TG_FORMA"
                 EndIf
            Case Campo="TG_OPCAO"         : Campo="TG_GVV"
            Case Campo="TG_DTREF"         : Campo="TG_OPCAO"
            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" :
                         If GetP_Fatura(VSDGEMPRESA)
                            Then 
                                 VSDGCONTA  =PARAM_CONTA_CAIXA
                                 VSDGTAXA   =PARAM_TXJUROS
                                 VSDGFORMA  =PARAM_FORMA_TXJUROS
                                 VSDGGVV    =PARAM_AVISTADUPLIC

                                 Campo="TG_CONTA"
                         EndIf
                    Case Campo="TG_CONTA":
                         If Not IsBlank(VSDGCONTA)
                            Then Campo="TG_TPDOCTO"  
                         EndIf
                    Case Campo="TG_TPDOCTO" : Campo="TG_DESTINAT"
                    Case Campo="TG_DESTINAT": Campo="TG_DTINI"
                    Case Campo="TG_DTINI"   : Campo="TG_DTFIM"
                         If IsBlank(VSDGDTINI)
                            Then VSDGDTINI=today()
                         Endif
                    Case Campo="TG_DTFIM"   : Campo="TG_TAXAM"
                         If IsBlank(VSDGDTFIM)
                            Then VSDGDTFIM=VSDGDTINI
                         EndIf
                    Case Campo="TG_TAXAM":
                         VSDGTAXAM=ControlValue("TG_TAXAM")
                         If Not IsBlank(VSDGTAXAM)
                            Then TAXAM=NumVal(VSDGTAXAM)
                         EndIf
                         Campo="TG_TAXA"
                    Case Campo="TG_TAXA":
                         VSDGTAXA=ControlValue("TG_TAXA")
                         If Not IsBlank(VSDGTAXA)
                            Then TAXA=NumVal(VSDGTAXA)
                                 Campo="TG_FORMA"
                            Else VSDGFORMA    =""
                                 VSDGDESCFORMA=""
                                  Campo="TG_GVV"
                         EndIf
                    Case Campo="TG_FORMA":
                         VSDGFORMA=ControlValue("TG_FORMA")
                         If Not IsBlank(VSDGFORMA)
                            Then Switch
                                   Case VSDGFORMA="D":
                                        VSDGDESCFORMA="Dia"
                                   Case VSDGFORMA="M":
                                        VSDGDESCFORMA="Mes"
                                   Case VSDGFORMA="A":
                                        VSDGDESCFORMA="Ano"
                                   OtherWise:
                                        VSDGFORMA    =""
                                        VSDGDESCFORMA=""
                                 EndSwitch
                                 Campo="TG_GVV"
                            Else VSDGDESCFORMA=""
                         EndIf
                    Case Campo="TG_GVV":
                         VSDGGVV=ControlValue("TG_GVV")
                         Switch
                           Case VSDGGVV="S":
                                VSDGDESCGVV="SIM"
                           Case VSDGGVV="N":
                                VSDGDESCGVV="NAO"
                           OtherWise:
                                VSDGGVV    ="N"
                                VSDGDESCGVV="NAO"
                         EndSwitch
                         If OPNUMERO_DUPLICATA="DUP<>NF"
                            Then Campo="TG_OPCAO"
                            Else 
                                 VSDGOPCAO    ="N"
                                 VSDGDESCOPCAO="DT FATURA=DT EMISSAO NF"                                 
                                 VSDGDTREF    =BlankDate()
                                 
                                 Campo="YES"
                         EndIf   
                    Case Campo="TG_OPCAO": Campo="YES"
                         VSDGOPCAO=ControlValue("TG_OPCAO")
                         Switch
                           Case VSDGOPCAO="N": VSDGDESCOPCAO="DT FATURA=DT EMISSAO NF"
                                               VSDGDTREF=BlankDate()
                           Case VSDGOPCAO="I": VSDGDESCOPCAO="DT FATURA=DT INFORMADA"
                                               If IsBlank(VSDGDTREF)
                                                  Then VSDGDTREF=Today()
                                               EndIf
                                               CAMPO="TG_DTREF"
                           OtherWise         : VSDGDESCOPCAO=""
                                               Campo="TG_OPCAO"
                         EndSwitch
                    Case Campo="TG_DTREF": Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_EMPRESA":
       MSG_CAMPO="Informe o Codigo da Empresa"
  Case Campo="TG_CONTA":
       MSG_CAMPO="Informe o Codigo da Conta"
  Case Campo="TG_DTINI":
       MSG_CAMPO="Informe a Data Inicial"
  Case Campo="TG_DTFIM":
       MSG_CAMPO="Informe a Data Final"
  Case Campo="TG_TAXAM":
       MSG_CAMPO="Branco=Nulo"
  Case Campo="TG_TAXA":
       MSG_CAMPO="Branco=Nulo"
  Case Campo="TG_FORMA":
       MSG_CAMPO="D=Diario, M=Mensal, A=Anual"
  Case Campo="TG_GVV":
       MSG_CAMPO="Em Branco=N„o, S=Sim, N=N„o "
  Case Campo="TG_OPCAO":
     MSG_CAMPO="Op‡„o: N=Data igual DtEmiss„o NF   I=Informar Data Gera‡„o"       
Endswitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc ;SD_Dialog()


;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Parm"

If Not IsAssigned(SYS_CHAPA_USUARIO)   Then SYS_CHAPA_USUARIO="9999"     EndIf
If Not IsAssigned(SYS_NIVEL_USUARIO)   Then SYS_NIVEL_USUARIO="S"        EndIf
If Not IsAssigned(SYS_NOME_USUARIO)    Then SYS_NOME_USUARIO=""          EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""        EndIf
If Not IsAssigned(OPNUMERO_DUPLICATA)  Then OPNUMERO_DUPLICATA="DUP<>NF" EndIf
LimpAguarde()

sys_valor()

VSDGDTINI          = BlankDate()
VSDGDTFIM          = BlankDate()
VSDGCONTA          = ""
VSDGTPDOCTO        = ""
VSDGNOMCONTA       = ""
VSDGTAXA           = ""
VSDGTAXAM          = ""
VSDGFORMA          = ""
VSDGDESCFORMA      = ""
VSDGGVV            = ""
VSDGDESCGVV        = ""
TAXAM              = BlankNum()
TAXA               = BlankNum()

VSDGDESCOPCAO      = ""
VSDGOPCAO          = ""
VSDGDESCOPCAO      = "" 
VSDGDTREF          = BlankDate()
VSDGDESTINAT       = ""

titsd=""
titsd="Gerac„o de Duplicatas - NFe + NFSe e outras "

OPNUMERO_DUPLICATA="DUP<>NF" 

ConfOpcoes("Ler")

While True
  Echo Normal
  Echo Off

  ShowDialog titsd 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 20 Width 72

    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

    @ 06,36 ?? "Gerar: Duplicatas, Cartäes !"

    Label  @ 02,00 "Conta"  For "TG_CONTA"
    Accept @ 03,01 Width 07 "A4"  Picture "#*#" Tag "TG_CONTA"    To VSDGCONTA
    Accept @ 03,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMCONTA" To VSDGNOMCONTA
                          
    Label  @ 04,00 "Tipo do Documento"  For "TG_TPDOCTO"
    Accept @ 05,01 Width 07 "A4"  Picture "!*!" Tag "TG_TPDOCTO" To VSDGTPDOCTO
    Accept @ 05,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMTPDOCTO"  To VSDGNOMTPDOCTO               

    Label  @ 06,00 "Pessoa"  For "TG_DESTINAT"
    Accept @ 07,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_DESTINAT" To VSDGDESTINAT
    Accept @ 07,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMCLI" To VSDGNOMDEST

    Label  @ 08,00 "Per¡odo Referente de" For "TG_DTINI"
    Accept @ 09,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 09,16 "at‚" For "TG_DTFIM"
    Accept @ 09,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    Label  @ 11,00 "Taxa de Multa"  For "TG_TAXAM"
    Accept @ 11,21 Width 13 "A7"  Picture "#*#.[##]" Tag "TG_TAXAM"    To VSDGTAXAM

    Label  @ 12,00 "Taxa de Juros"  For "TG_TAXA"
    Accept @ 12,21 Width 13 "A7"  Picture "#*#.[##]" Tag "TG_TAXA"    To VSDGTAXA

    Label  @ 13,00 "Tipo Taxa de Juros"  For "TG_FORMA"
    Accept @ 13,21 Width 04 "A1"  Picture "D,M,A" Tag "TG_FORMA"    To VSDGFORMA
    Accept @ 13,25 Width 09 "A3"  Picture "!*!" Tag "TG_DESCFORMA"    To VSDGDESCFORMA

    Label  @ 14,00 "Gera Venda a Vista"  For "TG_GVV"
    Accept @ 14,21 Width 04 "A1"  Picture "S,N" Tag "TG_GVV"    To VSDGGVV
    Accept @ 14,25 Width 09 "A3"  Picture "!*!" Tag "TG_DESCGVV"    To VSDGDESCGVV

    Label  @ 00,35 "Op‡„o p/ Data Emiss„o da Fatura" For "TG_OPCAO"
    Accept @ 01,39 Width 04 "A1"  Picture "N,I" Tag "TG_OPCAO" To VSDGOPCAO
    Accept @ 01,44 Width 25 "A25"  Picture "!*!" Tag "TG_DESCOPCAO" To VSDGDESCOPCAO

    Label  @ 02,35 "Data Gera‡„o" For "TG_DTREF"
    Accept @ 03,36 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTREF" To VSDGDTREF

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

  EndDialog
  If Not RetVal   Then QuitLoop EndIf
  If IsBlank(VSDGDTINI)
     Then Mensagem("Data Inicial Invalida !")
          Loop           
  EndIf
  
  If IsBlank(VSDGDTFIM)
     Then Mensagem("Data Final Invalida !")
          Loop            
  EndIf
  
  Seleciona()
  
  If IsEmpty("Answer")
     Then MENSAGEM("N„o existem registros a processar")
          Loop             
  EndIf
  
  If CANCELADO
     Then 
          Mensagem("Procedimento abortado, duplicatas nÆo foram geradas !")
          Loop
     else
          GeraDup()
          Mensagem("Fim da Opera‡„o !")       
  EndIf
  ConfOpcoes("Gravar") 

EndWhile
ClearAll
Release Vars All
Release Procs All
