;** FT_EDESF *******************************************************************
;*  Cancela/Desfaz Nota de entrada e Financeiro                                *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 01/04/2016 por Anivel Augusto Rodrigues
;Ultima Alteracao: 02/01/2020 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes na proc Est_Estoque()                            

;*******************************************************************************
;* Rotina p/ Estornar Movimenta‡Æo                                             *
;*******************************************************************************
Proc Estornar()
Private NE_ENCONTRADA, wi

Do_It!
SaveTables

View NOWINDOW "\\Sistemas\\Estoque\\NotaEC"
View NOWINDOW "\\Sistemas\\Estoque\\NotaEI"
View NOWINDOW "\\Sistemas\\Estoque\\NotaECV"
View NOWINDOW "\\Sistemas\\Estoque\\NotaECP"
View NOWINDOW "\\Sistemas\\Estoque\\NotaEIA"

View NOWINDOW "\\Sistemas\\Ctapag\\Titulos"  
View NOWINDOW "\\Sistemas\\Ctapag\\Titbaixa" 

View NOWINDOW "\\Sistemas\\CtaCor\\SaldCont"
View NOWINDOW "\\Sistemas\\CtaCor\\MovCont"

CoeditKey

Moveto "FaturaC"
DESTIN_ATUALIZA_PEDIDOS=""
DP_GERA_DUPLICATA      =""
Moveto [Codigo da Destinacao]
If Busca_Lookup("Codigo da Destinacao",[FaturaC->Codigo da Destinacao],"")             
   Then DESTIN_ATUALIZA_PEDIDOS=REG_BUSCA_LOOKUP["Atualiza Pedidos"]
        DP_GERA_DUPLICATA=REG_BUSCA_LOOKUP["Gera Duplicata"]
EndIf

Moveto "\\Sistemas\\Estoque\\NotaEC"
Moveto [Codigo]
Locate IndexOrder By "NotaEC01" [FaturaC->Codigo], NOTAFISC, SERIEFISC
If RetVal
   then If [Codigo da Empresa]=[FaturaC->Codigo da Empresa]
           Then NE_ENCONTRADA=True
           Else NE_ENCONTRADA=False
        EndIf
   Else NE_ENCONTRADA=False

        Moveto [Numero do Documento]
        Locate NOTAFISC
        If RetVal
           Then If [Codigo do Documento]=CODFISC And
                   [Codigo da Empresa  ]=[FaturaC->Codigo da Empresa] And
                   [Tipo de Operacao   ]="C"
                   Then NE_ENCONTRADA=True
                EndIf
        EndIf
EndIf

If Not NE_ENCONTRADA
   Then Mensagem("NÆo existe registro a processar!//Opera‡Æo nÆo realizada !")
        Return
   Else If IsLockRecord() 
          Then Mensagem("Opera‡Æo nÆo realizada !")
               Return
        EndIf       
EndIf
NUMERO_NE=[Numero do Lancamento     ]

Estornar_Itens()
Est_Cx_Titul()

Aguarde("Efetuando Estorno NOTA ENTRADA "+NOTAFISC)
Switch
  Case TIPO="DESFAZER" Or
       TIPO="CANCELAR":

    For wi From 1 to 4
    
      Switch
        Case wi=1 : Moveto "\\Sistemas\\Estoque\\NotaEI"    Moveto [Numero do Lancamento]
        Case wi=2 : Moveto "\\Sistemas\\Estoque\\NotaECV"   Moveto [Numero do Lancamento]
        Case wi=3 : Moveto "\\Sistemas\\Estoque\\NotaECP"   Moveto [Numero do Lancamento]
        Case wi=4 : Moveto "\\Sistemas\\Estoque\\NotaEIA"   Moveto [Numero_do_Lancamento]
      EndSwitch
      Locate NUMERO_NE
      If RetVal
         Then While [Numero do Lancamento]=NUMERO_NE
                Del
                if eot() then quitloop endif
              EndWhile
      EndIf
    EndFor

    Moveto "\\Sistemas\\Estoque\\NotaEC"
    Del

    ;; Fatura
    Moveto "FaturaC"
    [FaturaC->Sistema Gerador]="C"
    UnlockRecord

EndSwitch

Do_It!
Moveto "\\Sistemas\\Estoque\\NotaEC"  ClearImage
Moveto "\\Sistemas\\Estoque\\NotaEI"  ClearImage
Moveto "\\Sistemas\\Estoque\\NotaECV" ClearImage
Moveto "\\Sistemas\\Estoque\\NotaECP" ClearImage
Moveto "\\Sistemas\\Estoque\\NotaEIA" ClearImage

Moveto "\\Sistemas\\Ctapag\\Titulos"  ClearImage  
Moveto "\\Sistemas\\Ctapag\\Titbaixa" ClearImage 

Moveto "\\Sistemas\\CtaCor\\SaldCont" ClearImage
Moveto "\\Sistemas\\CtaCor\\MovCont"  ClearImage

SaveTables
EndProc ; Estornar()

;*******************************************************************************
;* Exclusao do Item                                                            *
;*******************************************************************************
Proc Estornar_Itens()
Private NLANCPC, NUMREF

Aguarde("Efetuando Estorno ESTOQUE "+NOTAFISC)

