;* EXPDMRC2 ********************************************************************
;*  Exporta‡Ćo de Duplicatas em TXT p/ Sistema Cont bil  ** Macro Contabil     *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 14/12/2018 por Anivel Augusto Rodrigues
;Ultima Alteracao: 02/02/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes titulo               
;Ultima Alteracao: 11/02/2021 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes titulo sistema gerador NE e IX
;Ultima Alteracao: 11/02/2021 por Anivel Augusto Rodrigues
;Motivo Alteracao: Adicionado [Sistema Gerador]="IX" na proc Monta_Dados()

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc Seleciona()
Private i

DOCTO_SEQ=0

Aguarde("Aguarde, selecionando dados")                 

;**** Baixas *****************************************************************        
For i From 1 To 2

  Switch
   Case VSDGOPCAO[1] and i=1:
        {Ask} {\\Sistemas\\Ctapag\\Titulos}         
        Moveto [Numero do Lancamento  ] Check TypeIn "_NLanc"
        Moveto [Codigo da Empresa     ] Check TypeIn "~VSDGEMPRESA.."
        Moveto [Tipo do Documento     ] Check
        Moveto [Numero do Documento   ] Check
        Moveto [Codigo do Documento   ] Check

        Moveto [Data de Emissao       ] Check
        Moveto [Data de Vencimento    ] Check
        Moveto [Valor do Documento    ] Check

        Moveto [Codigo do Emitente    ] Check typein "as Codigo da Pessoa"
        Moveto [Lancamento Gerador    ] Check
        Moveto [Sequencia Gerador     ] Check  
        Moveto [Sistema Gerador       ] Check TypeIn "NE or IX"                              ;<<<< Apenas registros c/ Notas de Entrada 

        {Ask} {\\Sistemas\\Ctapag\\Titbaixa}            
        Moveto [Numero do Lancamento  ] Check TypeIn "_NLanc"
        Moveto [Tipo de Operacao      ] Check
        Moveto [Valor do Pagamento    ] Check 
        Moveto [Numero do Cheque      ] Check

        Moveto [Sequencia da Baixa       ] Check
        Moveto [Data do Pagamento        ] Check TypeIn ">=~VSDGDTINI ,<=~VSDGDTFIM"
        Moveto [Codigo da Conta          ] Check
        Moveto [Valor do Juros           ] Check
        Moveto [Valor do Desconto        ] Check
        Moveto [Lancamento Conta Corrente] Check
        Moveto [Tipo da Baixa            ] Check
        Do_It!
        ClearAll 
        
        If IsEmpty("Answer") Then Loop EndIf
        Sort "Answer" On "Lancamento Gerador","Tipo do Documento","Numero do Documento"
        ClearAll
        
        ;---- Baixas do Contas a Pagar ---------------------------------
        NR=NRecords("Answer")
        View_Tabelas("AP")
        Coedit "Answer"
        Scan
          Barra(NR, RecNo())
          Aguarde("Aguarde, selecionando baixas do contas a pagar "+BARRA_STRING)

          if [valor do pagamento]>0 then Monta_Dados("AP") endif

          Moveto "Answer"
        EndScan
        Do_it!
        ClearAll
        
   Case VSDGOPCAO[2] and i=2:
        {Ask} {\\Sistemas\\Ctarec\\Duplic}
        Moveto [Numero do Lancamento  ] Check TypeIn "_NLanc"
        Moveto [Codigo da Empresa     ] Check TypeIn "~VSDGEMPRESA.."
        Moveto [Tipo do Documento     ] Check
        Moveto [Numero do Documento   ] Check
        Moveto [Codigo do Documento   ] Check
        
        Moveto [Data de Emissao       ] Check
        Moveto [Data de Vencimento    ] Check
        Moveto [Valor do Documento    ] Check

        Moveto [Codigo do Destinatario] Check typein "as Codigo da Pessoa"
        Moveto [Tipo Docto Gerador    ] Check 
        Moveto [Numero Docto Gerador  ] Check TypeIn "as Lancamento Gerador"
        Moveto [Sequencia Gerador     ] Check  
        Moveto [Sistema Gerador       ] Check TypeIn "Not Blank, Not MA"               ;<<<< Registros n„o manuais e diferente de branco
        Moveto [Tipo do Lancamento    ] Check
        
        {Ask} {\\Sistemas\\Ctarec\\Dupbaixa}
        Moveto [Numero do Lancamento  ] Check TypeIn "_NLanc"
        Moveto [Valor do Recebimento  ] Check TypeIn "as Valor do Pagamento"
        Moveto [Sequencia da Baixa       ] Check
        Moveto [Data do Pagamento        ] Check TypeIn ">=~VSDGDTINI ,<=~VSDGDTFIM"
        Moveto [Codigo da Conta          ] Check
        Moveto [Valor do Juros           ] Check
        Moveto [Valor do Desconto        ] Check
        Moveto [Lancamento Conta Corrente] Check
        Moveto [Tipo da Baixa            ] Check
        Do_It!
        ClearAll 
        
        If IsEmpty("Answer") Then Loop EndIf
        Sort "Answer" On "Lancamento Gerador","Tipo do Documento","Numero do Documento"
        ClearAll
        
        ;---- Baixas do Contas a Receber -------------------------------
        NR=NRecords("Answer")
        View_Tabelas("AR")
        Coedit "Answer"
        Scan
          Barra(NR, RecNo())
          Aguarde("Aguarde, selecionando baixas do contas a receber "+BARRA_STRING)
          if [valor do pagamento]>0 then Monta_Dados("AR") endif

          Moveto "Answer"
        EndScan
        Do_it!
        ClearAll            

  EndSwitch   
