Preview:
class NAClaimReImbursementB2BPaymentGeneration extends RunBaseBatch
{

    boolean                         showInfo;
    boolean                         isRunningInAutoMode;
    //container                       emplAdvancePayRecId;

    #AviFiles
    #define.CurrentVersion(1)
    #LOCALMACRO.CurrentList
        isRunningInAutoMode,
    #ENDMACRO

    private void create(RecId _naClaimReImbursementRequestRecId)
    {

        LedgerJournalTable                      ledgerJournalTable;
        LedgerJournalTrans                      ledgerJournalTrans;
        NAClaimReImbursementRequest             naClaimReImbursementRequest;
        NAClaimReImbursementDetail              naClaimReImbursementDetail;
        NAClaimReImbursementPaymentHistory      naClaimReImbursementPaymentHistory;
        Amount                                  TotalClaimAmount=0;
        int                                     lineNo;
        voucher                                 voucher;
        HcmEmployment                           hcmEmployment;
        VendBankAccount vendBankAccount;
        date FirstWorkingDate;
        ExchangeRateType ExchangeRateType;
        ExchangeRateCurrencyPair ExchangeRateCurrencyPair;
        ExchangeRate ExchangeRate;

        if((dayName(dayOfWk(systemdateget()))=="Wednesday"))
        {
            FirstWorkingDate=systemdateget()+4;
        }

        else if((dayName(dayOfWk(systemdateget()))=="Thursday"))
        {
            FirstWorkingDate=systemdateget()+4;
        }

        else if((dayName(dayOfWk(systemdateget()))=="Friday"))
        {
            FirstWorkingDate=systemdateget()+3;
        }

        else if((dayName(dayOfWk(systemdateget()))=="Saturday"))
        {
            FirstWorkingDate=systemdateget()+2;
        }

        else FirstWorkingDate=systemDateGet()+2;


        select firstOnly naClaimReImbursementRequest where naClaimReImbursementRequest.RecId == _naClaimReImbursementRequestRecId;
        select vendBankAccount where vendBankAccount.HcmWorker==naClaimReImbursementRequest.HcmWorker;
        ledgerJournalTable.JournalName = HRMParameters::find().B2BPaymentJournalNameId;
        ledgerJournalTable.NumberSequenceTable = LedgerJournalName::Find(LedgerJournalTable.JournalName).NumberSequenceTable;
        ttsBegin;
        ledgerJournalTable.JournalNum = NumberSeq::newGetNum(HRMParameters::numRefPayRollLedgerJournalID()).num();
        ttsCommit;
        ledgerJournalTable.WorkflowApprovalStatus = LedgerJournalWFApprovalStatus::Approved;
        ledgerJournalTable.JournalType = LedgerJournalType::Payment;
        ledgerJournalTable.PaymentPosting = NoYes::Yes;
        ledgerJournalTable.Name = strfmt("Claim re-imbursement: %1", HcmWorker::find(naClaimReImbursementRequest.HcmWorker).name());

        ledgerJournalTable.insert();
        ttsBegin;
        voucher = NumberSeq::newGetVoucherFromCode(NumberSequenceTable::find(LedgerJournalName::Find(LedgerJournalTable.JournalName).NumberSequenceTable).NumberSequence).voucher();
        ttsCommit;

        // Create Ledger Journal Lines - Claim Details
        while select naClaimReImbursementDetail where naClaimReImbursementDetail.RequestID == naClaimReImbursementRequest.RequestID
        {
            real ClaimAmount=0;
            ledgerJournalTrans.JournalNum = ledgerJournalTable.JournalNum;
            ledgerJournalTrans.LineNum = LineNo + 1;
            ledgerJournalTrans.Company = curext();
            ledgerJournalTrans.PaymentPosting = NoYes::Yes;
            ledgerJournalTrans.HcmWorker = naClaimReImbursementRequest.HcmWorker;
            ledgerJournalTrans.Txt = strfmt('Claim %1: %2', naClaimReImbursementDetail.ClaimType, naClaimReImbursementDetail.Description);

            if(naClaimReImbursementDetail.CurrencyCode!="SAR")
            {
                select ExchangeRateType where ExchangeRateType.Name=="Average";
                select ExchangeRateCurrencyPair where ExchangeRateCurrencyPair.ExchangeRateType==ExchangeRateType.RecId
                 && ExchangeRateCurrencyPair.FromCurrencyCode==naClaimReImbursementDetail.CurrencyCode
                 && ExchangeRateCurrencyPair.ToCurrencyCode=="SAR";
                if(ExchangeRateCurrencyPair)
                {
                    select ExchangeRate where ExchangeRate.ExchangeRateCurrencyPair==ExchangeRateCurrencyPair.RecId;
                    ClaimAmount=  ((naClaimReImbursementDetail.ClaimAmount*ExchangeRate.ExchangeRate)/str2int(enum2str(ExchangeRateCurrencyPair.ExchangeRateDisplayFactor)));
                }
    
            }
            else
            {
                ClaimAmount = naClaimReImbursementDetail.ClaimAmount;
                        
            }

            if (ClaimAmount > 0 )
            {
                ledgerJournalTrans.AmountCurDebit = Round(ClaimAmount , 0.01);
                ledgerJournalTrans.AmountCurCredit = 0;
            }
            else
            {
                ledgerJournalTrans.AmountCurDebit = 0;
                ledgerJournalTrans.AmountCurCredit = Round(ClaimAmount, 0.01);
            }
          
            ledgerJournalTrans.CurrencyCode  = companyInfoHelper::standardCurrency();//naClaimReImbursementDetail.CurrencyCode;
            ledgerJournalTrans.ExchRate = ExchangeRateHelper::exchRate(companyInfoHelper::standardCurrency(), systemdateget() );

            ledgerJournalTrans.TransDate = FirstWorkingDate;

            select hcmEmployment where hcmEmployment.Worker == naClaimReImbursementRequest.HcmWorker;

            ledgerJournalTrans.Voucher = voucher;

            ledgerJournalTrans.AccountType = LedgerJournalACType::Ledger;

            ledgerJournalTrans.LedgerDimension =
                LedgerDimensionFacade::serviceCreateLedgerDimension(
        PayCodeExpenseAccount::Find(NAClaimParameters::find(naClaimReImbursementDetail.ClaimType).PayCodeId, HcmWorker::find(naClaimReImbursementRequest.HcmWorker).PayrollConfigurationId).ExpenseAccount, hcmEmployment.DefaultDimension);

        //DimensionDefaultingService::serviceCreateLedgerDimension(
        //PayCodeExpenseAccount::Find(NAClaimParameters::find(naClaimReImbursementDetail.ClaimType).PayCodeId, HcmWorker::find(naClaimReImbursementRequest.HcmWorker).PayrollConfigurationId).ExpenseAccount,
        //hcmEmployment.DefaultDimension);

            ledgerJournalTrans.OffsetAccountType = LedgerJournalACType::Vend;

            ledgerJournalTrans.OffsetLedgerDimension = LedgerDynamicAccountHelper::getDynamicAccountFromAccountNumber(HRMParameters::find().B2BAccountNum, LedgerJournalACType::Vend);
            //DimensionStorage::getDynamicAccount(HRMParameters::find().B2BAccountNum, LedgerJournalACType::Vend);

            ledgerJournalTrans.insert();

            LineNo++;
            TotalClaimAmount = TotalClaimAmount + ClaimAmount;
        }

        // Create Ledger Journal Line - Bank Detail
        if (TotalClaimAmount > 0)
        {
            ledgerJournalTrans.JournalNum = ledgerJournalTable.JournalNum;
            ledgerJournalTrans.LineNum = LineNo + 1;
            ledgerJournalTrans.Company = curext();
            ledgerJournalTrans.PaymentPosting = NoYes::Yes;
            ledgerJournalTrans.TransactionType = LedgerTransType::Payment;
            ledgerJournalTrans.PaymMode = HRMParameters::find().B2BPaymMode;
            ledgerJournalTrans.BankTransType = HRMParameters::find().B2BBankTransType;
            ledgerJournalTrans.HcmWorker = naClaimReImbursementRequest.HcmWorker;
            ledgerJournalTrans.Txt = strfmt('Claim re-imbursement payment for employee %1', HcmWorker::find(naClaimReImbursementRequest.HcmWorker).name());
            if (TotalClaimAmount > 0 )
            {
                ledgerJournalTrans.AmountCurCredit = 0;
                ledgerJournalTrans.AmountCurDebit = Round(TotalClaimAmount, 0.01);
            }
            ledgerJournalTrans.CurrencyCode  = companyInfoHelper::standardCurrency();
            ledgerJournalTrans.ExchRate = ExchangeRateHelper::exchRate(companyInfoHelper::standardCurrency(), systemdateget() );
            ledgerJournalTrans.TransDate = FirstWorkingDate;

            select hcmEmployment where hcmEmployment.Worker == naClaimReImbursementRequest.HcmWorker;

            ledgerJournalTrans.Voucher = voucher;

            ledgerJournalTrans.AccountType = LedgerJournalACType::Vend;
            ledgerJournalTrans.LedgerDimension = LedgerDynamicAccountHelper::getDynamicAccountFromAccountNumber(HRMParameters::find().B2BAccountNum, LedgerJournalACType::Vend);
            //DimensionStorage::getDynamicAccount(HRMParameters::find().B2BAccountNum, LedgerJournalACType::Vend);

            ledgerJournalTrans.OffsetAccountType = LedgerJournalACType::Bank;
            ledgerJournalTrans.OffsetLedgerDimension = LedgerDynamicAccountHelper::getDynamicAccountFromAccountNumber(HRMParameters::find().B2BBankAccountID, LedgerJournalACType::Bank);
            //DimensionStorage::getDynamicAccount(HRMParameters::find().B2BBankAccountID, LedgerJournalACType::Bank);


            
            ledgerJournalTrans.PaymMode="B2B";
            ledgerJournalTrans.BankTransType="B2B";
            ledgerJournalTrans.CustVendBankAccountId=vendBankAccount.AccountID;
            //ledgerJournalTrans.VendBankAccount=vendBankAccount.RecId;
            ledgerJournalTrans.PaymentStatus=CustVendPaymStatus::Sent;
            ledgerJournalTrans.insert();
            LineNo++;
        }

        ttsbegin;
        update_recordset naClaimReImbursementDetail setting Payment = NoYes::Yes where naClaimReImbursementDetail.RequestID == naClaimReImbursementRequest.RequestID;
        update_recordset naClaimReImbursementRequest setting Payment = NoYes::Yes, LastJournalNum = ledgerJournalTable.JournalNum where naClaimReImbursementRequest.RecId == _naClaimReImbursementRequestRecId;
        naClaimReImbursementPaymentHistory = null;
        naClaimReImbursementPaymentHistory.RequestID = NAClaimReImbursementRequest::find(_naClaimReImbursementRequestRecId).RequestID;
        naClaimReImbursementPaymentHistory.TransDate = FirstWorkingDate;
        naClaimReImbursementPaymentHistory.Payment = NoYes::Yes;
        naClaimReImbursementPaymentHistory.JournalNameId = HRMParameters::find().B2BPaymentJournalNameId;
        naClaimReImbursementPaymentHistory.JournalNum = ledgerJournalTable.JournalNum;
        naClaimReImbursementPaymentHistory.insert();
        ttscommit;

        if (showInfo)
        {
            info (strfmt("B2B Payment journal for claim re-imbursement request with number '%1' was been created under accounts payable payment", ledgerJournalTable.JournalNum));
        }
    }

