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();
}
}
}