public boolean markCustInvoicesForSettlement(
LedgerJournalTrans _journalTrans,
CustAccount _custAccount,
RecId _settlementRecId, // custtransrecid
AmountCur _settlementAmount)
{
boolean ret;
InvoiceId invoiceId;
CustTrans custTrans;
CustTable custTable;
CustTransOpen custTransOpen;
AmountCur settlementAmount;
CustVendOpenTransManager settleManager;
SpecTransManager specTransManager;
ret = true;
settleManager = CustVendOpenTransManager::construct(_journalTrans);
specTransManager = settleManager.parmSpecTransManager();
custTable = CustTable::find(_custAccount);
custTrans = CustTrans::find(_settlementRecId);
custTransOpen = CustTransOpen::findRefId(custTrans.RecId);
settlementAmount = _settlementAmount;
invoiceId = custTrans.Invoice;
if (custTransOpen.RecId != 0)
{
AmountCur unmarkedAmount = specTransManager.findUnmarkedAmountForRef( custTransOpen.AmountCur, custTransOpen.Company(),
custTransOpen.TableId, custTransOpen.RecId);
if (!settleManager.checkTransFullyMarkedByOtherSpec(custTransOpen))
{
settleManager.updateTransMarked(custTransOpen, NoYes::Yes);
if (abs(settlementAmount) <= abs(unmarkedAmount))
{
settleManager.updateSettleAmountPaymCur(custTransOpen, settlementAmount);
}
else
{
settleManager.updateSettleAmountPaymCur(custTransOpen, unmarkedAmount);
}
ttsbegin;
_journalTrans.selectForUpdate(true);
if (invoiceId)
{
_journalTrans.MarkedInvoice = invoiceId;
}
else
{
_journalTrans.MarkedInvoice = '*';
}
_journalTrans.SettleVoucher = SettlementType::SelectedTransact;
_journalTrans.update();
ttscommit;
TaxWithhold taxWithhold = TaxWithhold::construct(_journalTrans);
taxWithhold.createAllTaxWithholdTrans();
TaxWithholdTrans taxWithholdTrans = TaxWithholdTrans::find( _journalTrans.DataAreaId,
_journalTrans.Voucher, _journalTrans.TransDate);
if (taxWithholdTrans.RecId)
{
taxWithholdTrans.selectForUpdate(true);
taxWithholdTrans.InvoiceTaxWithholdAmount = abs(20) * -1;
taxWithholdTrans.TaxWithholdAmount = abs(20) * -1;
taxWithholdTrans.doUpdate();
}
}
}
return ret;
}