;** GERATIT ********************************************************************
;*  Geracao de Titulos Automatica p/ Contas a Pagar                            *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 15/10/2014 por Andrey Fillipe
;Ultima Alteracao: 30/05/2016 por Bruno Carvalho 
;Motivo Alteracao: Adaptado processo para gera‡Æo do [Numero do Lancamento] "Interno"    
;Ultima Alteracao: 26/10/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: 02/03/2017 por Bruno Carvalho
;Motivo Alteracao: Grava_Titulo() -> Adicionado UnLockRecord ao finalizar registros na tabela "Rfacc"
;Ultima Alteracao: 18/07/2017 por Bruno Carvalho
;Motivo Alteracao: Grava_Titulo() -> Ajustes com o GETRECORD ao verificar a pessoa, conta e plano de conta *Saindo do Sistema  
;Ultima Alteracao: 14/03/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Numero_Lancamento("Interno","Locked_Down")

;*******************************************************************************
;* Rotina p/ Selecionar e Ordenar Registros                                    *
;*******************************************************************************
Proc SELECIONA()
ClearAll

{Ask} {Rfacc} Check
Moveto [Codigo da Empresa        ] TypeIn "~VSDGEMPRESA.."
Moveto [Codigo                   ] TypeIn "Not Blank, ~VSDGDESTINAT.."
Moveto [Data_Producao            ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
Moveto [Acerto_Realizado         ] TypeIn "Not S"
Moveto [Numero Lancamento Titulos] TypeIn "Blank"
Moveto [Destino_Producao         ] TypeIn "Not INTERNO"
Moveto [Valor Total              ] TypeIn ">0"
Do_It!
ClearAll

If Not IsEmpty("Answer")
   Then CopyForm "\\Base\\Sistemas\\Faccao\\RFacc" "4" "Answer" "F"
EndIf

EndProc

;*******************************************************************************
;* Seleciona Titulos                                                           *
;*******************************************************************************
Proc CHAVE()

While True
  CHAVE=1
  End
  Down
  Moveto [Numero_Producao]

  SetaCorRegistro("Editar") 
  While True

  TECLA=" F3=Retornar  F4=Imprimir  F8=Atualizar  "
  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",
           "F8 ~A~tualizar       " : " Atualizar gera‡Æo 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="F3" And Field()="Numero_Producao" :
         CHAVE=9
         Return
    Case RetVal="F4" And Field()="Numero_Producao" :
         Del
         CHAVE=4
         Return
    Case RetVal="F8":           
         Del                       
         CHAVE=8
         Return
    Case (RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME") And Field()="Numero_Producao":
         While True
           CHAVE=1
           PAGINA("Answer","MR")
           If EXCLUIR="S"
              Then CONFIRMA()
                   If OK="S"
                      Then DEL
                      Else UnLockRecord
                   EndIf
              Else QuitLoop
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ESC":
         Mensagem("Para finalizar utilize a tecla F3!") 
    EndSwitch
  EndWhile
  If CHAVE=0 Or CHAVE=9
     Then QuitLoop
  EndIf
EndWhile
EndProc

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

DISPOSITIVO()
If OK<>""
	 Then Tabela=Cria_Temp(PrivDir())
        Copy "\\Base\\Sistemas\\Faccao\\RFacc" Tabela 
        Empty Tabela
        Add "Answer" Tabela
           
        AGUARDE("Aguarde, Imprimindo")
				IMPRIREL(Tabela,"R")
        
        Delete Tabela
EndIf

LIMPAGUARDE()
EndProc

;*******************************************************************************
;* Rotina - Gerar Titulos no Contas a Pagar                                    *
;*******************************************************************************
Proc Gera_Titulo()

AGUARDE("Aguarde, atualizando contas a pagar")

NR = NRecords("Answer")
CODEMIT="***"

GetRecord "\\Sistemas\\CtaCor\\Conta" VSDGCONTA To REG_CONTA
If Not RetVal
   Then Mensagem("Conta "+VSDGCONTA+" n„o cadastrada!")
        VSDGCONTA = ""
EndIf

PLCONTA_COD = ""
PLCONTA_DES = ""

View "\\Sistemas\\CtaCor\\PlContas"
View "\\Sistemas\\CtaCor\\Conta"
View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\CtaPag\\Titulos"
View "Rfacc"
CoEdit "Answer"
Scan
   Barra(NR, RecNo())
   Aguarde("Aguarde, processando "+BARRA_STRING)

   If [Codigo]<>CODEMIT 
     Then GetRecord "\\Sistemas\\Cadastro\\Destinat" [Codigo] To REG_PESSOA
          If Not RetVal
             Then Mensagem("Cliente "+[Codigo]+" n„o localizado no cadastro!")
                  CODEMIT = ""
             Else PLCONTA_COD = Ltrim(Rtrim(REG_PESSOA["Codigo Plano_Conta"]))
                  PLCONTA_DES = Ltrim(Rtrim(REG_PESSOA["Descricao Plano_Conta"]))
                  If PLCONTA_COD="" Then PLCONTA_DES="" EndIf 
                  If PLCONTA_COD<>"" 
                     Then GetRecord "\\Sistemas\\CtaCor\\PlContas" PLCONTA_COD To REG_PLCONTA
                          If RetVal
                             Then PLCONTA_COD = REG_PLCONTA["Codigo Plano_Conta"]
                                  PLCONTA_DES = REG_PLCONTA["Descricao Plano_Conta"]
                             Else Mensagem("Plano de Conta "+PLCONTA_COD+" n„o localizado!")
                                  PLCONTA_COD = ""
                                  PLCONTA_DES = ""
                          EndIf
                  EndIf    
          EndIf  
          If CODEMIT<>"***"
             Then Grava_Titulo()
          EndIf
          CODEMIT = [Codigo]
          VRTOT   = 0
          OBS     = ""
          OBS2    = ""
   EndIf
      
   VRTOT = VRTOT + [Valor Total]
   If OBS = ""
      Then OBS  = "PROGRAMACOES: "+[Numero_Programacao]
           OBS2 = [Numero_Producao]
      Else If SearchFrom([Numero_Programacao],OBS,1)=0
              Then OBS  = OBS+"/"+[Numero_Programacao]
           EndIf
           OBS2 = OBS2+"/"+[Numero_Producao]
   EndIf   
EndScan   
Grava_Titulo()
Do_It!
ClearAll

LIMPAGUARDE()
MENSAGEM("Titulo(s) gerado com sucesso!")
EndProc

;*******************************************************************************
;* Rotina - Grava Dados Titulos                                                *
;*******************************************************************************
Proc Grava_Titulo()

Moveto "\\Sistemas\\CtaPag\\Titulos"
While True
  End
  Moveto [Numero do Lancamento]
  If Numero_Lancamento("Interno","Locked_Down")
     Then SEQ = PROXLANCTO_NLANC
          Release Vars PROXLANCTO_NLANC
          quitloop
  EndIf    
EndWhile

;While True
;  End
;  Moveto [Numero do Lancamento]
;  If Numero_Lancamento("Interno","")
;     Then SEQ = PROXLANCTO_NLANC
;          Release Vars PROXLANCTO_NLANC
;  EndIf
;  Down
;  [Numero do Lancamento ]=SEQ
;  If Not IsLockRecord()
;     Then QuitLoop
;     Else Del
;  EndIf
;EndWhile
;[Numero do Lancamento ] = SEQ

[Codigo da Empresa    ] = VSDGEMPRESA
[Codigo do Documento  ] = "REC"
[Numero do Documento  ] = SEQ
[Codigo do Emitente   ] = CODEMIT
[Tipo do Lancamento   ] = "C" 
[Data de Emissao      ] = Today()
[Data Competencia     ] = Today()
[Data de Vencimento   ] = VSDGDTREF
[Data a Pagar         ] = VSDGDTREF
[Valor do Documento   ] = VRTOT
[Saldo do Documento   ] = VRTOT
[NDias Taxa de Juros  ] = 0
[Tipo do Pagamento    ] = "DN"
[Codigo da Conta      ] = VSDGCONTA
[Observacoes          ] = OBS
[Sistema Gerador      ] = "FA"
[Lancamento Gerador   ] = SEQ
[Documento Referente  ] = "FACCAO/"+SEQ  
[Codigo Plano_Conta   ] = PLCONTA_COD
[Descricao Plano_Conta] = PLCONTA_DES
Controle_Dia()
UnLockRecord

Moveto "Rfacc"
While Not IsBlank(OBS2)
  pos =SearchFrom("/",OBS2,1)
  If pos=0 
     Then pos=len(OBS2)+1 
  EndIf
  TIT = SubStr(OBS2,1,pos-1)
  OBS2=SubStr(OBS2,pos+1,len(OBS2)-pos)
  Moveto [Numero_Producao]
  Locate TIT
  If RetVal
     Then [Numero Lancamento Titulos] = SEQ
          [Acerto_Realizado         ] = "S"
          [Data de Vencimento       ] = VSDGDTREF
  EndIf
  UnLockRecord
EndWhile

Moveto "Answer"

EndProc

;*******************************************************************************
;* Rotina - Selecionar Data de Vencimento                                      *
;*******************************************************************************
Proc Dados_Titulo()

MODO="Atualizar"
VSDGCONTA    = ""
VSDGNOMCONTA = ""
VSDGDTREF = BlankDate()
Echo Normal
Echo Off
Do_It!                        
ClearAll

While True
  Showdialog "Data de Vencimento do Titulo" Proc "SD_Dialog"
    Trigger "OPEN","ARRIVE"
    Key "TAB","ReverseTab","ENTER","ESC","ClearArea", -59
    @ 09,19 height 9 width 40

    Label  @ 00,00 "Conta"  For "TG_CONTA"
    Accept @ 01,01 Width 07 "A4"  Picture "#*#" Tag "TG_CONTA"    To VSDGCONTA
    Accept @ 01,09 Width 23 "A20" Picture "!*!" Tag "TG_NOMCONTA" To VSDGNOMCONTA

    Label  @ 02,00 "Data Vencimento" For "TG_DTREF"
    Accept @ 03,01  Width 14 "D" picture "#[#].##.##[##]" Tag "TG_DTREF" to VSDGDTREF
                
    Pushbutton @ 05,08 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 05,19 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue                        
  EndDialog

  If Retval
     Then If VSDGDTREF=BlankDate()
             Then Mensagem("Data de Vencimento Invalida !")
                  Loop
          EndIf 
          If Not IntervaloData(VSDGDTREF)
             Then Loop
          EndIf
  EndIf   
  QuitLoop
EndWhile
MODO=""
Mouse Show

Return Retval

EndProc ;Dados_Titulo()

;*******************************************************************************
;* 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" Or 
                 Campo="TG_CONTA"          : Campo="NO"
            Case Campo="TG_DTREF"          : Campo="TG_CONTA"
            Case Campo="TG_DESTINAT"       : Campo="TG_EMPRESA"
            Case Campo="TG_DTINI"          : Campo="TG_DESTINAT"
            Case Campo="TG_DTFIM"          : Campo="TG_DTINI"
            Case Campo="YES" Or Campo="NO" : 
                 If MODO="Atualizar"
                    Then Campo="TG_CONTA"
                    Else Campo="TG_EMPRESA"
                 EndIf   
          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 Not IsBlank(VSDGEMPRESA)
                            Then Campo="TG_DESTINAT"
                            Else VSDGEMPRESA = ""
                                 VSDGNOMEMP  = ""
                                 MENSAGEM("Informe a Empresa")
                         EndIf
                    Case Campo="TG_DESTINAT"     : Campo="TG_DTINI"
                    Case Campo="TG_DTINI"        : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"        : Campo="YES"
                    Case Campo="TG_CONTA"        : 
                         If Not IsBlank(VSDGCONTA)
                            Then Campo="TG_DTREF"
                         EndIf   
                    Case Campo="TG_DTREF"        :
                         If VSDGDTREF<Today() 
                            Then MENSAGEM("Data de Vencimento tem que ser maior que a data atual !")
                            Else Campo="YES"
                         EndIf
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf     
                                                
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* Rotina - Editar Dados                                                       *
;*******************************************************************************
Proc Editar()
Sort "Answer" On "Codigo", "Numero_Producao", "Destino_Producao"

While True
 
  CoEdit "Answer"
  PickForm "F"
  Moveto [Numero_Producao]
  
  While True
    CHAVE()
    If CHAVE=9 Or CHAVE=4 Or CHAVE=8
       Then QuitLoop
    EndIf
  EndWhile
  Do_It!
  ClearAll
  
  If CHAVE= 9 
     Then QuitLoop 
  EndIf
  If CHAVE=8     
     Then If Dados_Titulo()
             Then Gera_Titulo()
                  QuitLoop
          EndIf
  EndIf
  If CHAVE=4 
     Then Imprime()
  EndIf        

EndWhile

EndProc ; Editar()

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

If IsEmpty("P_Fac")
   Then Mensagem("N„o esta Configurado os Parametros para Digita‡„o !")
        Return False
EndIf

GetRecord "\\Sistemas\\Faccao\\P_Fac" VSDGEMPRESA To PARAM
If Not RetVal
   Then Mensagem("Parametros n„o Cadastrado para esta Empresa !")
        Return False
EndIf

PARAM_EMPRESA         = PARAM["Codigo_Empresa"          ]
PARAM_EXPLODE_MP_PFAC = PARAM["Explosao_MatPrim_ProdFac"]
PARAM_COR_TECIDO      = PARAM["Cor_Tecido"              ]
PARAM_RELATORIO       = PARAM["Script_Impressao_ProdFac"]
PARAM_RELATSALDO      = PARAM["Script_Impressao_SaldFac"]
PARAM_ATUA_CAPG       = PARAM["Atualiza_Contas_Pagar"   ]
PARAM_CONTA_CAIXA     = PARAM["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

MODO         = ""
VSDGDESTINAT = ""
VSDGNOMDEST  = ""
VSDGDTINI    = BlankDate()
VSDGDTFIM    = BlankDate()

While True
  ShowDialog "Acerto Programa‡„o/Produ‡„o II" 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 13 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_NOMEMP" To VSDGNOMEMP
    
    Label  @ 02,00 "Pessoa"  For "TG_DESTINAT"
    Accept @ 03,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_DESTINAT" To VSDGDESTINAT
    Accept @ 03,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMCLI" To VSDGNOMDEST

    Label  @ 04,00 "Per¡odo Referente de" For "TG_DTINI"
    Accept @ 05,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 05,16 "at‚" For "TG_DTFIM"
    Accept @ 05,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM
    
    @ 07,01 ?? "**Op‡„o para gerar t¡tulos no contas a pagar**"

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

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  If Not Carrega_Parametros()
     Then Loop
     Else If PARAM_ATUA_CAPG <> "A"
             Then MENSAGEM("Parametros n„o cadastrado para esta rotina !")
                  Loop
          EndIf        
  EndIf   

  If VSDGDTFIM=BlankDate()
     Then MENSAGEM("Data Final Invalida !")
          Loop
  EndIf

  AGUARDE("Aguarde, Selecionando registros")
  SELECIONA()

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

  ClearAll
  Delete "Answer"

EndWhile
ClearAll
Release Vars All
Release Procs All
