;** Ft_Cxas ********************************************************************
;*  Geracao de Compras a Vista p/ o Caixa                                      *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 30/11/2015 por Anivel Augusto Rodrigues
;Ultima Alteracao: 17/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes procedimentos              
;Ultima Alteracao: 05/01/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes getp_titulo() em Carrega_Parametros()
;Ultima Alteracao: 22/02/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes gera‡Æo de movimentos para CF-e
;Ultima Alteracao: 01/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Saldo_Caixa() 
;Ultima Alteracao: 15/06/2016 por Bruno Carvalho 
;Motivo Alteracao: Adaptado processo para gera‡Æo do [Numero do Lancamento] "Interno"
;Ultima Alteracao: 25/07/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes plano de conta compra sucata Pralum         
;Ultima Alteracao: 09/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Saldo_Caixa() 
;Ultima Alteracao: 27/02/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes lockrecord       
;Ultima Alteracao: 16/03/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Numero_Lancamento("Interno","Locked_Down")

;*******************************************************************************
;* Rotina de Gravacao de Lancamento                                            *
;*******************************************************************************
Proc Grava_Caixa()
private CX_LANC, reg_tppagto, 
        PARAM_PLANO_CONTA_AVISTA ,   
        PLCONTA, contacaixa

contacaixa=PegaContaCaixaUsuario()

PARAM_PLANO_CONTA_AVISTA =""
If getp_titulo([NotaC->Codigo da Empresa])
  Then PARAM_PLANO_CONTA_AVISTA =regp_titulo["Plano_Conta_AVista"]
EndIf

PLCONTA = ""
GetRecord "\\Sistemas\\Cadastro\\Tppagto" [NotaC->Forma de Pagamento] To reg_tppagto 
If RetVal 
   Then PLCONTA = reg_tppagto["Plano de Conta"]
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

;While True                    
;  End
;  Moveto [Numero do Lancamento]
;  If Numero_Lancamento("Interno","")
;     Then CX_LANC = PROXLANCTO_NLANC
;          Release Vars PROXLANCTO_NLANC
;  EndIf
;  Locate CX_LANC
;  If Not Retval
;     Then End Down
;          [Numero do Lancamento ]=CX_LANC
;          [Codigo da Conta      ]=contacaixa
;          If Not IsLockRecord()
;             Then QuitLoop
;             Else Del
;          EndIf
;  EndIf
;EndWhile

[Codigo da Conta       ]=contacaixa
[Codigo da Empresa     ]=[NotaC->Codigo da Empresa]
[Tipo de Operacao      ]="06"
[Data                  ]=[Notac->Data de Emissao]
[Data Competencia      ]=[Notac->Data de Emissao]
[Valor                 ]=CX_VRLANC
[Codigo do Documento   ]=[NotaC->Codigo do Documento]
[Numero do Documento   ]=[NotaC->Numero do Documento]
[Descricao do Historico]="PAG. "+[Tipo do Documento]+" "+[NotaC->Numero do Documento]
If [NotaC->Tipo de Pagamento]="P"
   Then [Descricao do Historico]=[Descricao do Historico]+" VENCTO COMO ENTRADA"
EndIf
[Tipo                  ]="F"
[Codigo do EmitDest    ]=CX_CODIGOC
If CX_CODIGOC=""
   Then [Nome Fantasia EmitDest]="COMPRA A VISTA ?"

EndIf
[Tipo do Lancamento    ]="A"
Switch
  Case APLIC_ORIGEM="FATURA": [Sistema Gerador       ]="FT"
  Case APLIC_ORIGEM="CFe"   : [Sistema Gerador       ]="CF"
  Case APLIC_ORIGEM="TROCA" : [Sistema Gerador       ]="TR"
  Case APLIC_ORIGEM="BALCAO": [Sistema Gerador       ]="BA"
  Case APLIC_ORIGEM="NOTA"  : [Sistema Gerador       ]="DI"
EndSwitch
[Empresa Gerador       ]=[NotaC->Codigo da Empresa]
[Lancamento Gerador    ]=[NotaC->Numero do Documento]

Switch
  Case PLCONTA<>""                                                        : [Codigo Plano_Conta]=PLCONTA 
  OtherWise                                                               : [Codigo Plano_Conta]=PARAM_PLANO_CONTA_AVISTA 
EndSwitch

Switch
  Case Search("DIVERSOS",Upper([Notac->Nome Fantasia EmitDest]))>0         Or 
       Search("CONSUMIDORES",Upper([Notac->Nome Fantasia EmitDest]))>0     Or
       Search("CONSUMIDOR FINAL",Upper([Notac->Nome Fantasia EmitDest]))>0  :
       [Razao Social          ]=[Notac->Razao Social]
       [Nome Fantasia EmitDest]=[Notac->Razao Social] 
EndSwitch         
   
Switch
   Case sys_Codigo_Cliente="0377":
     if [NotaC->Tipo Movimento Estoque]="E" and
        Search("COMPRA",[NotaC->Descricao da Destinacao])>0 and
        Search("SUCATA",[NotaC->Descricao da Destinacao])>0     
        then [Codigo Plano_Conta      ]="2.2.01.01.004"
     endif   
