JmgIpcLedgerEnter.checkForRepostings Method [AX 2012]
If the user has selected to repost indirect production costs and an already posted registration is found, the user is prompted if he is sure that he wants to repost.
The following example demonstrates the use of this method.
public void run()
{
int cnt;
JmgIpcLedgerJournal jmgIpcLegerJournal;
JmgIpcLedgerTrans jmgIpcLedgerTrans;
LedgerJournalTable ledgerJournalTable;
LedgerJournalTrans ledgerJournalTrans;
Voucher voucher;
JmgStampTrans jmgStampTrans;
Query query;
QueryBuildDataSource qbds;
QueryBuildRange qbr;
LedgerDimensionDefaultAccount accountNum;
LedgerDimensionDefaultAccount offsetAccountNum;
DimensionAttributeValueCombination dimAttrValueCombo;
DimensionAttributeValueCombination offsetDimAttrValueCombo;
DimensionValidationStatus dimensionValidationStatus;
DimensionValidationStatus offsetDimensionValidationStatus;
boolean dimensionsAreValid = true;
jmgIpcLegerJournal.query2Log(qrIPCLedger);
query = qrIPCLedger.query();
query.dataSourceNo(1).update(true);
qbds = query.dataSourceTable(tablenum(JmgStampTrans));
qbr = qbds.addRange(fieldnum(JmgStampTrans,Module));
qbr.value(enum2str(JmgModuleEnum::IPC));
if (repost)
{
if (!fromDate || ! toDate)
{
throw error("@SYS39545");
}
}
else
{
if (!fromDate)
{
fromDate = str2date(#minDate, 123);
}
if (!toDate)
{
toDate = maxdate();
}
qbr = qbds.addRange(fieldnum(JmgStampTrans,Voucher));
qbr.value(queryValue(''));
}
if (fromDate > toDate)
{
throw error("@SYS16982");
}
qbr = qbds.addRange(fieldnum(JmgStampTrans, ProfileDate));
qbr.value(queryRange(fromDate, toDate));
this.checkForRepostings();
qrIPCLedger.query(query);
this.progressInit("@SYS39074", SysQuery::countTotal(qrIPCLedger), #AviUpdate);
if (! transDate)
transDate = systemdateget();
ttsbegin;
ledgerJournalTable.clear();
ledgerJournalTable.initValue();
ledgerJournalTable.JournalName = JmgParameters::find().JournalName;
ledgerJournalTable.Name = "@SYS39074";
ledgerJournalTable.insert();
voucher = new JournalVoucherNum(JournalTableData::newTable(ledgerJournalTable)).getNew(false);
jmgIpcLegerJournal.Voucher = voucher;
jmgIpcLegerJournal.TransDate = transDate;
jmgIpcLedgerTrans.Voucher = voucher;
this.clearVoucherNum(voucher);
jmgIpcLegerJournal.insert();
while (qrIPCLedger.next())
{
jmgStampTrans = qrIPCLedger.get(tablenum(JmgStampTrans));
progress.setText(HcmWorker::worker2Name(jmgStampTrans.Worker));
if (jmgStampTrans.JourRegType == JmgJourRegTypeEnum::Absence)
{
[accountNum, offsetAccountNum] = this.getAccountInfo(jmgStampTrans.JobIDAbs);
}
else
{
[accountNum, offsetAccountNum] = this.getAccountInfo(jmgStampTrans.JobId);
}
if (accountNum && offsetAccountNum)
{
jmgStampTrans.Voucher = jmgIpcLegerJournal.Voucher;
jmgIpcLedgerTrans.LedgerDimension = DimensionDefaultingService::serviceCreateLedgerDimension(accountNum, jmgStampTrans.DefaultDimension);
jmgIpcLedgerTrans.OffsetLedgerDimension = DimensionDefaultingService::serviceCreateLedgerDimension(offsetAccountNum, jmgStampTrans.DefaultDimension);
jmgIpcLedgerTrans.Price = Currency::amount(jmgStampTrans.HourPrice * jmgStampTrans.secondsReal());
jmgIpcLedgerTrans.StampTransRecId = jmgStampTrans.RecId;
// we need to call this validation for cases when the account structure defines rules for valid dimensions
// message is handled by the validate method
dimensionValidationStatus = DimensionValidation::validateByTree(jmgIpcLedgerTrans.LedgerDimension, transDate, true, true);
offsetDimensionValidationStatus = DimensionValidation::validateByTree(jmgIpcLedgerTrans.OffsetLedgerDimension, transDate, true, true);
if (dimensionValidationStatus != DimensionValidationStatus::Valid ||
offsetDimensionValidationStatus != DimensionValidationStatus::Valid)
{
dimensionsAreValid = false;
warning(strfmt("@SYS328784", HcmWorker::worker2Name(jmgStampTrans.Worker), jmgStampTrans.ProfileDate, jmgStampTrans.JourRegType));
continue; // we don't stop because we want to validate all the lines
}
if (jmgIpcLedgerTrans.Price)
{
select forupdate ledgerJournalTrans
where ledgerJournalTrans.JournalNum == ledgerJournalTable.JournalNum &&
ledgerJournalTrans.TransDate == transDate &&
ledgerJournalTrans.Voucher == voucher &&
ledgerJournalTrans.AccountType == LedgerJournalACType::Ledger &&
ledgerJournalTrans.OffsetAccountType == LedgerJournalACType::Ledger &&
((ledgerJournalTrans.DefaultDimension == jmgStampTrans.DefaultDimension) ||
(groupTransInDimensions == NoYes::No))
join RecId from dimAttrValueCombo where
dimAttrValueCombo.RecId == ledgerJournalTrans.LedgerDimension
join RecId from offsetDimAttrValueCombo where
offsetDimAttrValueCombo.RecId == ledgerJournalTrans.OffsetLedgerDimension;
if (! ledgerJournalTrans)
{
ledgerJournalTrans.clear();
ledgerJournalTrans.initValue();
}
ledgerJournalTrans.JournalNum = ledgerJournalTable.JournalNum;
ledgerJournalTrans.TransDate = transDate;
ledgerJournalTrans.Voucher = voucher;
ledgerJournalTrans.parmLedgerDimension(jmgIpcLedgerTrans.LedgerDimension);
ledgerJournalTrans.AmountCurDebit += jmgIpcLedgerTrans.Price;
ledgerJournalTrans.parmOffsetLedgerDimension(jmgIpcLedgerTrans.OffsetLedgerDimension);
ledgerJournalTrans.Txt = "@SYS39079";
if (groupTransInDimensions)
{
ledgerJournalTrans.DefaultDimension = jmgStampTrans.DefaultDimension;
}
// sum on 1 trans
if (! ledgerJournalTrans)
ledgerJournalTrans.insert();
else
ledgerJournalTrans.update();
jmgIpcLedgerTrans.insert();
jmgStampTrans.update();
}
}
cnt++;
progress.setCount(cnt);
}
if (! (select firstonly ledgerJournalTrans
where ledgerJournalTrans.JournalNum == ledgerJournalTable.JournalNum &&
ledgerJournalTrans.TransDate == transDate &&
ledgerJournalTrans.Voucher == voucher &&
((ledgerJournalTrans.AmountCurCredit) ||
(ledgerJournalTrans.AmountCurDebit ) ) ).RecId)
{
ttsabort;
warning("@SYS39160");
}
else if (!dimensionsAreValid)
ttsabort;
else
ttscommit;
}
Community Additions
ADD
Show: