;** ExpCaixa *******************************************************************
;*  Exportacao das Vendas a Vista p/ o Caixa                                   *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 05/12/1995 por Anivel Augusto Rodrigues
;Ultima Alteracao: 07/08/2006 por Nikolas M. Mateus
;Motivo Alteracao: Ajustes Posto Marreco
;Ultima Alteracao: 09/10/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Troca
;Ultima Alteracao: 09/10/2007 por Davi Carrano
;Motivo Alteracao: Ajustes Troca
;Ultima Alteracao: 03/12/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CONDICAOL
;Ultima Alteracao: 18/01/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes para CODIGOC
;Ultima Alteracao: 19/03/2012 por Karina Andrade
;Motivo Alteracao: Adcionado Controle_Dia() para Grava()
;Ultima Alteracao: 12/04/2012 por Nikolas
;Motivo Alteracao: Liberado exportacao para conta de empresa diferente
;Ultima Alteracao: 14/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Conta de empresa diferente
;Ultima Alteracao: 08/11/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Lockrecord Movcont/SaldCont
;Ultima Alteracao: 22/04/2013 por Karina Andrade
;Motivo Alteracao: InclusÆo vencimentos com entrada
;Ultima Alteracao: 09/04/2013 por Karina Andrade
;Motivo Alteracao: Ajustes vencimentos com entrada, retirado CD e CT
;Ultima Alteracao: 18/06/2013 por Bruno Carvalho
;Motivo Alteracao: Incluido FAZ_ROTINA
;Ultima Alteracao: 29/10/2014 por Luis Gustavo
;Motivo Alteracao: Ajuste na Proc GeraMov(), pra nao pegar forma de pagamento CT e CD
;Ultima Alteracao: 18/12/2014 por Kamila Gomes
;Motivo Alteracao: Ajustes ao gravar data competencia movcont
;Ultima Alteracao: 22/12/2014 por Kamila Gomes
;Motivo Alteracao: Add GetRecord buscando plano de contas da p_Duplic
;Ultima Alteracao: 27/05/2016 por Bruno Carvalho 
;Motivo Alteracao: Adaptado processo para gera‡Æo do [Numero do Lancamento] "Interno"
;Ultima Alteracao: 14/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 26/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes centro de custo - divina panela 
;Ultima Alteracao: 11/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CL=CartÆo Parcelado
;Ultima Alteracao: 05/08/2017 por Bruno Carvalho
;Motivo Alteracao: Substituido [Valor IR] -> [Valor DebitoCredito]
;Ultima Alteracao: 09/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes filtro tipo do documento
;Ultima Alteracao: 16/03/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Numero_Lancamento("Interno","Locked_Down")
;Ultima Alteracao: 27/09/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes FAZ_ROTINA

;*******************************************************************************
;* Rotina de Geracao de Duplicatas                                             *
;*******************************************************************************
Proc GeraMov()
ClearAll
;------------------Vendas a vista-----------------------------------------------
{Ask} {FaturaC}
Moveto [Numero da OF           ] Example "nof"
Moveto [Valor DebitoCredito    ] Check TypeIn "As "+"\""+ "Valor_Troca"+"\""
{Ask} {NotaC} Check
Moveto [Codigo da Empresa      ] TypeIn "~VSDGEMPRESA.."
Moveto [Codigo do Documento    ] TypeIn "~VSDGTPDOCTO.."
Moveto [Data de Emissao        ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Descricao da Destinacao] TypeIn "..~CONDICAOS.."
Moveto [Tipo de Pagamento      ] TypeIn "V"
Moveto [Forma de Pagamento     ] TypeIn "Not CD,Not CT, Not CL"
Moveto [Exportado_Caixa        ] TypeIn "Not S"
Moveto [Situacao               ] TypeIn "Not C"
Moveto [Tipo Movimento Estoque ] TypeIn "S"
Moveto [Numero da OF           ] Example "nof" typeIn "!"
Do_It!
ClearAll

{Ask} {Answer} TypeIn "Fast Delete"
Moveto [Descricao da Destinacao] TypeIn "..TROCA.."
Moveto [Valor_Troca            ] TypeIn ">=0"
Do_It!
ClearAll


Adiciona_Dados("")