Endfor          

EndProc ;Seleciona()

;*******************************************************************************
;* Rotina p/ Inserir Registros                                                 *
;*******************************************************************************
Proc View_Tabelas(PARAM)
Private PARAM    

View "\\Sistemas\\Ctacor\\Conta"
View "\\Sistemas\\Cadastro\\Destinat"
switch
  case PARAM = "AP":
    View "\\Sistemas\\Estoque\\Notaec"
    View "\\Sistemas\\Ctapag\\Titulos"
    View "\\Sistemas\\Exporta\\Mrkcbx"
    
  case PARAM = "AR":
    View "\\Sistemas\\Vendas\\NotaC"
    View "\\Sistemas\\Ctarec\\Duplic"
    View "\\Sistemas\\Exporta\\Mrkcbx"

  case PARAM = "TD":
    View "\\Sistemas\\Vendas\\NotaC"
    View "\\Sistemas\\Ctarec\\Duplic"
    View "\\Sistemas\\Exporta\\Mrkcbx"

endswitch

EndProc ;View_Tabelas()

;*******************************************************************************
;* Rotina p/ Inserir Registros                                                 *
;*******************************************************************************
Proc Monta_Dados(PARAM)
Private PARAM                

DOCTO_TPREG          = PARAM                 

DOCTO_CODDOC         = ""
DOCTO_TIPDOC         = ""
DOCTO_MODEL          = ""

DOCTO_SERIE          = ""                    
DOCTO_SUBSERIE       = ""                   
DOCTO_NUMERO         = ""                   
DOCTO_CGC            = ""                    

DOCTO_PAGTO          = blankdate()                    
DOCTO_VRPAGTO        = BlankNum()                
DOCTO_JUROS          = BlankNum()                
DOCTO_VRMUL          = BlankNum()                
DOCTO_DESCTO         = BlankNum()                

;---- Dados do Documento -------------------------------------------------------
DOCTO_EMPRESA   = [Codigo da Empresa  ]
DOCTO_LANCTOGER = [Lancamento Gerador ]
DOCTO_NUMDUP    = [Numero do Documento]
DOCTO_PARCELA   = StrVal([Sequencia Gerador  ])
DOCTO_VENCTO    = [Data de Vencimento ]
DOCTO_CODCLI    = [Codigo da Pessoa   ]

GetRecord "\\Sistemas\\Cadastro\\Destinat" DOCTO_CODCLI To REG_CLIENTE
If RetVal                                                                             
  Then DOCTO_CGC      =REG_CLIENTE["CGC"           ]
EndIf   
Release Vars REG_CLIENTE

