IDEMPIERE-860 Review Payment Processors
- Ensure that both bank account processor and payment processor accept the selected card type - Add a checking to throw error when trying to save an active Bank Account Processor record with inactive payment processor - Set the credit card type, credit card number and account name to read-only when a partner bank account record is tied to a customer profile ID reference
This commit is contained in:
parent
e82acb3840
commit
2a7586baab
|
@ -0,0 +1,27 @@
|
|||
-- May 31, 2013 7:34:01 PM SGT
|
||||
-- IDEMPIERE-860 Review Payment Processors
|
||||
UPDATE AD_Column SET ReadOnlyLogic='@CustomerPaymentProfileID@!''''',Updated=TO_DATE('2013-05-31 19:34:01','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=5240
|
||||
;
|
||||
|
||||
-- May 31, 2013 7:34:10 PM SGT
|
||||
-- IDEMPIERE-860 Review Payment Processors
|
||||
UPDATE AD_Column SET ReadOnlyLogic='@CustomerPaymentProfileID@!''''',Updated=TO_DATE('2013-05-31 19:34:10','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=5239
|
||||
;
|
||||
|
||||
-- May 31, 2013 7:34:17 PM SGT
|
||||
-- IDEMPIERE-860 Review Payment Processors
|
||||
UPDATE AD_Column SET ReadOnlyLogic='@CustomerPaymentProfileID@!''''',Updated=TO_DATE('2013-05-31 19:34:17','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=5232
|
||||
;
|
||||
|
||||
-- May 31, 2013 7:35:47 PM SGT
|
||||
-- IDEMPIERE-860 Review Payment Processors
|
||||
INSERT INTO AD_Message (AD_Client_ID,EntityType,MsgType,MsgText,AD_Message_ID,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Org_ID,Created) VALUES (0,'D','E','Inactive payment processor',200176,'e9638795-bd2f-405b-b3cb-567036b3871d','InactivePaymentProcessor','Y',TO_DATE('2013-05-31 19:35:45','YYYY-MM-DD HH24:MI:SS'),100,100,0,TO_DATE('2013-05-31 19:35:45','YYYY-MM-DD HH24:MI:SS'))
|
||||
;
|
||||
|
||||
-- May 31, 2013 7:35:47 PM SGT
|
||||
-- IDEMPIERE-860 Review Payment Processors
|
||||
INSERT INTO AD_Message_Trl (AD_Language,AD_Message_ID, MsgText,MsgTip, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Message_Trl_UU ) SELECT l.AD_Language,t.AD_Message_ID, t.MsgText,t.MsgTip, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Message t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Message_ID=200176 AND NOT EXISTS (SELECT * FROM AD_Message_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Message_ID=t.AD_Message_ID)
|
||||
;
|
||||
|
||||
SELECT register_migration_script('201305311943_IDEMPIERE-860.sql') FROM dual
|
||||
;
|
|
@ -0,0 +1,27 @@
|
|||
-- May 31, 2013 7:34:01 PM SGT
|
||||
-- IDEMPIERE-860 Review Payment Processors
|
||||
UPDATE AD_Column SET ReadOnlyLogic='@CustomerPaymentProfileID@!''''',Updated=TO_TIMESTAMP('2013-05-31 19:34:01','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=5240
|
||||
;
|
||||
|
||||
-- May 31, 2013 7:34:10 PM SGT
|
||||
-- IDEMPIERE-860 Review Payment Processors
|
||||
UPDATE AD_Column SET ReadOnlyLogic='@CustomerPaymentProfileID@!''''',Updated=TO_TIMESTAMP('2013-05-31 19:34:10','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=5239
|
||||
;
|
||||
|
||||
-- May 31, 2013 7:34:17 PM SGT
|
||||
-- IDEMPIERE-860 Review Payment Processors
|
||||
UPDATE AD_Column SET ReadOnlyLogic='@CustomerPaymentProfileID@!''''',Updated=TO_TIMESTAMP('2013-05-31 19:34:17','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=5232
|
||||
;
|
||||
|
||||
-- May 31, 2013 7:35:47 PM SGT
|
||||
-- IDEMPIERE-860 Review Payment Processors
|
||||
INSERT INTO AD_Message (AD_Client_ID,EntityType,MsgType,MsgText,AD_Message_ID,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Org_ID,Created) VALUES (0,'D','E','Inactive payment processor',200176,'e9638795-bd2f-405b-b3cb-567036b3871d','InactivePaymentProcessor','Y',TO_TIMESTAMP('2013-05-31 19:35:45','YYYY-MM-DD HH24:MI:SS'),100,100,0,TO_TIMESTAMP('2013-05-31 19:35:45','YYYY-MM-DD HH24:MI:SS'))
|
||||
;
|
||||
|
||||
-- May 31, 2013 7:35:47 PM SGT
|
||||
-- IDEMPIERE-860 Review Payment Processors
|
||||
INSERT INTO AD_Message_Trl (AD_Language,AD_Message_ID, MsgText,MsgTip, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Message_Trl_UU ) SELECT l.AD_Language,t.AD_Message_ID, t.MsgText,t.MsgTip, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Message t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Message_ID=200176 AND NOT EXISTS (SELECT * FROM AD_Message_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Message_ID=t.AD_Message_ID)
|
||||
;
|
||||
|
||||
SELECT register_migration_script('201305311943_IDEMPIERE-860.sql') FROM dual
|
||||
;
|
|
@ -22,8 +22,10 @@ import java.util.ArrayList;
|
|||
import java.util.Properties;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.adempiere.exceptions.AdempiereException;
|
||||
import org.compiere.util.CLogger;
|
||||
import org.compiere.util.DB;
|
||||
import org.compiere.util.Msg;
|
||||
|
||||
/**
|
||||
* Bank Account Payment Processor
|
||||
|
@ -72,26 +74,26 @@ public class MBankAccountProcessor extends X_C_BankAccount_Processor {
|
|||
+ " AND (bap.C_Currency_ID IS NULL OR bap.C_Currency_ID=?)" // #2
|
||||
+ " AND (bap.MinimumAmt IS NULL OR bap.MinimumAmt = 0 OR bap.MinimumAmt <= ?)"); // #3
|
||||
if (MPayment.TENDERTYPE_DirectDeposit.equals(tender))
|
||||
sql.append(" AND bap.AcceptDirectDeposit='Y'");
|
||||
sql.append(" AND bap.AcceptDirectDeposit='Y' AND pp.AcceptDirectDeposit='Y' ");
|
||||
else if (MPayment.TENDERTYPE_DirectDebit.equals(tender))
|
||||
sql.append(" AND bap.AcceptDirectDebit='Y'");
|
||||
sql.append(" AND bap.AcceptDirectDebit='Y' AND AND pp.AcceptDirectDebit='Y' ");
|
||||
else if (MPayment.TENDERTYPE_Check.equals(tender))
|
||||
sql.append(" AND bap.AcceptCheck='Y'");
|
||||
sql.append(" AND bap.AcceptCheck='Y' AND pp.AcceptCheck='Y' ");
|
||||
// CreditCards
|
||||
else if (MPayment.CREDITCARDTYPE_ATM.equals(CCType))
|
||||
sql.append(" AND bap.AcceptATM='Y'");
|
||||
sql.append(" AND bap.AcceptATM='Y' AND pp.AcceptATM='Y' ");
|
||||
else if (MPayment.CREDITCARDTYPE_Amex.equals(CCType))
|
||||
sql.append(" AND bap.AcceptAMEX='Y'");
|
||||
sql.append(" AND bap.AcceptAMEX='Y' AND pp.AcceptAMEX='Y' ");
|
||||
else if (MPayment.CREDITCARDTYPE_Visa.equals(CCType))
|
||||
sql.append(" AND bap.AcceptVISA='Y'");
|
||||
sql.append(" AND bap.AcceptVISA='Y' AND pp.AcceptVISA='Y' ");
|
||||
else if (MPayment.CREDITCARDTYPE_MasterCard.equals(CCType))
|
||||
sql.append(" AND bap.AcceptMC='Y'");
|
||||
sql.append(" AND bap.AcceptMC='Y' AND pp.AcceptMC='Y' ");
|
||||
else if (MPayment.CREDITCARDTYPE_Diners.equals(CCType))
|
||||
sql.append(" AND bap.AcceptDiners='Y'");
|
||||
sql.append(" AND bap.AcceptDiners='Y' AND pp.AcceptDiners='Y' ");
|
||||
else if (MPayment.CREDITCARDTYPE_Discover.equals(CCType))
|
||||
sql.append(" AND bap.AcceptDiscover='Y'");
|
||||
sql.append(" AND bap.AcceptDiscover='Y' AND pp.AcceptDiscover='Y' ");
|
||||
else if (MPayment.CREDITCARDTYPE_PurchaseCard.equals(CCType))
|
||||
sql.append(" AND bap.AcceptCORPORATE='Y'");
|
||||
sql.append(" AND bap.AcceptCORPORATE='Y' AND pp.AcceptCORPORATE='Y' ");
|
||||
sql.append(" ORDER BY ba.IsDefault DESC ");
|
||||
//
|
||||
PreparedStatement pstmt = null;
|
||||
|
@ -157,6 +159,19 @@ public class MBankAccountProcessor extends X_C_BankAccount_Processor {
|
|||
setC_PaymentProcessor_ID(C_PaymentProcessor_ID); // FK
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean beforeSave(boolean newRecord)
|
||||
{
|
||||
if (getC_PaymentProcessor_ID() > 0 && isActive())
|
||||
{
|
||||
MPaymentProcessor pp = new MPaymentProcessor(getCtx(), getC_PaymentProcessor_ID(), get_TrxName());
|
||||
if (!pp.isActive())
|
||||
throw new AdempiereException(Msg.translate(getCtx(), "InactivePaymentProcessor") + ". " + pp.toString());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Does Payment Processor accepts tender / CC
|
||||
* @param TenderType tender type
|
||||
|
@ -165,19 +180,40 @@ public class MBankAccountProcessor extends X_C_BankAccount_Processor {
|
|||
*/
|
||||
public boolean accepts (String TenderType, String CreditCardType)
|
||||
{
|
||||
if ((MPayment.TENDERTYPE_DirectDeposit.equals(TenderType) && isAcceptDirectDeposit())
|
||||
|| (MPayment.TENDERTYPE_DirectDebit.equals(TenderType) && isAcceptDirectDebit())
|
||||
|| (MPayment.TENDERTYPE_Check.equals(TenderType) && isAcceptCheck())
|
||||
//
|
||||
|| (MPayment.CREDITCARDTYPE_ATM.equals(CreditCardType) && isAcceptATM())
|
||||
|| (MPayment.CREDITCARDTYPE_Amex.equals(CreditCardType) && isAcceptAMEX())
|
||||
|| (MPayment.CREDITCARDTYPE_PurchaseCard.equals(CreditCardType) && isAcceptCorporate())
|
||||
|| (MPayment.CREDITCARDTYPE_Diners.equals(CreditCardType) && isAcceptDiners())
|
||||
|| (MPayment.CREDITCARDTYPE_Discover.equals(CreditCardType) && isAcceptDiscover())
|
||||
|| (MPayment.CREDITCARDTYPE_MasterCard.equals(CreditCardType) && isAcceptMC())
|
||||
|| (MPayment.CREDITCARDTYPE_Visa.equals(CreditCardType) && isAcceptVisa()))
|
||||
return true;
|
||||
return false;
|
||||
if (getC_PaymentProcessor_ID() > 0)
|
||||
{
|
||||
MPaymentProcessor pp = new MPaymentProcessor(getCtx(), getC_PaymentProcessor_ID(), get_TrxName());
|
||||
|
||||
if ((MPayment.TENDERTYPE_DirectDeposit.equals(TenderType) && isAcceptDirectDeposit() && pp.isAcceptDirectDeposit())
|
||||
|| (MPayment.TENDERTYPE_DirectDebit.equals(TenderType) && isAcceptDirectDebit() && pp.isAcceptDirectDebit())
|
||||
|| (MPayment.TENDERTYPE_Check.equals(TenderType) && isAcceptCheck() && pp.isAcceptCheck())
|
||||
//
|
||||
|| (MPayment.CREDITCARDTYPE_ATM.equals(CreditCardType) && isAcceptATM() && pp.isAcceptATM())
|
||||
|| (MPayment.CREDITCARDTYPE_Amex.equals(CreditCardType) && isAcceptAMEX() && pp.isAcceptAMEX())
|
||||
|| (MPayment.CREDITCARDTYPE_PurchaseCard.equals(CreditCardType) && isAcceptCorporate() && pp.isAcceptCorporate())
|
||||
|| (MPayment.CREDITCARDTYPE_Diners.equals(CreditCardType) && isAcceptDiners() && pp.isAcceptDiners())
|
||||
|| (MPayment.CREDITCARDTYPE_Discover.equals(CreditCardType) && isAcceptDiscover() && pp.isAcceptDiscover())
|
||||
|| (MPayment.CREDITCARDTYPE_MasterCard.equals(CreditCardType) && isAcceptMC() && pp.isAcceptMC())
|
||||
|| (MPayment.CREDITCARDTYPE_Visa.equals(CreditCardType) && isAcceptVisa() && pp.isAcceptVisa()))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((MPayment.TENDERTYPE_DirectDeposit.equals(TenderType) && isAcceptDirectDeposit())
|
||||
|| (MPayment.TENDERTYPE_DirectDebit.equals(TenderType) && isAcceptDirectDebit())
|
||||
|| (MPayment.TENDERTYPE_Check.equals(TenderType) && isAcceptCheck())
|
||||
//
|
||||
|| (MPayment.CREDITCARDTYPE_ATM.equals(CreditCardType) && isAcceptATM())
|
||||
|| (MPayment.CREDITCARDTYPE_Amex.equals(CreditCardType) && isAcceptAMEX())
|
||||
|| (MPayment.CREDITCARDTYPE_PurchaseCard.equals(CreditCardType) && isAcceptCorporate())
|
||||
|| (MPayment.CREDITCARDTYPE_Diners.equals(CreditCardType) && isAcceptDiners())
|
||||
|| (MPayment.CREDITCARDTYPE_Discover.equals(CreditCardType) && isAcceptDiscover())
|
||||
|| (MPayment.CREDITCARDTYPE_MasterCard.equals(CreditCardType) && isAcceptMC())
|
||||
|| (MPayment.CREDITCARDTYPE_Visa.equals(CreditCardType) && isAcceptVisa()))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
} // accepts
|
||||
|
||||
public String toString()
|
||||
|
|
|
@ -1011,17 +1011,19 @@ public final class MPayment extends X_C_Payment
|
|||
for (int i = 0; i < m_mBankAccountProcessors.length; i++)
|
||||
{
|
||||
MBankAccountProcessor bankAccountProcessor = m_mBankAccountProcessors[i];
|
||||
if (bankAccountProcessor.isAcceptAMEX())
|
||||
MPaymentProcessor paymentProcessor = new MPaymentProcessor(getCtx(), bankAccountProcessor.getC_PaymentProcessor_ID(), get_TrxName());
|
||||
|
||||
if (bankAccountProcessor.isAcceptAMEX() && paymentProcessor.isAcceptAMEX())
|
||||
map.put (CREDITCARDTYPE_Amex, getCreditCardPair (CREDITCARDTYPE_Amex));
|
||||
if (bankAccountProcessor.isAcceptDiners())
|
||||
if (bankAccountProcessor.isAcceptDiners() && paymentProcessor.isAcceptDiners())
|
||||
map.put (CREDITCARDTYPE_Diners, getCreditCardPair (CREDITCARDTYPE_Diners));
|
||||
if (bankAccountProcessor.isAcceptDiscover())
|
||||
if (bankAccountProcessor.isAcceptDiscover() && paymentProcessor.isAcceptDiscover())
|
||||
map.put (CREDITCARDTYPE_Discover, getCreditCardPair (CREDITCARDTYPE_Discover));
|
||||
if (bankAccountProcessor.isAcceptMC())
|
||||
if (bankAccountProcessor.isAcceptMC() && paymentProcessor.isAcceptMC())
|
||||
map.put (CREDITCARDTYPE_MasterCard, getCreditCardPair (CREDITCARDTYPE_MasterCard));
|
||||
if (bankAccountProcessor.isAcceptCorporate())
|
||||
if (bankAccountProcessor.isAcceptCorporate() && paymentProcessor.isAcceptCorporate())
|
||||
map.put (CREDITCARDTYPE_PurchaseCard, getCreditCardPair (CREDITCARDTYPE_PurchaseCard));
|
||||
if (bankAccountProcessor.isAcceptVisa())
|
||||
if (bankAccountProcessor.isAcceptVisa() && paymentProcessor.isAcceptVisa())
|
||||
map.put (CREDITCARDTYPE_Visa, getCreditCardPair (CREDITCARDTYPE_Visa));
|
||||
} // for all payment processors
|
||||
//
|
||||
|
|
Loading…
Reference in New Issue