;------------------Vendas c/ entrada--------------------------------------------
{Ask} {FaturaC}
Moveto [Numero da OF           ] Example "nof"
Moveto [Valor DebitoCredito    ] Check TypeIn "As "+"\""+ "Valor_Troca"+"\""
{Ask} {NotaC} Check
Moveto [Codigo da Empresa      ] TypeIn "~VSDGEMPRESA.."
Moveto [Data de Emissao        ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Descricao da Destinacao] TypeIn "..~CONDICAOS.."
Moveto [Tipo de Pagamento      ] TypeIn "P"
Moveto [Exportado_Caixa        ] TypeIn "Not S"
Moveto [Situacao               ] TypeIn "Not C"
Moveto [Tipo Movimento Estoque ] TypeIn "S"
Moveto [Numero da OF           ] Example "nof" typeIn "!"
Do_It!
ClearAll

{Ask} {Answer} TypeIn "Fast" Check
Moveto [Codigo da Empresa      ] Example "cemp"
Moveto [Numero do Documento    ] Example "ndoc"
Moveto [Serie do Documento     ] Example "sdoc"
Moveto [Data de Emissao        ] Example "dte"
Moveto [Valor Nota Fiscal      ] Check
{Ask} {NotaV}
Moveto [Codigo da Empresa      ] Example "cemp"
Moveto [Numero do Documento    ] Example "ndoc"
Moveto [Serie do Documento     ] Example "sdoc"
Moveto [Data                   ] Example "dte"
Moveto [Forma de Pagamento     ] TypeIn "Not CD,Not CT, Not CL"
Moveto [Valor                  ] Check TypeIn "as Valor Nota Fiscal"
Do_It!
ClearAll

Adiciona_Dados("C/ENTRADA ")

EndProc
;*******************************************************************************
;* Rotina adicionar dados na Db temporaria                                     *
;*******************************************************************************
Proc Adiciona_Dados(TIPO)

If IsEmpty("Answer")
   Then Return
EndIf   

FAZ_ROTINA=True

Sort "Answer" On "Codigo da Empresa", "Data de Emissao", "Codigo do Documento", "Numero do Documento"
ClearAll

View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Ctacor\\MovCont"
View "\\Sistemas\\Ctacor\\SaldCont"

NR = NRecords("Answer")

Coedit "Answer"

CODEMPR=[Codigo da Empresa]
DATAREF=[Data de Emissao]
CDOC   =[Codigo do Documento]
NDOCI  =NumVal([Numero do Documento])
NDOCF  =NumVal([Numero do Documento])-1
HIST   =""
VALORT =0
VRLANC =0

Scan

  Barra(NR, RecNo())
  Aguarde("Aguarde, Atualizando Caixa"+BARRA_STRING)

  If [Codigo da Empresa]<>CODEMPR Or
     [Data de Emissao]<>DATAREF
     Then MontaHist(TIPO)
          NDOCF =NumVal([Numero do Documento])-1
          Grava()
          CODEMPR=[Codigo da Empresa]
          DATAREF=[Data de Emissao  ]
  EndIf

  If CDOC<>[Codigo do Documento]
     Then MontaHist(TIPO)
          NDOCF =NumVal([Numero do Documento])-1
          Grava()
  EndIf

  If NumVal([Numero do Documento])<>(NDOCF+1)
     Then MontaHist(TIPO)
  EndIf

  If Search("TROCA",[Descricao da Destinacao])>0
     Then If [Valor_Troca]<0
             Then VALORT=VALORT+([Valor_Troca]*-1)
          EndIf    
     Else VALORT=VALORT+[Valor Nota Fiscal]
  EndIf        
  NDOCF =NumVal([Numero do Documento])
  NDOC  =[Numero do Documento]

EndScan
MontaHist(TIPO)
Grava()
Do_It!
ClearAll
LimpAguarde()

View "NotaC"
CoEdit "Answer"
Scan

  Barra(NR, RecNo())
  Aguarde("Aguarde, Atualizando Situa‡„o das Notas"+BARRA_STRING)

  Moveto "NotaC"
  Moveto [Codigo da Empresa]
  Locate [Answer->Codigo da Empresa],
         [Answer->Numero do Documento],
         [Answer->Serie do Documento]
  If RetVal
     Then [Exportado_Caixa]="S"
  EndIf
  Moveto "Answer"
EndScan
Do_It!
ClearAll

EndProc

;*******************************************************************************
;* Rotina p/ Montar Historico                                                  *
;*******************************************************************************
Proc MontaHist(TIPO)
Private NHIST

