;** Emitbol  ******************************************************************
;*  Emissao de Boletas                                                         *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 16/08/2012 por Anivel Augusto Rodrigues
;Ultima Alteracao:   /  /     por 
;Motivo Alteracao: 

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

{Ask} {Duplic} Check
Moveto [Codigo da Empresa       ] TypeIn "~VSDGEMPRESA.."
Moveto [Codigo da Conta         ] TypeIn "~VSDGCONTA.."
Moveto [Data de Emissao         ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
Moveto [Situacao                ] TypeIn "Not C"
Moveto [Numero_Carregamento_Orig] TypeIn "~VSDGNCARREG.."
Moveto [Tipo do Pagamento       ] TypeIn "BO"
Moveto [Documento no Banco      ] TypeIn "Blank"
Moveto [Codigo do Destinatario  ] TypeIn "~VSDGDESTINAT.."
Do_It!
ClearAll

If Not IsEmpty("Answer")
   Then {Ask} {Answer} TypeIn "Fast"
        Moveto [Saldo do Documento] TypeIn "_vr"
        Moveto [Valor do Documento] TypeIn "changeto _vr"
        Do_It!
         
        Sort "Answer" On "Codigo do Destinatario","Data de Vencimento","Codigo do Documento","Numero do Documento" 
        ClearAll
       
        {Tools} {Copy} {JustFamily} {Duplic} {Answer} {Replace} 
        CopyForm "Duplic" "8" "Answer" "F"
EndIf

EndProc  ; (Seleciona)

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

    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":
         Del
         
         vr=0
         Scan
           vr=vr+[Valor do Documento]
         EndScan
         Mensagem("Total = "+LTrim(Format("W13.2,EIC",VR)))
         Moveto [Codigo da Empresa]
         QuitLoop
    Case RetVal="F4" And Field()="Codigo da Empresa":
         Del
         Do_it!
         DispositivoI("BOL")
         Coeditkey
         If OK<>"" 
            Then IMPRIME()
         EndIf   
         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 Editar_Titulo()
              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=9
     Then QuitLoop
  EndIf
EndWhile
EndProc

;*******************************************************************************
;* Editar titulo                                                               *
;*******************************************************************************
Proc Editar_Titulo()
Moveto [Data de Vencimento]

While True
  TECLA=" Esc=Retornar  Del=Excluir  "
  MSGCAMPO=Field()
  
  Prompt TECLA

  Wait Field
       Until "ESC","ENTER","DEL","FIELDVIEW","F35"

  Switch
  Case Retval="ENTER":
       If Field()="Data de Vencimento"
          Then Right
          Else QuitLoop
       EndIf   
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case Retval="DEL":
       If CHAVE=0
          Then If QuerExcluir("")
                  Then DEL
                       Return
               EndIf
       EndIf
    Case Retval="ESC":
      If Field()="Data de Vencimento"
         Then If QuerDesfazer("")
                 Then Undo
                      QuitLoop
              EndIf         
         Else Left
      EndIf        
  EndSwitch

EndWhile
UnLockRecord

EndProc

;*******************************************************************************
;* Seleciona Registros para Atualizacao                                        *
;*******************************************************************************
Proc SELECIONAI()

Edit "Answer"
SetHighLight Current Record 23 Field 31
{Image} {KeepSet}
Do_It!

View "\\Sistemas\\Cadastro\\End_Cob"  ImageRights ReadOnly
View "\\Sistemas\\Cadastro\\Destinat" ImageRights ReadOnly
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")

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

codcli="***"
dtvenc=BlankDate()

FormKey

Scan

   If [Codigo do Destinatario]<>codcli
      Then
           Faz_boleta()

           Moveto "\\Sistemas\\Cadastro\\Destinat"
           Moveto [Codigo]
           Locate [Answer->Codigo do Destinatario]
           If Not RetVal
              Then Mensagem("Erro localizar cliente "+[Codigo do Destinatario]+", titulo "+[Numero do Documento])
                   codcli="***"                   
                   QuitLoop
           EndIf

           End_CobOk=False
           Moveto "\\Sistemas\\Cadastro\\End_Cob"
           Moveto [Codigo]
           Locate [Answer->Codigo do Destinatario]
           If RetVal
              Then If IsBlank([Endereco de Cobranca]) Or [Endereco de Cobranca]="O MESMO"
                      Then End_CobOk=False
                      Else End_CobOk=True 
                   EndIf   
           EndIf
           
           Moveto "Answer"
   EndIf

   If [Data de Vencimento]<>dtvenc
      Then Faz_boleta()
   EndIf

   ntit       = ntit+1 
   vrdoctos   =vrdoctos+[Valor do Documento]
   If IsBlank(reldoctos)
      Then reldoctos  ="Ref. doctos: "+[numero do documento]
      Else reldoctos  =reldoctos+", "+[numero do documento]
   EndIf

   If Not IsBlank(VSDGBOLETA)
      Then [Documento no Banco]=StrVal(NumVal(VSDGBOLETA))
           UnLockRecord
   EndIf

EndScan
Faz_Boleta()

FormKey

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

LIMPAGUARDE()

EndProc  ; (Imprime)

;*******************************************************************************
;* Rotina p/ Atualizacao de boletas emitidas                                   *
;*******************************************************************************
Proc faz_boleta()

If codcli<>"***"
   Then
        If Not IsBlank(txmulta)
           Then VRMULTA=(vrdoctos*txmulta)/100
        EndIf
        If Not IsBlank(txjuros)
           Then VRBJ=(vrdoctos*txjuros)/100
                Switch
                  Case tpjuros="A": VJUROSDIA=Round((VRBJ/365),2)
                  Case tpjuros="M": VJUROSDIA=Round((VRBJ/30),2)
                  Case tpjuros="D": VJUROSDIA=Round((VRBJ),2)
                EndSwitch
        EndIf

        AGUARDE("Aguarde, Imprimindo boleta N§ " + pridocto)
        Play PARAM_IMPRESSAO
        
        If Not IsBlank(VSDGBOLETA)
           Then VSDGBOLETA=StrVal(NumVal(VSDGBOLETA)+1)
        EndIf

EndIf

ntit     =0
reldoctos=""
vrdoctos =0
VRMULTA  =BlankNum()
VJUROSDIA=BlankNum()

codcli   =[Codigo do Destinatario]
dtvenc   =[Data de Vencimento    ]
pridocto =[Numero do Documento   ]
pridtemis=[Data de Emissao       ]

txmulta  =[Multa                 ]
txjuros  =[Taxa de Juros         ]
tpjuros  =[Tipo Taxa de Juros    ]

EndProc

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

View "Duplic"
Coedit "Answer"
Scan For [Documento no Banco]<>""
  Moveto "Duplic"
  Moveto [Numero do Lancamento]
  Locate [Answer->Numero do Lancamento]
  If RetVal
     Then For i From 1 to 3
            If Not IsLockRecord()
               Then [Documento no Banco]=[Answer->Documento no Banco]
                    [Codigo da Conta   ]=VSDGCONTA2
                    [Codigo da Empresa ]=[Answer->Codigo da Empresa ]
                    If [Data de Vencimento]<>[Answer->Data de Vencimento]
                       Then [Observacoes]=[Observacoes]+" Vencto "+Format("D13",[Data de Vencimento])+
                                                        " Prorrogado p/ "+Format("D13",[Answer->Data de Vencimento]) 
                            [Data de Vencimento]=[Answer->Data de Vencimento]
                    EndIf        
                    UnLockRecord
                    QuitLoop
            EndIf
          EndFor
  EndIf

  Moveto "Answer"
EndScan
Do_It!
ClearAll

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

EndProc  ; (AtualizaBol)

;*******************************************************************************
;* 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="TG_CONTA2"        : Campo="TG_VRBOL" 
            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"   : Campo="TG_CONTA2"
                         VSDGVRBOL=ControlValue("TG_VRBOL")
                    Case Campo="TG_CONTA2"  : 
                         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"
  Case Campo="TG_CONTA2":
     MSG_CAMPO="Informe a Conta Destino"
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 =""
VSDGCONTA2  =""

While True

  ShowDialog "Emiss„o de Boletas - BO/Agrupadas" 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 19 Width 56

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

    Label  @ 02,02 "Conta"  For "TG_CONTA"
    Accept @ 03,03 Width 07 "A4"  Picture "#*#" Tag "TG_CONTA" To VSDGCONTA
    Accept @ 03,11 Width 33 "A30" Picture "!*!" Tag "TG_NOMCONT" To VSDGNOMCONTA

    Label  @ 04,02 "Cliente"  For "TG_DESTINAT"
    Accept @ 05,03 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_DESTINAT" To VSDGDESTINAT
    Accept @ 05,11 Width 23 "A20" Picture "!*!" Tag "TG_NOMDEST"  To VSDGNOMDEST

    Label  @ 06,00 "N§ Carregamento" For "TG_NCARREG"
    Accept @ 07,01 Width 9  "A6"  Picture "#*#" Tag "TG_NCARREG"    To VSDGNCARREG
    Accept @ 07,11 Width 23 "A20" Picture "!*!" Tag "TG_NOMNCARREG" To VSDGNOMNCARREG
                 
    Label  @ 08,00 "Perˇodo Referente" For "TG_DTINI"
    Label  @ 09,00 "de" For "TG_DTINI"
    Accept @ 09,04 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 09,17 "at‚" For "TG_DTFIM"
    Accept @ 09,22 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    Label  @ 10,02 "Boleta Inicial"  For "TG_BOLETA"
    Accept @ 11,03 Width 22 "A20"  Picture "#*#" Tag "TG_BOLETA" To VSDGBOLETA

    Label  @ 10,28 "Valor Custo Boleto" For "TG_VRBOL"
    Accept @ 11,29 Width 12 "$" picture "#*#.[##]" Tag "TG_VRBOL" to VSDGVRBOL

    Label  @ 12,02 "Conta Destino"  For "TG_CONTA2"
    Accept @ 13,03 Width 07 "A4"  Picture "#*#" Tag "TG_CONTA2" To VSDGCONTA2
    Accept @ 13,11 Width 33 "A30" Picture "!*!" Tag "TG_NOMCONT2" To VSDGNOMCONTA2

    Pushbutton @ 15,14 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 15,28 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 IsBlank(VSDGCONTA2)
     Then Mensagem("Conta Destino Invalida !")
          Loop
  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 "\\Sistemas\\Vendas\\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
  
  ;;definir modelo da boleta
  PARAM_IMPRESSAO="EB_ITAU4"

  MSGDUP=""
  View "\\Sistemas\\Vendas\\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
