killbill-uncached

invoice: Change implementation for #560 to filter invoice_payments

6/14/2016 8:00:41 PM

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()>