#Include #Include 'Protheus.ch'
#Include 'FWMVCDef.ch'
//-------------------------------------------------------------------
/*/{Protheus.doc} ML003CTB
Classe interna implementando o Observer do CommitFWModelEvent
Intern class inherited from FWModelEvent.
@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 // //Standard entries to be configured on CT5
DATA cPadrao
//Variável totalizadora da contabilizacao
//Variable with accounting total
DATA aFlagCTB 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 nHdlPrv aFlagCTB
// Handle (numero do arquivo de trabalho) utilizado na contabilizacao
DATA cLote //Handler (working file number) used on accounting
DATA cArquivo nHdlPrv
// Arquivo temporario usado para contabilizacao
//Métodos sobrescritos da classe FWModelEvent
//Temporary file used on accounting
DATA cArquivo
DATA cLote
Method new()
Method After()
Method AfterTTS()
Method BeforeTTS()
Method getName()
Method ModelPosModelPosVld()
Method GridLinePreGridLinePreVld()
//Métodos específicos da classe
Method openCTB()
Method closeCTB()
Method writeLineCTB()
End Class
//-------------------------------------------------------------------
/*/{Protheus.doc} getName
Retorna um nome unico para esse objeto.
@author Rodrigo Antonio
@version P11.8
/*/
//-------------------------------------------------------------------
Method getName() Class ML003CTB
Return "ML003CTBCOMMIT"
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} BeforeTTS
Inicio da transação com a abertura do lote contabil
Transaction beginning and the oppening of lot accounting
@author Rodrigo Antonio
@version P12
/*/
//-------------------------------------------------------------------
Method BeforeTTS(oModel, cModelId) Class ML003CTB
self:openCTB(oModel)
Return
//-------------------------------------------------------------------
/*/{Protheus.doc} After
ApósExecutado após a gravaçao de cada linha para realizar detprova lançamento contábil
Runs after every line recording to execute the accounting entries
@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
/*/
Accounting closing.
@author Rodrigo Antonio
@version P12
/*/
//-------------------------------------------------------------------
Method AfterTTS(oModel, cModelId) Class ML003CTB
self:closeCTB(oModel)
Return
//-------------------------------------------------------------------
Method AfterTTS(oModel, cModelId) Class ML003CTB
self:closeCTB(oModel)
Return
Method new () Class ML003CTB
self:cPadrao := "005"
self:nTotal := 0
self:aFlagCTB := {}
self:nHdlPrv := 0
self:cLote := ""
self:cArquivo := ""
Return
/*/{Protheus.doc} openCTB
Metodo para 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 openCTB(oModel) Class ML003CTB
/*/{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/Lançamento padrão a ser configurado no CT5
//Standard entries to be configured on CT5
self:cPadrao := "005"
//Variável totalizadora da contabilizacao
//Variable with accounting total
self:nTotal := 0
//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 Lote Contábil do lançamento, cada módulo tem o seu e está configurado na tabela 09 do SX5temporario usado para contabilizacao
//Temporary file used on accounting
self:cArquivo := "" // Arquivo temporario usado para contabilizacao
// 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 capa do 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 := .T.
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
// 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 executado depois da transação.
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.
// Verifica se mostra ou nao tela de contabilização
// Verify if accounting dialog will to be shown
Local lMostra := .T.
// Verifica se mostraaglutina lançamentos oucom naoas telamesmas deentidades contabilização
Local lAglutina := .F. // Verifica se aglutina lançamentos com as mesmas entidades contábeiscontábeis
// 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 )
// 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 lRet
//-------------------------------------------------------------------
/*/{Protheus.doc} ModelPos
BlocoMetodo de pos validação do modelo 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
//Define which 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
|