;** BxCxAuto *******************************************************************
;*  Baixa Automatica p/ Conta Caixa                                            *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 15/07/1998 por Anivel Augusto Rodrigues
;Ultima Alteracao: 05/06/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 16/04/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 04/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Conta<>Empresa
;Ultima Alteracao: 05/08/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Controla_EdicaoI()
;Ultima Alteracao: 13/05/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Impressao Recibo
;Ultima Alteracao: 08/07/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes para Novo Modelo de Recibo
;Ultima Alteracao: 22/09/2010 por Bruno Carvalho
;Motivo Alteracao: Adicionado filtro por Tipo do Pagamento
;Ultima Alteracao: 16/01/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas
;Ultima Alteracao: 25/02/2011 por Bruno Carvalho
;Motivo Alteracao: Altera‡Æo para ImpressÆo de Comprovante de Baixas
;Ultima Alteracao: 20/01/2012 por Karina Andrade
;Motivo Alteracao: InclusÆo F3 para sair
;Ultima Alteracao: 25/05/2012 por Karina Andrade
;Motivo Alteracao: Ajustes Carrega_Parametros de acordo com a empresa 
;Ultima Alteracao: 13/08/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Selecionar Boleto Bancario
;Ultima Alteracao: 04/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Qualquer conta, cobrador  
;Ultima Alteracao: 03/01/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Conflito LockRecord - SaldCont       