;---- Contas a Pagar e Nota de Entrada ------------
If (DOCTO_TPREG = "AP") And ([Sistema Gerador]="NE" Or [Sistema Gerador]="IX") 
   Then 
        old_dtemis=[Data de Emissao]
        
        Dir_Trab=""
        For wi From 1 to 3
          If IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEC")
             Then GetRecord "\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEC" DOCTO_LANCTOGER To REG_NOTA 
                  If RetVal
                     Then
                          DOCTO_CODDOC  = REG_NOTA["Codigo do Documento"  ]
                          DOCTO_TIPDOC  = REG_NOTA["Tipo do Documento"    ]
                          DOCTO_SERIE   = REG_NOTA["Serie do Documento"   ]
                          DOCTO_SUBSERIE= REG_NOTA["SubSerie do Documento"]
                          DOCTO_NUMERO  = REG_NOTA["Numero do Documento"  ]
                          QuitLoop
                  EndIf
          EndIf   
          Switch
            Case wi = 1 : [Data de Emissao]=Primeiro_Dia_Data([Data de Emissao])-1
            Case wi = 2 : [Data de Emissao]=Ultimo_Dia_Data([Data de Emissao])+1
          EndSwitch
          Dir_Trab="FechaMes\\"+AlinhM(StrVal(Year([Data de Emissao])),4)+"_"+AlinhM(StrVal(Month([Data de Emissao])),2)+"\\" 
        EndFor  
        [Data de Emissao]=old_dtemis
EnDIf       

;---- Contas a Receber e Nota de Saida ------------        
If (DOCTO_TPREG = "AR") And [Sistema Gerador]<>"MA"  
   Then
        Dir_Trab=""
        For wi From 1 to 2
          If IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC")
             Then 
                  DOCTO_CODDOC = [Tipo Docto Gerador  ]
                  DOCTO_NUMERO = [Lancamento Gerador  ]
                  
                  GetRecord "\\Sistemas\\Cadastro\\Tpdoctos" DOCTO_CODDOC To REG_DOCTO                              
                  If RetVal
                     Then DOCTO_MODEL = REG_DOCTO["Modelo do Documento"]
                          DOCTO_SERIE = REG_DOCTO["Serie do Documento" ]
                  EndIf
                  Release Vars REG_DOCTO        
             
                  GetRecord "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC" DOCTO_EMPRESA,DOCTO_NUMERO,DOCTO_SERIE To REG_NOTA 
                  If RetVal
                     Then 
                          DOCTO_TIPDOC    = REG_NOTA["Tipo do Documento"  ]
                          DOCTO_SERIE     = REG_NOTA["Serie do Documento" ]
                          DOCTO_NUMERO    = REG_NOTA["Numero do Documento"]
                          QuitLoop
                  EndIf
          EndIf
          Dir_Trab="FechaMes\\"+AlinhM(StrVal(Year([Data de Emissao])),4)+"_"+AlinhM(StrVal(Month([Data de Emissao])),2)+"\\"
        EndFor  
EndIf          

DOCTO_JUROS  = [Valor do Juros    ]
DOCTO_DESCTO = [Valor do Desconto ]

;---- Dados da Baixa -----------------------------------------------------------
DOCTO_PAGTO  = [Data do Pagamento    ]
DOCTO_VRPAGTO= [Valor do Pagamento   ]
DOCTO_VALOR  =([Valor do Pagamento   ]-[Valor do Juros])+[Valor do Desconto]

;---- Dados da Conta -----------------------------------------------------------  
DOCTO_CONTA ="CONTA?"
GetRecord "\\Sistemas\\Ctacor\\Conta" [Codigo da Conta] To REG_CONTA
If RetVal
   then DOCTO_CONTA =REG_CONTA["Conta Contabil"]
EndIf

;---- Gravar tabela ------------------------------------------------------------  

if DOCTO_NUMERO=""
   then return
endif   

GravaRegistro()

EndProc ;Monta_Dados()

;*******************************************************************************
;* Rotina para gravar registro                                                 *
;*******************************************************************************
Proc GravaRegistro()

Moveto "Mrkcbx"
End Down                                                                        
[Tipo                     ]=DOCTO_TPREG  

