public static void VoidCCPayment <TNode>(TNode doc, PXSelectBase <CCProcTran> ccProcTran, CCPaymentEntry.ReleaseDelegate aReleaseDelegate, UpdateDocStateDelegate aDocStateUpdater, ICCTransactionsProcessor processor = null) where TNode : class, IBqlTable, ICCPayment, new() { if (processor == null) { processor = CCTransactionsProcessor.GetCCTransactionsProcessor(); } if (doc != null && doc.PMInstanceID != null && doc.CuryDocBal != null) { if (CCProcTranHelper.HasOpenCCTran(ccProcTran)) { throw new PXException(Messages.ERR_CCTransactionCurrentlyInProgress); } CCProcTran toVoid = CCProcTranHelper.FindCCLastSuccessfulTran(ccProcTran); if (toVoid == null) { throw new PXException(Messages.ERR_CCNoTransactionToVoid); } else if (toVoid.TranType == CCTranTypeCode.VoidTran || toVoid.TranType == CCTranTypeCode.Credit) { throw new PXException(Messages.ERR_CCTransactionOfThisTypeInvalidToVoid); } if (CCProcTranHelper.IsExpired(toVoid)) { throw new PXException(Messages.TransactionHasExpired); } if (doc.Released == false) { ccProcTran.View.Graph.Actions.PressSave(); } TNode toProc = PXCache <TNode> .CreateCopy(doc); PXLongOperation.StartOperation(ccProcTran.View.Graph, delegate() { try { processor.ProcessCCTransaction(toProc, toVoid, CCTranType.VoidOrCredit); } finally { if (aDocStateUpdater != null) { aDocStateUpdater(doc, CCTranType.VoidOrCredit); } } if (aReleaseDelegate != null) { aReleaseDelegate(toProc); } }); } }
public static void CaptureCCPayment <TNode>(TNode doc, PXSelectBase <CCProcTran> ccProcTran, CCPaymentEntry.ReleaseDelegate aReleaseDelegate, UpdateDocStateDelegate aDocStateUpdater, ICCTransactionsProcessor processor = null) where TNode : class, IBqlTable, ICCPayment, new() { if (processor == null) { processor = CCTransactionsProcessor.GetCCTransactionsProcessor(); } if (doc != null && doc.PMInstanceID != null && doc.CuryDocBal != null) { if (CCProcTranHelper.HasOpenCCTran(ccProcTran)) { throw new PXException(Messages.ERR_CCTransactionCurrentlyInProgress); } CCPaymentState paymentState = CCProcTranHelper.ResolveCCPaymentState(ccProcTran.Select()); if ((paymentState & (CCPaymentState.Captured)) > 0) { throw new PXException(Messages.ERR_CCAuthorizedPaymentAlreadyCaptured); } if (doc.Released == false) { ccProcTran.View.Graph.Actions.PressSave(); } CCProcTran authTran = CCProcTranHelper.FindCCPreAthorizing(ccProcTran.Select()); TNode toProc = PXCache <TNode> .CreateCopy(doc); CCProcTran authTranCopy = null; if (authTran != null && !CCProcTranHelper.IsExpired(authTran)) { authTranCopy = PXCache <CCProcTran> .CreateCopy(authTran); } CCTranType operation = (authTranCopy) != null ? CCTranType.PriorAuthorizedCapture : CCTranType.AuthorizeAndCapture; PXLongOperation.StartOperation(ccProcTran.View.Graph, delegate() { try { processor.ProcessCCTransaction(toProc, authTranCopy, operation); } finally { //Update doc state in any case if (aDocStateUpdater != null) { aDocStateUpdater(doc, operation); } } if (aReleaseDelegate != null) { aReleaseDelegate(toProc); //On Success Only } }); } }