While True
  NHIST=HIST
  If NDOCI=NDOCF
     Then If NHIST=""
             Then NHIST=TIPO+NHIST+StrVal(NDOCI)
             Else NHIST=NHIST+", "+StrVal(NDOCI)
          EndIf
     Else If NHIST=""
             Then If (NDOCI+1)=NDOCF
                     Then NHIST=TIPO+NHIST+StrVal(NDOCI)+", "+StrVal(NDOCF)
                     Else NHIST=TIPO+NHIST+StrVal(NDOCI)+" a "+StrVal(NDOCF)
                  EndIf
             Else If (NDOCI+1)=NDOCF
                     Then NHIST=TIPO+NHIST+", "+StrVal(NDOCI)+", "+StrVal(NDOCF)
                     Else NHIST=TIPO+NHIST+", "+StrVal(NDOCI)+" a "+StrVal(NDOCF)
                  EndIf
          EndIf
  EndIf
  If Len(NHIST)>28
     Then Grava()
     Else QuitLoop
  EndIf
EndWhile
HIST  =NHIST
VRLANC=VRLANC+VALORT

NDOCI =NumVal([Numero do Documento])

VALORT=0
EndProc

;*******************************************************************************
;* Rotina de Gravao de Lancamento                                              *
;*******************************************************************************
Proc Grava()
Private WRT,VARAUX

Moveto "\\Sistemas\\Cadastro\\Destinat"
Moveto [Conta Contabil]
Locate CONDICAOL
If RetVal
   Then CODIGOC=[Codigo]
   Else CODIGOC=""
EndIf

Array VARAUX[3]
VARAUX[1]="DIVERSOS"
VARAUX[2]="CONSUMIDOR FINAL"
VARAUX[3]="VENDA A VISTA"

If CODIGOC=""
   Then For WRT From 1 To 3
          Moveto [Nome Fantasia EmitDest]
          Locate VARAUX[WRT]
          If RetVal
             Then If [Tipo]="C"
                     Then CODIGOC=[Codigo]
                          QuitLoop
                     Else Skip
                          If EOT()
                             Then QuitLoop
                          EndIf
                          Locate Next VARAUX[WRT]
                          If [Tipo]="C"
                             Then CODIGOC=[Codigo] 
                                  QuitLoop
                          EndIf   
                  EndIf 
          EndIf
        EndFor
EndIf                          

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

[Codigo da Conta     ]=VSDGCONTA
[Codigo da Empresa   ]=CODEMPR
[Tipo de Operacao    ]="07"
[Data                ]=DATAREF
[Data Competencia    ]=DATAREF
[Valor               ]=VRLANC
[Codigo do Documento ]=CDOC

If Search(",", HIST)>0 Or
   Search("a", HIST)>0
   Then [Numero do Documento   ]="DIVERSOS"
        [Descricao do Historico]="REC. "+[Tipo do Documento]+"'s "+HIST
   Else [Numero do Documento   ]=NDOC
        [Descricao do Historico]="REC. "+[Tipo do Documento]+" "+HIST
EndIf
If CONDICAOS="REGISTRA"
   Then [Descricao do Historico]="REC. CUP. REGISTRADORA"
EndIf

[Tipo                  ]="C"
[Codigo do EmitDest    ]=CODIGOC
If CODIGOC=""
   then [Nome Fantasia EmitDest]="VENDA A VISTA ?"
EndIf
[Tipo do Lancamento    ]="I"
[Sistema Gerador       ]="NF"

GetRecord "\\Sistemas\\Ctarec\\P_Duplic" VSDGEMPRESA to PL_CONTA
If RetVal
  Then VSDGPL_CONTA = PL_CONTA["Plano_Conta_AVista"]
       GetRecord "\\Sistemas\\CtaCor\\PlContas" VSDGPL_CONTA To PL_CONTA
       If RetVal
          Then DESC_PL_CONTA = PL_CONTA["Descricao Plano_Conta"]
               PL_CONTA      = PL_CONTA["Codigo Plano_Conta"]
          Else PL_CONTA = ""     
       EndIf
  Else PL_CONTA = ""  
EndIf 
If PL_CONTA<>""
   Then [Codigo Plano_Conta   ] = PL_CONTA 
        [Descricao Plano_Conta] = DESC_PL_CONTA
EndIf

switch
 case sys_codigo_cliente="0294" : 
    if substr([Tipo do Documento],1,3)="DUP" or
       substr([Tipo do Documento],1,3)="DPD" or
       substr([Tipo do Documento],1,3)="CUP"    
       then [Codigo CCusto]="001.001"
    endif
    
 otherwise : 
 
endswitch

Controle_Dia()
UnLockRecord

