1919
2020package org .killbill .billing .plugin .helloworld ;
2121
22+ import java .util .List ;
23+ import java .util .Locale ;
24+ import java .util .Properties ;
25+
26+ import org .joda .time .LocalDate ;
2227import org .killbill .billing .account .api .Account ;
2328import org .killbill .billing .account .api .AccountApiException ;
29+ import org .killbill .billing .invoice .api .Invoice ;
30+ import org .killbill .billing .invoice .api .InvoiceItem ;
31+ import org .killbill .billing .invoice .api .formatters .InvoiceFormatter ;
32+ import org .killbill .billing .invoice .api .formatters .InvoiceItemFormatter ;
33+ import org .killbill .billing .invoice .plugin .api .InvoiceFormatterFactory ;
2434import org .killbill .billing .notification .plugin .api .ExtBusEvent ;
2535import org .killbill .billing .osgi .libs .killbill .OSGIKillbillAPI ;
2636import org .killbill .billing .osgi .libs .killbill .OSGIKillbillEventDispatcher ;
2737import org .killbill .billing .plugin .api .PluginTenantContext ;
2838import org .killbill .billing .util .callcontext .TenantContext ;
39+ import org .osgi .util .tracker .ServiceTracker ;
2940import org .slf4j .Logger ;
3041import org .slf4j .LoggerFactory ;
3142
@@ -35,10 +46,18 @@ public class HelloWorldListener implements OSGIKillbillEventDispatcher.OSGIKillb
3546
3647 private final OSGIKillbillAPI osgiKillbillAPI ;
3748
38- public HelloWorldListener (final OSGIKillbillAPI killbillAPI ) {
49+ private final ServiceTracker <InvoiceFormatterFactory , InvoiceFormatterFactory > invoiceFormatterTracker ;
50+
51+ private final Properties configProperties ;
52+
53+ public HelloWorldListener (final OSGIKillbillAPI killbillAPI , final ServiceTracker <InvoiceFormatterFactory , InvoiceFormatterFactory > invoiceFormatterTracker , Properties configProperties ) {
3954 this .osgiKillbillAPI = killbillAPI ;
55+ this .invoiceFormatterTracker = invoiceFormatterTracker ;
56+ this .configProperties = configProperties ;
4057 }
4158
59+ private static final String defaultLocale = "en_US" ;
60+
4261 @ Override
4362 public void handleKillbillEvent (final ExtBusEvent killbillEvent ) {
4463 logger .info ("Received event {} for object id {} of type {}" ,
@@ -60,7 +79,36 @@ public void handleKillbillEvent(final ExtBusEvent killbillEvent) {
6079 logger .warn ("Unable to find account" , e );
6180 }
6281 break ;
82+ case INVOICE_CREATION :
83+
84+ final Account account ;
85+ try {
86+ account = osgiKillbillAPI .getAccountUserApi ().getAccountById (killbillEvent .getAccountId (), context );
87+ } catch (AccountApiException e ) {
88+ throw new RuntimeException (e );
89+ }
90+ final List <Invoice > invoices = osgiKillbillAPI .getInvoiceUserApi ().getInvoicesByAccount (killbillEvent .getAccountId (), false , false , true , context );
91+ logger .info ("Invoices in hello-world-plugin {}: " ,invoices .size ());
92+
93+ final String invoiceFormatterPluginName = configProperties .getProperty ("org.killbill.template.invoiceFormatterFactoryPluginName" );
94+ if (invoiceFormatterPluginName == null || invoiceFormatterPluginName .isEmpty ()){
95+ logger .info ("Invoice formatter plugin not configured. set the org.killbill.template.invoiceFormatterFactoryPluginName property to configure it" );
96+ return ;
97+ }
6398
99+ final InvoiceFormatterFactory formatterFactory = (invoiceFormatterTracker != null ? invoiceFormatterTracker .getService () : null );
100+ Invoice invoice = invoices .get (0 ); //For demo purpose, we are only retrieving the formattedEndDate for the first invoice
101+ //TODO Using null for parameters like catalogBundlePath,bundle, defaultBundle, etc. Update this to use correct values if possible or verify that using null values has no adverse effect
102+
103+ InvoiceFormatter invoiceFormatter = formatterFactory .createInvoiceFormatter (defaultLocale , null , invoice , Locale .forLanguageTag (account .getLocale ()), osgiKillbillAPI .getCurrencyConversionApi (), null , null );
104+
105+ List <InvoiceItem > items = invoiceFormatter .getInvoiceItems ();
106+ logger .info ("hello-world-plugin got items:{}" ,items .size ());
107+ for (InvoiceItem item :items ) {
108+ final InvoiceItemFormatter invoiceItemFormatter = (InvoiceItemFormatter )item ;
109+ final String formattedEndDate = invoiceItemFormatter .getFormattedEndDate ();
110+ logger .info ("hello-world-plugin formattedEndDate:{}" ,formattedEndDate );
111+ }
64112 // Nothing
65113 default :
66114 break ;
0 commit comments