[CNPJ                     ]=DOCTO_CGC
[NumeroNotaFiscal         ]=DOCTO_NUMERO
[Parcela                  ]=DOCTO_PARCELA
[Valor                    ]=DOCTO_VRPAGTO
[DataDePagamento          ]=DOCTO_PAGTO
[Desconto                 ]=DOCTO_DESCTO
[Acrescimo                ]=DOCTO_JUROS
[ValorLiquido             ]=DOCTO_VALOR
[ContaReduzidaCreditada   ]=DOCTO_CONTA
UnLockRecord
    

Moveto "Answer"

EndProc

;*******************************************************************************
;* Rotina de Controle do ShowDialog                                            *
;*******************************************************************************
Proc Gera_Txt(tipo)
Private nr, s

LimpaRodape(0)
ExibeRodape(1,"Aguarde, gerando arquivo TXT")

ARQIMP  = PrivDir()+ARQUIVO
If IsFile(ARQIMP)
   Then Deleta_Arquivo(ARQIMP)
        Sleep 1000
EndIf

s=""
switch
  case tipo="P" : s="PGTOFOR"
  case tipo="R" : s="PGTOCLI"
endswitch

s=s+DMS_CGC_EMPRESA+"\n"
FileWrite        ARQIMP from s

NR = NRecords("Mrkcbx")
View "Mrkcbx" 
Scan          
  Barra(NR, RecNo())
  switch
    case tipo="P" and [Tipo       ]="AP" : Aguarde("Aguarde, Pagamentos "  +BARRA_STRING)

    case tipo="R" and [Tipo       ]="AR" : Aguarde("Aguarde, Recebimentos "+BARRA_STRING)

    otherwise                            : loop

  endswitch

  ;-- Baixa de Titulo ------------------------------------------------------
  s=""
  s=AlinhM(Tira_CharNum([CNPJ        ]),14)+
       AlinhM([NumeroNotaFiscal      ] ,8)+
       AlinhM([Parcela               ] ,2)+
    Valor_Str([Valor                 ])+
     Data_Str([DataDePagamento       ])+
    Valor_Str([Desconto              ])+
    Valor_Str([Acrescimo             ])+
    Valor_Str([ValorLiquido          ])+
       AlinhM([ContaReduzidaCreditada],9)+"\n"
      
  FileWrite append ARQIMP from s

EndScan
ClearAll


GetRecord "\\Sistemas\\Cadastro\\Empresas" VSDGEMPRESA To REG_EMP
if tipo="P"
   then 
        ARQIMPP = VSDGDRIVE+PASTA+"\\MC_FOR_"+  
                  AlinhM(StrVal(Month(VSDGDTFIM)),2)+
                  StrVal( Year(VSDGDTFIM))+"_"+
                  Tira_CharNum(reg_emp["CGC Empresa"])+".TXT"
                  
        Copia_Arquivo(ARQIMP+" "+ARQIMPP)
        Sleep 1000
endif

if tipo="R"
   then 
        ARQIMPR = VSDGDRIVE+PASTA+"\\MC_CLI_"+  
                  AlinhM(StrVal(Month(VSDGDTFIM)),2)+
                  StrVal( Year(VSDGDTFIM))+"_"+
                  Tira_CharNum(reg_emp["CGC Empresa"])+".TXT"
                  
        Copia_Arquivo(ARQIMP+" "+ARQIMPR)
        Sleep 1000
endif

LimpaRodape(0)

EndProc ;Gera_Txt()

;********************************************************************************
;* CONVERTE VALOR PARA STRING                                                  *
;********************************************************************************
Proc Valor_Str(Valor)
Private VrTit,Valor

If IsBlank(Valor)
  Then Valor=0
  else
       If E_Numerico(Valor)
          then Valor=numval(Valor)
       endif    
EndIf

VrTit=alinhm(strval(int(Valor*100)),13)

Return VrTit
EndProc  ; (Valor_Str)

;********************************************************************************
;* CONVERTE DATA PARA STRING                                                    *
;********************************************************************************
Proc Data_Str(Data)
Private DtTit,Data 

If IsBlank(Data)
  Then DtTit="00000000"
  Else DtTit=AlinhM(StrVal(  Day(Data)),2)+
             AlinhM(StrVal(Month(Data)),2)+
             AlinhM(StrVal( Year(Data)),4)
