;** Emitbol  ******************************************************************
;*  Emissao de Boletas                                                         *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 12/04/1999 por Cl udio Ant“nio de Faria Santos
;Ultima Alteracao: 05/04/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Alterado em     : 29/06/2006 por Antonio Marcelo Alves
;Motivo Alteracao: Inclusao ImpriArq()
;Ultima Alteracao: 14/08/2007 por Antonio Marcelo Alves
;Motivo Alteracao: Ajustes Deleta_Arquivo
;Ultima Alteracao: 01/04/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Vr Custo Boleto
;Ultima Alteracao: 18/04/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ "DupI" [Codigo_Sacado],[Codigo da Conta]
;Ultima Alteracao: 01/08/2013 por Bruno Carvalho
;Motivo Alteracao: Ajsutes "0334" 
;Ultima Alteracao: 14/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog  
;Ultima Alteracao: 28/12/2016 por Rafael Matos
;Motivo Alteracao: Ajustes ShowDialog TG_DESTINAT
;Ultima Alteracao: 16/05/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes GetRecord "P_Fatura"

;*******************************************************************************
;* Rotina p/ selecao de registros                                              *
;*******************************************************************************
Proc Seleciona()
AGUARDE("Aguarde, Selecionando Boletas")
ClearAll

{Ask} {DupC} Check
Moveto [Codigo da Empresa  ] Example "CodE" TypeIn ", ~VSDGEMPRESA.."
Moveto [Numero do Documento] Example "CodD"
Moveto [Serie do Documento ] Example "CodS"
Moveto [Data de Emissao    ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
Moveto [Codigo da Conta    ] Check
Moveto [Codigo             ] Check
Moveto [Situacao           ] TypeIn "Not C"
Moveto [Numero_Carregamento] TypeIn "~VSDGNCARREG.."
Moveto [Boleta Emitida     ] TypeIn "Not S"
{Ask} {DupI} 
Moveto [Codigo da Empresa  ] Example "CodE"
Moveto [Numero do Documento] Example "CodD"
Moveto [Serie do Documento ] Example "CodS"
Moveto [Codigo da Conta    ] Check TypeIn "~VSDGCONTA.."
Moveto [Codigo_Sacado      ] Check TypeIn "~VSDGDESTINAT.. ,as Codigo"
Do_It!
ClearAll                     

If Not IsEmpty("Answer")
   Then CopyForm "DupC" "3" "Answer" "F"
EndIf

EndProc  ; (Seleciona)

;*******************************************************************************
;* Seleciona Titulos para Baixa
;*******************************************************************************
Proc CHAVE()
While True
  End
  Down
  Moveto [Codigo da Empresa]
  While True

    Prompt " Esc=Sair  F4=Imprimir  F5=Total  F7=Paginar  F8=Atualizar"

    Wait Field
         Until "ESC","ENTER","F7","HOME","UP","PGUP","F4","F5","F8"

    Switch
    Case RetVal="F5" And Field()="Codigo da Empresa":
         Moveto [Valor Nota Fiscal]
         VR=ImageCSum()
         Mensagem("Total = "+LTrim(Format("W13.2,EIC",VR)))
         Moveto [Codigo da Empresa]
    Case RetVal="F4" And Field()="Codigo da Empresa":
         Del
         Do_it!
         DispositivoI("FAT")
         Coeditkey
         If OK="" Then Loop EndIf
         IMPRIME()
         CHAVE=5
         QuitLoop
    Case RetVal="F8":
         CONFGERAL("Atualizar Boletas como emitidas ?")
         If OK="S"
            Then AtualizaBol()
                 CHAVE=9
                 Do_It!
                 ClearAll
                 Quitloop
         Endif
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME" And Field()="Codigo da Empresa":
         While True
           PAGINA("Answer","MR")
           If EDITAR="S"
              Then CHAVE=0
                   Return
              Else If EXCLUIR="S"
                      Then CONFIRMA()
                           If OK="S"
                              Then DEL
                              Else UnLockRecord
                           EndIf
                      Else QuitLoop
                   EndIf
           EndIf
         EndWhile
         CHAVE=5
         QuitLoop
    Case Retval="ESC":
         If Field()="Codigo da Empresa"
            Then CHAVE=9
                 Do_It!
                 ClearAll
                 Quitloop
         EndIf
    EndSwitch
  EndWhile
  If CHAVE=0 OR CHAVE=9
     Then QuitLoop
  EndIf
EndWhile
EndProc

;*******************************************************************************
;* Seleciona Registros para Atualizacao                                        *
;*******************************************************************************
Proc SELECIONAI()
Edit "Answer"
SetHighLight Current Record 23 Field 31
{Image} {KeepSet}
Do_It!
CoEdit "Answer"
PickForm "F"
While True
  CHAVE()
  If CHAVE=9
     Then QuitLoop
  EndIf
EndWhile
ClearAll
EndProc

;*******************************************************************************
;* Rotina de impress„o de boletas                                              *
;*******************************************************************************
Proc IMPRIME()
AGUARDE("Aguarde, Imprimindo Boletas")

Do_It!
ClearAll

ArqImp=PrivDir()+"EmitBol.Txt"
If IsFile(ArqImp)
   Then Deleta_Arquivo(ARQIMP)
EndIf

Array NoNota[15]
Array VrNota[15]

Array Reg1[11]
Array Reg2[11]

FIM_ARQUIVO=False
NBOL=1

View "\\Sistemas\\Cadastro\\Destinat"
View "NotaC"
View "DupNF"
View "DupI"
CoEdit "Answer"
Scan

   Moveto "\\Sistemas\\Cadastro\\Destinat"
   Moveto [Codigo]
   Locate [Answer->Codigo]
   If RetVal
      Then FONE         =[Telefone]
           CODIGO_ANTIGO=SubStr([Conta Contabil],1,7)
      Else FONE         =""
           CODIGO_ANTIGO=""
   EndIf

   For i from 1 to 15
      NoNota[i]=" "
      VrNota[i]=BlankNum()
   EndFor

   VENDA_APRAZO=True
   Moveto "DupNF"
   Moveto [Codigo da Empresa]
   Locate [Answer->Codigo da Empresa], [Answer->Numero do Documento],[Answer->Serie do Documento]
   If Not Retval
      Then MENSAGEM("Duplicata Sem Nota referente !//N§ Duplicata "+[Answer->Codigo da Empresa]+"/"+[Answer->Numero do Documento])
           Moveto "Answer"
           Loop
      Else Moveto "NotaC"
           Moveto [Codigo da Empresa]
           Locate [DupNF->Codigo da Empresa], [DupNF->Numero da Nota], [DupNF->Serie da Nota]
           If Retval
              Then If [Tipo de Pagamento]="V" Then VENDA_APRAZO=False  EndIf
           EndIf

           Moveto "DupNF"
           wcn=1
           While [Codigo da Empresa  ]=[Answer->Codigo da Empresa  ] And
                 [Numero do Documento]=[Answer->Numero do Documento] And
                 [Serie do Documento ]=[Answer->Serie do Documento ]
             NoNota[wcn]=[Numero da Nota]
             VrNota[wcn]=[Valor da Nota Fiscal]
             wcn=wcn+1
             Skip
             If EOT() Then QuitLoop EndIf
           EndWhile
   EndIf

   Moveto "DupI"
   Moveto [Codigo da Empresa]
   Locate [Answer->Codigo da Empresa],[Answer->Numero do Documento],[Answer->Serie do Documento ]
   If Not RetVal
      Then MENSAGEM("Duplicata Sem Desdobramentos !//N§ Duplicata "+[Answer->Codigo da Empresa]+"/"+[Answer->Numero do Documento])
           Moveto "Answer"
           Loop
   EndIf
   While  [Codigo da Empresa  ]=[Answer->Codigo da Empresa  ] And
          [Numero do Documento]=[Answer->Numero do Documento] And
          [Serie do Documento ]=[Answer->Serie do Documento ]
     While True
           If Not PrinterStatus()
              Then MENSAGEM("Impressora fora de linha ou desligada")
                   CONFGERAL("Continua impress„o ?")
                   If OK="S"
                      Then Loop
                      Else Do_It!
                           ClearAll
                           Return
                   EndIf
              Else QuitLoop
           EndIf

     EndWhile

      AGUARDE("Aguarde, Imprimindo boleta N§ " + [Answer->Codigo da Empresa] + " - " + [Answer->Numero do Documento])

      Play PARAM_IMPRESSAO

      Moveto "DupI"
      If Not IsBlank(VSDGBOLETA)
         Then [Documento no Banco]=StrVal(NumVal(VSDGBOLETA))
              VSDGBOLETA=StrVal(NumVal(VSDGBOLETA)+1)
      EndIf
      Skip
      If EOT() Then QuitLoop EndIf

   EndWhile

   Moveto "Answer"
   [Boleta Emitida]="S"


EndScan

Do_It!
ClearAll

;---- Imprime Arquivo Impressao ------------------------------------------------
ImpriArq(ARQIMP)

;If NBOL>1
;   Then FIM_ARQUIVO=True
;        Play PARAM_IMPRESSAO
;EndIf

CoEdit "Answer"
PickForm "F"
LIMPAGUARDE()

EndProc  ; (Imprime)

;*******************************************************************************
;* Rotina p/ Atualizacao de boletas emitidas                                   *
;*******************************************************************************
Proc AtualizaBol()
AGUARDE("Aguarde, Atualizando Boletas Emitidas")
Do_It!
ClearAll

View "DupC"
Coedit "Answer"
Scan For [Boleta Emitida]="S"
  Moveto "DupC"
  Moveto [Codigo da Empresa]
  Locate [Answer->Codigo da Empresa],
         [Answer->Numero do Documento],
         [Answer->Serie do Documento]
  If RetVal
     Then For i From 1 to 3
            If Not IsLockRecord()
               Then [Boleta Emitida]="S"
                    UnLockRecord
                    QuitLoop
            EndIf
          EndFor
  EndIf

  Moveto "Answer"
EndScan
Do_It!
ClearAll

Mensagem("Atualiza‡„o concluida !")
LIMPAGUARDE()

EndProc  ; (AtualizaBol)

;*******************************************************************************
;* Rotina para Carregar Parametros                                             *
;*******************************************************************************
Proc Carrega_Parametros()

If IsEmpty("P_Fatura")
   Then Mensagem("N„o esta Configurado os Parametros para Digita‡„o [Saida/Fatura]!")
        Return False
EndIf

GetRecord "\\Sistemas\\Vendas\\P_Fatura" VSDGEMPRESA to REGP_FATURA
If RetVal
   Then PARAM_TXJUROS                  =REGP_FATURA["Duplicata_TxJuros"      ]
        PARAM_FORMA_TXJUROS            =REGP_FATURA["Duplicata_Forma_TxJuros"]
   Else Mensagem("Parametros n„o Cadastrado para esta Empresa [Saida/Fatura] !")
        Return False
EndIf
Return True

EndProc ; Carrega_Parametros()

;*******************************************************************************
;* 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"] <= -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"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_CONTA"         : Campo="TG_EMPRESA"
            Case Campo="TG_DESTINAT"      : Campo="TG_CONTA"
            Case Campo="TG_NCARREG"       : Campo="TG_DESTINAT"
            Case Campo="TG_DTINI"         : Campo="TG_NCARREG"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="TG_BOLETA"        : Campo="TG_DTFIM"
            Case Campo="TG_VRBOL"         : Campo="TG_BOLETA"
            Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
          EndSwitch
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA" :
                         If IsBlank(VSDGEMPRESA)
                            Then VSDGNOMEMP=""
                            Else Campo="TG_CONTA"
                         EndIf
                    Case Campo="TG_CONTA"   : Campo="TG_DESTINAT"
                    Case Campo="TG_DESTINAT": Campo="TG_NCARREG"
                    Case Campo="TG_NCARREG" : Campo="TG_DTINI"
                    Case Campo="TG_DTINI"   :
                         If Not IsBlank(VSDGDTINI)
                            Then Campo="TG_DTFIM"
                         EndIf
                    Case Campo="TG_DTFIM"   : Campo="TG_BOLETA"
                    Case Campo="TG_BOLETA"  :
                         VSDGBOLETA=ControlValue("TG_BOLETA")
                         Campo= "TG_VRBOL"
                    Case Campo="TG_VRBOL"  :
                         VSDGVRBOL=ControlValue("TG_VRBOL")
                         Campo= "YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_EMPRESA":
     MSG_CAMPO="Informe uma Empresa"
  Case Campo="TG_CONTA":
     MSG_CAMPO="Informe uma Conta"
  Case Campo="TG_DTINI":
     MSG_CAMPO="Informe a Data Inicial"
  Case Campo="TG_BOLETA":
       MSG_CAMPO="Informe o numero da Boleta inicial sem o Digito Verificador"
  Case Campo="TG_VRBOL":
       MSG_CAMPO="Informe valor adicional para custo boleto"
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bibliot"
LimpAguarde()

VSDGEMPRESA =""
VSDGCONTA   =""
VSDGDESTINAT=""
VSDGDTINI   =BlankDate()
VSDGDTFIM   =BlankDate()
VSDGBOLETA  = ""
VSDGNCARREG =""

While True

  ShowDialog "Emiss„o de Boletas" 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 15 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

    Label  @ 02,00 "Conta"  For "TG_CONTA"
    Accept @ 03,01 Width 07 "A4"  Picture "#*#" Tag "TG_CONTA" To VSDGCONTA
    Accept @ 03,09 Width 25 "A30" Picture "!*!" Tag "TG_NOMCONT" To VSDGNOMCONTA

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

    Label  @ 06,00 "Carregamento" For "TG_NCARREG"
    Accept @ 07,01 Width 9  "A6"  Picture "[&,#][#*#]" Tag "TG_NCARREG"    To VSDGNCARREG
    Accept @ 07,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMNCARREG" To VSDGNOMNCARREG
                 
    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  @ 00,35 "Boleta Inicial"  For "TG_BOLETA"
    Accept @ 01,36 Width 33 "A20"  Picture "#*#" Tag "TG_BOLETA" To VSDGBOLETA

    Label  @ 02,35 "Valor Custo Boleto" For "TG_VRBOL"
    Accept @ 03,36 Width 12 "$" picture "#*#.[##]" Tag "TG_VRBOL" to VSDGVRBOL

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

  EndDialog
  If Not RetVal Then QuitLoop EndIf
                                                   
  If IsBlank(VSDGEMPRESA)
     Then Mensagem("Empresa Invalida !")
          Loop
  EndIf
  If IsBlank(VSDGDTINI)
     Then Mensagem("Data Inicial Invalida !")
          Loop
  EndIf
  If IsBlank(VSDGDTFIM)
     Then Mensagem("Data Final Invalida !")
          Loop
  EndIf

  If IsBlank(VSDGCONTA)
     Then Mensagem("Conta Invalida !")
          Loop
  EndIf

  If SYS_CODIGO_CLIENTE="0334"
     Then If Not Carrega_Parametros()
             Then Loop 
          EndIf   
  EndIf

  View "\\Sistemas\\CtaCor\\Conta"
  Moveto [Codigo da Conta]
  Locate VSDGCONTA
  If Not Retval
     Then MENSAGEM("Conta N„o Cadastrada!")
          ClearAll
          Loop
  EndIf
  If [Codigo da Empresa]<>VSDGEMPRESA
     Then MENSAGEM("Conta n„o ‚ desta empresa!")
          ClearAll
          Loop
  EndIf
  ClearAll

  View "P_Eb"
  Moveto [Codigo_Empresa]
  Locate VSDGEMPRESA, VSDGCONTA
  If RetVal
     Then PARAM_IMPRESSAO=[Impressao_Boleta]
     Else Mensagem("Boleta n„o configurada p/ Empresa: "+VSDGEMPRESA+" Conta: "+VSDGCONTA)
          ClearAll
          Loop
  EndIf
  ClearAll

  MSGDUP=""
  View "DocMsg"
  Locate VSDGEMPRESA,"BOL"
  If RetVal
     Then MSGDUP=[Mensagem]
  EndIf
  ClearAll

  Seleciona()
  If IsEmpty("Answer")
     Then MENSAGEM("N„o Existem Boletas para Emitir!")
          Loop
  EndIf
  SelecionaI()
  Echo Normal
  Echo Off

  ClearAll
  Delete "Answer"

EndWhile
ClearAll
Release Vars All
Release Procs All