Moveto "\\Sistemas\\Estoque\\NotaEI"
Moveto [Numero do Lancamento]
Locate NUMERO_NE
If RetVal
   Then While [Numero do Lancamento]=NUMERO_NE

          Est_Estoque()
  
          Moveto "\\Sistemas\\Estoque\\NotaEI"
          Skip       
          If EOT() Then QuitLoop EndIf
        EndWhile
EndIf

EndProc     ;  (Estornar_I)    

;*******************************************************************************
;* Rotina Atualizacao do Estoque                                              **
;*******************************************************************************
Proc Est_Estoque()
Private MES_EST, ANO_EST 

If IsBlank([\sistemas\estoque\NotaEI->Codigo do Item]) Or
   [\sistemas\estoque\NotaEI->Tipo do Item]="C" Or [\sistemas\estoque\NotaEI->Tipo do Item]="D" Or [\sistemas\estoque\NotaEI->Tipo do Item]="F" Or
   [\sistemas\estoque\NotaEI->Tipo do Item]="G" Or [\sistemas\estoque\NotaEI->Tipo do Item]="H" Or [\sistemas\estoque\NotaEI->Tipo do Item]="I"
   Then Return 
EndIf   

;---- Processo p/ utiliza‡Æo de REGRA ------------------------------------------
Verifica_Emissao_Saida([\sistemas\estoque\NotaEC->Data de Emissao])
Switch
  Case REGRA_DATA_ESTOQUE = "Antiga" : AUX_DATA = [\sistemas\estoque\NotaEC->Data de Saida]
                                       If IsBlank(AUX_DATA) Then AUX_DATA=[FaturaC->Data de Emissao] EndIf
  OtherWise                          : AUX_DATA = [\sistemas\estoque\NotaEC->Data de Emissao]
EndSwitch
;-------------------------------------------------------------------------------
MES_EST = AlinhM(StrVal(Month(AUX_DATA)),2)
ANO_EST = StrVal(Year(AUX_DATA))

While True
  Moveto "\\Sistemas\\Estoque\\SdEstq"
  Locate [\sistemas\estoque\NotaEC->Codigo da Empresa],
         [\sistemas\estoque\NotaEI->Codigo do Item   ], ANO_EST, MES_EST
  If Not RetVal
     Then If Not Cria_Ficha([NotaEC->Codigo da Empresa],[NotaEI->Codigo do Item],False)
             Then Moveto "NotaEi"
                  Return False
             Else Loop
          EndIf
  EndIf
  If Not IsLockRecord()
     Then QuitLoop
  EndIf
EndWhile

[Saldo Atual      ] = NDecimal([Saldo Atual]-[\sistemas\estoque\NotaEI->Quantidade],3)
[Custo Total Atual] = NDecimal([Custo Total Atual]-([\sistemas\estoque\NotaEI->Custo Medio Unitario]*[\sistemas\estoque\NotaEI->Quantidade]),2)

If ([Custo Total Atual]/[Saldo Atual])>0
   Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
EndIf
UnLockRecord

EndProc   ; (Estoque)

;*******************************************************************************
;* Rotina Estorna Caixa/Banco e Titulos a Receber/ Titulos a Pagar             *
;*******************************************************************************
Proc Est_Cx_Titul()

APLIC_ORIGEM="FATURA"

if TIPO="CANCELAR"
   then CANCELA_DUP    =True
   else CANCELA_DUP    =false
endif
CX_CONTA_CAIXA  =PARAM_CONTA_CAIXA

;-- Estorno de Movimenta‡Æo Financeira -----------------------------------------
If DP_GERA_DUPLICATA="S"
   then
        OP_MOVCX        ="ESTORNAR"
        OP_MOVDP        ="ESTORNAR"

        ;-- Entradas -----------------------------------------------------------
        Estorno_CP_Ok  =True
        
        If PARAM_AVISTAAUTOMAT="S"
           Then Play("FT_ECXA")
        EndIf
        If PARAM_APRAZOAUTOMAT="S"
           Then If PARAM_AVISTADUPLIC="S"
                   Then Play("FT_ECXA")
                EndIf
                Play("FT_ETIT")
        EndIf
endif
;-------------------------------------------------------------------------------
        
EndProc ; Est_Cx_Duplic()

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

EMPRESAFISC=[FaturaC->Codigo da Empresa  ]
NOTAFISC   =[FaturaC->Numero Nota Gerada ]
SERIEFISC  =[FaturaC->Serie Nota Gerada  ]
CODFISC    =[FaturaC->Docto Nota Gerada  ]

Aguarde("Efetuando Estorno Documento "+NOTAFISC)

If Not IsAssigned(SITUACAO) Then SITUACAO="" EndIf
    
UnLockRecord
KeyPress "F7"
IsLockRecord()

Estornar()

Moveto "FaturaC"
KeyPress "F7"
CoEditKey

Mensagem("Opera‡Æo Finalizada!")

Release Vars numero_ne,
             EMPRESAFISC,NOTAFISC,SERIEFISC,Tab_Ref,
             GERA_DUPLICATA   
             
Release Procs Estornar, Estornar_Itens, Est_Estoque, Est_Cx_Titul
              