;*******************************************************************************
;* Rotina p/ Selecionar e Ordenar Registros                                    *
;*******************************************************************************
Proc SELECIONA()
ClearAll
{Ask} {Duplic} Check
Moveto [Codigo da Empresa      ] TypeIn "~VSDGEMPRESA"
Moveto [Codigo da Conta        ] TypeIn "~VSDGCONTA.."
Moveto [Codigo do Destinatario ] TypeIn "~VSDGDESTINAT.."
Moveto [Codigo do Cobrador     ] TypeIn "~VSDGCOBRADOR.."
Moveto [Codigo do Representante] TypeIn "~VSDGREPRESEN.."
Moveto [Tipo do Pagamento      ] TypeIn "~VSDGTPPAGTO.."    
Switch
  Case Not IsBlank(VSDGNCARREG):
    Moveto [Numero_Carregamento_Orig] TypeIn "~VSDGNCARREG.."
  Case Not IsBlank(VSDGBOLETA):
    Moveto [Documento no Banco      ] TypeIn "~VSDGBOLETA"
  OtherWise:
    If VSDGTPDATA="1"
       Then Moveto [Data de Emissao       ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
       Else Moveto [Data de Vencimento    ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
    EndIf                                             
  
EndSwitch
Moveto [Saldo do Documento     ] TypeIn "> 0.01 "
Do_It!
ClearAll

If IsEmpty("Answer")=False
   Then CopyForm "\\Base\\Sistemas\\CtaRec\\Duplic" "6" "Answer" "F"

        If VSDGTPDATA="1"
           Then Sort "Answer" On "Codigo do Destinatario","Data de Emissao","Tipo do Documento","Numero do Documento"
           Else Sort "Answer" On "Codigo do Destinatario","Data de Vencimento","Tipo do Documento","Numero do Documento"
        EndIf
        Processa()

EndIf

EndProc

;*******************************************************************************
;* Rotina p/ Processar db Temporaria                                           *
;*******************************************************************************
Proc Processa()

Coedit "Answer"
Scan
   [Valor do Documento]=[Saldo do Documento]  ;; Temporario Original
   [Tipo              ]="T"                   ;; Temporario Original

   If VSDGDTREF>[Data de Vencimento]
      Then NDA=VSDGDTREF-[Data de Vencimento]
           TXM=[Multa]
      Else NDA=0
           TXM=0
   EndIf

   If [Taxa de Juros]>0
      Then TXJ=([Taxa de Juros]/[NDias Taxa de Juros])*NDA
           VRJUROS=(([Saldo do Documento]*TXJ)/100)+([Saldo do Documento]*TXM/100)
      Else VRJUROS=(([Valor de Juros]/[NDias Taxa de Juros])*NDA)
           VRJUROS=VRJUROS+(([Saldo do Documento]*TXM)/100)
   EndIf

   If VSDGDTREF<=[Data Limite Desconto]
      Then [Saldo do Documento  ]=[Saldo do Documento]-[Valor do Desconto ]
           [Tipo                ]="D"              ;; Temporario Original
      Else [Valor do Desconto   ]=0
   EndIf
   [Valor de Juros      ]=VRJUROS    ;;Temporario
   [Saldo do Documento  ]=Round([Saldo do Documento  ]+[Valor de Juros],2)
EndScan
Do_It!
ClearAll

EndProc    ; (Processa)

;*******************************************************************************
;* Seleciona Titulos para Baixa
;*******************************************************************************
Proc CHAVE()
EDICAO=False

While True
  CHAVE=1
  End
  Down
  Moveto [Tipo do Documento]

  While True

  TECLA=""
  Prompt TECLA 
  SpeedBar "["+Chr(17)+"]"  :"F3",
           "~Navegar~"      :"UP",
           "~Fun‡”es~"      :-33

  Wait Field
    Until "ESC","ENTER",
          "HOME","UP","PGUP","DEL",
          -94,-33,-22, -18,
          "F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12"
  
  If RetVal=-33
     Then Echo Normal
          Echo Off
          ShowPopup " Fun‡”es " CENTERED
           "F4 ~I~mprimir        " : " Imprimir                      " : "F4",
           "F5 ~T~otalizar       " : " Totalizar valores/titulos     " : "F5",
           "F8 ~A~tualizar       " : " Atualizar baixa destes titulos" : "F8",
           "~C~ancelar           " : " Cancelar a Opera‡„o           " : "CANCELAR"
          EndMenu
           To MenuVar

          Echo Off
          If MenuVar="CANCELAR" or MenuVar="Esc"
              Then Loop
          EndIf

          RetVal=MenuVar
  EndIf

  Switch
    Case RetVal=-94 : MsgTeclasPadrao()
    Case RetVal="F5" And Field()="Tipo do Documento":
         VR  =BlankNum()
         NTIT=BlankNum()
         Del
         Scan
           VR  =VR+[Saldo do Documento]
           NTIT=NTIT+1
         EndScan
         Mensagem(LTrim(Format("W10,EIC",NTIT))+" titulo(s), total de "+LTrim(Format("W13.2,EIC",VR)))
         QuitLoop      
    Case RetVal="F4" And Field()="Tipo do Documento":
         Del
         Exec_Comprovante=False
         IMPRIME()
         If Exec_Comprovante
            Then CHAVE=9
            Else CHAVE=5
         EndIf
         QuitLoop
    Case RetVal="F8":
         If CONFGERAL("Confirma baixa e atualiza‡äes destes titulos ?")
            Then BAIXA()
                 CHAVE=9
                 QuitLoop
         Endif
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME" And Field()="Tipo do Documento":
         While True
           CHAVE=1
           PAGINA("Answer","MR")
           If EDITAR="S"
              Then CHAVE=0
                   Controla_EdicaoI()
              Else If EXCLUIR="S"
                      Then CONFIRMA()
                           If OK="S"
                              Then DEL
                              Else UnLockRecord
                           EndIf
                      Else QuitLoop
                   EndIf
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="F3":
         If EDICAO=True
          Then If ConfGeral("Deseja desfazer as alte‡äes?")
                  Then If Field()="Tipo do Documento"
                          Then CHAVE=9
                               Do_It!
                               ClearAll
                               Quitloop
                       EndIf   
               EndIf             
          Else If Field()="Tipo do Documento"
                  Then CHAVE=9
                       Do_It!
                       ClearAll
                       Quitloop
               EndIf
          
         EndIf              
    Case Retval="ESC":
         Mensagem("Para finalizar utilize a tecla F3!") 

    EndSwitch
  EndWhile
  If CHAVE=0 OR CHAVE=9
     Then QuitLoop
  EndIf
EndWhile
EndProc

;*******************************************************************************
;* Digita Novo Valor                                                           *
;*******************************************************************************
Proc DIGITAV()
EDICAO=True

While True
  Moveto [Saldo do Documento]

  Prompt " Esc=Retornar  "

  Wait Field
       Until "ESC","ENTER"

  Switch
  Case Retval="ESC":
       CHAVE=9
       Quitloop
  Case RetVal="ENTER":
       Switch
         Case [Saldo do Documento]<[Valor do Documento]:
              MSG=    "Valor Informado menor que Saldo do T¡tulo !// //"
              MSG=MSG+"Saldo do T¡tulo="+Format("W12.2,EIC",[Valor do Documento])+"   //"
              MSG=MSG+"Valor Informado="+Format("W12.2,EIC",[Saldo do Documento])+"(-)//"
              MSG=MSG+"      Diferen‡a="+Format("W12.2,EIC",[Valor do Documento]-[Saldo do Documento])+"   // //"
              MSG=MSG+"Continue e veja as opc”es para tratar a diferen‡a."
              Mensagem(MSG)

              Echo Off
              Echo Normal

              ShowPopup " Op‡„o da Baixa " CENTERED
               "~P~arcial"   : " Uma simples baixa Parcial do t¡tulo"                     : "PARCIAL",
               "~D~esconto"  : " A diferen‡a ser  o valor do Desconto na baixa do t¡tulo" : "DESCONTO",
               "~C~ancelar"  : " Cancelar altera‡„o"                                      : "CANCELAR"
              EndMenu
               To MenuVar
              echo off

              If MenuVar="Esc" Or MenuVar="CANCELAR"
                  Then Undo
                       Loop
              EndIf
              [Tipo]=SubStr(MenuVar,1,1)
         Case [Saldo do Documento]>[Valor do Documento]:
              MSG=    "Valor Informado maior que Saldo do T¡tulo !// //"
              MSG=MSG+"Valor Informado="+Format("W12.2,EIC",[Saldo do Documento])+"   //"
              MSG=MSG+"Saldo do T¡tulo="+Format("W12.2,EIC",[Valor do Documento])+"(-)//"
              MSG=MSG+"      Diferen‡a="+Format("W12.2,EIC",[Saldo do Documento]-[Valor do Documento])+"   // //"
              MSG=MSG+"A diferen‡a ser  o valor do juros."
              ConfGeral(MSG)
              If OK<>"S"
                 Then Undo
                      Loop
                 Else [Tipo]="T"
              EndIf
         OtherWise:
              [Tipo]="T"
       EndSwitch
       CHAVE=9
       Quitloop
  EndSwitch
EndWhile
EndProc

;*******************************************************************************
;* Rotina De Impressao                                                         *
;*******************************************************************************
Proc IMPRIME()

ShowPopup " Fun‡”es " CENTERED
 "~P~adr„o      " : " Imprimir Modelo Padr„o                   " : "Padrao",
 "Prazo ~M~edio " : " Imprimir Modelo Prazo Medio              " : "Prazo Medio",
 "~R~ecibo Pagto" : " Imprimir Recibo de Pagto e Atualiza Baixa" : "Comprovante",
 "~C~ancelar    " : " Cancelar a Opera‡„o                      " : "CANCELAR"
EndMenu
 To MenuVar

echo off
If MenuVar="CANCELAR" or MenuVar="Esc"
    Then Return
EndIf

Do_It!
ClearAll

If MenuVar="Padrao" Or MenuVar="Prazo Medio"
   Then	DISPOSITIVO()
				If OK<>""
				   Then ATUA_REF()
				        AGUARDE("Aguarde, Imprimindo")
				        Switch
				          Case MenuVar="Padrao":
				               CopyReport "\\Base\\Sistemas\\CtaRec\\RM_1000" "12" "Answer" "R"
				               IMPRIREL("Answer","R")
				          Case MenuVar="Prazo Medio":
				               CopyReport "\\Base\\Sistemas\\CtaRec\\RM_1001" "R" "Answer" "R"
				               IMPRIREL("Answer","R")
				        EndSwitch
				EndIf
EndIf

If MenuVar="Comprovante"
   Then If Not IsBlank(PARAM_RELAT)
           Then MSGDISPOSITIVO="Recibo"
								DispositivoI("RCB")
				        If OK<>""
								   Then ATUA_REF()
									      Exec_Comprovante=True
									      Baixa()
				                Imprime_Comprovante()
				        EndIf
				   Else Mensagem("Modelo recibo nÆo configurado !")     
        EndIf
EndIf

ClearAll

CoEdit "Answer"
PickForm "F"
LIMPAGUARDE()
EndProc

;*******************************************************************************
;* Funcao que verifica a data de referencia quando o iten e excluido           *
;*******************************************************************************
Proc ATUA_REF()
M_VALORM   =0
VALOR_TOTAL=0

CoEdit "Answer"
Scan
  MDIA=[Data de Vencimento]-VSDGDTREF
  If MDIA=0
     Then [Valor da Comissao]= [Saldo do Documento]        ;;Temporario
     Else [Valor da Comissao]=([Saldo do Documento]*MDIA)  ;;Temporario
  EndIf
  [NDias Taxa de Juros]=MDIA

  M_VALORM   =M_VALORM   +[Valor da Comissao ]
  VALOR_TOTAL=VALOR_TOTAL+[Saldo do Documento]
EndScan
Do_It!
ClearAll
M_DIAREF     = Round( ( M_VALORM / VALOR_TOTAL ), 3 )
M_DIAREFI    = Int( M_DIAREF )
M_DIAREFD    = M_DIAREF - M_DIAREFI
If M_DIAREFD > 0.51
   Then M_DIAREFI = M_DIAREFI + 1
EndIf

DTBASE =VSDGDTREF
DTMEDIA=VSDGDTREF+M_DIAREFI
NDIAS  =M_DIAREFI
EndProc  ; (Calcula)



;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI()
DigitaV()
Moveto "Answer"
If RecordStatus("Locked") Then UnLockRecord EndIf         
EndProc


;*******************************************************************************
;* Seleciona Registros para Emissao de Cheque                                  *
;*******************************************************************************
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
  Controla_EdicaoI()
EndWhile
Do_It!
ClearAll
EndProc

;*******************************************************************************
;*Realiza Baixa Automatica Contas a pagar/ Conta Corrente                      *
;*******************************************************************************
Proc BAIXA()
Do_It!
ClearAll

AGUARDE("Aguarde, atualizando contas a receber e Caixa/Banco")

NR = NRecords("Answer")

View   "Duplic"
View   "DupBaixa"
View   "\\Sistemas\\Cadastro\\FichaCli"
View   "\\Sistemas\\CtaCor\\MovCont"
View   "\\Sistemas\\CtaCor\\SaldCont"
CoEdit "Answer"
Scan
   Barra(NR, RecNo())
   Aguarde("Aguarde, processando "+BARRA_STRING)

   NLANC=[Numero do Lancamento]

;* Localiza Titulo ***
   Moveto "Duplic"
   Moveto [Numero do Lancamento]
   Locate NLANC

;* Gera Baixa ***
   For I from 1 to 8
     NITEM=StrVal(I)
     Moveto "DupBaixa"
     Moveto [Numero do Lancamento]
     Locate NLANC,NITEM
     If Not Retval
        Then End Down
             [Numero do Lancamento]=NLANC
             [Sequencia da Baixa  ]=NITEM
             QuitLoop
     EndIf
   EndFor
   [Codigo da Conta     ]=[Answer->Codigo da Conta]
   [Codigo da Empresa   ]=[Answer->Codigo da Empresa]
   [Data do Pagamento   ]=VSDGDTREF
   [Valor do Recebimento]=[Answer->Saldo do Documento]
   [Valor do Desconto   ]=0
   [Valor do Juros      ]=0
   [Tipo da Baixa       ]="NORMAL"

   Switch
     Case ([Answer->Saldo do Documento]<[Duplic->Saldo do Documento]) And [Answer->Tipo]="D":
          [Valor do Desconto]=[Duplic->Saldo do Documento]-[Answer->Saldo do Documento]
     Case [Answer->Saldo do Documento]>[Duplic->Saldo do Documento]:
          [Valor do Juros   ]=[Answer->Saldo do Documento]-[Duplic->Saldo do Documento]
   EndSwitch
   TXCOMIS=((([Valor do Recebimento]+[Valor do Desconto])-[Valor do Juros])*100)/[Duplic->Saldo do Documento]
   [Valor da Comissao]=NDecimal(([Duplic->Saldo da Comissao]*TXCOMIS)/100,2)


   If PARAM_COMISSAO_JUROS_DESCTO="S"
      Then If [Valor do Juros] > 0
              Then TXJUROS=([Valor do Juros]*100)/([Valor do Recebimento]+[Valor do Desconto]-[Valor do Juros])
                   [Valor da Comissao]=[Valor da Comissao]+NDecimal(([Valor da Comissao]*TXJUROS)/100,2)
              Else If [Valor do Desconto]> 0
                      Then TXDESCTO=([Valor do Desconto]*100)/([Valor do Recebimento]+[Valor do Desconto]-[Valor do Juros])
                           [Valor da Comissao]=[Valor da Comissao]-NDecimal(([Valor da Comissao]*TXDESCTO)/100,2)
                   EndIf
           EndIf
   EndIf         

   [Codigo CCusto         ]=[Answer->Codigo CCusto         ]
   [Codigo Plano_Conta    ]=[Answer->Codigo Plano_Conta    ]
   If IsBlank([Codigo Plano_Conta])
      Then If [Data do Pagamento]=[Duplic->Data de Emissao]
              Then If Not IsBlank(PARAM_PLANO_CONTA_AVISTA)
                      Then [Codigo Plano_Conta]=PARAM_PLANO_CONTA_AVISTA
                   EndIf
              Else If Not IsBlank(PARAM_PLANO_CONTA_APRAZO)
                      Then [Codigo Plano_Conta]=PARAM_PLANO_CONTA_APRAZO
                   EndIf
           EndIf
   EndIf
   [Codigo do Historico   ]=""
   [Descricao do Historico]="REC. "+[Answer->Tipo do Documento]+"/"+[Answer->Numero do Documento]

   [Numero_Carregamento   ]=[Answer->Numero_Carregamento_Orig]

   Controle_Dia()
   UnLockRecord

   Moveto "DupBaixa"
   Moveto [Numero do Lancamento]
   Locate NLANC,NITEM

;* Atualiza Titulo ***
   Moveto "Duplic"
   [Saldo do Documento]=Round([Saldo do Documento]-
                        (([DupBaixa->Valor do Recebimento]-
                          [DupBaixa->Valor do Juros      ])+
                          [DupBaixa->Valor do Desconto]),2)
   [Saldo da Comissao ]=Round([Saldo da Comissao ]-
                         [DupBaixa->Valor da Comissao   ],2)
   UnLockRecord

;* Atualiza Conta Corrente ***
   ANOREF=StrVal(Year([\Sistemas\CtaRec\DupBaixa->Data do Pagamento]))
   MESREF=StrVal(Month([\Sistemas\CtaRec\DupBaixa->Data do Pagamento]))
   MESREF=ALINHM(MESREF, 2)

   Moveto "\\Sistemas\\CtaCor\\SaldCont"
   While True
     Moveto [Codigo da Conta]
     Locate [Answer->Codigo da Conta],ANOREF,MESREF
     If Not RetVal
        Then End
             Down
             [Codigo da Conta]=[Answer->Codigo da Conta]
             [Ano Referencia ]=ANOREF
             [Mes Referencia ]=MESREF
             [Saldo Inicial  ]=0
             [Entradas       ]=0
             [Saidas         ]=0
             If IsLockRecord()
                Then Del
             EndIf
        Else If Not IsLockRecord()
                Then QuitLoop
             EndIf
     EndIf
   EndWhile
   [Entradas]=[Entradas]+[\Sistemas\CtaRec\DupBaixa->Valor do Recebimento]
   UnLockRecord

   Moveto "\\Sistemas\\CtaCor\\MovCont"
   While True          
     End
     NLANCMC=[Numero do Lancamento]
     If IsBlank(NLANCMC)
        Then NLANCMC="0"
     EndIf
     Down
     NLANCMC=ALINHM(StrVal(NumVal(NLANCMC)+1),6)
     [Numero do Lancamento  ]=NLANCMC
     [Codigo da Conta       ]=[Answer->Codigo da Conta]
     If Not IsLockRecord()
        Then QuitLoop
        Else Del
     EndIf
   EndWhile
   [Codigo da Empresa     ]=[\Sistemas\CtaRec\DupBaixa->Codigo da Empresa   ]
   [Tipo de Operacao      ]="07"
   [Data                  ]=[\Sistemas\CtaRec\DupBaixa->Data do Pagamento   ]
   [Valor                 ]=[\Sistemas\CtaRec\DupBaixa->Valor do Recebimento]
   [Valor do Desconto     ]=[DupBaixa->Valor do Desconto]
   [Valor do Juros        ]=[DupBaixa->Valor do Juros]
   [Codigo do Documento   ]=[\Sistemas\CtaRec\Duplic->Codigo do Documento]
   [Numero do Documento   ]=[\Sistemas\CtaRec\Duplic->Numero do Documento]
   [Sistema Gerador       ]="CR"
   [Empresa Gerador       ]=[Answer->Codigo da Empresa]
   [Lancamento Gerador    ]=[Answer->Numero do Lancamento]
   [Sequencia Gerador     ]=NITEM
   [Codigo do EmitDest    ]=[Answer->Codigo do Destinatario]
   [Codigo CCusto         ]=[\Sistemas\CtaRec\DupBaixa->Codigo CCusto         ]
   [Codigo Plano_Conta    ]=[\Sistemas\CtaRec\DupBaixa->Codigo Plano_Conta    ]
   [Codigo do Historico   ]=""
   [Descricao do Historico]=[\Sistemas\CtaRec\DupBaixa->Descricao do Historico]
   If [DupBaixa->Data do Pagamento]=[Duplic->Data de Emissao]
      Then [Tipo do Lancamento    ]="I"
      Else [Tipo do Lancamento    ]="J"
   EndIf
   Controle_Dia()
   UnLockRecord

;* Atualiza Baixa com Lancamento do Conta Corrente ***
   Moveto "DupBaixa"
   Moveto [Numero do Lancamento]
   Locate NLANC,NITEM
   [Lancamento Conta Corrente]=NLANCMC

;* Ficha Financeira ***
   NDA=[DupBaixa->Data do Pagamento]-[Duplic->Data de Vencimento]
   If NDA>0
      Then Moveto "\\Sistemas\\Cadastro\\FichaCli"
           Moveto [Codigo]
           Locate [Duplic->Codigo do Destinatario]
           If RetVal
              Then While IsLockRecord() EndWhile
                   [Numero de Atrasos] = [Numero de Atrasos] + 1
                   If [Maior Atraso] < NDA
                      Then [Maior Atraso] = NDA
                           [Data do Maior Atraso ]=[DupBaixa->Data do Pagamento   ]
                           [Valor do Maior Atraso]=[DupBaixa->Valor do Recebimento]
                   EndIf
                   UnLockRecord
           EndIf
   EndIf
   
   Moveto "Answer"
   [Situacao]=NITEM        ;Sequencia da Baixa
EndScan   
Do_It!

ClearAll
LIMPAGUARDE()
MENSAGEM("Baixa/Atualiza‡Æo concluida!")
EndProc

;*******************************************************************************
;*Realiza Baixa Automatica Contas a pagar/ Conta Corrente                      *
;*******************************************************************************
Proc Imprime_Comprovante()
AGUARDE("Aguarde, imprimindo comprovante")
ClearAll

ArqImp="Recibo.txt"
Deleta_Arquivo(Arqimp)
Sleep 700

SCRIPT_BXAUTO=True   ;; Utiliza na impressao do comprovante
ULTIMA_BAIXA =False
clieant="****"

NRB=NRecords("Answer")

View "Duplic"
View "DupBaixa"
CoEdit "Answer"
Scan
   NITEM=[Situacao]        ;Sequencia da Baixa
   If RecNo()=NRB
      Then ULTIMA_BAIXA=True
   EndIf
   NLANC=[Numero do Lancamento]
   Comprov_OK=False

   Moveto "Duplic"
   Moveto [Numero do Lancamento]
   Locate NLANC
   If RetVal
      Then 
           ENDERECO=""
           BAIRRO  =""
           CIDADE  =""
           TELEFONE=""
           
           Moveto [Codigo do Destinatario]
           Ativa_Lookup()
           Moveto [Codigo]
           Locate [Duplic->Codigo do Destinatario]
           If RetVal
              Then ENDERECO = [Endereco ]                
                   BAIRRO   = [Bairro   ]
                   CIDADE   = [Cidade   ]
                   TELEFONE = [Telefone ]
           EndIf
           KeyPress "ESC"
           UnLockRecord
           
           Moveto "DupBaixa"
           Moveto [Numero do Lancamento]
           Locate NLANC,NITEM
           If Retval
              Then If [Data do Pagamento   ]=VSDGDTREF
                      Then Comprov_OK=True
                           Play PARAM_RELAT
                   EndIf
           EndIf
   EndIf
   
   If Not Comprov_OK
      Then Mensagem("Comprovante nÆo emitido, verificar !")
   EndIf

   Moveto "Answer"
EndScan
Do_It!
ClearAll

ImpriArq(ArqImp)
EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
TECLA    =""
MSG_CAMPO=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     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_DESTINAT"      : Campo="TG_CONTA"
            Case Campo="TG_REPRESEN"      : Campo="TG_DESTINAT"
            Case Campo="TG_TPPAGTO"       : Campo="TG_REPRESEN"
            Case Campo="TG_COBRADOR"      : Campo="TG_TPPAGTO"
            Case Campo="TG_NCARREG"       : Campo="TG_COBRADOR" 
            Case Campo="TG_BOLETA"        : Campo="TG_NCARREG"
            Case Campo="TG_TPDATA"        : Campo="TG_NCARREG"
            Case Campo="TG_DTINI"         : Campo="TG_NCARREG"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="TG_DTREF"         : Campo="TG_NCARREG" 
            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"    : Campo="TG_CONTA"
                    Case Campo="TG_CONTA"      : Campo="TG_DESTINAT"
                    Case Campo="TG_DESTINAT"   : Campo="TG_REPRESEN"
                    Case Campo="TG_REPRESEN"   : Campo="TG_TPPAGTO"
                    Case Campo="TG_TPPAGTO"    : Campo="TG_COBRADOR"
                    Case Campo="TG_COBRADOR"   : Campo="TG_NCARREG"
                    Case Campo="TG_NCARREG"    :
                         If Not IsBlank(VSDGNCARREG)
                            Then VSDGBOLETA =""
                                 VSDGTPDATA =""
                                 VSDGDTINI  =BlankDate()
                                 VSDGDTFIM  =BlankDate()
                                 Campo="TG_DTREF"
                            Else Campo="TG_BOLETA"
                         EndIf

                    Case Campo="TG_BOLETA"  :
                         VSDGBOLETA=ControlValue("TG_BOLETA")
                         If Not IsBlank(VSDGBOLETA)
                            Then VSDGTPDATA =""
                                 VSDGDTINI  =BlankDate()
                                 VSDGDTFIM  =BlankDate()
                                 
                                 Campo="TG_DTREF"
                            Else Campo="TG_TPDATA"
                         EndIf

                    Case Campo="TG_TPDATA"     :
                      VSDGTPDATA=ControlValue("TG_TPDATA")
                      If IsBlank(VSDGTPDATA)
                         Then VSDGTPDATA="1"
                      EndIf
                      If VSDGTPDATA="1"
                         Then VSDGNOMTPDATA="EMISSAO"
                         Else VSDGNOMTPDATA="VENCIMENTO"
                      EndIf
                      Campo="TG_DTINI"
                    Case Campo="TG_DTINI"      : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"      : Campo="TG_DTREF"
                    Case Campo="TG_DTREF"      : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_EMPRESA": MSG_CAMPO="Informe uma empresa !"
  Case Campo="TG_TPDATA" : MSG_CAMPO="1 = EMISSAO  2=VENCIMENTO"
  Case Campo="TG_BOLETA" : MSG_CAMPO="Informe o numero da Boleta sem o Digito Verificador"
EndSwitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* Rotina Carrega Parametros                                                   *
;*******************************************************************************
Proc Carrega_Parametros()

If IsEmpty("P_Duplic")
   Then Mensagem("N„o esta Configurado os Parametros para Lan‡amentos e Baixas de Titulos !")
        Return False
EndIf

View "P_Duplic"
Moveto [Codigo_Empresa]
Locate VSDGEMPRESA
If Not RetVal
   Then Mensagem("Parametros n„o Cadastrado para esta Empresa !")
        Return False
EndIf

PARAM_RELAT                    =[Impressao_Recibo        ]
PARAM_UTILIZA_JUROS_DEVIDO     =[Utiliza_Juros_Devido    ]
PARAM_UTILIZA_COMISSAO         =[Utiliza_Comissao        ]
PARAM_UTILIZA_NUM_CARREGAMENTO =[Utiliza_Num_Carregamento]
PARAM_UTILIZA_FORMAS_RECEBER   =[Utiliza_Formas_Receber  ]
PARAM_HISTORICO_DEFAULT        =[Historico_Default       ]
PARAM_PLANO_CONTA_DCC          =[Plano_Conta_DCC         ]
PARAM_PLANO_CONTA_AVISTA       =[Plano_Conta_AVista      ]
PARAM_PLANO_CONTA_APRAZO       =[Plano_Conta_APrazo      ]
PARAM_COMISSAO_JUROS_DESCTO    =[Comissao_Juros_Descto   ]
PARAM_CTA_BAIXA_IGUAL_LANCTO   =[Cta_Baixa_Igual_Lancto  ]
PARAM_CONTA_CAIXA              =[COdigo_Conta_Caixa      ]

Return True
ClearAll

EndProc ; (Carrega_Parametros)

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

VSDGCONTA     =""
VSDGDESTINAT  =""
VSDGREPRESEN  =""
VSDGNCARREG =""
VSDGTPDATA =""
VSDGTPPAGTO=""
VSDGDTINI  =BlankDate()
VSDGDTFIM  =BlankDate()
VSDGDTREF  =Today()
VSDGCOBRADOR  =""
VSDGBOLETA=""

While True
  ShowDialog "Baixa Autom tica p/ Caixa/Banco" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 05,12   Height 17 Width 71

    Label  @ 00,00 "Empresa"  For "TG_EMPRESA"
    Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA" To VSDGEMPRESA
    Accept @ 01,09 Width 23 "A20" Picture "!*!" Tag "TG_NOMEMP" To VSDGNOMEMP
    
    Label  @ 00,33 "Conta"  For "TG_CONTA"
    Accept @ 01,34 Width 07 "A4"  Picture "#*#" Tag "TG_CONTA" To VSDGCONTA
    Accept @ 01,42 Width 25 "A30" Picture "!*!" Tag "TG_NOMCONT" To VSDGNOMCONTA

    Label  @ 02,00 "Cliente"  For "TG_DESTINAT"
    Accept @ 03,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_DESTINAT" To VSDGDESTINAT
    Accept @ 03,09 Width 23 "A20" Picture "!*!" Tag "TG_NOMCLI" To VSDGNOMDEST

    Label  @ 02,33 "Representante"  For "TG_REPRESEN"
    Accept @ 03,34 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_REPRESEN" To VSDGREPRESEN
    Accept @ 03,42 Width 25 "A20" Picture "!*!" Tag "TG_NOMREPR"  To VSDGNOMREPR

    Label  @ 04,00 "Tipo de Pagamento"  For "TG_TPPAGTO"
    Accept @ 05,01 Width 07 "A2"  Picture "!*!" Tag "TG_TPPAGTO"    To VSDGTPPAGTO
    Accept @ 05,09 Width 23 "A20" Picture "!*!" Tag "TG_NOMTPPG"    To VSDGNOMTPPAGTO

    Label  @ 04,33 "Cobrador"  For "TG_COBRADOR"
    Accept @ 05,34 Width 07 "A4"  Picture "#*#" Tag "TG_COBRADOR" To VSDGCOBRADOR
    Accept @ 05,42 Width 23 "A30" Picture "!*!" Tag "TG_NOMCOBRADOR"  To VSDGNOMCOBRADOR

    Label  @ 06,00 "N§ Carregamento" For "TG_NCARREG"
    Accept @ 07,01 Width 09  "A6"  Picture "#*#" Tag "TG_NCARREG"    To VSDGNCARREG
    Accept @ 07,11 Width 21 "A20" Picture "!*!" Tag "TG_NOMNCARREG" To VSDGNOMNCARREG

    Label  @ 06,33 "N£mero da Boleta Banc ria"  For "TG_BOLETA"
    Accept @ 07,34 Width 22 "A20"  Picture "#*#" Tag "TG_BOLETA" To VSDGBOLETA

    Label  @ 08,00 "Op‡„o de Data" For "TG_TPDATA"
    Accept @ 09,01 Width 07 "A1"  Picture "1,2"  Tag "TG_TPDATA"     To VSDGTPDATA
    Accept @ 09,09 Width 23 "A18" Picture "!*!"  Tag "TG_NOMOTPDATA" To VSDGNOMTPDATA

    Label  @ 08,33 "Per¡odo Referente" For "TG_DTINI"
    Label  @ 09,33 "de" For "TG_DTINI"
    Accept @ 09,37 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 09,50 "at‚" For "TG_DTFIM"
    Accept @ 09,55 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    Label  @ 10,00 "Data Pagamento" For "TG_DTREF"
    Accept @ 11,01 Width 15 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTREF" To VSDGDTREF

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

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  If IsBlank(VSDGEMPRESA)
     Then Mensagem("Empresa inv lida !")
          Loop
  EndIf
  If SYS_CONTROLE_DIA="??????"
     Then MSG=    "N„o existe um Controle ativo no momento !// //"
          MSG=MSG+"Verificar situa‡„o de Controles !"
          Mensagem(MSG)
          Loop
  Endif
  
  If IsBlank(VSDGNCARREG) And VSDGDTFIM=BlankDate()
     Then Mensagem("Data Final Invalida !")
          Loop
  EndIf
  If VSDGDTREF=BlankDate()
     Then Mensagem("Data Pagamento Invalida !")
          Loop
  EndIf

  If Not IntervaloData(VSDGDTREF)
     Then Loop
  EndIf

  If Not Carrega_parametros() Then Loop EndIf
  
  AGUARDE("Aguarde, Selecionando registros")
  SELECIONA()

  If IsEmpty("Answer")
     Then MENSAGEM("N„o existem registros a processar")
          Loop
  EndIf

  SELECIONAI()
  Echo Normal
  Echo Off

  ClearAll
  Delete "Answer"

EndWhile
ClearAll
Release Vars All
Release Procs All
