killbill-aplcache

Addressing various minor build/test/merge issues. Tests

3/23/2012 10:22:47 PM

Details

diff --git a/account/src/main/java/com/ning/billing/account/api/DefaultAccount.java b/account/src/main/java/com/ning/billing/account/api/DefaultAccount.java
index 022e341..0dd8740 100644
--- a/account/src/main/java/com/ning/billing/account/api/DefaultAccount.java
+++ b/account/src/main/java/com/ning/billing/account/api/DefaultAccount.java
@@ -305,7 +305,7 @@ public class DefaultAccount extends CustomizableEntityBase implements Account {
 	
 	@Override
 	public MutableAccountData toMutableAccountData() {
-	    return new MutableAccountData(this);
+	    return new DefaultMutableAccountData(this);
 	}
 
 	@Override
diff --git a/account/src/main/java/com/ning/billing/account/api/DefaultMutableAccountData.java b/account/src/main/java/com/ning/billing/account/api/DefaultMutableAccountData.java
new file mode 100644
index 0000000..4476130
--- /dev/null
+++ b/account/src/main/java/com/ning/billing/account/api/DefaultMutableAccountData.java
@@ -0,0 +1,333 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at:
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.account.api;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+
+import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.util.tag.TagStore;
+
+public class DefaultMutableAccountData implements AccountData, MutableAccountData {
+    private String externalKey;
+    private String email;
+    private String name;
+    private int firstNameLength;
+    private Currency currency;
+    private int billCycleDay;
+    private String paymentProviderName;
+    private DateTimeZone timeZone;
+    private String locale;
+    private String address1;
+    private String address2;
+    private String companyName;
+    private String city;
+    private String stateOrProvince;
+    private String country;
+    private String postalCode;
+    private String phone;
+    
+    public DefaultMutableAccountData(String externalKey, String email, String name,
+            int firstNameLength, Currency currency, int billCycleDay,
+            String paymentProviderName, TagStore tags, DateTimeZone timeZone,
+            String locale, String address1, String address2,
+            String companyName, String city, String stateOrProvince,
+            String country, String postalCode, String phone,
+            DateTime createdDate, DateTime updatedDate) {
+        super();
+        this.externalKey = externalKey;
+        this.email = email;
+        this.name = name;
+        this.firstNameLength = firstNameLength;
+        this.currency = currency;
+        this.billCycleDay = billCycleDay;
+        this.paymentProviderName = paymentProviderName;
+        this.timeZone = timeZone;
+        this.locale = locale;
+        this.address1 = address1;
+        this.address2 = address2;
+        this.companyName = companyName;
+        this.city = city;
+        this.stateOrProvince = stateOrProvince;
+        this.country = country;
+        this.postalCode = postalCode;
+        this.phone = phone;
+    }
+    
+    public DefaultMutableAccountData(AccountData accountData) {
+        super();
+        this.externalKey = accountData.getExternalKey();
+        this.email = accountData.getEmail();
+        this.name = accountData.getName();
+        this.firstNameLength = accountData.getFirstNameLength();
+        this.currency = accountData.getCurrency();
+        this.billCycleDay = accountData.getBillCycleDay();
+        this.paymentProviderName = accountData.getPaymentProviderName();
+        this.timeZone = accountData.getTimeZone();
+        this.locale = accountData.getLocale();
+        this.address1 = accountData.getAddress1();
+        this.address2 = accountData.getAddress2();
+        this.companyName = accountData.getCompanyName();
+        this.city = accountData.getCity();
+        this.stateOrProvince = accountData.getStateOrProvince();
+        this.country = accountData.getCountry();
+        this.postalCode = accountData.getPostalCode();
+        this.phone = accountData.getPhone();
+    }
+
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#getExternalKey()
+     */
+    @Override
+    public String getExternalKey() {
+        return externalKey;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#getEmail()
+     */
+    @Override
+    public String getEmail() {
+        return email;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#getName()
+     */
+    @Override
+    public String getName() {
+        return name;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#getFirstNameLength()
+     */
+    @Override
+    public int getFirstNameLength() {
+        return firstNameLength;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#getCurrency()
+     */
+    @Override
+    public Currency getCurrency() {
+        return currency;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#getBillCycleDay()
+     */
+    @Override
+    public int getBillCycleDay() {
+        return billCycleDay;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#getPaymentProviderName()
+     */
+    @Override
+    public String getPaymentProviderName() {
+        return paymentProviderName;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#getTimeZone()
+     */
+    @Override
+    public DateTimeZone getTimeZone() {
+        return timeZone;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#getLocale()
+     */
+    @Override
+    public String getLocale() {
+        return locale;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#getAddress1()
+     */
+    @Override
+    public String getAddress1() {
+        return address1;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#getAddress2()
+     */
+    @Override
+    public String getAddress2() {
+        return address2;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#getCompanyName()
+     */
+    @Override
+    public String getCompanyName() {
+        return companyName;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#getCity()
+     */
+    @Override
+    public String getCity() {
+        return city;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#getStateOrProvince()
+     */
+    @Override
+    public String getStateOrProvince() {
+        return stateOrProvince;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#getCountry()
+     */
+    @Override
+    public String getCountry() {
+        return country;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#getPostalCode()
+     */
+    @Override
+    public String getPostalCode() {
+        return postalCode;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#getPhone()
+     */
+    @Override
+    public String getPhone() {
+        return phone;
+    }
+    
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#setExternalKey(java.lang.String)
+     */
+    @Override
+    public void setExternalKey(String externalKey) {
+        this.externalKey = externalKey;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#setEmail(java.lang.String)
+     */
+    @Override
+    public void setEmail(String email) {
+        this.email = email;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#setName(java.lang.String)
+     */
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#setFirstNameLength(int)
+     */
+    @Override
+    public void setFirstNameLength(int firstNameLength) {
+        this.firstNameLength = firstNameLength;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#setCurrency(com.ning.billing.catalog.api.Currency)
+     */
+    @Override
+    public void setCurrency(Currency currency) {
+        this.currency = currency;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#setBillCycleDay(int)
+     */
+    @Override
+    public void setBillCycleDay(int billCycleDay) {
+        this.billCycleDay = billCycleDay;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#setPaymentProviderName(java.lang.String)
+     */
+    @Override
+    public void setPaymentProviderName(String paymentProviderName) {
+        this.paymentProviderName = paymentProviderName;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#setTimeZone(org.joda.time.DateTimeZone)
+     */
+    @Override
+    public void setTimeZone(DateTimeZone timeZone) {
+        this.timeZone = timeZone;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#setLocale(java.lang.String)
+     */
+    @Override
+    public void setLocale(String locale) {
+        this.locale = locale;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#setAddress1(java.lang.String)
+     */
+    @Override
+    public void setAddress1(String address1) {
+        this.address1 = address1;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#setAddress2(java.lang.String)
+     */
+    @Override
+    public void setAddress2(String address2) {
+        this.address2 = address2;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#setCompanyName(java.lang.String)
+     */
+    @Override
+    public void setCompanyName(String companyName) {
+        this.companyName = companyName;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#setCity(java.lang.String)
+     */
+    @Override
+    public void setCity(String city) {
+        this.city = city;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#setStateOrProvince(java.lang.String)
+     */
+    @Override
+    public void setStateOrProvince(String stateOrProvince) {
+        this.stateOrProvince = stateOrProvince;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#setCountry(java.lang.String)
+     */
+    @Override
+    public void setCountry(String country) {
+        this.country = country;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#setPostalCode(java.lang.String)
+     */
+    @Override
+    public void setPostalCode(String postalCode) {
+        this.postalCode = postalCode;
+    }
+    /* (non-Javadoc)
+     * @see com.ning.billing.account.api.MutableAccountData#setPhone(java.lang.String)
+     */
+    @Override
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+
+}
diff --git a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java
index 7e7c33e..c1204cf 100644
--- a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java
+++ b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java
@@ -26,7 +26,7 @@ import com.ning.billing.account.api.AccountApiException;
 import com.ning.billing.account.api.AccountData;
 import com.ning.billing.account.api.DefaultAccount;
 import com.ning.billing.account.api.MigrationAccountData;
-import com.ning.billing.account.api.MutableAccountData;
+import com.ning.billing.account.api.DefaultMutableAccountData;
 import com.ning.billing.account.dao.AccountDao;
 import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.customfield.CustomField;
diff --git a/analytics/src/test/java/com/ning/billing/analytics/MockAccount.java b/analytics/src/test/java/com/ning/billing/analytics/MockAccount.java
index f25ec05..ac7ed34 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/MockAccount.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/MockAccount.java
@@ -24,7 +24,7 @@ import org.joda.time.DateTime;
 import org.joda.time.DateTimeZone;
 
 import com.ning.billing.account.api.Account;
-import com.ning.billing.account.api.MutableAccountData;
+import com.ning.billing.account.api.DefaultMutableAccountData;
 import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.util.customfield.CustomField;
 import com.ning.billing.util.tag.Tag;
@@ -220,7 +220,7 @@ public class MockAccount implements Account
     }
 
     @Override
-    public MutableAccountData toMutableAccountData() {
+    public DefaultMutableAccountData toMutableAccountData() {
         throw new NotImplementedException();
     }
 
diff --git a/api/src/main/java/com/ning/billing/account/api/MutableAccountData.java b/api/src/main/java/com/ning/billing/account/api/MutableAccountData.java
index 2909b2d..78dad92 100644
--- a/api/src/main/java/com/ning/billing/account/api/MutableAccountData.java
+++ b/api/src/main/java/com/ning/billing/account/api/MutableAccountData.java
@@ -16,182 +16,78 @@
 
 package com.ning.billing.account.api;
 
-import org.joda.time.DateTime;
 import org.joda.time.DateTimeZone;
 
 import com.ning.billing.catalog.api.Currency;
-import com.ning.billing.util.tag.TagStore;
-
-public class MutableAccountData implements AccountData {
-    private String externalKey;
-    private String email;
-    private String name;
-    private int firstNameLength;
-    private Currency currency;
-    private int billCycleDay;
-    private String paymentProviderName;
-    private DateTimeZone timeZone;
-    private String locale;
-    private String address1;
-    private String address2;
-    private String companyName;
-    private String city;
-    private String stateOrProvince;
-    private String country;
-    private String postalCode;
-    private String phone;
-    
-    public MutableAccountData(String externalKey, String email, String name,
-            int firstNameLength, Currency currency, int billCycleDay,
-            String paymentProviderName, TagStore tags, DateTimeZone timeZone,
-            String locale, String address1, String address2,
-            String companyName, String city, String stateOrProvince,
-            String country, String postalCode, String phone,
-            DateTime createdDate, DateTime updatedDate) {
-        super();
-        this.externalKey = externalKey;
-        this.email = email;
-        this.name = name;
-        this.firstNameLength = firstNameLength;
-        this.currency = currency;
-        this.billCycleDay = billCycleDay;
-        this.paymentProviderName = paymentProviderName;
-        this.timeZone = timeZone;
-        this.locale = locale;
-        this.address1 = address1;
-        this.address2 = address2;
-        this.companyName = companyName;
-        this.city = city;
-        this.stateOrProvince = stateOrProvince;
-        this.country = country;
-        this.postalCode = postalCode;
-        this.phone = phone;
-    }
-    
-    public MutableAccountData(AccountData accountData) {
-        super();
-        this.externalKey = accountData.getExternalKey();
-        this.email = accountData.getEmail();
-        this.name = accountData.getName();
-        this.firstNameLength = accountData.getFirstNameLength();
-        this.currency = accountData.getCurrency();
-        this.billCycleDay = accountData.getBillCycleDay();
-        this.paymentProviderName = accountData.getPaymentProviderName();
-        this.timeZone = accountData.getTimeZone();
-        this.locale = accountData.getLocale();
-        this.address1 = accountData.getAddress1();
-        this.address2 = accountData.getAddress2();
-        this.companyName = accountData.getCompanyName();
-        this.city = accountData.getCity();
-        this.stateOrProvince = accountData.getStateOrProvince();
-        this.country = accountData.getCountry();
-        this.postalCode = accountData.getPostalCode();
-        this.phone = accountData.getPhone();
-    }
-
-    public String getExternalKey() {
-        return externalKey;
-    }
-    public String getEmail() {
-        return email;
-    }
-    public String getName() {
-        return name;
-    }
-    public int getFirstNameLength() {
-        return firstNameLength;
-    }
-    public Currency getCurrency() {
-        return currency;
-    }
-    public int getBillCycleDay() {
-        return billCycleDay;
-    }
-    public String getPaymentProviderName() {
-        return paymentProviderName;
-    }
-    public DateTimeZone getTimeZone() {
-        return timeZone;
-    }
-    public String getLocale() {
-        return locale;
-    }
-    public String getAddress1() {
-        return address1;
-    }
-    public String getAddress2() {
-        return address2;
-    }
-    public String getCompanyName() {
-        return companyName;
-    }
-    public String getCity() {
-        return city;
-    }
-    public String getStateOrProvince() {
-        return stateOrProvince;
-    }
-    public String getCountry() {
-        return country;
-    }
-    public String getPostalCode() {
-        return postalCode;
-    }
-    public String getPhone() {
-        return phone;
-    }
-    
-    public void setExternalKey(String externalKey) {
-        this.externalKey = externalKey;
-    }
-    public void setEmail(String email) {
-        this.email = email;
-    }
-    public void setName(String name) {
-        this.name = name;
-    }
-    public void setFirstNameLength(int firstNameLength) {
-        this.firstNameLength = firstNameLength;
-    }
-    public void setCurrency(Currency currency) {
-        this.currency = currency;
-    }
-    public void setBillCycleDay(int billCycleDay) {
-        this.billCycleDay = billCycleDay;
-    }
-    public void setPaymentProviderName(String paymentProviderName) {
-        this.paymentProviderName = paymentProviderName;
-    }
-    public void setTimeZone(DateTimeZone timeZone) {
-        this.timeZone = timeZone;
-    }
-    public void setLocale(String locale) {
-        this.locale = locale;
-    }
-    public void setAddress1(String address1) {
-        this.address1 = address1;
-    }
-    public void setAddress2(String address2) {
-        this.address2 = address2;
-    }
-    public void setCompanyName(String companyName) {
-        this.companyName = companyName;
-    }
-    public void setCity(String city) {
-        this.city = city;
-    }
-    public void setStateOrProvince(String stateOrProvince) {
-        this.stateOrProvince = stateOrProvince;
-    }
-    public void setCountry(String country) {
-        this.country = country;
-    }
-    public void setPostalCode(String postalCode) {
-        this.postalCode = postalCode;
-    }
-    public void setPhone(String phone) {
-        this.phone = phone;
-    }
-
-
-}
+
+public interface MutableAccountData extends AccountData {
+
+    public String getExternalKey();
+
+    public String getEmail();
+
+    public String getName();
+
+    public int getFirstNameLength();
+
+    public Currency getCurrency();
+
+    public int getBillCycleDay();
+
+    public String getPaymentProviderName();
+
+    public DateTimeZone getTimeZone();
+
+    public String getLocale();
+
+    public String getAddress1();
+
+    public String getAddress2();
+
+    public String getCompanyName();
+
+    public String getCity();
+
+    public String getStateOrProvince();
+
+    public String getCountry();
+
+    public String getPostalCode();
+
+    public String getPhone();
+
+    public void setExternalKey(String externalKey);
+
+    public void setEmail(String email);
+
+    public void setName(String name);
+
+    public void setFirstNameLength(int firstNameLength);
+
+    public void setCurrency(Currency currency);
+
+    public void setBillCycleDay(int billCycleDay);
+
+    public void setPaymentProviderName(String paymentProviderName);
+
+    public void setTimeZone(DateTimeZone timeZone);
+
+    public void setLocale(String locale);
+
+    public void setAddress1(String address1);
+
+    public void setAddress2(String address2);
+
+    public void setCompanyName(String companyName);
+
+    public void setCity(String city);
+
+    public void setStateOrProvince(String stateOrProvince);
+
+    public void setCountry(String country);
+
+    public void setPostalCode(String postalCode);
+
+    public void setPhone(String phone);
+
+}
\ No newline at end of file
diff --git a/api/src/main/java/com/ning/billing/catalog/api/overdue/PaymentResponse.java b/api/src/main/java/com/ning/billing/catalog/api/overdue/PaymentResponse.java
index 6227e2e..6a03047 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/overdue/PaymentResponse.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/overdue/PaymentResponse.java
@@ -17,9 +17,76 @@
 package com.ning.billing.catalog.api.overdue;
 
 public enum PaymentResponse {
-	INSUFFICIENT_FUNDS,
-	TEMPORARY_ACCOUNT_ISSUE,
-	LOST_OR_STOLEN,
-	PERMANENT_ACCOUNT_ISSUE,
-	OTHER
+    // Card issues
+    INVALID_CARD("The card number, expiry date or cvc is invalid or incorrect"),
+	EXPIRED_CARD("The card has expired"),
+	LOST_OR_STOLEN_CARD("The card has been lost or stolen"),
+
+	// Account issues
+    DO_NOT_HONOR("Do not honor the card - usually a problem with account"),
+	INSUFFICIENT_FUNDS("The account had insufficient funds to fulfil the payment"),
+	DECLINE("Generic payment decline"),
+	
+	//Transaction
+	PROCESSING_ERROR("Error processing card"),
+	INVALID_AMOUNT("An invalid amount was entered"),
+	DUPLICATE_TRANSACTION("A transaction with identical amount and credit card information was submitted very recently."),
+
+	//Other
+	OTHER("Some other error");
+	
+	private String description;
+	
+	private PaymentResponse(String description) {
+	    this.description = description;
+	}
+	
+	public String getDescription() {
+	    return description;
+	}
+	
+//	 690118 | Approved
+//	 136956 | Do Not Honor
+//	 119640 | Insufficient Funds
+//	  68514 | Invalid Account Number
+//	  66824 | Declined: 10417-The transaction cannot complete successfully.  Instruct the customer to use an alternative payment
+//	  55473 | Declined: 10201-Agreement was canceled
+//	  30930 | Pick Up Card
+//	  29857 | Lost/Stolen Card
+//	  28197 | Declined
+//	  24830 | Declined: 10207-Transaction failed but user has alternate funding source
+//	  18445 | Generic Decline
+//	  18254 | Expired Card
+//	  16521 | Cardholder transaction not permitted
+//	  11576 | Restricted Card
+//	   7410 | Account Number Does Not Match Payment Type
+//	   7312 | Invalid merchant information: 10507-Payer's account is denied
+//	   6425 | Invalid Transaction
+//	   2825 | Declined: 10204-User's account is closed or restricted
+//	   2730 | Invalid account number
+//	   1331 | 
+//	   1240 | Field format error: 10561-There's an error with this transaction. Please enter a complete billing address.
+//	   1125 | Cardholder requested that recurring or installment payment be stopped
+//	   1060 | No such issuer
+//	   1047 | Issuer Unavailable
+//	    816 | Not signed up for this tender type
+//	    749 | Transaction not allowed at terminal
+//	    663 | Invalid expiration date: 0910
+//	    548 | Invalid expiration date: 1010
+//	    542 | Invalid expiration date:
+//	    500 | Invalid expiration date: 0810
+//	    492 | Invalid expiration date: 1110
+//	    410 | Invalid expiration date: 0710
+//	    388 | Exceeds Approval Amount Limit
+//	    362 | Generic processor error: 10001-Internal Error
+//	    313 | Exceeds per transaction limit: 10553-This transaction cannot be processed.
+//	    310 | Decline CVV2/CID Fail
+//	    309 | Generic processor error: 10201-Agreement was canceled
+//	    278 | Generic processor error: 10417-The transaction cannot complete successfully.  Instruct the customer to use an alte
+//	    246 | Call Issuer
+//	    237 | Generic processor error: 11091-The transaction was blocked as it would exceed the sending limit for this buyer.
+//	    202 | Failed to connect to host Input Server Uri = https://payflowpro.paypal.com:443
+//	    166 | Exceeds number of PIN entries
+//	    150 | Invalid Amount
+
 }
diff --git a/api/src/main/java/com/ning/billing/entitlement/api/billing/EntitlementBillingApi.java b/api/src/main/java/com/ning/billing/entitlement/api/billing/EntitlementBillingApi.java
index 6dc3e94..04ca9bb 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/billing/EntitlementBillingApi.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/billing/EntitlementBillingApi.java
@@ -32,7 +32,7 @@ public interface EntitlementBillingApi {
      * @return an ordered list of billing event for the given accounts
      *
      */
-    public SortedSet<BillingEvent> getBillingEventsForAccount(UUID accountId);
+    public SortedSet<BillingEvent> getBillingEventsForAccountAndUpdateAccountBCD(UUID accountId);
 
     public UUID getAccountIdFromSubscriptionId(UUID subscriptionId);
 
diff --git a/api/src/main/java/com/ning/billing/util/tag/ControlTagType.java b/api/src/main/java/com/ning/billing/util/tag/ControlTagType.java
index 902f4a1..ea09e84 100644
--- a/api/src/main/java/com/ning/billing/util/tag/ControlTagType.java
+++ b/api/src/main/java/com/ning/billing/util/tag/ControlTagType.java
@@ -18,7 +18,8 @@ package com.ning.billing.util.tag;
 
 public enum ControlTagType {
     AUTO_PAY_OFF("Suspends payments until removed.", true, false),
-    AUTO_INVOICING_OFF("Suspends invoicing until removed.", false, true);
+    AUTO_INVOICING_OFF("Suspends invoicing until removed.", false, true), 
+    OVERDUE_ENFORCEMENT_OFF("Suspends overdue enforcement behaviour until removed.", false, false);;
 
     private final String description;
     private final boolean autoPaymentOff;
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegration.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegration.java
index 8b4cd27..38ee4bf 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegration.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegration.java
@@ -622,7 +622,7 @@ public class TestIntegration {
         assertTrue(busHandler.isCompleted(DELAY));
         invoices = invoiceUserApi.getInvoicesByAccount(accountId);
         assertNotNull(invoices);
-        assertTrue(invoices.size() == 2);
+        assertEquals(invoices.size(),2);
 
         busHandler.pushExpectedEvent(NextEvent.PHASE);
         busHandler.pushExpectedEvent(NextEvent.INVOICE);
@@ -631,7 +631,7 @@ public class TestIntegration {
         assertTrue(busHandler.isCompleted(DELAY));
         invoices = invoiceUserApi.getInvoicesByAccount(accountId);
         assertNotNull(invoices);
-        assertTrue(invoices.size() == 3);
+        assertEquals(invoices.size(),3);
     }
 
     protected AccountData getAccountData(final int billingDay) {
diff --git a/catalog/src/test/java/com/ning/billing/catalog/overdue/TestBundleCondition.java b/catalog/src/test/java/com/ning/billing/catalog/overdue/TestBundleCondition.java
index ec2547a..823112e 100644
--- a/catalog/src/test/java/com/ning/billing/catalog/overdue/TestBundleCondition.java
+++ b/catalog/src/test/java/com/ning/billing/catalog/overdue/TestBundleCondition.java
@@ -59,11 +59,11 @@ public class TestBundleCondition {
 
 		DateTime now = new DateTime();
 		
-		BillingState accountState0 = new BillingState(new UUID(0L,1L), 0, BigDecimal.ZERO, now, PaymentResponse.LOST_OR_STOLEN, new Tag[]{new DefaultControlTag("Martin", now, ControlTagType.AUTO_INVOICING_OFF),new DescriptiveTag(null, "Tag", "Martin", now)});
-		BillingState accountState1 = new BillingState(new UUID(0L,1L), 1, new BigDecimal("100.00"), now.minusDays(10), PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{new DefaultControlTag("Martin", now, ControlTagType.AUTO_PAY_OFF)});
+		BillingState accountState0 = new BillingState(new UUID(0L,1L), 0, BigDecimal.ZERO, now, PaymentResponse.LOST_OR_STOLEN_CARD, new Tag[]{new DefaultControlTag("Martin", now, ControlTagType.AUTO_INVOICING_OFF),new DescriptiveTag(null, "Tag", "Martin", now)});
+		BillingState accountState1 = new BillingState(new UUID(0L,1L), 1, new BigDecimal("100.00"), now.minusDays(10), PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{new DefaultControlTag("Martin", now, ControlTagType.OVERDUE_ENFORCEMENT_OFF)});
 		BillingState accountState2 = new BillingState(new UUID(0L,1L), 1, new BigDecimal("200.00"), now.minusDays(20), 
-				PaymentResponse.TEMPORARY_ACCOUNT_ISSUE, 
-				new Tag[]{new DefaultControlTag("Martin", now, ControlTagType.AUTO_PAY_OFF), 
+				PaymentResponse.DO_NOT_HONOR, 
+				new Tag[]{new DefaultControlTag("Martin", now, ControlTagType.OVERDUE_ENFORCEMENT_OFF), 
 						  new DefaultControlTag("Martin", now, ControlTagType.AUTO_INVOICING_OFF),
 						  new DescriptiveTag(null, "Tag", "Martin", now)});
 		
@@ -83,8 +83,8 @@ public class TestBundleCondition {
 
 		DateTime now = new DateTime();
 		
-		BillingState accountState0 = new BillingState(new UUID(0L,1L), 0, BigDecimal.ZERO, now, PaymentResponse.LOST_OR_STOLEN, new Tag[]{new DefaultControlTag("Martin", now, ControlTagType.AUTO_INVOICING_OFF),new DescriptiveTag(null, "Tag", "Martin", now)});
-		BillingState accountState1 = new BillingState(new UUID(0L,1L), 1, new BigDecimal("100.00"), now.minusDays(10), PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{new DefaultControlTag("Martin", now, ControlTagType.AUTO_PAY_OFF)});
+		BillingState accountState0 = new BillingState(new UUID(0L,1L), 0, BigDecimal.ZERO, now, PaymentResponse.LOST_OR_STOLEN_CARD, new Tag[]{new DefaultControlTag("Martin", now, ControlTagType.AUTO_INVOICING_OFF),new DescriptiveTag(null, "Tag", "Martin", now)});
+		BillingState accountState1 = new BillingState(new UUID(0L,1L), 1, new BigDecimal("100.00"), now.minusDays(10), PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{new DefaultControlTag("Martin", now, ControlTagType.OVERDUE_ENFORCEMENT_OFF)});
 		
 		BillingStateBundle state0 = new BillingStateBundle(new UUID(0L,1L), accountState0, 0, BigDecimal.ZERO, new DateTime(), PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{}, MockProduct.createJet(), BillingPeriod.MONTHLY, new MockPriceList() );
 		BillingStateBundle state1 = new BillingStateBundle(new UUID(0L,1L), accountState1, 0, BigDecimal.ZERO, new DateTime(), PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{}, prod, BillingPeriod.MONTHLY, new MockPriceList() );
@@ -100,8 +100,8 @@ public class TestBundleCondition {
 
 		DateTime now = new DateTime();
 		
-		BillingState accountState0 = new BillingState(new UUID(0L,1L), 0, BigDecimal.ZERO, now, PaymentResponse.LOST_OR_STOLEN, new Tag[]{new DefaultControlTag("Martin", now, ControlTagType.AUTO_INVOICING_OFF),new DescriptiveTag(null, "Tag", "Martin", now)});
-		BillingState accountState1 = new BillingState(new UUID(0L,1L), 1, new BigDecimal("100.00"), now.minusDays(10), PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{new DefaultControlTag("Martin", now, ControlTagType.AUTO_PAY_OFF)});
+		BillingState accountState0 = new BillingState(new UUID(0L,1L), 0, BigDecimal.ZERO, now, PaymentResponse.LOST_OR_STOLEN_CARD, new Tag[]{new DefaultControlTag("Martin", now, ControlTagType.AUTO_INVOICING_OFF),new DescriptiveTag(null, "Tag", "Martin", now)});
+		BillingState accountState1 = new BillingState(new UUID(0L,1L), 1, new BigDecimal("100.00"), now.minusDays(10), PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{new DefaultControlTag("Martin", now, ControlTagType.OVERDUE_ENFORCEMENT_OFF)});
 		
 		BillingStateBundle state0 = new BillingStateBundle(new UUID(0L,1L), accountState0, 0, BigDecimal.ZERO, new DateTime(), PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{}, MockProduct.createJet(), BillingPeriod.MONTHLY, new MockPriceList() );
 		BillingStateBundle state1 = new BillingStateBundle(new UUID(0L,1L), accountState1, 0, BigDecimal.ZERO, new DateTime(), PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{}, MockProduct.createJet(), BillingPeriod.ANNUAL, new MockPriceList() );
@@ -117,8 +117,8 @@ public class TestBundleCondition {
 
 		DateTime now = new DateTime();
 		
-		BillingState accountState0 = new BillingState(new UUID(0L,1L), 0, BigDecimal.ZERO, now, PaymentResponse.LOST_OR_STOLEN, new Tag[]{new DefaultControlTag("Martin", now, ControlTagType.AUTO_INVOICING_OFF),new DescriptiveTag(null, "Tag", "Martin", now)});
-		BillingState accountState1 = new BillingState(new UUID(0L,1L), 1, new BigDecimal("100.00"), now.minusDays(10), PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{new DefaultControlTag("Martin", now, ControlTagType.AUTO_PAY_OFF)});
+		BillingState accountState0 = new BillingState(new UUID(0L,1L), 0, BigDecimal.ZERO, now, PaymentResponse.LOST_OR_STOLEN_CARD, new Tag[]{new DefaultControlTag("Martin", now, ControlTagType.AUTO_INVOICING_OFF),new DescriptiveTag(null, "Tag", "Martin", now)});
+		BillingState accountState1 = new BillingState(new UUID(0L,1L), 1, new BigDecimal("100.00"), now.minusDays(10), PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{new DefaultControlTag("Martin", now, ControlTagType.OVERDUE_ENFORCEMENT_OFF)});
 		
 		BillingStateBundle state0 = new BillingStateBundle(new UUID(0L,1L), accountState0, 0, BigDecimal.ZERO, new DateTime(), PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{}, MockProduct.createJet(), BillingPeriod.MONTHLY, new MockPriceList() );
 		BillingStateBundle state1 = new BillingStateBundle(new UUID(0L,1L), accountState1, 0, BigDecimal.ZERO, new DateTime(), PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{},  MockProduct.createJet(), BillingPeriod.MONTHLY, pl );
@@ -126,8 +126,6 @@ public class TestBundleCondition {
 		Assert.assertTrue(!c.evaluate(state0, new DateTime()));
 		Assert.assertTrue(c.evaluate(state1, new DateTime()));
 	}
-
-	//MDW TODO: test Pricelist and billing period
 	
 	
 
diff --git a/catalog/src/test/java/com/ning/billing/catalog/overdue/TestCondition.java b/catalog/src/test/java/com/ning/billing/catalog/overdue/TestCondition.java
index b1105e6..79dad9f 100644
--- a/catalog/src/test/java/com/ning/billing/catalog/overdue/TestCondition.java
+++ b/catalog/src/test/java/com/ning/billing/catalog/overdue/TestCondition.java
@@ -101,16 +101,16 @@ public class TestCondition {
 	public void testResponseForLastFailedPaymentIn() throws Exception {
 		String xml = 
 				"<condition>" +
-				"	<responseForLastFailedPaymentIn><response>INSUFFICIENT_FUNDS</response><response>TEMPORARY_ACCOUNT_ISSUE</response></responseForLastFailedPaymentIn>" +
+				"	<responseForLastFailedPaymentIn><response>INSUFFICIENT_FUNDS</response><response>DO_NOT_HONOR</response></responseForLastFailedPaymentIn>" +
 				"</condition>";
 		InputStream is = new ByteArrayInputStream(xml.getBytes());
 		MockCondition c = XMLLoader.getObjectFromStreamNoValidation(is,  MockCondition.class);
 		
 		DateTime now = new DateTime();
 		
-		BillingState state0 = new BillingState(new UUID(0L,1L), 0, BigDecimal.ZERO, now, PaymentResponse.LOST_OR_STOLEN, new Tag[]{});
+		BillingState state0 = new BillingState(new UUID(0L,1L), 0, BigDecimal.ZERO, now, PaymentResponse.LOST_OR_STOLEN_CARD, new Tag[]{});
 		BillingState state1 = new BillingState(new UUID(0L,1L), 1, new BigDecimal("100.00"), now.minusDays(10), PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{});
-		BillingState state2 = new BillingState(new UUID(0L,1L), 1, new BigDecimal("200.00"), now.minusDays(20), PaymentResponse.TEMPORARY_ACCOUNT_ISSUE, new Tag[]{});
+		BillingState state2 = new BillingState(new UUID(0L,1L), 1, new BigDecimal("200.00"), now.minusDays(20), PaymentResponse.DO_NOT_HONOR , new Tag[]{});
 		
 		Assert.assertTrue(!c.evaluate(state0, now));
 		Assert.assertTrue(c.evaluate(state1, now));
@@ -128,11 +128,11 @@ public class TestCondition {
 		
 		DateTime now = new DateTime();
 		
-		BillingState state0 = new BillingState(new UUID(0L,1L), 0, BigDecimal.ZERO, now, PaymentResponse.LOST_OR_STOLEN, new Tag[]{new DefaultControlTag("Martin", now, ControlTagType.AUTO_INVOICING_OFF),new DescriptiveTag(null, "Tag", "Martin", now)});
-		BillingState state1 = new BillingState(new UUID(0L,1L), 1, new BigDecimal("100.00"), now.minusDays(10), PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{new DefaultControlTag("Martin", now, ControlTagType.AUTO_PAY_OFF)});
+		BillingState state0 = new BillingState(new UUID(0L,1L), 0, BigDecimal.ZERO, now, PaymentResponse.LOST_OR_STOLEN_CARD, new Tag[]{new DefaultControlTag("Martin", now, ControlTagType.AUTO_INVOICING_OFF),new DescriptiveTag(null, "Tag", "Martin", now)});
+		BillingState state1 = new BillingState(new UUID(0L,1L), 1, new BigDecimal("100.00"), now.minusDays(10), PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{new DefaultControlTag("Martin", now, ControlTagType.OVERDUE_ENFORCEMENT_OFF)});
 		BillingState state2 = new BillingState(new UUID(0L,1L), 1, new BigDecimal("200.00"), now.minusDays(20), 
-				PaymentResponse.TEMPORARY_ACCOUNT_ISSUE, 
-				new Tag[]{new DefaultControlTag("Martin", now, ControlTagType.AUTO_PAY_OFF), 
+				PaymentResponse.DO_NOT_HONOR, 
+				new Tag[]{new DefaultControlTag("Martin", now, ControlTagType.OVERDUE_ENFORCEMENT_OFF), 
 						  new DefaultControlTag("Martin", now, ControlTagType.AUTO_INVOICING_OFF),
 						  new DescriptiveTag(null, "Tag", "Martin", now)});
 		
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/DefaultEntitlementBillingApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/DefaultEntitlementBillingApi.java
index 4856798..d969434 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/DefaultEntitlementBillingApi.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/DefaultEntitlementBillingApi.java
@@ -56,7 +56,7 @@ public class DefaultEntitlementBillingApi implements EntitlementBillingApi {
     }
 
     @Override
-    public SortedSet<BillingEvent> getBillingEventsForAccount(
+    public SortedSet<BillingEvent> getBillingEventsForAccountAndUpdateAccountBCD(
             final UUID accountId) {
 
         List<SubscriptionBundle> bundles = entitlementDao.getSubscriptionBundleForAccount(accountId);
@@ -70,10 +70,12 @@ public class DefaultEntitlementBillingApi implements EntitlementBillingApi {
         			    Account account = accountApi.getAccountById(accountId);
         			    int bcd = bcdCalculator.calculateBcd(bundle, subscription, transition, account);
         			    
-        		        MutableAccountData modifiedData = account.toMutableAccountData();
-        		        modifiedData.setBillCycleDay(bcd);
-
-        		        accountApi.updateAccount(account.getExternalKey(), modifiedData);
+        			    if(account.getBillCycleDay() == 0) {
+        			        MutableAccountData modifiedData = account.toMutableAccountData();
+        			        modifiedData.setBillCycleDay(bcd);
+                            accountApi.updateAccount(account.getExternalKey(), modifiedData);
+        			    }
+        			    
 
 
         				BillingEvent event = new DefaultBillingEvent(transition, subscription, bcd, account.getCurrency());
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/TestDefaultEntitlementBillingApi.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/TestDefaultEntitlementBillingApi.java
index 1c65d28..c5868b3 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/TestDefaultEntitlementBillingApi.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/TestDefaultEntitlementBillingApi.java
@@ -135,7 +135,7 @@ public class TestDefaultEntitlementBillingApi {
 
         BillCycleDayCalculator bcdCalculator = new BillCycleDayCalculator(catalogService);
         DefaultEntitlementBillingApi api = new DefaultEntitlementBillingApi(dao,bcdCalculator, accountApi);
-        SortedSet<BillingEvent> events = api.getBillingEventsForAccount(new UUID(0L,0L));
+        SortedSet<BillingEvent> events = api.getBillingEventsForAccountAndUpdateAccountBCD(new UUID(0L,0L));
 		Assert.assertEquals(events.size(), 0);
 	}
 
@@ -159,7 +159,7 @@ public class TestDefaultEntitlementBillingApi {
 		       
         BillCycleDayCalculator bcdCalculator = new BillCycleDayCalculator(catalogService);
         DefaultEntitlementBillingApi api = new DefaultEntitlementBillingApi(dao,bcdCalculator, accountApi);
-        SortedSet<BillingEvent> events = api.getBillingEventsForAccount(new UUID(0L,0L));
+        SortedSet<BillingEvent> events = api.getBillingEventsForAccountAndUpdateAccountBCD(new UUID(0L,0L));
 		checkFirstEvent(events, nextPlan, 32, oneId, now, nextPhase, ApiEventType.CREATE.toString());
 	}
 
@@ -184,7 +184,7 @@ public class TestDefaultEntitlementBillingApi {
 			
         BillCycleDayCalculator bcdCalculator = new BillCycleDayCalculator(catalogService);
         DefaultEntitlementBillingApi api = new DefaultEntitlementBillingApi(dao,bcdCalculator, accountApi);
-		SortedSet<BillingEvent> events = api.getBillingEventsForAccount(new UUID(0L,0L));
+		SortedSet<BillingEvent> events = api.getBillingEventsForAccountAndUpdateAccountBCD(new UUID(0L,0L));
 		checkFirstEvent(events, nextPlan, subscription.getStartDate().getDayOfMonth(), oneId, now, nextPhase, ApiEventType.CREATE.toString());
 	}
 
@@ -207,7 +207,7 @@ public class TestDefaultEntitlementBillingApi {
 
         BillCycleDayCalculator bcdCalculator = new BillCycleDayCalculator(catalogService);
         DefaultEntitlementBillingApi api = new DefaultEntitlementBillingApi(dao,bcdCalculator, accountApi);
-		SortedSet<BillingEvent> events = api.getBillingEventsForAccount(new UUID(0L,0L));
+		SortedSet<BillingEvent> events = api.getBillingEventsForAccountAndUpdateAccountBCD(new UUID(0L,0L));
 		checkFirstEvent(events, nextPlan, 32, oneId, now, nextPhase, ApiEventType.CREATE.toString());
 	}
 
@@ -230,7 +230,7 @@ public class TestDefaultEntitlementBillingApi {
 		((ZombieControl)accountApi).addResult("getAccountById", account);
         BillCycleDayCalculator bcdCalculator = new BillCycleDayCalculator(catalogService);
         DefaultEntitlementBillingApi api = new DefaultEntitlementBillingApi(dao,bcdCalculator, accountApi);
-		SortedSet<BillingEvent> events = api.getBillingEventsForAccount(new UUID(0L,0L));
+		SortedSet<BillingEvent> events = api.getBillingEventsForAccountAndUpdateAccountBCD(new UUID(0L,0L));
 		checkFirstEvent(events, nextPlan, bundles.get(0).getStartDate().getDayOfMonth(), oneId, now, nextPhase, ApiEventType.CREATE.toString());
 	}
 
diff --git a/invoice/src/main/java/com/ning/billing/invoice/InvoiceDispatcher.java b/invoice/src/main/java/com/ning/billing/invoice/InvoiceDispatcher.java
index c4a3b6a..04a55ca 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/InvoiceDispatcher.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/InvoiceDispatcher.java
@@ -123,7 +123,7 @@ public class InvoiceDispatcher {
             return null;
         }
 
-        SortedSet<BillingEvent> events = entitlementBillingApi.getBillingEventsForAccount(accountId);
+        SortedSet<BillingEvent> events = entitlementBillingApi.getBillingEventsForAccountAndUpdateAccountBCD(accountId);
         BillingEventSet billingEvents = new BillingEventSet(events);
 
         Currency targetCurrency = account.getCurrency();