Create ledger journals in D365FO using X++ + LedgerDimensionACType

 internal final class HCL_LedgerJournalImportCSV extends RunBaseBatch

{

    private str         availableTypes = ".csv";

    //In the class Declaration control names for OK and upload control

    private const str   OkButtonName = 'OkButton';

    private const str   FileUploadName = 'FileUpload';

    Dialog              dialog;

    str                 textFile;

    QueryRun            gQueryRun;

    HCL_tempLedgerJournalTransForImport tempLedgerJournalTransForImport;

    #define.CurrentVersion(3)

    public Object dialog()

    {

        DialogGroup      dialogGroup;

        FormBuildControl formBuildControl;

        FileUploadBuild  dialogFileUpload;

        Set              enumSet = new Set(Types::Enum);

               

        dialog = super();

        dialogGroup = dialog.addGroup("File path");

        formBuildControl = dialog.formBuildDesign().control(dialogGroup.name());

       

        dialogFileUpload = formBuildControl.addControlEx(classstr(FileUpload), FileUploadName);

        dialogFileUpload.style(FileUploadStyle::MinimalWithFilename);

        dialogFileUpload.baseFileUploadStrategyClassName(classstr(FileUploadTemporaryStorageStrategy));

        dialogFileUpload.fileTypesAccepted(availableTypes);

        dialogFileUpload.fileNameLabel("@SYS308842");

   

        return dialog;

    }


    protected void setDialogOkButtonEnabled(DialogRunbase _dialog, boolean _isEnabled)

    {        FormControl okButtonControl = this.getFormControl(_dialog, OkButtonName);


        if (okButtonControl)

        {

            okButtonControl.enabled(_isEnabled);

        }

    }


    protected FormControl getFormControl(DialogRunbase _dialog, str _controlName)

    {

        return _dialog.formRun().control(_dialog.formRun().controlId( _controlName));

    }


    protected void uploadCompleted()

    {

        FileUpload fileUpload = this.getFormControl(dialog, FileUploadName);

        fileUpload.notifyUploadCompleted -= eventhandler(this.UploadCompleted);

               

        textFile = fileUpload.fileName();


        this.setDialogOkButtonEnabled(dialog, true);

    }


    /// Disables the dialog Ok button until the file upload is complete.

   

    public void dialogPostRun(DialogRunbase _dialog)

    {

        FileUpload fileUpload = this.getFormControl(_dialog, FileUploadName);

        fileUpload.notifyUploadCompleted += eventhandler(this.uploadCompleted);

        this.setDialogOkButtonEnabled(_dialog, false);

    }


    /// <summary>

    /// Prcoess class where the CSV file is accesed and storeinto table for furhter journal creations

    /// </summary>

    void processCSVFile()

