1919
2020package org .killbill .billing .plugin .helloworld ;
2121
22+ import java .util .List ;
23+ import java .util .Locale ;
24+
25+ import org .joda .time .LocalDate ;
2226import org .killbill .billing .account .api .Account ;
2327import org .killbill .billing .account .api .AccountApiException ;
28+ import org .killbill .billing .invoice .api .Invoice ;
29+ import org .killbill .billing .invoice .api .InvoiceItem ;
30+ import org .killbill .billing .invoice .api .formatters .InvoiceFormatter ;
31+ import org .killbill .billing .invoice .api .formatters .InvoiceItemFormatter ;
32+ import org .killbill .billing .invoice .plugin .api .InvoiceFormatterFactory ;
2433import org .killbill .billing .notification .plugin .api .ExtBusEvent ;
2534import org .killbill .billing .osgi .libs .killbill .OSGIKillbillAPI ;
2635import org .killbill .billing .osgi .libs .killbill .OSGIKillbillEventDispatcher ;
2736import org .killbill .billing .plugin .api .PluginTenantContext ;
2837import org .killbill .billing .util .callcontext .TenantContext ;
38+ import org .osgi .util .tracker .ServiceTracker ;
2939import org .slf4j .Logger ;
3040import org .slf4j .LoggerFactory ;
3141
@@ -35,10 +45,15 @@ public class HelloWorldListener implements OSGIKillbillEventDispatcher.OSGIKillb
3545
3646 private final OSGIKillbillAPI osgiKillbillAPI ;
3747
38- public HelloWorldListener (final OSGIKillbillAPI killbillAPI ) {
48+ private final ServiceTracker <InvoiceFormatterFactory , InvoiceFormatterFactory > invoiceFormatterTracker ;
49+
50+ public HelloWorldListener (final OSGIKillbillAPI killbillAPI , final ServiceTracker <InvoiceFormatterFactory , InvoiceFormatterFactory > invoiceFormatterTracker ) {
3951 this .osgiKillbillAPI = killbillAPI ;
52+ this .invoiceFormatterTracker = invoiceFormatterTracker ;
4053 }
4154
55+ private static final String defaultLocale = "en_US" ;
56+
4257 @ Override
4358 public void handleKillbillEvent (final ExtBusEvent killbillEvent ) {
4459 logger .info ("Received event {} for object id {} of type {}" ,
@@ -60,7 +75,29 @@ public void handleKillbillEvent(final ExtBusEvent killbillEvent) {
6075 logger .warn ("Unable to find account" , e );
6176 }
6277 break ;
78+ case INVOICE_CREATION :
79+
80+ final Account account ;
81+ try {
82+ account = osgiKillbillAPI .getAccountUserApi ().getAccountById (killbillEvent .getAccountId (), context );
83+ } catch (AccountApiException e ) {
84+ throw new RuntimeException (e );
85+ }
86+ final List <Invoice > invoices = osgiKillbillAPI .getInvoiceUserApi ().getInvoicesByAccount (killbillEvent .getAccountId (), false , false , true , context );
87+ logger .info ("Invoices in hello-world-plugin {}: " ,invoices .size ());
88+ final InvoiceFormatterFactory formatterFactory = (invoiceFormatterTracker != null ? invoiceFormatterTracker .getService () : null );
89+ Invoice invoice = invoices .get (0 ); //For demo purpose, we are only retrieving the formattedEndDate for the first invoice
90+ //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
6391
92+ InvoiceFormatter invoiceFormatter = formatterFactory .createInvoiceFormatter (defaultLocale , null , invoice , Locale .forLanguageTag (account .getLocale ()), osgiKillbillAPI .getCurrencyConversionApi (), null , null );
93+
94+ List <InvoiceItem > items = invoiceFormatter .getInvoiceItems ();
95+ logger .info ("hello-world-plugin got items:{}" ,items .size ());
96+ for (InvoiceItem item :items ) {
97+ final InvoiceItemFormatter invoiceItemFormatter = (InvoiceItemFormatter )item ;
98+ final String formattedEndDate = invoiceItemFormatter .getFormattedEndDate ();
99+ logger .info ("hello-world-plugin formattedEndDate:{}" ,formattedEndDate );
100+ }
64101 // Nothing
65102 default :
66103 break ;
0 commit comments