Powered By Blogger

creation of general journals and posting for data in stagging table

 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

DisableStandredButton

 My requirement is to disable the delete button for journals that were posted:- After Posting the button is enabled fig:- Line level also th...