    {

        #File

        container               currentLine;

        int                     totalOfLines;

        CommaTextStreamIo       localStream;

        Num                     number;

        int                     fileLineNumber;

        MainAccountNum          mainAccountId,offSetMainAccountId;

        LedgerJournalACType     LedgerJournalACType;

        HCL_LedgerJournalImportCSV          ledgerJournalmportCSV;

      

        FileUpload fileUploadControl                        = this.getFormControl(dialog, FileUploadName);

        FileUploadTemporaryStorageResult fileUploadResult  = fileUploadControl.getFileUploadResult();

       

        if (fileUploadResult != null && fileUploadResult.getUploadStatus())

        {

            textFile = fileUploadResult.getDownloadUrl();

        }

       

        localStream = CommaTextStreamIo::constructForRead(File::UseFileFromURL(textFile));

         

        if (localStream.status() != IO_Status::Ok)

        {

            throw error(strfmt('Is not possible to open the file. Error %1',enum2str(localStream.status())));

        }

   

        localStream.inFieldDelimiter("\,");

        localStream.inRecordDelimiter("\n");

   

        currentLine = localStream.read();

        fileLineNumber++;

   

        if(conlen(currentLine) == 1)

        {

            throw error('Is not possible to import the file, incorrect format');

        }

           

        currentLine = localStream.read();

        fileLineNumber++;

   

        while(currentLine)

        {

            tempLedgerJournalTransForImport.clear();

            tempLedgerJournalTransForImport.COMPANY             = conPeek(currentLine,1);//Company

            //tempLedgerJournalTransForImport.JOURNALNUM          = conPeek(currentLine,2);//Journal

            tempLedgerJournalTransForImport.JOURNALNAME         = conPeek(currentLine,2);//Name

            tempLedgerJournalTransForImport.TRANSDATE           = str2Date(conPeek(currentLine,3),213);//Date

            tempLedgerJournalTransForImport.ACCOUNTTYPE         = str2Enum(ledgerJournalACType,conPeek(currentLine,4));//AccountType

            tempLedgerJournalTransForImport.LINENUM             = conPeek(currentLine,5);//LineNum

            mainAccountId                                       = conPeek(currentLine,6);

            if (mainAccountId && tempLedgerJournalTransForImport.ACCOUNTTYPE == LedgerJournalACType::Ledger)

            {

                tempLedgerJournalTransForImport.LedgerDimension     = this.getLedgerDimension(mainAccountId,conPeek(currentLine,7),conPeek(currentLine,8),conPeek(currentLine,9),conPeek(currentLine,10),conPeek(currentLine,11),NoYes::Yes);

            }

            else if (mainAccountId)

            {

                tempLedgerJournalTransForImport.LedgerDimension     = this.getLedgerJournalACTypeIfNotLedger(mainAccountId, tempLedgerJournalTransForImport.ACCOUNTTYPE,conPeek(currentLine,7),conPeek(currentLine,8),conPeek(currentLine,9),conPeek(currentLine,10),conPeek(currentLine,11),NoYes::Yes);

            }

            

            tempLedgerJournalTransForImport.TXT                 = conPeek(currentLine,12);//Text

            tempLedgerJournalTransForImport.AMOUNTCURDEBIT      = conPeek(currentLine,13);//Debit

            tempLedgerJournalTransForImport.AMOUNTCURCREDIT     = conPeek(currentLine,14);//Credit

            tempLedgerJournalTransForImport.INVOICE             = conPeek(currentLine,15);//Inv006oiceNumber

            tempLedgerJournalTransForImport.DUE                 = str2Date(conPeek(currentLine,16),213);//Due Date

            tempLedgerJournalTransForImport.OFFSETACCOUNTTYPE   = str2Enum(ledgerJournalACType,conPeek(currentLine,17));//OffsetAccountType

            offSetMainAccountId                                       = conPeek(currentLine,18);

            if (offSetMainAccountId && tempLedgerJournalTransForImport.ACCOUNTTYPE == LedgerJournalACType::Ledger)

            {

                tempLedgerJournalTransForImport.OffsetLedgerDimension = this.getLedgerDimension(offSetMainAccountId,conPeek(currentLine,19),conPeek(currentLine,20),conPeek(currentLine,21),conPeek(currentLine,22),conPeek(currentLine,23),NoYes::No);

            }

            else if (offSetMainAccountId)

            {

                tempLedgerJournalTransForImport.OffsetLedgerDimension = this.getLedgerJournalACTypeIfNotLedger(offSetMainAccountId,tempLedgerJournalTransForImport.OFFSETACCOUNTTYPE,conPeek(currentLine,19),conPeek(currentLine,20),conPeek(currentLine,21),conPeek(currentLine,22),conPeek(currentLine,23),NoYes::No);

            }

            tempLedgerJournalTransForImport.PAYMENT             = conPeek(currentLine,24);//Terms of payment

            tempLedgerJournalTransForImport.DOCUMENTNUM         = conPeek(currentLine,25);//Document

            tempLedgerJournalTransForImport.DOCUMENTDATE        = conPeek(currentLine,26);//Document Date

            tempLedgerJournalTransForImport.PAYMMODE            = conPeek(currentLine,27);//Method of Payment

            tempLedgerJournalTransForImport.CURRENCYCODE        = conPeek(currentLine,28);//Currency

            tempLedgerJournalTransForImport.BANKTRANSTYPE       = conPeek(currentLine,29);//Bank Transaction Type

            tempLedgerJournalTransForImport.PAYMREFERENCE       = conPeek(currentLine,30);//Payment Reference

            tempLedgerJournalTransForImport.insert();

            //info(strFmt("Number : %1",number));


            currentLine = localStream.read();

        }

        ledgerJournalmportCSV = new HCL_LedgerJournalImportCSV();

        ledgerJournalmportCSV.createJournal();

    }


