From 9c8f5b73630964e5f70047e4a9370384321a7b7b Mon Sep 17 00:00:00 2001 From: Elaine Tan Date: Tue, 16 Apr 2013 15:54:27 +0800 Subject: [PATCH] IDEMPIERE-860 Review Payment Processors --- .../src/org/compiere/model/MInvoice.java | 15 ++++++++-- .../compiere/model/MPaymentTransaction.java | 28 +++++++++++++++++++ .../src/org/compiere/grid/PaymentForm.java | 1 + 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/org.adempiere.base/src/org/compiere/model/MInvoice.java b/org.adempiere.base/src/org/compiere/model/MInvoice.java index 8cd679090e..4b780f2b0c 100644 --- a/org.adempiere.base/src/org/compiere/model/MInvoice.java +++ b/org.adempiere.base/src/org/compiere/model/MInvoice.java @@ -1964,7 +1964,18 @@ public class MInvoice extends X_C_Invoice implements DocAction // auto delay capture authorization payment if (isSOTrx() && !isReversal()) { - int[] ids = MPaymentTransaction.getAuthorizationPaymentTransactionIDs(getC_Order_ID(), getC_Invoice_ID(), get_TrxName()); + StringBuilder whereClause = new StringBuilder(); + whereClause.append("C_Order_ID IN ("); + whereClause.append("SELECT C_Order_ID "); + whereClause.append("FROM C_OrderLine "); + whereClause.append("WHERE C_OrderLine_ID IN ("); + whereClause.append("SELECT C_OrderLine_ID "); + whereClause.append("FROM C_InvoiceLine "); + whereClause.append("WHERE C_Invoice_ID = "); + whereClause.append(getC_Invoice_ID()).append("))"); + int[] orderIDList = MOrder.getAllIDs(MOrder.Table_Name, whereClause.toString(), get_TrxName()); + + int[] ids = MPaymentTransaction.getAuthorizationPaymentTransactionIDs(orderIDList, getC_Invoice_ID(), get_TrxName()); if (ids.length > 0) { ArrayList ptList = new ArrayList(); @@ -1972,8 +1983,6 @@ public class MInvoice extends X_C_Invoice implements DocAction for (int id : ids) { MPaymentTransaction pt = new MPaymentTransaction(Env.getCtx(), id, get_TrxName()); - - totalPayAmt = totalPayAmt.add(pt.getPayAmt()); ptList.add(pt); } diff --git a/org.adempiere.base/src/org/compiere/model/MPaymentTransaction.java b/org.adempiere.base/src/org/compiere/model/MPaymentTransaction.java index 7a21a9c088..44cec5649e 100644 --- a/org.adempiere.base/src/org/compiere/model/MPaymentTransaction.java +++ b/org.adempiere.base/src/org/compiere/model/MPaymentTransaction.java @@ -644,4 +644,32 @@ public class MPaymentTransaction extends X_C_PaymentTransaction implements Proce return MPaymentTransaction.getAllIDs(Table_Name, whereClause.toString(), trxName); } + + public static int[] getAuthorizationPaymentTransactionIDs(int[] orderIDList, int C_Invoice_ID, String trxName) + { + StringBuilder sb = new StringBuilder(); + if (orderIDList != null) + { + for (int orderID : orderIDList) + sb.append(orderID).append(","); + } + + String orderIDs = sb.toString(); + if (orderIDs.length() > 0) + orderIDs = orderIDs.substring(0, orderIDs.length() - 1); + + StringBuilder whereClause = new StringBuilder(); + whereClause.append("TenderType='").append(MPaymentTransaction.TENDERTYPE_CreditCard).append("' "); + whereClause.append("AND TrxType='").append(MPaymentTransaction.TRXTYPE_Authorization).append("' "); + if (orderIDs.length() > 0 && C_Invoice_ID > 0) + whereClause.append(" AND (C_Order_ID IN (").append(orderIDs).append(") OR C_Invoice_ID=").append(C_Invoice_ID).append(")"); + else if (orderIDs.length() > 0) + whereClause.append(" AND C_Order_ID IN ('").append(orderIDs).append(")"); + else if (C_Invoice_ID > 0) + whereClause.append(" AND C_Invoice_ID=").append(C_Invoice_ID); + whereClause.append(" AND IsApproved='Y' AND IsVoided='N' AND IsDelayedCapture='N' "); + whereClause.append("ORDER BY DateTrx DESC"); + + return MPaymentTransaction.getAllIDs(Table_Name, whereClause.toString(), trxName); + } } diff --git a/org.adempiere.ui/src/org/compiere/grid/PaymentForm.java b/org.adempiere.ui/src/org/compiere/grid/PaymentForm.java index 812624dfdf..ffd2718012 100644 --- a/org.adempiere.ui/src/org/compiere/grid/PaymentForm.java +++ b/org.adempiere.ui/src/org/compiere/grid/PaymentForm.java @@ -216,6 +216,7 @@ public abstract class PaymentForm implements IPaymentForm { { int retValue = 0; String sql = "SELECT C_Invoice_ID FROM C_Invoice WHERE C_Order_ID=? " + + "AND DocStatus NOT IN ('VO','RE') " + "ORDER BY C_Invoice_ID DESC"; // last invoice PreparedStatement pstmt = null; ResultSet rs = null;