Search your query

Monday, February 19, 2024

X++ code to create Ledger Journal Line (General Journal) for any ledger account type (Ledger, Vendor, Customer.. etc)

 Find below code will help you with Dimensions when you create GL Journal lines.

 

public void createJournalLines()

{

    LedgerJournalTrans                  ledgerJournalTrans;

    HcmWorker                           HcmWorker;

    Amount                              tmpAmount = 100;

    LedgerJournalTransTaxExtensionIN    ledgerJournalTransTaxExtensionIN;

    LedgerDimensionAccount              ledgerAccount;

    Boolean                             isLedgerTransaction = false;

    accountNum                          ledgerAccountNum_NonLedgerType;

    ledgerJournalCheckPost              ledgerJournalCheckPost;

 

    #ISOCountryRegionCodes

   

    ledgerJournalTrans.Voucher      = NumberSeq::newGetVoucherFromCode(numberSequenceTable.NumberSequence).voucher();

    ledgerJournalTrans.JournalNum   = headerJournal.JournalNum; //From Journal Header Table; //NumberSeq::newGetNum(LedgerParameters::numRefJournalNum()).num();        ledgerJournalTrans.CurrencyCode         = CompanyInfoHelper::standardCurrency();

    ledgerJournalTrans.ExchRate     = ExchangeRateHelper::exchRate(ledgerJournalTrans.CurrencyCode);

       

     //if (General Ledger Journal – Type is Ledger)

     {

         ledgerJournalTrans.AccountType = LedgerJournalACType::Ledger;

         isLedgerTransaction = Yes;

     }

     //else if (Customer, vendor)

     {

        ledgerJournalTrans.AccountType = LedgerJournalACType::Vendor; // select appropriate type based on input of Ledger dimension and account type of Posting profile.

        isLedgerTransaction = false;

    }

    ledgerJournalTrans.DefaultDimension     = // Input: Default dimension from Hcmworker in our example;

     if (isLedgerTransaction)

     {

            ledgerAccount = LedgerDimensionFacade::serviceCreateLedgerDimension(_ledgerJournalTrans.JournalNum, ledgerJournalTrans.DefaultDimension);

           ledgerJournalTrans.LedgerDimension = ledgerAccount;

     }

     else

     {

            ledgerAccountNum_ NonLedgerType  = LedgerDimensionFacade::getDisplayValueForLedgerDimension(ledgerAccount); // either vendor, customer or bank id

             ledgerAccount = LedgerDynamicAccountHelper::getDynamicAccountFromAccountNumber(ledgerAccountNum, ledgerJournalTrans.AccountType);

      }

     //if (if Debit amount)

    {

        ledgerJournalTrans.AmountCurDebit   = CurrencyExchangeHelper::amount(100, ledgerJournalTrans.CurrencyCode);

    }

    // else -- if credit amount.

    {

        ledgerJournalTrans.AmountCurCredit  = CurrencyExchangeHelper::amount(100, ledgerjournalTrans.CurrencyCode);

    }

     ledgerJournalTrans.TransDate                = Today();

    ledgerJournalTrans.Txt                      = "Create a Journal Line";

    ledgerJournalTrans.BankNegInstRecipientName = HcmWorker.name();

    ledgerJournalTrans.insert();

    if (SysCountryRegionCode::isLegalEntityInCountryRegion([#isoIN]))

    {                           

                                       ledgerJournalTransTaxExtensionIN.TaxModelDocLineExtensionIN::initFromBaseTable (ledgerJournalTrans);

                    ledgerJournalTransTaxExtensionIN.TaxModelDocLineExtensionIN::initFromExtensionTable(LedgerJournalTransTaxExtensionIN::findByLedgerJournalTrans(ledgerJournalTrans.RecId));

    ledgerJournalTransTaxExtensionIN.insert();

}

       

    // If post this journal..

    //Post the Journal

    ledgerJournalCheckPost = ledgerJournalCheckPost::newLedgerJournalTable(ledgerJournalTable,NoYes::Yes); // Header Journal Table.

    ledgerJournalCheckPost.run();

}


Wednesday, January 17, 2024

Extract All Dimension values from one ledger dimension and merge them with another Main Account (LedgerDimension, OffsetDimension)

 

// Step-1: Separate all dimensions from Source Main Account from Ledger Dimension and keep it as "OnlyDefaultDimension"


//Step-2: Merge this OnlyDefaultDimension with another Main Account Rec Id.


public static RecId createLedgerDimensionCombination(RecId _sourceLedgerDimension, RecId _targetMainAccountRecId)

    {

        RecId                   onlyDefaultDimension, targetLedgerDimension;

        DimensionHierarchyId    accountStructureId;


 // Extract from source ledger dimension

        onlyDefaultDimension    = LedgerDimensionFacade::getDefaultDimensionFromLedgerDimension(_sourceLedgerDimension);

 

        accountStructureId      = DimensionHierarchy:: getAccountStructure(_targetMainAccountRecId);

 

 // Adding with another main account.

        targetLedgerDimension   = LedgerDimensionDefaultingEngine:: getLedgerDimensionFromAccountAndDim(_targetMainAccountRecId, accountStructureId, onlyDefaultDimension);

 

        return targetLedgerDimension;

    }

Monday, August 14, 2023

Find Workflow Submission User (Employee) and Approval User's Employees, Designation and Date of Approval

 First we need to create one new class (named like "WorkflowUserListClass" and copy the following codes.


public class WorkflowUserListClass

{

// Class Declaration

    public WorkflowContextTableId   workflowOrginTableTableId;

    public WorkflowContextRecId     workflowOrginTableRecId;

 

    public WorkflowContextTableId parmWorkflowOrginTableTableId(WorkflowContextTableId  _workflowOrginTableTableId = workflowOrginTableTableId)

    {

        workflowOrginTableTableId = _workflowOrginTableTableId;

        return workflowOrginTableTableId;

    }

 

    public WorkflowContextRecId parmWorkflowOrginTableRecId(WorkflowContextRecId  _workflowOrginTableRecId = workflowOrginTableRecId)

    {

        workflowOrginTableRecId = _workflowOrginTableRecId;

        return workflowOrginTableRecId;

    }

  

    // This method is used for Approval workflow users list.

    public container findUserInfoFromWorkflow()

    {

        WorkflowTrackingStatusTable     workflowTrackingStatus;

        WorkflowTrackingTable           workflowTrackingTable;

        WorkflowTrackingCommentTable    workflowTrackingCommentTable;

        UserInfo userInfo;

        SalesTable                      saleTable;

        HcmWorkerRecId  workerRecId;

        HcmWorker       hcmWorker;

        container                       workerRecIdContainer;

       

        while select firstFast RecId, User from workflowTrackingTable

                order by RecId asc

            join workflowTrackingCommentTable

                where workflowTrackingCommentTable.WorkflowTrackingTable == workflowTrackingTable.RecId

            join UserInfo

                where UserInfo.id == WorkflowTrackingTable.User

            exists join workflowTrackingStatus

                where workflowTrackingTable.WorkflowTrackingStatusTable == workflowTrackingStatus.RecId

            && workflowTrackingStatus.ContextRecId      == workflowOrginTableRecId

            && workflowTrackingStatus.ContextTableId    == workflowOrginTableTableId

            && workflowTrackingTable.TrackingType == WorkflowTrackingType::Approval

        {

            workerRecId =  HcmWorker::userId2Worker(userInfo.id);

            workerRecIdContainer += workerRecId;

        }

        

        return workerRecIdContainer;

    }

 

    // This method is used to find the workflow approval dates.

    public container findWorkfFlowDatesFromWorkflow()

    {

        WorkflowTrackingStatusTable     workflowTrackingStatus;

        WorkflowTrackingTable           workflowTrackingTable;

        WorkflowTrackingCommentTable    workflowTrackingCommentTable;

        UserInfo userInfo;

        SalesTable                      saleTable;

        PurchTable                      purchTable;

        PurchReqTable                   purchReqTable;

        HcmWorkerRecId  workerRecId;

        HcmWorker       hcmWorker;

        TransDate       workflowDate;

        container                       workerRecIdContainer;

        container       workerDateContainer;

 

       

        while select firstFast RecId, User, CreatedDateTime from workflowTrackingTable

                order by RecId asc

            join workflowTrackingCommentTable

                where workflowTrackingCommentTable.WorkflowTrackingTable == workflowTrackingTable.RecId

            join UserInfo

                where UserInfo.id == WorkflowTrackingTable.User

            exists join workflowTrackingStatus

                where workflowTrackingTable.WorkflowTrackingStatusTable == workflowTrackingStatus.RecId

            && workflowTrackingStatus.ContextRecId      == workflowOrginTableRecId

            && workflowTrackingStatus.ContextTableId    == workflowOrginTableTableId

            && workflowTrackingTable.TrackingType == WorkflowTrackingType::Approval

        {

            //workerRecId =  HcmWorker::userId2Worker(userInfo.id);

            //workerRecIdContainer += workerRecId;

 

            workflowDate = DateTimeUtil::date(workflowTrackingTable.CreatedDateTime);

            workerDateContainer += workflowDate;

        }

        

        return workerDateContainer;

    }

  

    // This method is used to find the Position of the employees.

    public Description findPositionForWorker(HcmWorkerRecId _workerRecId)

    {

        HcmWorker                   hcmWorker;

        HcmPositionWorkerAssignment workerAssignment;

        HcmPosition                 hcmPosition;

        HcmPositionDetail           hcmPositionDetail;

 

        select recid, person from hcmWorker

            join worker, position from workerAssignment

                where hcmWorker.RecId == _workerRecId

                    && workerAssignment.Worker == hcmWorker.RecId

            join recid from hcmPosition

                where hcmPosition.RecId == workerAssignment.Position

           join position, description from hcmPositionDetail

                where hcmPositionDetail.Position == hcmPosition.RecId;

     

        return hcmPositionDetail.Description;

    }

 

    public  container findUserInfoFromWorkflowDelegate()

    {

        WorkflowTrackingStatusTable     workflowTrackingStatus;

        WorkflowTrackingTable           workflowTrackingTable;

        WorkflowTrackingCommentTable    workflowTrackingCommentTable;

        UserInfo userInfo;

        HcmWorkerRecId  workerRecId;

        HcmWorker       hcmWorker;

        container                       workerRecIdContainer;

       

        while select firstFast RecId, User from workflowTrackingTable

                order by RecId asc

            join workflowTrackingCommentTable

                where workflowTrackingCommentTable.WorkflowTrackingTable == workflowTrackingTable.RecId

            join UserInfo

                where UserInfo.id == WorkflowTrackingTable.User

            exists join workflowTrackingStatus

                where workflowTrackingTable.WorkflowTrackingStatusTable == workflowTrackingStatus.RecId

            && workflowTrackingStatus.ContextRecId      == workflowOrginTableRecId

            && workflowTrackingStatus.ContextTableId    == workflowOrginTableTableId

            && workflowTrackingTable.TrackingType == WorkflowTrackingType::Delegation

        {

            workerRecId =  HcmWorker::userId2Worker(userInfo.id);

            workerRecIdContainer += workerRecId;

        }

        

        return workerRecIdContainer;

    }

 

    public HcmWorkerRecId findUserInfoFromWorkflowSubmission()

    {

        WorkflowTrackingStatusTable     workflowTrackingStatus;

        WorkflowTrackingTable           workflowTrackingTable;

        WorkflowTrackingCommentTable    workflowTrackingCommentTable;

        UserInfo userInfo;

        HcmWorkerRecId                  workerRecId;

        HcmWorker                       hcmWorker;

        container                       workerRecIdContainer;

       

        select firstFast RecId, User from workflowTrackingTable

                order by RecId asc

            join workflowTrackingCommentTable

                where workflowTrackingCommentTable.WorkflowTrackingTable == workflowTrackingTable.RecId

            join UserInfo

                where UserInfo.id == WorkflowTrackingTable.User

            exists join workflowTrackingStatus

                where workflowTrackingTable.WorkflowTrackingStatusTable == workflowTrackingStatus.RecId

            && workflowTrackingStatus.ContextRecId      == workflowOrginTableRecId

            && workflowTrackingStatus.ContextTableId    == workflowOrginTableTableId

            && workflowTrackingTable.TrackingType == WorkflowTrackingType::Submission;

        {

            workerRecId =  HcmWorker::userId2Worker(userInfo.id);

        }

        

        return workerRecId;

    }

 

    public TransDate findDateWorkflowSubmission()

    {

        WorkflowTrackingStatusTable     workflowTrackingStatus;

        WorkflowTrackingTable           workflowTrackingTable;

        WorkflowTrackingCommentTable    workflowTrackingCommentTable;

        UserInfo userInfo;

        HcmWorkerRecId                  workerRecId;

        HcmWorker                       hcmWorker;

        container                       workerRecIdContainer;

        TransDate                       submissionDate;

       

        select firstFast RecId, User, CreatedDateTime from workflowTrackingTable

                order by RecId asc

            join workflowTrackingCommentTable

                where workflowTrackingCommentTable.WorkflowTrackingTable == workflowTrackingTable.RecId

            join UserInfo

                where UserInfo.id == WorkflowTrackingTable.User

            exists join workflowTrackingStatus

                where workflowTrackingTable.WorkflowTrackingStatusTable == workflowTrackingStatus.RecId

            && workflowTrackingStatus.ContextRecId      == workflowOrginTableRecId

            && workflowTrackingStatus.ContextTableId    == workflowOrginTableTableId

            && workflowTrackingTable.TrackingType == WorkflowTrackingType::Submission;

        {

            submissionDate =  DateTimeUtil::date(workflowTrackingTable.CreatedDateTime);

        }

        

        return submissionDate;

    }

 

}

 

To call this method in SSRS report, Goto DP class and using container variable, collect all the data and process for the report.