    /// <summary>

    /// Class entry point. The system will call this method when a designated menu 

    /// is selected or when execution starts and this class is set as the startup class.

    /// </summary>

    /// <param name = "_args">The specified arguments.</param>

    public static void main(Args _args)

    {

        HCL_LedgerJournalImportCSV ledgerJournalmportCSV;

        ledgerJournalmportCSV = new HCL_LedgerJournalImportCSV();

        ledgerJournalmportCSV.prompt();

        {

            ttsbegin;

            ledgerJournalmportCSV.processCSVFile();

            ttscommit;

        }

    }


    protected void createJournal()

    {

        LedgerJournalTable                  ledgerJournalTable;

        JournalTableData                    journalTableData;

        LedgerjournalTrans                  ledgerjournalTrans;

        HCL_tempLedgerJournalTransForImport tempLedgerJournalTransForImportLoc1, tempLedgerJournalTransForImportLoc2;


        while select journalName,CurrencyCode from tempLedgerJournalTransForImportLoc1

            group by journalName

        {

            ledgerJournalTable.initFromLedgerJournalName("");//from excel file

            journalTableData                = JournalTableData::newTable(ledgerJournalTable);

            ledgerJournalTable.JournalNum   = journalTableData.nextJournalId();

            ledgerJournalTable.JournalName  = tempLedgerJournalTransForImportLoc1.JournalName;

            ledgerJournalTable.CurrencyCode = tempLedgerJournalTransForImportLoc1.CurrencyCode;


            if (ledgerJournalTable.validateWrite())

            {

                ledgerJournalTable.insert();

            }


            if (ledgerJournalTable.RecId)

            {

                //create a Temp table // based on excel

                while select *  from tempLedgerJournalTransForImportLoc2

                    where tempLedgerJournalTransForImportLoc2.JournalName == ledgerJournalTable.JournalName

                {

                    ledgerJournalTrans.COMPANY              = tempLedgerJournalTransForImportLoc2.COMPANY;

                    ledgerJournalTrans.JOURNALNUM           = ledgerJournalTable.JournalNum;

                    ledgerjournalTrans.Voucher              = this.getVoucher(ledgerJournalTable);

                    //ledgerJournalTrans.JOURNALNAME          = tempLedgerJournalTransForImportLoc2.JOURNALNAME;

                    ledgerJournalTrans.TRANSDATE            = tempLedgerJournalTransForImportLoc2.TRANSDATE;

                    ledgerJournalTrans.ACCOUNTTYPE          = tempLedgerJournalTransForImportLoc2.ACCOUNTTYPE;

                    ledgerJournalTrans.LINENUM              = tempLedgerJournalTransForImportLoc2.LINENUM;

                    ledgerJournalTrans.LedgerDimension      = tempLedgerJournalTransForImportLoc2.LedgerDimension;

                    ledgerJournalTrans.TXT                  = tempLedgerJournalTransForImportLoc2.TXT;

                    ledgerJournalTrans.AMOUNTCURDEBIT       = tempLedgerJournalTransForImportLoc2.AMOUNTCURDEBIT;

                    ledgerJournalTrans.AMOUNTCURCREDIT      = tempLedgerJournalTransForImportLoc2.AMOUNTCURCREDIT;

                    ledgerJournalTrans.INVOICE              = tempLedgerJournalTransForImportLoc2.INVOICE;

                    ledgerJournalTrans.DUE                  = tempLedgerJournalTransForImportLoc2.DUE;

                    ledgerJournalTrans.OFFSETACCOUNTTYPE    = tempLedgerJournalTransForImportLoc2.OFFSETACCOUNTTYPE;

                    ledgerJournalTrans.OffsetLedgerDimension = tempLedgerJournalTransForImportLoc2.OffsetLedgerDimension;

                    ledgerJournalTrans.PAYMENT              = tempLedgerJournalTransForImportLoc2.PAYMENT;

                    ledgerJournalTrans.DOCUMENTNUM          = tempLedgerJournalTransForImportLoc2.DOCUMENTNUM;

                    ledgerJournalTrans.DOCUMENTDATE         = tempLedgerJournalTransForImportLoc2.DOCUMENTDATE;

                    ledgerJournalTrans.PAYMMODE             = tempLedgerJournalTransForImportLoc2.PAYMMODE;

                    ledgerJournalTrans.CURRENCYCODE         = tempLedgerJournalTransForImportLoc2.CURRENCYCODE;

                    ledgerJournalTrans.BANKTRANSTYPE        = tempLedgerJournalTransForImportLoc2.BANKTRANSTYPE;

                    ledgerJournalTrans.PAYMREFERENCE        = tempLedgerJournalTransForImportLoc2.PAYMREFERENCE;

                    ledgerjournalTrans.Approved             = NoYes::Yes;

                    ledgerJournalTrans.SkipBlockedForManualEntryCheck   = true;

                    /*

                    ledgerJournalTrans.defaultRow();

                    */

                    if (ledgerJournalTrans.validateWrite())

                    {

                        ledgerjournalTrans.insert();

                    }

                }

            }


            //return ledgerJournalTable.JournalNum;

        }

        delete_from tempLedgerJournalTransForImport;

    }


