public boolean markVendInvoicesForSettlement(
LedgerJournalTrans _journalTrans,
VendAccount _vendAccount,
RecId _settlementRecId,
AmountCur _settlementAmount)
{
boolean ret;
InvoiceId invoiceId;
VendTrans vendTrans;
VendTable vendTable;
VendTransOpen vendTransOpen;
AmountCur settlementAmount;
CustVendOpenTransManager settleManager;
SpecTransManager specTransManager;
ret = true;
settleManager = CustVendOpenTransManager::construct(_journalTrans);
specTransManager = settleManager.parmSpecTransManager();
vendTable = VendTable::find(_vendAccount);
vendTrans = VendTrans::find(_settlementRecId);
vendTransOpen = VendTransOpen::findRefId(vendTrans.RecId);
settlementAmount = _settlementAmount;
invoiceId = vendTrans.Invoice;
if (vendTransOpen.RecId != 0)
{
AmountCur unmarkedAmount = specTransManager.findUnmarkedAmountForRef( vendTransOpen.AmountCur,vendTransOpen.Company(), vendTransOpen.TableId, vendTransOpen.RecId);
if (!settleManager.checkTransFullyMarkedByOtherSpec(vendTransOpen))
{
settleManager.updateTransMarked(vendTransOpen, NoYes::Yes);
if (abs(settlementAmount) <= abs(unmarkedAmount))
{
settleManager.updateSettleAmountPaymCur(vendTransOpen, settlementAmount);
}
else
{
settleManager.updateSettleAmountPaymCur(vendTransOpen, unmarkedAmount);
}
ttsBegin;
_journalTrans.selectForUpdate(true);
if (invoiceId)
{
_journalTrans.MarkedInvoice = invoiceId;
}
else
{
_journalTrans.MarkedInvoice = '*';
}
_journalTrans.SettleVoucher = SettlementType::SelectedTransact;
_journalTrans.update();
ttsCommit;
}
}
return ret;
}