Details
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/dao/DefaultInvoiceDao.java b/invoice/src/main/java/org/killbill/billing/invoice/dao/DefaultInvoiceDao.java
index 595a573..2b10575 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/dao/DefaultInvoiceDao.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/dao/DefaultInvoiceDao.java
@@ -425,7 +425,7 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<List<InvoicePaymentModelDao>>() {
@Override
public List<InvoicePaymentModelDao> inTransaction(final EntitySqlDaoWrapperFactory entitySqlDaoWrapperFactory) throws Exception {
- return entitySqlDaoWrapperFactory.become(InvoicePaymentSqlDao.class).getByAccountRecordId(context);
+ return entitySqlDaoWrapperFactory.become(InvoicePaymentSqlDao.class).getByAccountRecordIdWithExistingPaymentId(context);
}
});
}
@@ -699,7 +699,7 @@ public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, I
// extract entries by invoiceId (which is always set, as opposed to paymentId) and then filter based on type and
// paymentCookieId = transactionExternalKey
//
- final List<InvoicePaymentModelDao> invoicePayments = transactional.getPaymentsForInvoice(invoicePayment.getInvoiceId().toString(), context);
+ final List<InvoicePaymentModelDao> invoicePayments = transactional.getAllPaymentsForInvoiceIncludedInit(invoicePayment.getInvoiceId().toString(), context);
final InvoicePaymentModelDao existingAttempt = Iterables.tryFind(invoicePayments, new Predicate<InvoicePaymentModelDao>() {
@Override
public boolean apply(final InvoicePaymentModelDao input) {
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoiceDaoHelper.java b/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoiceDaoHelper.java
index 5cc91c0..277acf0 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoiceDaoHelper.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoiceDaoHelper.java
@@ -266,14 +266,7 @@ public class InvoiceDaoHelper {
private void getInvoicePaymentsWithinTransaction(final Iterable<InvoiceModelDao> invoices, final EntitySqlDaoWrapperFactory entitySqlDaoWrapperFactory, final InternalTenantContext context) {
final InvoicePaymentSqlDao invoicePaymentSqlDao = entitySqlDaoWrapperFactory.become(InvoicePaymentSqlDao.class);
- final List<InvoicePaymentModelDao> invoicePaymentsForAccountRaw = invoicePaymentSqlDao.getByAccountRecordId(context);;
- // Remove entries where payment_id is NULL (we don't know if the payment happened, we never got the second phase from the 2-phase commit protocol)
- final List<InvoicePaymentModelDao> invoicePaymentsForAccount = ImmutableList.copyOf(Iterables.filter(invoicePaymentsForAccountRaw, new Predicate<InvoicePaymentModelDao>() {
- @Override
- public boolean apply(final InvoicePaymentModelDao input) {
- return input.getPaymentId() != null;
- }
- }));
+ final List<InvoicePaymentModelDao> invoicePaymentsForAccount = invoicePaymentSqlDao.getByAccountRecordIdWithExistingPaymentId(context);;
final Map<UUID, List<InvoicePaymentModelDao>> invoicePaymentsPerInvoiceId = new HashMap<UUID, List<InvoicePaymentModelDao>>();
for (final InvoicePaymentModelDao invoicePayment : invoicePaymentsForAccount) {
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoicePaymentSqlDao.java b/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoicePaymentSqlDao.java
index 0e790f5..b6f129e 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoicePaymentSqlDao.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/dao/InvoicePaymentSqlDao.java
@@ -37,11 +37,16 @@ import org.skife.jdbi.v2.sqlobject.SqlUpdate;
public interface InvoicePaymentSqlDao extends EntitySqlDao<InvoicePaymentModelDao, InvoicePayment> {
@SqlQuery
+ public List<InvoicePaymentModelDao> getByAccountRecordIdWithExistingPaymentId(@BindBean final InternalTenantContext context);
+
+
+
+ @SqlQuery
public List<InvoicePaymentModelDao> getByPaymentId(@Bind("paymentId") final String paymentId,
@BindBean final InternalTenantContext context);
@SqlQuery
- public List<InvoicePaymentModelDao> getPaymentsForInvoice(@Bind("invoiceId") final String invoiceId,
+ public List<InvoicePaymentModelDao> getAllPaymentsForInvoiceIncludedInit(@Bind("invoiceId") final String invoiceId,
@BindBean final InternalTenantContext context);
@SqlQuery
diff --git a/invoice/src/main/resources/org/killbill/billing/invoice/dao/InvoicePaymentSqlDao.sql.stg b/invoice/src/main/resources/org/killbill/billing/invoice/dao/InvoicePaymentSqlDao.sql.stg
index 3d48841..89d6901 100644
--- a/invoice/src/main/resources/org/killbill/billing/invoice/dao/InvoicePaymentSqlDao.sql.stg
+++ b/invoice/src/main/resources/org/killbill/billing/invoice/dao/InvoicePaymentSqlDao.sql.stg
@@ -32,6 +32,18 @@ tableValues() ::= <<
, :createdDate
>>
+getByAccountRecordIdWithExistingPaymentId(accountRecordId) ::= <<
+select
+<allTableFields("t.")>
+from <tableName()> t
+where (<accountRecordIdField("t.")> = :accountRecordId or (<accountRecordIdField("t.")> is null and :accountRecordId is null))
+<andCheckSoftDeletionWithComma("t.")>
+AND payment_id IS NOT NULL
+<AND_CHECK_TENANT("t.")>
+<defaultOrderBy("t.")>
+;
+>>
+
getByPaymentId() ::= <<
SELECT <allTableFields()>
FROM <tableName()>
@@ -50,7 +62,7 @@ getPaymentsForCookieId() ::= <<
;
>>
-getPaymentsForInvoice() ::= <<
+getAllPaymentsForInvoiceIncludedInit() ::= <<
SELECT <allTableFields()>
FROM <tableName()>
WHERE invoice_id = :invoiceId
@@ -59,6 +71,8 @@ getPaymentsForInvoice() ::= <<
;
>>
+
+
getInvoicePayments() ::= <<
SELECT <allTableFields()>
FROM <tableName()>