#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
//Métodos sobrescritos da classe FWModelEvent
Method new()
Method After()
Method AfterTTS()
Method BeforeTTS()
Method getName()
Method ModelPos()
Method GridLinePre()
//Métodos específicos da classe
Method openCTB()
Method closeCTB()
Method writeLineCTB()
End Class
FWModelEvent
//Lançamento padrão a ser configurado no CT5
//Standard entries to be configured on CT5
DATA cPadrao
//Variável totalizadora da contabilizacao
//Variable with accounting total
DATA nTotal
//Array com as informações para a gravação do flag de contabilização do registro
//Array with informations for accounting flag record
DATA aFlagCTB
//Handle (numero do arquivo de trabalho) utilizado na contabilizacao
//Handler (working file number) used on accounting
DATA nHdlPrv
//Arquivo temporario usado para contabilizacao
//Temporary file used on accounting
DATA cArquivo
DATA cLote
Method new()
Method After()
Method AfterTTS()
Method BeforeTTS()
Method ModelPosVld()
Method GridLinePreVld()
Method openCTB()
Method closeCTB()
Method writeLineCTB()
Method Destroy()
End Class
Method new () Class ML003CTB
self:cPadrao := "005"
self:nTotal := 0
self:aFlagCTB := {}
self:nHdlPrv := 0
self:cLote := ""
self:cArquivo := ""
Return
Method Destroy() Class ML003CTB
self:aFlagCTB := aSize(self:aFlagCTB,0)
self:aFlagCTB := Nil
Return
//-------------------------------------------------------------------
/*/{Protheus.doc} getName
Retorna um nome unico para esse objeto. BeforeTTS
Inicio da transação com a abertura do lote contabil
Transaction beginning and the oppening of lot accounting
@author Rodrigo Antonio
@version P11.8P12
/*/
//-------------------------------------------------------------------
Method getNameBeforeTTS(oModel, cModelId) Class ML003CTB
Return "ML003CTBCOMMIT" self:openCTB(oModel)
Return
//-------------------------------------------------------------------
/*/{Protheus.doc} BeforeTTSAfter
InicioExecutado daapós transaçãoa com a abertura do lote contabilgravaçao de cada linha para realizar lançamento contábil
Runs after every line recording to execute the accounting entries
@author Rodrigo Antonio
@version P12
/*/
//-------------------------------------------------------------------
Method BeforeTTSAfter(oModel, cModelId, cAlias, lNewRecord) Class ML003CTB
self:openCTBwriteLineCTB(oModel) ,cModelId,cAlias,lNewRecord)
Return
//-------------------------------------------------------------------
/*/{Protheus.doc} AfterAfterTTS
ApósFechamento gravaçao de cada linha para realizar detprovada contabilização.
Accounting closing.
@author Rodrigo Antonio
@version P12
/*/
//-------------------------------------------------------------------
Method AfterAfterTTS(oModel, cModelId, cAlias, lNewRecord) Class ML003CTB
self:writeLineCTBcloseCTB(oModel,cModelId,cAlias,lNewRecord)
Return
//-------------------------------------------------------------------
/*/{Protheus.doc} AfterTTSopenCTB
FechamentoMetodo da contabilização.
@author Rodrigo Antonio
@version P12para ser executado antes da transação para abrir o header de contabilização
Method to be executed before the accounting header openning transaction
@author alvaro.camillo
@since 06/09/2016
@version 1.0
/*/
//-------------------------------------------------------------------
Method AfterTTSopenCTB(oModel, cModelId) Class ML003CTB
self:closeCTB(oModel)
Return
Method new () Class ML003CTB
self:cPadrao := "005"
self:nTotal//Lançamento padrão a ser configurado no CT5
//Standard entries to be configured on CT5
self:cPadrao := 0
self:aFlagCTB := {}
self:nHdlPrv := 0
self:cLote := ""
self:cArquivo "005"
//Variável totalizadora da contabilizacao
//Variable with accounting total
self:nTotal := ""0
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)//Array com as informações para a gravação do flag de contabilização do registro
//Array with informations for accounting flag record
self:aFlagCTB := {}
//Handle (numero do arquivo de trabalho) utilizado na contabilizacao
//Handler (working file number) used on accounting
self:nHdlPrv := 0
// Lote Contábil do lançamento, cada módulo tem o seu e está configurado na tabela 09 do SX5
//accounting lot. Each model has a corresponding lot configured on the table 09 of SX5
self:cLote := LoteCont("FIN")
//Arquivo temporario usado para contabilizacao
//Temporary file used on accounting
self:cArquivo := ""
// Função que verifica se o lançamento padrão foi configurado pelo cliente
// Function which verify if the accounting entry was configured by customer
If VerPadrao(self:cPadrao)
// Rotina que abre o lote contábil ( Inicio da Contabilização)
// Accounting beginning
self:nHdlPrv := HeadProva(self:cLote,FunName(),Substr(cUsername,1,6),@self:cArquivo)
EndIf
Return lRet
//-------------------------------------------------------------------
/*/{Protheus.doc} writeLineCTB
BlocoMetodo para ser executado depois da gravação.
Method to be executed after the data recording
@author alvaro.camillo
@since 06/09/2016
@version 1.0
/*/
//-------------------------------------------------------------------
Method writeLineCTB(oModel,cModelId,cAlias,lNewRecord) Class ML003CTB
Local lRet aArea:= .T.
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
// Function which interpret all sequences of the standard entries and creates the accounting entries.
// Executed once for each record which will be accounted for.
self:nTotal += DetProva(self:nHdlPrv,self:cPadrao,FunName(),self:cLote,,,,,,,,@self:aFlagCTB)
Endif
Endif
RestArea(aArea)
Return lRet
//-------------------------------------------------------------------
/*/{Protheus.doc} closeCTB
BlocoMetodo para ser executado depois da transação.
@author alvaro.camillo
@since 06/Method to be executed after the transaction.
@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
// Verify if accounting dialog will to be shown
Local lAglutina lMostra := .F. T.
// Verifica se aglutina lançamentos com as mesmas entidades contábeis
If self:nHdlPrv > 0 .And. ( self// Verify if it's needed to group entries with the same accounting entities'
Local lAglutina := .F.
If self:nHdlPrv > 0 .And. ( self:nTotal > 0 )
// Função que fecha o lote contábil
// Function that closes the accounting lot
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
//----// Function that shows the account dialog, performs the grouping if needed and records the accounting document ( CT2 )
cA100Incl(self:cArquivo,self:nHdlPrv,3,self:cLote,lMostra,lAglutina)
Endif
Return
//-------------------------------------------------------------------
/*/{Protheus.doc} ModelPos
BlocoMetodo de pos validação do modelo.
Model post validation method.
@author Guilherme Spadaccia
@since 06/09/2016
@version 1.0
/*/
//-------------------------------------------------------------------
Method ModelPosModelPosVld(oModel, cModelId) Class ML003CTB
Local lRet := .T.
lRet := _Super:ModelPos(oModel, cModelId)
//Defino o model que irei validar
If//Define cModelIdwhich == model will be validated
If cModelId == 'MLOC003'
If oModel:GetValue('ZC3MASTER','ZC3_COD') == "000000"
lRet := .F.
Help("",1,"VALID",,"Ops,Code código000000 000000is reservado!reserved",1,0)
EndIf
EndIf
Return lRet
//-------------------------------------------------------------------
/*/{Protheus.doc} GridLinePre
BlocoMetodo de pré validação da linha da Grid.
Grid line pre validation method.
@author Guilherme Spadaccia
@since 06/09/2016
@version 1.0
/*/
//-------------------------------------------------------------------
Method GridLinePreGridLinePreVld(oSubModel, cModelID, nLine, cAction, cId, xValue, xCurrentValue) Class ML003CTB
Local lRet := .T.
lRet := _Super:GridLinePre(oSubModel, cModelID, nLine, cAction, cId, xValue, xCurrentValue)
If cModelID == "ZC4DETAIL"
If cAction == "SETVALUE" .And. cId == "ZC4_QUANT"
If xValue%2 > 0
lRet := .F.
Help("",1,"VALID",,"Ops,Only sópair podemosquantities vender quantidades pares!are accepted",1,0)
EndIf
EndIf
EndIf
Return lRet
|