Details
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/api/user/DefaultInvoiceUserApi.java b/invoice/src/main/java/org/killbill/billing/invoice/api/user/DefaultInvoiceUserApi.java
index 5d10162..5675180 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/api/user/DefaultInvoiceUserApi.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/api/user/DefaultInvoiceUserApi.java
@@ -45,6 +45,7 @@ import org.killbill.billing.invoice.model.CreditAdjInvoiceItem;
import org.killbill.billing.invoice.model.DefaultInvoice;
import org.killbill.billing.invoice.model.ExternalChargeInvoiceItem;
import org.killbill.billing.invoice.model.InvoiceItemFactory;
+import org.killbill.billing.invoice.template.HtmlInvoice;
import org.killbill.billing.invoice.template.HtmlInvoiceGenerator;
import org.killbill.billing.tag.TagInternalApi;
import org.killbill.billing.util.api.TagApiException;
@@ -345,7 +346,8 @@ public class DefaultInvoiceUserApi implements InvoiceUserApi {
}
}
- return generator.generateInvoice(account, invoice, manualPay);
+ HtmlInvoice htmlInvoice = generator.generateInvoice(account, invoice, manualPay);
+ return htmlInvoice.getBody();
}
@Override
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/notification/EmailInvoiceNotifier.java b/invoice/src/main/java/org/killbill/billing/invoice/notification/EmailInvoiceNotifier.java
index 723ca8f..ae7f044 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/notification/EmailInvoiceNotifier.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/notification/EmailInvoiceNotifier.java
@@ -27,6 +27,7 @@ import org.killbill.billing.account.api.AccountEmail;
import org.killbill.billing.invoice.api.Invoice;
import org.killbill.billing.invoice.api.InvoiceApiException;
import org.killbill.billing.invoice.api.InvoiceNotifier;
+import org.killbill.billing.invoice.template.HtmlInvoice;
import org.killbill.billing.invoice.template.HtmlInvoiceGenerator;
import org.killbill.billing.util.callcontext.InternalCallContextFactory;
import org.killbill.billing.callcontext.InternalTenantContext;
@@ -85,18 +86,22 @@ public class EmailInvoiceNotifier implements InvoiceNotifier {
}
}
- final String htmlBody;
+ final HtmlInvoice htmlInvoice;
try {
- htmlBody = generator.generateInvoice(account, invoice, manualPay);
+ htmlInvoice = generator.generateInvoice(account, invoice, manualPay);
} catch (IOException e) {
throw new InvoiceApiException(e, ErrorCode.EMAIL_SENDING_FAILED);
}
- final String subject = config.getInvoiceEmailSubject();
+ // take localized subject, or the configured one if the localized one is not available
+ String subject = htmlInvoice.getSubject();
+ if (subject == null) {
+ subject = config.getInvoiceEmailSubject();
+ }
final EmailSender sender = new DefaultEmailSender(config);
try {
- sender.sendHTMLEmail(to, cc, subject, htmlBody);
+ sender.sendHTMLEmail(to, cc, subject, htmlInvoice.getBody());
} catch (EmailApiException e) {
throw new InvoiceApiException(e, ErrorCode.EMAIL_SENDING_FAILED);
} catch (IOException e) {
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/template/HtmlInvoice.java b/invoice/src/main/java/org/killbill/billing/invoice/template/HtmlInvoice.java
new file mode 100644
index 0000000..5d88db1
--- /dev/null
+++ b/invoice/src/main/java/org/killbill/billing/invoice/template/HtmlInvoice.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2010-2013 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 org.killbill.billing.invoice.template;
+
+public class HtmlInvoice {
+ private String subject;
+ private String body;
+
+ public String getSubject() {
+ return subject;
+ }
+
+ public void setSubject(final String subject) {
+ this.subject = subject;
+ }
+
+ public String getBody() {
+ return body;
+ }
+
+ public void setBody(final String body) {
+ this.body = body;
+ }
+}
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/template/HtmlInvoiceGenerator.java b/invoice/src/main/java/org/killbill/billing/invoice/template/HtmlInvoiceGenerator.java
index cd95a16..e04a8f1 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/template/HtmlInvoiceGenerator.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/template/HtmlInvoiceGenerator.java
@@ -52,12 +52,13 @@ public class HtmlInvoiceGenerator {
this.currencyConversionApi = currencyConversionApi;
}
- public String generateInvoice(final Account account, @Nullable final Invoice invoice, final boolean manualPay) throws IOException {
+ public HtmlInvoice generateInvoice(final Account account, @Nullable final Invoice invoice, final boolean manualPay) throws IOException {
// Don't do anything if the invoice is null
if (invoice == null) {
return null;
}
+ HtmlInvoice invoiceData = new HtmlInvoice();
final Map<String, Object> data = new HashMap<String, Object>();
final DefaultInvoiceTranslator invoiceTranslator = new DefaultInvoiceTranslator(config);
final String accountLocale = Strings.emptyToNull(account.getLocale());
@@ -70,10 +71,14 @@ public class HtmlInvoiceGenerator {
final InvoiceFormatter formattedInvoice = factory.createInvoiceFormatter(config, invoice, locale, currencyConversionApi);
data.put("invoice", formattedInvoice);
+ invoiceData.setSubject(invoiceTranslator.getInvoiceEmailSubject());
+
if (manualPay) {
- return templateEngine.executeTemplate(config.getManualPayTemplateName(), data);
+ invoiceData.setBody(templateEngine.executeTemplate(config.getManualPayTemplateName(), data));
} else {
- return templateEngine.executeTemplate(config.getTemplateName(), data);
+ invoiceData.setBody(templateEngine.executeTemplate(config.getTemplateName(), data));
}
+
+ return invoiceData;
}
}
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/template/translator/DefaultInvoiceTranslator.java b/invoice/src/main/java/org/killbill/billing/invoice/template/translator/DefaultInvoiceTranslator.java
index 8c644d3..4bb5ef1 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/template/translator/DefaultInvoiceTranslator.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/template/translator/DefaultInvoiceTranslator.java
@@ -47,6 +47,12 @@ public class DefaultInvoiceTranslator extends DefaultTranslatorBase implements I
}
@Override
+ public String getInvoiceEmailSubject() {
+ String subject = getTranslation(locale, "invoiceEmailSubject");
+ return (!"invoiceEmailSubject".equals(subject)) ? subject : null;
+ }
+
+ @Override
public String getInvoiceTitle() {
return getTranslation(locale, "invoiceTitle");
}
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/template/translator/InvoiceStrings.java b/invoice/src/main/java/org/killbill/billing/invoice/template/translator/InvoiceStrings.java
index 624ff76..e98faf4 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/template/translator/InvoiceStrings.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/template/translator/InvoiceStrings.java
@@ -18,6 +18,8 @@ package org.killbill.billing.invoice.template.translator;
public interface InvoiceStrings {
+ String getInvoiceEmailSubject();
+
String getInvoiceTitle();
String getInvoiceDate();
diff --git a/invoice/src/test/java/org/killbill/billing/invoice/TestHtmlInvoiceGenerator.java b/invoice/src/test/java/org/killbill/billing/invoice/TestHtmlInvoiceGenerator.java
index 2ad6780..c40c594 100644
--- a/invoice/src/test/java/org/killbill/billing/invoice/TestHtmlInvoiceGenerator.java
+++ b/invoice/src/test/java/org/killbill/billing/invoice/TestHtmlInvoiceGenerator.java
@@ -29,6 +29,7 @@ import org.killbill.billing.catalog.api.Currency;
import org.killbill.billing.invoice.api.Invoice;
import org.killbill.billing.invoice.api.InvoiceItem;
import org.killbill.billing.invoice.api.formatters.InvoiceFormatterFactory;
+import org.killbill.billing.invoice.template.HtmlInvoice;
import org.killbill.billing.invoice.template.HtmlInvoiceGenerator;
import org.killbill.billing.invoice.template.formatters.DefaultInvoiceFormatterFactory;
import org.killbill.billing.util.email.templates.MustacheTemplateEngine;
@@ -56,20 +57,24 @@ public class TestHtmlInvoiceGenerator extends InvoiceTestSuiteNoDB {
@Test(groups = "fast")
public void testGenerateInvoice() throws Exception {
- final String output = g.generateInvoice(createAccount(), createInvoice(), false);
+ final HtmlInvoice output = g.generateInvoice(createAccount(), createInvoice(), false);
Assert.assertNotNull(output);
+ Assert.assertNotNull(output.getBody());
+ Assert.assertEquals(output.getSubject(), "Your invoice");
}
@Test(groups = "fast")
public void testGenerateEmptyInvoice() throws Exception {
final Invoice invoice = Mockito.mock(Invoice.class);
- final String output = g.generateInvoice(createAccount(), invoice, false);
+ final HtmlInvoice output = g.generateInvoice(createAccount(), invoice, false);
Assert.assertNotNull(output);
+ Assert.assertNotNull(output.getBody());
+ Assert.assertEquals(output.getSubject(), "Your invoice");
}
@Test(groups = "fast")
public void testGenerateNullInvoice() throws Exception {
- final String output = g.generateInvoice(createAccount(), null, false);
+ final HtmlInvoice output = g.generateInvoice(createAccount(), null, false);
Assert.assertNull(output);
}
diff --git a/invoice/src/test/resources/org/killbill/billing/util/template/translation/InvoiceTranslation_en_US.properties b/invoice/src/test/resources/org/killbill/billing/util/template/translation/InvoiceTranslation_en_US.properties
index 02d074a..823dc54 100644
--- a/invoice/src/test/resources/org/killbill/billing/util/template/translation/InvoiceTranslation_en_US.properties
+++ b/invoice/src/test/resources/org/killbill/billing/util/template/translation/InvoiceTranslation_en_US.properties
@@ -1,3 +1,4 @@
+invoiceEmailSubject=Your invoice
invoiceTitle=INVOICE
invoiceDate=Date:
invoiceNumber=Invoice #