mercredi 25 janvier 2023

 Settle customer transactions using the CustVendOpenTransManager X++ code


public boolean markInvoicesForSettlement(LedgerJournalTrans  _journalTrans, PaymTransContract _contract)

    {

           CustTrans                custTrans;
        CustTransOpen            custTransOpen;
        boolean                  ret                = true;
        CustVendOpenTransManager settleManager      = CustVendOpenTransManager::construct(_journalTrans);
        SpecTransManager         specTransManager   = settleManager.parmSpecTransManager();
        InvoiceId invoiceId = _journalTrans.ProArMerchantReference;
        CustTable custTable = CustTable::find(_contract.parmAccountCode());
        AmountCur settlementAmount;
            
            
            custTrans     = CustTrans::findFromInvoice(invoiceId, custTable.AccountNum);
            custTransOpen = CustTransOpen::findRefId(custTrans.RecId);
            if (custTransOpen.RecId != 0)
            {
                AmountCur unmarkedAmount = specTransManager.findUnmarkedAmountForRef(custTransOpen.AmountCur,
                                                                                     custTransOpen.company(),
                                                                                     custTransOpen.TableId,
                                                                                     custTransOpen.RecId);
                if (!settleManager.checkTransFullyMarkedByOtherSpec(custTransOpen))
                {
                    if (settlementAmount <= unmarkedAmount)
                    {
                        settleManager.updateTransMarked(custTransOpen, NoYes::Yes);
                        settleManager.updateSettleAmountPaymCur(custTransOpen, settlementAmount);
                        settleManager.settleMarkedTrans();
                    }
          }   
}