    public Voucher getVoucher(ledgerJournalTable _ledgerJournalTable)

    {

        NumberSequenceTable                 numberSequenceTable;

        numberSequenceTable = NumberSequenceTable::find(LedgerJournalName::find(_ledgerJournalTable.JournalName).NumberSequenceTable);

        return  NumberSeq::newGetVoucherFromCode(numberSequenceTable.NumberSequence).voucher();

        //return NumberSequenceTable::find(numberSequenceTable.RecId).vouch

    }


    /// <summary>

    /// </summary>

    /// <returns>Return the class desc</returns>

    public client server static ClassDescription description()

    {

        return "Ledger journal import CSV";

    }


    /// <summary>

    /// </summary>

    /// <returns>Whether the class can be used in a batch task</returns>

    protected boolean canGoBatchJournal()

    {

        return true;

    }


    /// <summary>

    /// <returns></returns>

    public container pack()

    {

        container pack = conNull();


        if (gQueryRun)

        {

            pack = gQueryRun.pack();

        }

        return [#CurrentVersion] + [pack];

    }


    /// <summary>

    /// </summary>

    /// <param name = "packedClass"></param>

    /// <returns></returns>

    public boolean unpack(container _packedClass)

    {

        boolean     ret         = true;

        int         version     = RunBase::getVersion(_packedClass);

        container   packedQuery = conNull();


        switch (version)

        {

            case #CurrentVersion:

                [version, packedQuery] = _packedClass;


                if (SysQuery::isPackedOk(packedQuery))

                {

                    gQueryRun   = new QueryRun(packedQuery);

                    ret         = true;

                }

                break;


            default:

                ret = false;

        }

        return ret;

    }


    /// <summary>

    /// Allows the class go batch

    /// </summary>

    /// <returns>Return the result</returns>

    public boolean canGoBatch()

    {

        return true;

    }


    /// <summary>

    /// </summary>

    /// <returns>Return the true result</returns>

    public boolean runsImpersonated()

    {

        return true;

    }


    /// <summary>

    /// Doesn't allows the class run in the new session

    /// </summary>

    /// <returns>Return the result</returns>

    protected boolean canRunInNewSession()

    {

        return true;

    }


    /// <summary>

    /// </summary>

    /// <returns></returns>

    public boolean showQueryValues()

    {

        return true;

    }


    /// <summary>

    /// </summary>

    /// <returns></returns>

    public QueryRun queryRun()

    {

        return gQueryRun;

    }


    /// <summary>

    ///  Retruns the ledger dimenion for below param list

    /// </summary>

    /// <param name = "_ledgerAccount"> main account id</param>

    /// <param name = "_BusinessUnit"></param>

    /// <param name = "_RegionalSurgicalOffice"></param>

    /// <param name = "_ConsultationOffice"></param>

    /// <param name = "_Department"></param>

    /// <param name = "_Category"></param>

    /// <param name = "_isLedgerYesOrOffSetDim"> Dummy param, just to identified the Ledger Dimension and Offset Ledeger Dimension to execute if block</param>

    /// <returns></returns>

    public DimensionDynamicAccount getLedgerDimension(str _ledgerAccount,

                                                        str _BusinessUnit,

                                                        str _RegionalSurgicalOffice,

                                                        str _ConsultationOffice,

                                                        str _Department,

                                                        str _Category,

                                                        NoYes _isLedgerYesOrOffSetDim)

    {

        DimensionServiceProvider      DimensionServiceProvider = new DimensionServiceProvider();

        LedgerAccountContract        LedgerAccountContract = new LedgerAccountContract();

        DimensionAttributeValueContract   ValueContract;

        List                ListValueContract = new List(Types::Class);

        dimensionAttributeValueCombination dimensionAttributeValueCombination;

        DimensionStorage          dimStorage;

        if (_isLedgerYesOrOffSetDim == NoYes::Yes)

        {

            if (_businessUnit)

            {

                ValueContract = new DimensionAttributeValueContract();

                ValueContract.parmName('BusinessUnit') ;

                ValueContract.parmValue(_BusinessUnit);

                ListValueContract.addEnd(ValueContract);

            }

            if (_RegionalSurgicalOffice)

            {

                ValueContract = new DimensionAttributeValueContract();

                ValueContract.parmName('RegionalSurgicalOffice') ;

                ValueContract.parmValue(_RegionalSurgicalOffice);

                ListValueContract.addEnd(ValueContract);

            }

            //Department

            if (_ConsultationOffice)

            {

                ValueContract = new DimensionAttributeValueContract();

                ValueContract.parmName('ConsultationOffice') ;

                ValueContract.parmValue(_ConsultationOffice);

            }


            if (_Department)

            {

                ValueContract = new DimensionAttributeValueContract();

                ValueContract.parmName('Department') ;

                ValueContract.parmValue(_Department);

                ListValueContract.addEnd(ValueContract);

            }


            if (_Category)

            {

                ValueContract = new DimensionAttributeValueContract();

                ValueContract.parmName('Category') ;

                ValueContract.parmValue(_Category);

                ListValueContract.addEnd(ValueContract);

            }

        }

        else

        {

            if (_businessUnit)

            {

                ValueContract = new DimensionAttributeValueContract();

                ValueContract.parmName('Offset BusinessUnit') ;

                ValueContract.parmValue(_BusinessUnit);

                ListValueContract.addEnd(ValueContract);

            }

            if (_RegionalSurgicalOffice)

            {

                ValueContract = new DimensionAttributeValueContract();

                ValueContract.parmName('Offset RegionalSurgicalOffice') ;

                ValueContract.parmValue(_RegionalSurgicalOffice);

                ListValueContract.addEnd(ValueContract);

            }

            //Department

            if (_ConsultationOffice)

            {

                ValueContract = new DimensionAttributeValueContract();

                ValueContract.parmName('Offset ConsultationOffice') ;

                ValueContract.parmValue(_ConsultationOffice);

            }


            if (_Department)

            {

                ValueContract = new DimensionAttributeValueContract();

                ValueContract.parmName('Offset Department') ;

                ValueContract.parmValue(_Department);

                ListValueContract.addEnd(ValueContract);

            }


            if (_Category)

            {

                ValueContract = new DimensionAttributeValueContract();

                ValueContract.parmName('Offset Category') ;

                ValueContract.parmValue(_Category);

                ListValueContract.addEnd(ValueContract);

            }

        }

   

        LedgerAccountContract.parmMainAccount(_ledgerAccount);

        LedgerAccountContract.parmValues(ListValueContract);

        dimStorage = DimensionServiceProvider::buildDimensionStorageForLedgerAccount(LedgerAccountContract);

        dimensionAttributeValueCombination = DimensionAttributeValueCombination::find(dimStorage.save());

        return dimensionAttributeValueCombination.RecId;

    }


    /// <summary>

    ///    Constructs a <c>LedgerDimensionAccount</c> object for the specified non-ledger account.

    /// </summary>

    /// <param name="_account">

    ///    The string value of the account.

    /// </param>

    /// <param name="_accountType">

    ///    The type of the account.

    /// </param>

    /// <param name="_enumType">

    ///    The type of the enumeration for the account type.

    /// </param>

    /// <param name="_custVend">

    ///    A value that indicates whether this is a customer or vendor module.

    /// </param>

    /// <returns>

    ///    The record ID of a ledger dimension that represents the specified account and type.

    /// </returns>

    public static server DimensionDynamicAccount getDynamicAccount(

        LedgerJournalAC         _account,

        int                     _accountType,

        enumId                  _enumType = enumnum(LedgerJournalACType),

        ModuleInventCustVend    _custVend = ModuleInventCustVend::Cust)

    {

        DimensionStorage dimStorage;

        DimensionAttributeValue dimAttrValue;

        DimensionStorageSegment segment;


        // Empty account is a zero ledger dimension

        if (!_account)

        {

            return 0;

        }


        // Multi-typed accounts have exactly one segment

        dimStorage = DimensionStorage::construct(1);


        // Use the system-generated dimension hierarchy for the account type

        dimStorage.addAccountStructure(HCL_LedgerJournalImportCSV::getHierarchyIdByAccountType(_accountType, _enumType, _custVend), 1);

        segment = dimStorage.getSegment(1);


        // Set the account string value

        segment.parmDisplayValue(_account);


        // Get the dimension attribute value for the account

        dimAttrValue = DimensionAttributeValue::findByDimensionAttributeAndValue(

            HCL_LedgerJournalImportCSV::getAttributeByAccountType(_accountType, _enumType, _custVend),

            _account,

            false,

            true);


        // The backing entity must exist for us to create a valid combination, otherwise no level values get inserted and a 0 recId is returned

        //    debug::assert(dimAttrValue.RecId != 0);


        segment.parmDimensionAttributeValueId(dimAttrValue.RecId);

        segment.parmHashKey(dimAttrValue.HashKey);


        // Required to reset the hasChanged flag

        dimStorage.setSegment(1, segment);


        return dimStorage.save();

    }


    /// <summary>

    /// Gets the <c>DimensionHierarchyType</c> field for the specified account type.

    /// </summary>

    /// <param name="_accountType">

    /// The account type from which to retrieve a <c>DimensionHierarchyType</c>.

    /// </param>

    /// <param name="_enumType">

    /// The type of the enumeration that specifies the account type.

    /// </param>

    /// <param name="_custVend">

    /// A value that indicates whether this is a customer or vendor module.

    /// </param>

    /// <returns>

    /// A system-generated dimension hierarchy for the specified account type.

    /// </returns>

    public static DimensionHierarchyType getHierarchyTypeByAccountType( int     _accountType,

                                                                        EnumId  _enumType = enumNum(LedgerJournalACType),

                                                                        ModuleInventCustVend _custVend = ModuleInventCustVend::Cust)

    {

        // <GIN>

        #ISOCountryRegionCodes

        // </GIN>


        switch (_enumType)

        {

            case enumNum(LedgerJournalACType):

            switch (_accountType)

                {

                    case LedgerJournalACType::Bank:

                        return DimensionHierarchyType::BankAccount;

                    case LedgerJournalACType::Cust:

                        return DimensionHierarchyType::Customer;

                    case LedgerJournalACType::FixedAssets:

                        return DimensionHierarchyType::FixedAsset;

                    case LedgerJournalACType::Ledger:

                        return DimensionHierarchyType::AccountStructure; // Used by dynamic accounts as a marker to mean account structure or default account

                    case LedgerJournalACType::Project:

                        return DimensionHierarchyType::Project;

                    case LedgerJournalACType::Vend:

                        return DimensionHierarchyType::Vendor;

                    // <GEERU>

                    case LedgerJournalACType::FixedAssets_RU:

                        return DimensionHierarchyType::FixedAssets_RU;

                    case LedgerJournalACType::RDeferrals:

                        return DimensionHierarchyType::RDeferrals;

                    case LedgerJournalACType::RCash:

                        return DimensionHierarchyType::RCash;

                    case LedgerJournalACType::Employee_RU:

                        return DimensionHierarchyType::Employee_RU;

                    // </GEERU>

                }

                break;

        }


        // Should not get to here, as the enumeration was not expected to exist

        throw error(Error::wrongUseOfFunction(funcName()));

    }


    /// <summary>

    /// Gets a system-generated dimension hierarchy for the specified account type.

    /// </summary>

    /// <param name="_accountType">

    /// The account type from which to retrieve a dimension hierarchy.

    /// </param>

    /// <param name="_enumType">

    /// The type of the enumeration that specifies the account type.

    /// </param>

    /// <param name="_custVend">

    /// A value that indicates whether this is a customer or a vendor module.

    /// </param>

    /// <returns>

    /// A system-generated dimension hierarchy for the specified account type.

    /// </returns>

    public static RecId getHierarchyIdByAccountType(

    int _accountType,

    EnumId _enumType = enumNum(LedgerJournalACType),

    ModuleInventCustVend _custVend = ModuleInventCustVend::Cust)

    {

        DimensionHierarchyType dimHierarchyType;


        // Set structure type based on account type

        dimHierarchyType = HCL_LedgerJournalImportCSV::getHierarchyTypeByAccountType(_accountType, _enumType, _custVend);

        return DimensionHierarchy::getHierarchyIdByHierarchyType(dimHierarchyType);

    }


    public static DimensionAttribute getAttributeByAccountType(

    int _accountType,

    enumId _enumType = enumNum(LedgerJournalACType),

    ModuleInventCustVend _custVend = ModuleInventCustVend::Cust)

    {

        DimensionHierarchyType dimHierarchyType;


        // Set appropriate backing entity information based on type

        dimHierarchyType = HCL_LedgerJournalImportCSV::getHierarchyTypeByAccountType(_accountType, _enumType, _custVend);

        return DimensionAttribute::getAttributeByHierarchyType(dimHierarchyType);

    }


    public DimensionDynamicAccount getLedgerJournalACTypeIfNotLedger(str _ledgerAccount,

                                            LedgerJournalACType _accountType,

                                            str _BusinessUnit,

                                            str _RegionalSurgicalOffice,

                                            str _ConsultationOffice,

                                            str _Department,

                                            str _Category,

                                            NoYes   _noYes)

    {

        //DimensionDynamicAccount ledgerDim;

        container               cont1,cont2,ledgerDimension;

        int                     cnt;


        cont1           = conNull();

        cont2           = conNull();

        ledgerDimension = conNull();

        cnt             = 0;

        //Offset Account Type


        return HCL_LedgerJournalImportCSV::getDynamicAccount(_ledgerAccount,enum2int(_accountType));

        // Below commented code can be used when we need defualt dimensions

        /*if(_noYes == NoYes::Yes)

        {

            if(_BusinessUnit != '')

            {

                cnt++;

                cont2+=['BusinessUnit',_BusinessUnit];

            }

            if(_RegionalSurgicalOffice != '')

            {

                cnt++;

                cont2+=['RegionalSurgicalOffice',_RegionalSurgicalOffice];

            }

            if(_ConsultationOffice != '')

            {

                cnt++;

                cont2+=['ConsultationOffice',_ConsultationOffice];

            }

            if(_Department != '')

            {

                cnt++;

                cont2+=['Department',_Department];

            }

            if(_Category != '')

            {

                cnt++;

                cont2+=['Category',_Category];

            }

        }

        else

        {

            if(_BusinessUnit != '')

            {

                cnt++;

                cont2+=['Offset BusinessUnit',_BusinessUnit];

            }

            if(_RegionalSurgicalOffice != '')

            {

                cnt++;

                cont2+=['Offset RegionalSurgicalOffice',_RegionalSurgicalOffice];

            }

            if(_ConsultationOffice != '')

            {

                cnt++;

                cont2+=['Offset ConsultationOffice',_ConsultationOffice];

            }

            if(_Department != '')

            {

                cnt++;

                cont2+=['Offset Department',_Department];

            }

            if(_Category != '')

            {

                cnt++;

                cont2+=['Offset Category',_Category];

            }

        }

        

            

            //ledgerDimension +=cnt;

            //ledgerDimension +=cont2;

            //ledgerJournalTrans.OffsetLedgerDimension = ledgerDim;

            Info(strFmt("%1",ledgerDim));


            //DimensionDefault = AxdDimensionUtil::getDimensionAttributeValueSetId(ledgerDimension);

            //LedgerJournalTrans.modifiedField(fieldNum(LedgerJournalTrans,OffsetLedgerDimension));

            //ledgerJournalTrans.OffsetDefaultDimension = DimensionDefault;

            } */

    }


}

Comments

Popular posts from this blog

Excel Import into D365 using x++ code

Sales invoice report