    public void new()
    {
        super();
    }

    public boolean parmIsRunningInAutoMode(boolean _autoMode)
    {
        isRunningInAutoMode = _autoMode;
    
        return isRunningInAutoMode;
    }

    public boolean parmShowInfo(boolean _showInfo = showInfo)
    {
        showInfo = _showInfo;
    
        return showInfo;
    }

    protected boolean showInfo()
    {
        return true;
    }

    static void main(Args _args)
    {
        NAClaimReImbursementB2BPaymentGeneration        naClaimReImbursementB2BPaymentGeneration = new NAClaimReImbursementB2BPaymentGeneration();
        NAClaimReImbursementRequest                     naClaimReImbursementRequest;
        container                                       con;
        FormDataSource                                  fds = _args.record().dataSource();
        int                                             processMarkedRows;
    
        if (!_args || _args.dataset() != tableNum(NAClaimReImbursementRequest))
        {   //Function %1 has been incorrectly called.
            throw error(strFmt("@SYS22828", funcName()));
        }
    
        if (_args.parm() == 'CalledFromHeader')
        {
            processMarkedRows = 0;
        }
        else
        {
            processMarkedRows = 1;
        }
    
    
        try
        {
    
            select firstOnly naClaimReImbursementRequest where naClaimReImbursementRequest.RecId == _args.record().RecId;
            if (naClaimReImbursementRequest.Payment == NoYes::No && naClaimReImbursementRequest.WorkflowState == TradeWorkflowState::Completed)
            {
                naClaimReImbursementB2BPaymentGeneration.parmShowInfo(true);
                naClaimReImbursementB2BPaymentGeneration.parmIsRunningInAutoMode(false);
                naClaimReImbursementB2BPaymentGeneration.create(naClaimReImbursementRequest.RecId);
            }
            else if (naClaimReImbursementRequest.Payment == NoYes::Yes && naClaimReImbursementRequest.WorkflowState == TradeWorkflowState::Completed)
            {
                info (strfmt("%1", "Payment journal has been created"));
            }
            else
            {
                info (strfmt("%1", "Workflow not completed"));
            }
    
            if (_args.caller() && SysFormRun::hasMethod(_args.caller(), 'formUpdate'))
            {
                _args.caller().formUpdate();
                _args.caller().refreshDatasource();
            }
        }
        catch(Exception::Error)
        {
            exceptionTextFallThrough();
        }
    }

}
downloadDownload PNG downloadDownload JPEG downloadDownload SVG

Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!

Click to optimize width for Twitter