EndSwitch
   
Controle_Dia()
UnLockRecord

Saldo_Caixa(contacaixa,"S",CX_VRLANC)

Moveto "NotaC"
while islockrecord() endwhile
[Exportado_Caixa]="S"
UnLockRecord

EndProc

;*******************************************************************************
;* Rotina de Estornar Lancamentos                                              *
;*******************************************************************************
Proc Estorno_Caixa()
Private CHV_EMPRESA, CHV_TPDOCTO, CHV_NUMERO_ORDEM

CHV_EMPRESA     =[NotaC->Codigo da Empresa  ]
CHV_TPDOCTO     =[NotaC->Tipo do Documento  ]
CHV_NUMERO_ORDEM=[NotaC->Numero do Documento]

Moveto "\\Sistemas\\CtaCor\\MovCont"
Moveto [Codigo da Empresa]
Locate IndexOrder by "IndCxa1" CHV_EMPRESA,CHV_TPDOCTO,CHV_NUMERO_ORDEM
If RetVal
   Then While [Codigo da Empresa  ]=CHV_EMPRESA And
              [Tipo do Documento  ]=CHV_TPDOCTO And
              [Numero do Documento]=CHV_NUMERO_ORDEM

          If [Tipo do Lancamento]="A" and
             (([Sistema Gerador]="FT") Or
              ([Sistema Gerador]="BA") Or
              ([Sistema Gerador]="TR") Or
              ([Sistema Gerador]="DI") Or
              ([Sistema Gerador]=""))
             Then 
                  Saldo_Caixa([Codigo da Conta],"E",[Valor])

                  Moveto "\\Sistemas\\CtaCor\\MovCont"
                  while islockrecord() endwhile
                  Del
                  
             else 
                  Skip     
          EndIf

          If EOT() Then QuitLoop EndIf
          Locate IndexOrder by "IndCxa1" Next CHV_EMPRESA,CHV_TPDOCTO,CHV_NUMERO_ORDEM
          
        EndWhile
EndIf
EndProc

;*******************************************************************************
;* Rotina de Atualizar Saldos                                                  *
;*******************************************************************************
Proc Saldo_Caixa(conta,tp,vr)
private conta,tp,vr,regnew

While True
 regnew=false
 Moveto "\\Sistemas\\CtaCor\\SaldCont"
 Moveto [Codigo da Conta]
 Locate conta, AlinhM(StrVal(Year([NotaC->Data de Emissao])),4), AlinhM(StrVal(Month([NotaC->Data de Emissao])),2)
 If Not RetVal
    Then End
         Down
         [Codigo da Conta]=conta
         [Ano Referencia ]=AlinhM(StrVal(Year([NotaC->Data de Emissao])),4)
         [Mes Referencia ]=AlinhM(StrVal(Month([NotaC->Data de Emissao])),2)
         regnew=true
 EndIf
 If Not IsLockRecord()
    Then QuitLoop
    Else If regnew
            Then Del
         EndIf
 EndIf
EndWhile
If tp="E" Then [Saidas  ]=[Saidas  ]-vr EndIf
If tp="S" Then [Saidas  ]=[Saidas  ]+vr EndIf
UnLockRecord
EndProc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************

Moveto "NotaC"
Moveto [Codigo da Empresa]
Locate EMPRESAFISC, NOTAFISC, SERIEFISC
if retval
   then
        Switch
          Case OP_MOVCX="ESTORNAR" Or OP_MOVCX="CANCELAR" :
               Aguarde("Efetuando Estorno CAIXA[SAIDA] "+Opcaoc+" "+NOTAFISC)
               while islockrecord() endwhile
               [Exportado_Caixa]=""
               unlockrecord
               
               Estorno_Caixa()
        
          Case OP_MOVCX="ATUALIZAR":
               Aguarde("Atualizando CAIXA[SAIDA] "+Opcaoc+" "+NOTAFISC)

               CX_CONDICAOS = "?????"
               CX_CONDICAOL = "?????"

              ;If Search("VEND",[NotaC->Descricao da Destinacao])>0 Or
              ;   Search("FATURA CUPOM FISCAL",[NotaC->Descricao da Destinacao])>0
              ;   Then CX_CONDICAOS = "VEND"
              ;        CX_CONDICAOL = "411010001/4000"
              ;EndIf
        
               while islockrecord() endwhile
               Moveto [Codigo]
               If Busca_Lookup("Conta Contabil",CX_CONDICAOL,"SM")
                  Then CX_CODIGOC=REG_BUSCA_LOOKUP["Codigo"]
                  Else CX_CODIGOC=[NotaC->Codigo]
               EndIf
               UnLockRecord
        
               Continua_Caixa=True
               If Continua_Caixa
                  Then Grava_Caixa()
               EndIf
        EndSwitch
endif

Release vars cx_codigoc, cx_condicaos, cx_condicaol, Continua_Caixa

Release procs grava_caixa, saldo_caixa, estorno_caixa