EndIf  

Return DtTit
EndProc  ; (Data_Str)

;*******************************************************************************
;* Rotina de Controle do ShowDialog                                            *
;*******************************************************************************
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_DTINI"         : Campo="TG_EMPRESA"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="TG_OPCOES1"       : Campo="TG_DTFIM"
            Case Campo="TG_OPCOES2"       : Campo="TG_OPCOES1"
            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_DTINI"
                         If IsBlank(VSDGEMPRESA)
                            Then Campo="TG_EMPRESA"
                                 VSDGNOMEMP=""
                         EndIf   
                    Case Campo="TG_DTINI"      : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"      : Campo="TG_OPCOES1"
                    Case Campo="TG_OPCOES1"    : Campo="TG_OPCOES2"
                    Case Campo="TG_OPCOES2"    : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf

Switch
  Case Campo="TG_OPCOES1" Or Campo="TG_OPCOES2" : 
       MSG_CAMPO="Selecione uma ou mais op‡oes se desejar !"
       TECLA    ="=Mover  Barra de espa‡o=Marca/Desmarca  "
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc ;SD_Dialog()

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"
LimpAguarde()

sys_valor()

VSDGEMPRESA  =""
VSDGDTINI    =BlankDate()
VSDGDTFIM    =BlankDate()

ARQUIVO   = "MRKC_2.Txt"
VSDGDRIVE = SubStr(Directory(),1,2)
PASTA     = "\\Sistemas\\Exporta\\MAKROCT"
If DirExists(PASTA)=0
   Then Cria_Pasta(PASTA)
        Sleep 2000
EndIf

Array VSDGOPCAO[2]
VSDGOPCAO[1] = True 
VSDGOPCAO[2] = True

While True
  ShowDialog "Exporta‡„o de Baixa de Duplicatas - Macro Cont bil 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 "Perˇodo Referente de" For "TG_DTINI"
    Accept @ 03,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 03,16 "at‚" For "TG_DTFIM"
    Accept @ 03,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    Label  @ 05,00 "Op‡oes de Movimentos " For "TG_OPCOES1"
    CheckBoxes @06,00 Height 1 Width 33 Tag "TG_OPCOES1"
    "Baixa Duplicatas a Pagar   " to VSDGOPCAO[1]
    CheckBoxes @07,00 Height 1 Width 33 Tag "TG_OPCOES2"
    "Baixa Duplicatas a Receber " to VSDGOPCAO[2]
    
    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 IsBlank(VSDGEMPRESA)
     Then Mensagem("Informe a Empresa!")
          Loop
  EndIf   
  
  If Not VSDGOPCAO[1] And Not VSDGOPCAO[2]
     Then Mensagem("N„o h  nenhuma op‡„o marcada para continuar o processo!")
          Loop
  EndIf
  
  AGUARDE("Aguarde, selecionando os registros")
  
  Empty "Mrkcbx"

  getrecord "\\sistemas\\cadastro\\empresas" VSDGEMPRESA to regempresas
  if retval
     then DMS_CODIGO_EMPRESA  =alinhm(regempresas["Conta Contabil Empresa"],07)
          DMS_CGC_EMPRESA     =alinhm(Tira_CharNum(regempresas["CGC Empresa"]),14)
  endif   
  Release Vars REG_FOR, REG_CLIE, regempresas
    
  Seleciona()
  If IsEmpty("\\Sistemas\\Exporta\\Mrkcbx")
     Then MENSAGEM("N„o existem registros a processar")
          Loop
  EndIf
  
  ARQIMPP=""
  ARQIMPR=""
  if VSDGOPCAO[1]=true
     then Gera_Txt("P")
  endif
  if VSDGOPCAO[2]=true
     then Gera_Txt("R")
  endif
    
  If Not IsFile(ARQIMP)
     Then Mensagem("Arquivo n„o foi gerado !")
     Else Mensagem("Arquivo(s) Gerado(s) !// //"+ARQIMPR+"// //"+ARQIMPP)
  EndIf
     
EndWhile
ClearAll
Release Vars All
Release Procs All
