#Include 'Protheus.ch'
#Include 'FWMVCDef.ch'
//-------------------------------------------------------------------
/*/{Protheus.doc} ML003CTB
Classe interna implementando o Observer do Commit
@author alvaro.camillo
@since 06/09/2016
@version 1.0
/*/
//-------------------------------------------------------------------
Class ML003CTB FROM FWModelEvent
DATA cPadrao // Lançamento padrão a ser configurado no CT5
DATA nTotal // Variável totalizadora da contabilizacao
DATA aFlagCTB // Array com as informações para a gravação do flag de contabilização do registro
DATA nHdlPrv // Handle (numero do arquivo de trabalho) utilizado na contabilizacao
DATA cLote
DATA cArquivo // Arquivo temporario usado para contabilizacao
Method new()
Method After()
Method AfterTTS()
Method BeforeTTS()
Method ModelPosVld()
Method GridLinePreVld()
Method openCTB()
Method closeCTB()
Method writeLineCTB()
End Class
Method new () Class ML003CTB
self:cPadrao := "005"
self:nTotal := 0
self:aFlagCTB := {}
self:nHdlPrv := 0
self:cLote := ""
self:cArquivo := ""
Return
//-------------------------------------------------------------------
/*/{Protheus.doc} BeforeTTS
Inicio da transação com a abertura do lote contabil
@author Rodrigo Antonio
@version P12
/*/
//-------------------------------------------------------------------
Method BeforeTTS(oModel, cModelId) Class ML003CTB
self:openCTB(oModel)
Return
//-------------------------------------------------------------------
/*/{Protheus.doc} After
Após gravaçao de cada linha para realizar detprova
@author Rodrigo Antonio
@version P12
/*/
//-------------------------------------------------------------------
Method After(oModel, cModelId, cAlias, lNewRecord) Class ML003CTB
self:writeLineCTB(oModel,cModelId,cAlias,lNewRecord)
Return
//-------------------------------------------------------------------
/*/{Protheus.doc} AfterTTS
Fechamento da contabilização.
@author Rodrigo Antonio
@version P12
/*/
//-------------------------------------------------------------------
Method AfterTTS(oModel, cModelId) Class ML003CTB
self:closeCTB(oModel)
Return
//-------------------------------------------------------------------
/*/{Protheus.doc} openCTB
Bloco para ser executado antes da transação para abrir o header de contabilização
@author alvaro.camillo
@since 06/09/2016
@version 1.0
/*/
//-------------------------------------------------------------------
Method openCTB(oModel) Class ML003CTB
Local lRet := .T.
self:cPadrao := "005" // Lançamento padrão a ser configurado no CT5
self:nTotal := 0 // Variável totalizadora da contabilizacao
self:aFlagCTB := {} // Array com as informações para a gravação do flag de contabilização do registro
self:nHdlPrv := 0 // Handle (numero do arquivo de trabalho) utilizado na contabilizacao
self:cLote := LoteCont("FIN") // Lote Contábil do lançamento, cada módulo tem o seu e está configurado na tabela 09 do SX5
self:cArquivo := "" // Arquivo temporario usado para contabilizacao
// Função que verifica se o lançamento padrão foi configurado pelo cliente
If VerPadrao(self:cPadrao)
// Rotina que abre o capa do lote contábil ( Inicio da Contabilização)
self:nHdlPrv := HeadProva(self:cLote,FunName(),Substr(cUsername,1,6),@self:cArquivo)
EndIf
Return lRet
//-------------------------------------------------------------------
/*/{Protheus.doc} writeLineCTB
Bloco para ser executado depois da gravação.
@author alvaro.camillo
@since 06/09/2016
@version 1.0
/*/
//-------------------------------------------------------------------
Method writeLineCTB(oModel,cModelId,cAlias,lNewRecord) Class ML003CTB
Local aArea:= GetArea()
If cAlias == "ZC4"
ZC0->(dbSetOrder(1))//ZC0_FILIAL+ZC0_COD+ZC0_LOJA
ZC1->(dbSetOrder(1))//ZC1_FILIAL+ZC1_COD
ZC0->(MsSeek(xFilial("ZC0") + ZC3->(ZC3_CLIENT + ZC3_LOJA) ))
ZC1->(MsSeek(xFilial("ZC4") + ZC4->ZC4_PROD ))
If self:nHdlPrv > 0
aAdd(self:aFlagCTB,{"ZC4_LA","S","ZC4",ZC4->(Recno()),0,0,0})
// Função que interpreta todas as sequencias de lançamento configurada pelo usuário e cria as linhas de lançamento contábil
// Executada uma vez para cada registro que quer ser contabilizado
self:nTotal += DetProva(self:nHdlPrv,self:cPadrao,FunName(),self:cLote,,,,,,,,@self:aFlagCTB)
Endif
Endif
RestArea(aArea)
Return
//-------------------------------------------------------------------
/*/{Protheus.doc} closeCTB
Bloco para ser executado depois da transação.
@author alvaro.camillo
@since 06/09/2016
@version 1.0
/*/
//-------------------------------------------------------------------
Method closeCTB(oModel) Class ML003CTB
Local lRet := .T.
Local lMostra := .T. // Verifica se mostra ou nao tela de contabilização
Local lAglutina := .F. // Verifica se aglutina lançamentos com as mesmas entidades contábeis
If self:nHdlPrv > 0 .And. ( self:nTotal > 0 )
// Função que fecha o lote contábil
RodaProva(self:nHdlPrv, self:nTotal)
// Função que apresenta a tela de contabilização, realiza aglutinação caso necessária e grava o documento contábil ( CT2 )
cA100Incl(self:cArquivo,self:nHdlPrv,3,self:cLote,lMostra,lAglutina)
Endif
Return lRet
//-------------------------------------------------------------------
/*/{Protheus.doc} ModelPos
Bloco de pos validação do modelo.
@author Guilherme Spadaccia
@since 06/09/2016
@version 1.0
/*/
//-------------------------------------------------------------------
Method ModelPosVld(oModel, cModelId) Class ML003CTB
Local lRet := .T.
//Defino o model que irei validar
If cModelId == 'MLOC003'
If oModel:GetValue('ZC3MASTER','ZC3_COD') == "000000"
lRet := .F.
Help("",1,"VALID",,"Ops, código 000000 reservado!",1,0)
EndIf
EndIf
Return lRet
//-------------------------------------------------------------------
/*/{Protheus.doc} GridLinePre
Bloco de pré validação da linha da Grid.
@author Guilherme Spadaccia
@since 06/09/2016
@version 1.0
/*/
//-------------------------------------------------------------------
Method GridLinePreVld(oSubModel, cModelID, nLine, cAction, cId, xValue, xCurrentValue) Class ML003CTB
Local lRet := .T.
If cModelID == "ZC4DETAIL"
If cAction == "SETVALUE" .And. cId == "ZC4_QUANT"
If xValue%2 > 0
lRet := .F.
Help("",1,"VALID",,"Ops, só podemos vender quantidades pares!",1,0)
EndIf
EndIf
EndIf
Return lRet