here we get data from dotnet through sftp, we should create journal num sequences for all vouchers and post the journals but here while getting data from dotnnet there not given ledger dimension values , we should get from our d365 depends on accounttype
here is the code :
class FCC_CreateLedgerJournalsService extends SysOperationServiceBase
{
private LedgerJournalTable ledgerJournalTable = null;
protected LedgerJournalCheckPost ledgerJournalCheckPost;
str errorMessage;
str message;
public void createAndPostJournal()
{
DataArea dataArea;
FCC_VoucherJournalStaging _JournalTableStaging;
FromTime fromTime = timeNow();
NoYes error = noyes::No;
while select * from dataArea
{
changecompany(dataArea.id)
{
errorMessage = "";
while select _JournalTableStaging group by JVVoucherNo
where _JournalTableStaging.JVLegalEntityD365 == dataArea.id && _JournalTableStaging.JournalNum == ""
{
try
{
ttsbegin;
this.insertledgerJournalHeader(_JournalTableStaging);
ttscommit;
if(ledgerJournalTable.JournalNum)
{
ttsbegin;
ledgerJournalCheckPost = LedgerJournalCheckPost::newLedgerJournalTable(ledgerJournalTable,NoYes::Yes);
ledgerJournalCheckPost.run();
ttscommit;
}
}
catch(Exception::Error)
{
errorMessage = infolog.text(infologLine());
ttsbegin;
this.updateStaging(ledgerJournalTable.JournalNum, errorMessage);
ttscommit;
continue;
}
}
}
}
info(strFmt("Total time consumed: %1", timeConsumed(fromTime, timeNow())));
}
public void insertledgerJournalHeader(FCC_VoucherJournalStaging _JournalTableStaging)
{
ledgerJournalTable.initFromLedgerJournalName();
ledgerJournalTable.JournalNum = JournalTableData::newTable(ledgerJournalTable).nextJournalId();
ledgerJournalTable.JournalName = LedgerJournalName::find("JV").JournalName;
ledgerJournalTable.Name = "";
ledgerJournalTable.insert();
if(ledgerJournalTable.JournalNum)
{
this.insertLedgerJournalLines(ledgerJournalTable, _JournalTableStaging);
}
}
public void insertLedgerJournalLines(LedgerJournalTable _ledgerJournalTable, FCC_VoucherJournalStaging _JournalTableStaging)
{
VendTable vendTable;
DirPartyTable dirPartyTable;
LedgerJournalTrans ledgerJournalTrans = null;
FCC_VoucherJournalStaging journalTableStagingLocal;
while select journalTableStagingLocal
where journalTableStagingLocal.JVVoucherNo == _JournalTableStaging.JVVoucherNo
{
if(journalTableStagingLocal.JVAcntType == LedgerJournalACType::Vend)
{
vendTable = VendTable::find(journalTableStagingLocal.JVAcntCode);
if(vendTable)
{
vendTable.selectForUpdate(true);
vendTable.VendGroup = "Local";
ttsbegin;
vendTable.update();
ttscommit;
}
if(!vendTable)
{
vendTable.AccountNum = journalTableStagingLocal.JVAcntCode;
vendTable.VendGroup = "Local";
vendTable.initValue();
vendTable.insert();
}
}
ledgerJournalTrans.clear();
ledgerJournalTrans.initValue();
ledgerJournalTrans.Voucher = journalTableStagingLocal.JVVoucherNo;
ledgerJournalTrans.JournalNum = ledgerJournalTable.JournalNum;
ledgerJournalTrans.TransDate = journalTableStagingLocal.TransDate;
ledgerJournalTrans.AccountType = journalTableStagingLocal.JVAcntType;
if(journalTableStagingLocal.JVAcntType == LedgerJournalACType::Ledger)
{
MainAccount mainAccount;
container dimAttrValue;
mainAccount = MainAccount::findByMainAccountId(journalTableStagingLocal.JVAcntCode);
dimAttrValue = [mainAccount.MainAccountId];
dimAttrValue += this.getDimensionAttributeValue(MainAccountLegalEntity::findByMainAccountLegalEntity(mainAccount.RecId, CompanyInfo::current()).DefaultDimension);
ledgerJournalTrans.LedgerDimension = this.generateLedgerDimension(mainAccount, dimAttrValue);
}
if(journalTableStagingLocal.JVAcntType == LedgerJournalACType::Vend)
{
ledgerJournalTrans.LedgerDimension = LedgerDynamicAccountHelper::getDynamicAccountFromAccountNumber(journalTableStagingLocal.JVAcntCode,LedgerJournalACType::Vend);
}
if(journalTableStagingLocal.JVAcntType == LedgerJournalACType::Bank)
{
ledgerJournalTrans.LedgerDimension = LedgerDynamicAccountHelper::getDynamicAccountFromAccountNumber(journalTableStagingLocal.JVAcntCode,LedgerJournalACType::Bank);
}
if(journalTableStagingLocal.JVAcntType == LedgerJournalACType::Cust)
{
ledgerJournalTrans.LedgerDimension = LedgerDynamicAccountHelper::getDynamicAccountFromAccountNumber(journalTableStagingLocal.JVAcntCode,LedgerJournalACType::Cust);
}
ledgerJournalTrans.CurrencyCode = journalTableStagingLocal.JVCurrency;
ledgerJournalTrans.AmountCurCredit = journalTableStagingLocal.JVCreditAmtFC;
ledgerJournalTrans.AmountCurDebit = journalTableStagingLocal.JVDebitAmtFC;
ledgerJournalTrans.LineNum = journalTableStagingLocal.Id;
if(journalTableStagingLocal.JVExRate == 0)
{
ledgerJournalTrans.ExchRate = this.TIDF_ExchangeRate(journalTableStagingLocal.JVCurrency);
}
else
{
ledgerJournalTrans.ExchRate = journalTableStagingLocal.JVExRate;
}
ledgerJournalTrans.Approver = HcmWorker::userId2Worker(curuserid());
ledgerJournalTrans.Approved = NoYes::Yes;
ledgerJournalTrans.Txt = "";
ledgerJournalTrans.SkipBlockedForManualEntryCheck = true;
ledgerJournalTrans.defaultRow();
ledgerJournalTrans.insert();
//insertList.add(ledgerJournalTrans);
journalTableStagingLocal.selectForUpdate(true);
journalTableStagingLocal.JournalNum = ledgerJournalTable.JournalNum;
journalTableStagingLocal.update();
}
}
public Amount TIDF_ExchangeRate(CurrencyCode _str)
{
ExchangeRate exchangeRate;
ExchangeRateType ExchangeRateType;
ExchangeRateCurrencyPair exchangeRateCurrencyPair;
real exchRate;
CurrencyCode fromCurrency = _str; //this.CurrencyCode;
CurrencyCode toCurrency = Ledger::find(Ledger::current()).AccountingCurrency ;
TransDate transDate = systemdateget(); //this.TransDate;
select firstonly exchangeRateCurrencyPair
where exchangeRateCurrencyPair.FromCurrencyCode == fromCurrency
&& exchangeRateCurrencyPair.ToCurrencyCode == toCurrency;
exchRate = exchangeRate::findByDate(exchangeRateCurrencyPair.RecId,transDate).ExchangeRate;
return exchRate/100;
}
public void updateStaging(JournalId jourNum, str errorMsg)
{
FCC_VoucherJournalStaging journalTableStagingUpd;
LedgerJournalTrans ledgerJournalTransLocal;
while select ledgerJournalTransLocal
where ledgerJournalTransLocal.JournalNum == jourNum
{
select firstonly journalTableStagingUpd
where journalTableStagingUpd.JVVoucherNo == ledgerJournalTransLocal.Voucher
&& journalTableStagingUpd.JVLineNo == any2Str(ledgerJournalTransLocal.LineNum);
journalTableStagingUpd.selectForUpdate(true);
journalTableStagingUpd.ErrorMessage = errorMsg;
journalTableStagingUpd.Error = NoYes::Yes;
journalTableStagingUpd.doUpdate();
}
}
private container getDimensionAttributeValue(RecId recId)
{
DimensionAttributeValueSetItem dimensionAttributeValueSetItem;
container con;
while select dimensionAttributeValueSetItem
where dimensionAttributeValueSetItem.DimensionAttributeValueSet == recId
{
con += dimensionAttributeValueSetItem.DisplayValue;
}
return con;
}
public RefRecId generateLedgerDimension(MainAccount _mainAccount, container dimAttrValue)
{
int hierarchyCount;
int hierarchyIdx;
LedgerRecId ledgerRecId;
MainAccount mainAccount;
RefRecId recordvalue;
DimensionAttribute dimensionAttribute;
DimensionAttributeValue dimensionAttributeValue;
DimensionSetSegmentName DimensionSet;
DimensionStorage dimStorage;
DimensionAttributeValueContract ValueContract;
LedgerAccountContract LedgerAccountContract;
DimensionAttributeValueCombination dimensionAttributeValueCombination;
List valueContracts;
LedgerAccountContract = new LedgerAccountContract();
valueContracts = new List(Types::Class);
mainAccount = MainAccount::findByMainAccountId(_mainAccount.MainAccountId);
recordvalue = DimensionHierarchy::getAccountStructure(mainAccount.RecId,Ledger::current());
hierarchyCount = DimensionHierarchy::getLevelCount(recordvalue);
DimensionSet = DimensionHierarchyLevel::getDimensionHierarchyLevelNames(recordvalue);
if (recordvalue)
{
for(hierarchyIdx = 1;hierarchyIdx<=hierarchyCount;hierarchyIdx++)
{
if(hierarchyIdx == 1)
continue;
dimensionAttribute = DimensionAttribute::findByLocalizedName(DimensionSet[hierarchyIdx],false,CompanyInfo::find().LanguageId);
if(dimensionAttribute)
{
dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute,conPeek(dimAttrValue,hierarchyIdx));
if(dimensionAttributeValue)
{
ValueContract = new DimensionAttributeValueContract();
ValueContract.parmName(dimensionAttribute.Name) ;
ValueContract.parmValue(dimensionAttributeValue.CachedDisplayValue);
valueContracts.addEnd(ValueContract);
}
}
}
LedgerAccountContract.parmMainAccount(_mainAccount.MainAccountId);
LedgerAccountContract.parmValues(valueContracts);
dimStorage = DimensionServiceProvider::buildDimensionStorageForLedgerAccount(LedgerAccountContract);
dimensionAttributeValueCombination = DimensionAttributeValueCombination::find(dimStorage.save());
ledgerRecId = dimensionAttributeValueCombination.RecId;
}
else
{
warning (strfmt("Ledger dimension Issue for main account %1", _mainAccount.MainAccountId));
}
return ledgerRecId;
}
}
No comments:
Post a Comment