While True
 regnew=false
 Moveto "\\Sistemas\\CtaCor\\SaldCont"
 Moveto [Codigo da Conta]
 Locate VSDGCONTA, AlinhM(StrVal(Year(DATAREF)),4), AlinhM(StrVal(Month(DATAREF)),2)
 If Not RetVal
    Then End
         Down
         [Codigo da Conta]=VSDGCONTA
         [Ano Referencia ]=AlinhM(StrVal(Year(DATAREF)),4)
         [Mes Referencia ]=AlinhM(StrVal(Month(DATAREF)),2)
         regnew=true
 EndIf
 If Not IsLockRecord()
    Then QuitLoop
    Else If regnew
            Then Del
         EndIf
 EndIf
EndWhile
[Entradas]=[Entradas]+VRLANC
UnLockRecord

Moveto "Answer"
HIST  =""
VRLANC=0

WC=WC+1
AGUARDE("Aguarde, Gerando Lan‡amentos: "+StrVal(WC))
CDOC  =[Codigo do Documento ]

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_TPDOCTO"       : Campo="TG_EMPRESA"
            Case Campo="TG_CONTA"         : Campo="TG_TPDOCTO"
            Case Campo="TG_DTINI"         : Campo="TG_CONTA"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            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"    :
                         If Not IsBlank(VSDGEMPRESA)
                            Then Campo="TG_TPDOCTO"
                            Else VSDGNOMEMP=""
                         EndIf
                    Case Campo="TG_TPDOCTO"    : Campo="TG_CONTA"
                         
                    Case Campo="TG_CONTA"      :
                         If Not IsBlank(VSDGCONTA)
                            Then Campo="TG_DTINI"
                            Else VSDGNOMCONTA=""
                         EndIf
                    Case Campo="TG_DTINI"      :
                         If Not IsBlank(VSDGDTINI)
                            Then Campo="TG_DTFIM"
                         EndIf
                    Case Campo="TG_DTFIM"      :
                         If Not IsBlank(VSDGDTFIM)
                            Then Campo= "YES"
                         EndIf
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_EMPRESA":
       MSG_CAMPO="Informe o C¢digo da Empresa"
  Case Campo="TG_CONTA":
       MSG_CAMPO="Informe o C¢digo da Conta"
  Case Campo="TG_DTINI":
       MSG_CAMPO="Informe a Data Inicial"
  Case Campo="TG_DTFIM":
       MSG_CAMPO="Informe a Data Final"
EndSwitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

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

VSDGEMPRESA   =""
VSDGEMP       =""
VSDGTPDOCTO   =""
VSDGNOMTPDOCTO=""
VSDGCONTA     =""
VSDGNOMCONTA  =""
VSDGDTINI     =BlankDate()
VSDGDTFIM     =BlankDate()

While True
  FAZ_ROTINA    =False

  ShowDialog "Exporta‡„o das Vendas a Vista p/ o Caixa" 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 "Tipo do Documento"  For "TG_TPDOCTO"
    Accept @ 03,01 Width 07 "A4"  Picture "!*!" Tag "TG_TPDOCTO" To VSDGTPDOCTO
    Accept @ 03,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMTPDOCTO"  To VSDGNOMTPDOCTO

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

    Label  @ 06,00 "Per¡odo Referente de" For "TG_DTINI"
    Accept @ 07,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 07,16 "at‚" For "TG_DTFIM"
    Accept @ 07,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    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 VSDGDTINI=BlankDate()
     Then Mensagem("Data Inicial Invalida !")
          Loop
  EndIf
  If VSDGDTFIM=BlankDate()
     Then Mensagem("Data Final Invalida !")
          Loop
  EndIf

  If IsBlank(VSDGCONTA)
     Then Mensagem("Conta 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
  
  wx1=0
  WC =0
  CONDICAOS = "VEND"
  CONDICAOL = "411010001/4000"
  AGUARDE("Aguarde, Gerando Lan‡amentos")

  For i from 1 to 3
    GERAMOV()
    If i=2
       Then CONDICAOS = "SERV"
            CONDICAOL = "411010001/4000"
    EndIf
    If i=3
       Then CONDICAOS = "REGISTRA"
            CONDICAOL = "411010001/4000"
    EndIf
  EndFor
  If Not FAZ_ROTINA
     Then LIMPAGUARDE()
          MENSAGEM("Sem registros p/ processar")
          Loop
  EndIf

  Delete "Answer"
  MENSAGEM("Fim da Opera‡„o !")

EndWhile
ClearAll
Release Vars All
Release Procs All
