diff --git a/README.md b/README.md index 862362004e69..99c2e354139c 100644 --- a/README.md +++ b/README.md @@ -9,13 +9,15 @@ If you'd like to use our code to sell your own invoicing app get in touch. Most online invoicing sites are expensive. They shouldn't be. The aim of this project is to provide a free, open-source alternative. Additionally, the hope is the codebase will serve as a sample site for Laravel as well as other JavaScript technologies. -To setup the site you can either use this [zip file](http://hillelcoren.com/invoice-ninja/self-hosting/) (easier to setup) or checkout the code from GitHub following the instructions below (easier to stay up to date). There's also a more detailed setup guide [available here](http://hillelcoren.com/invoice-ninja/laravel-ubuntu-virtualbox/). To deploy the app with [Docker](http://www.docker.com/) you can use [this project](https://github.com/rollbrettler/Dockerfiles/tree/master/invoice-ninja). +To setup the site you can either use this [zip file](http://hillelcoren.com/invoice-ninja/self-hosting/) (easier to setup) or checkout the code from GitHub following the instructions below (easier to stay up to date). There's also a more detailed setup guide [available here](http://hillelcoren.com/invoice-ninja/laravel-ubuntu-virtualbox/). + +For a WAMP/MAMP/LAMP setup you can one-click install using Softaculous's [AMPPS](http://www.ampps.com/). To deploy the app with [Docker](http://www.docker.com/) you can use [this project](https://github.com/rollbrettler/Dockerfiles/tree/master/invoice-ninja). To connect follow [@invoiceninja](https://twitter.com/invoiceninja) or join the [Facebook Group](https://www.facebook.com/invoiceninja). For discussion of the code please use the [Google Group](https://groups.google.com/d/forum/invoiceninja). If you'd like to translate the site please use [caouecs/Laravel4-long](https://github.com/caouecs/Laravel4-lang) for the starter files. -Site design by [kantorp-wegl.in](http://kantorp-wegl.in/) +Developed by [@hillelcoren](https://twitter.com/hillelcoren) | Designed by [kantorp-wegl.in](http://kantorp-wegl.in/). ### Features @@ -25,6 +27,8 @@ Site design by [kantorp-wegl.in](http://kantorp-wegl.in/) * Recurring invoices * Tax rates and payment terms * Multi-user support +* [Zapier](https://zapier.com/) integration +* [D3.js](http://d3js.org/) visualizations ### Steps to setup diff --git a/app/commands/CreateRandomData.php b/app/commands/CreateRandomData.php new file mode 100644 index 000000000000..561f2c856c7e --- /dev/null +++ b/app/commands/CreateRandomData.php @@ -0,0 +1,88 @@ +info(date('Y-m-d') . ' Running CreateRandomData...'); + + $user = User::first(); + + if (!$user) { + $this->error("Error: please create user account by logging in"); + return; + } + + $productNames = ['Arkansas', 'New York', 'Arizona', 'California', 'Colorado', 'Alabama', 'Connecticut', 'Delaware', 'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire', 'New Jersey', 'New Mexico', 'Alaska', 'North Carolina', 'North Dakota', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode Island', 'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming']; + $clientNames = ['IBM', 'Nestle', 'Mitsubishi UFJ Financial', 'Vodafone', 'Eni', 'Procter & Gamble', 'Johnson & Johnson', 'American International Group', 'Banco Santander', 'BHP Billiton', 'Pfizer', 'Itaú Unibanco Holding', 'Ford Motor', 'BMW Group', 'Commonwealth Bank', 'EDF', 'Statoil', 'Google', 'Siemens', 'Novartis', 'Royal Bank of Canada', 'Sumitomo Mitsui Financial', 'Comcast', 'Sberbank', 'Goldman Sachs Group', 'Westpac Banking Group', 'Nippon Telegraph & Tel', 'Ping An Insurance Group', 'Banco Bradesco', 'Anheuser-Busch InBev', 'Bank of Communications', 'China Life Insurance', 'General Motors', 'Telefónica', 'MetLife', 'Honda Motor', 'Enel', 'BASF', 'Softbank', 'National Australia Bank', 'ANZ', 'ConocoPhillips', 'TD Bank Group', 'Intel', 'UBS', 'Hewlett-Packard', 'Coca-Cola', 'Cisco Systems', 'UnitedHealth Group', 'Boeing', 'Zurich Insurance Group', 'Hyundai Motor', 'Sanofi', 'Credit Agricole', 'United Technologies', 'Roche Holding', 'Munich Re', 'PepsiCo', 'Oracle', 'Bank of Nova Scotia']; + + for ($i=1; $i<=40; $i++) { + $product = Product::createNew($user); + $product->id = $i; + $product->product_key = $productNames[$i-1]; + $product->save(); + } + + for ($i=0; $i<60; $i++) { + $client = Client::createNew($user); + $client->name = $clientNames[$i]; + $client->save(); + + $contact = Contact::createNew($user); + $contact->email = "client@aol.com"; + $contact->is_primary = 1; + $client->contacts()->save($contact); + + $numInvoices = rand(1, 25); + if ($numInvoices == 4 || $numInvoices == 10 || $numInvoices == 25) { + // leave these + } else if ($numInvoices % 3 == 0) { + $numInvoices = 1; + } else if ($numInvoices > 10) { + $numInvoices = $numInvoices % 2; + } + + $paidUp = rand(0, 1) == 1; + + for ($j=1; $j<=$numInvoices; $j++) { + + $price = rand(10, 1000); + if ($price < 900) { + $price = rand(10, 150); + } + + $invoice = Invoice::createNew($user); + $invoice->invoice_number = $user->account->getNextInvoiceNumber(); + $invoice->amount = $invoice->balance = $price; + $invoice->created_at = date('Y-m-d', strtotime(date("Y-m-d") . ' - ' . rand(1, 100) . ' days')); + $client->invoices()->save($invoice); + + $productId = rand(0, 40); + if ($productId > 20) { + $productId = ($productId % 2) + rand(0, 2); + } + + $invoiceItem = InvoiceItem::createNew($user); + $invoiceItem->product_id = $productId+1; + $invoiceItem->product_key = $productNames[$invoiceItem->product_id]; + $invoiceItem->cost = $invoice->amount; + $invoiceItem->qty = 1; + $invoice->invoice_items()->save($invoiceItem); + + if ($paidUp || rand(0,2) > 1) { + $payment = Payment::createNew($user); + $payment->invoice_id = $invoice->id; + $payment->amount = $invoice->amount; + $client->payments()->save($payment); + } + } + } + } +} \ No newline at end of file diff --git a/app/commands/ResetData.php b/app/commands/ResetData.php new file mode 100644 index 000000000000..39150407ea93 --- /dev/null +++ b/app/commands/ResetData.php @@ -0,0 +1,24 @@ +info(date('Y-m-d') . ' Running ResetData...'); + + if (!Utils::isNinjaDev()) { + return; + } + + Artisan::call('migrate:reset'); + Artisan::call('migrate'); + Artisan::call('db:seed'); + } +} \ No newline at end of file diff --git a/app/controllers/AccountController.php b/app/controllers/AccountController.php index 5fbca1d20d04..f6d9ee245cca 100755 --- a/app/controllers/AccountController.php +++ b/app/controllers/AccountController.php @@ -34,8 +34,20 @@ class AccountController extends \BaseController { } public function update() - { + { if (!Utils::isNinja()) { + // populate migrations if the application was initially setup using database.sql + $migrations = DB::table('migrations')->get(); + if (Schema::hasTable('accounts') && count($migrations) == 0) { + $migrations = ['2013_11_05_180133_confide_setup_users_table', '2013_11_28_195703_setup_countries_table', '2014_02_13_151500_add_cascase_drops', '2014_02_19_151817_add_support_for_invoice_designs', '2014_03_03_155556_add_phone_to_account', '2014_03_19_201454_add_language_support', '2014_03_20_200300_create_payment_libraries', '2014_03_23_051736_enable_forcing_jspdf', '2014_03_25_102200_add_sort_and_recommended_to_gateways', '2014_04_03_191105_add_pro_plan', '2014_04_17_100523_add_remember_token', '2014_04_17_145108_add_custom_fields', '2014_04_23_170909_add_products_settings', '2014_04_29_174315_add_advanced_settings', '2014_05_17_175626_add_quotes', '2014_06_17_131940_add_accepted_credit_cards_to_account_gateways', '2014_07_13_142654_one_click_install', '2014_07_17_205900_support_hiding_quantity', '2014_07_24_171214_add_zapier_support']; + foreach ($migrations as $migration) { + DB::table('migrations')->insert([ + 'migration' => $migration, + 'batch' => 1 + ]); + } + } + try { Artisan::call('migrate'); } catch (Exception $e) { @@ -46,6 +58,7 @@ class AccountController extends \BaseController { return Redirect::to('/'); } + /* public function reset() { if (Utils::isNinjaDev()) { @@ -61,7 +74,8 @@ class AccountController extends \BaseController { return Redirect::to('/'); } - + */ + public function getStarted() { if (Auth::check()) @@ -152,7 +166,7 @@ class AccountController extends \BaseController { { $accountGateway = $account->account_gateways[0]; $config = $accountGateway->config; - $selectedCards = $accountGateway->accepted_credit_cards; + $selectedCards = $accountGateway->accepted_credit_cards; $configFields = json_decode($config); @@ -160,6 +174,9 @@ class AccountController extends \BaseController { { $configFields->$configField = str_repeat('*', strlen($value)); } + } else { + $accountGateway = AccountGateway::createNew(); + $accountGateway->gateway_id = GATEWAY_MOOLAH; } $recommendedGateways = Gateway::remember(DEFAULT_QUERY_CACHE) @@ -177,8 +194,8 @@ class AccountController extends \BaseController { 'data-siteUrl' => $recommendedGateway->site_url ); $recommendedGatewayArray[$recommendedGateway->name] = $arrayItem; - } - + } + $creditCardsArray = unserialize(CREDIT_CARDS); $creditCards = []; foreach($creditCardsArray as $card => $name) @@ -196,25 +213,12 @@ class AccountController extends \BaseController { 'data-siteUrl' => '' ); $recommendedGatewayArray['Other Options'] = $otherItem; - - $data = [ - 'account' => $account, - 'accountGateway' => $accountGateway, - 'config' => $configFields, - 'gateways' => Gateway::remember(DEFAULT_QUERY_CACHE) - ->orderBy('name') - ->get(), - 'dropdownGateways' => Gateway::remember(DEFAULT_QUERY_CACHE) - ->where('recommended', '=', '0') - ->orderBy('name') - ->get(), - 'recommendedGateways' => $recommendedGatewayArray, - 'creditCardTypes' => $creditCards, - ]; - - foreach ($data['gateways'] as $gateway) + + $gateways = Gateway::remember(DEFAULT_QUERY_CACHE)->orderBy('name')->get(); + + foreach ($gateways as $gateway) { - $paymentLibrary = $gateway->paymentlibrary; + $paymentLibrary = $gateway->paymentlibrary; $gateway->fields = $gateway->getFields(); @@ -223,7 +227,20 @@ class AccountController extends \BaseController { $accountGateway->fields = $gateway->fields; } } - + + $data = [ + 'account' => $account, + 'accountGateway' => $accountGateway, + 'config' => $configFields, + 'gateways' => $gateways, + 'dropdownGateways' => Gateway::remember(DEFAULT_QUERY_CACHE) + ->where('recommended', '=', '0') + ->orderBy('name') + ->get(), + 'recommendedGateways' => $recommendedGatewayArray, + 'creditCardTypes' => $creditCards, + ]; + return View::make('accounts.payments', $data); } else if ($section == ACCOUNT_NOTIFICATIONS) diff --git a/app/controllers/PaymentController.php b/app/controllers/PaymentController.php index da6327963b07..1bf0f3c15ac7 100755 --- a/app/controllers/PaymentController.php +++ b/app/controllers/PaymentController.php @@ -3,18 +3,20 @@ use ninja\repositories\PaymentRepository; use ninja\repositories\InvoiceRepository; use ninja\repositories\AccountRepository; +use ninja\mailers\ContactMailer; class PaymentController extends \BaseController { protected $creditRepo; - public function __construct(PaymentRepository $paymentRepo, InvoiceRepository $invoiceRepo, AccountRepository $accountRepo) + public function __construct(PaymentRepository $paymentRepo, InvoiceRepository $invoiceRepo, AccountRepository $accountRepo, ContactMailer $contactMailer) { parent::__construct(); $this->paymentRepo = $paymentRepo; $this->invoiceRepo = $invoiceRepo; $this->accountRepo = $accountRepo; + $this->contactMailer = $contactMailer; } public function index() @@ -423,6 +425,9 @@ class PaymentController extends \BaseController 'hideHeader' => true ]; + $name = "{$license->first_name} {$license->last_name}"; + $this->contactMailer->sendLicensePaymentConfirmation($name, $license->email, LICENSE_PRICE, $license->license_key); + return View::make('public.license', $data); //return Redirect::away(Session::get('return_url') . "?license_key={$license->license_key}"); diff --git a/app/controllers/ReportController.php b/app/controllers/ReportController.php index a4a07aa53e82..1d1e7349210b 100755 --- a/app/controllers/ReportController.php +++ b/app/controllers/ReportController.php @@ -2,6 +2,31 @@ class ReportController extends \BaseController { + public function d3() + { + $message = ''; + + if (Auth::user()->account->isPro()) { + $account = Auth::user()->account; + $account = $account->with(['clients.invoices.invoice_items', 'clients.contacts'])->first(); + $account = $account->hideFieldsForViz(); + $clients = $account->clients->toJson(); + } else if (isset($_ENV['DATA_VIZ_SAMPLE'])) { + $clients = $_ENV['DATA_VIZ_SAMPLE']; + $message = trans('texts.sample_data'); + } else { + $clients = '[]'; + } + + $data = [ + 'feature' => ACCOUNT_DATA_VISUALIZATIONS, + 'clients' => $clients, + 'message' => $message + ]; + + return View::make('reports.d3', $data); + } + public function report() { if (Input::all()) diff --git a/app/database/seeds/PaymentLibrariesSeeder.php b/app/database/seeds/PaymentLibrariesSeeder.php index 07bb1e63be02..24a958228eef 100644 --- a/app/database/seeds/PaymentLibrariesSeeder.php +++ b/app/database/seeds/PaymentLibrariesSeeder.php @@ -12,6 +12,20 @@ class PaymentLibrariesSeeder extends Seeder array('name'=>'Psigate', 'provider'=>'Psigate', 'payment_library_id' => 2) ]; + foreach ($gateways as $gateway) + { + Gateway::create($gateway); + } + + Gateway::create([ + 'name' => 'moolah', + 'provider' => 'AuthorizeNet_AIM', + 'sort_order' => 1, + 'recommended' => 1, + 'site_url' => 'https://invoiceninja.mymoolah.com/', + ]); + + /* $updateProviders = array( 0 => 'AuthorizeNet_AIM', //1 => 'BeanStream', @@ -21,11 +35,6 @@ class PaymentLibrariesSeeder extends Seeder 5 => 'TwoCheckout' ); - foreach ($gateways as $gateway) - { - Gateway::create($gateway); - } - Gateway::whereIn('provider', $updateProviders)->update(array('recommended' => 1)); Gateway::where('provider', '=', 'AuthorizeNet_AIM')->update(array('sort_order' => 5, 'site_url' => 'http://reseller.authorize.net/application/?id=5560364')); @@ -33,5 +42,7 @@ class PaymentLibrariesSeeder extends Seeder //Gateway::where('provider', '=', 'FirstData_Connect')->update(array('sort_order' => 20, 'site_url' => 'https://www.firstdata.com/')); Gateway::where('provider', '=', 'PayPal_Pro')->update(array('sort_order' => 25, 'site_url' => 'https://www.paypal.com/')); Gateway::where('provider', '=', 'TwoCheckout')->update(array('sort_order' => 30, 'site_url' => 'https://www.2checkout.com/referral?r=2c37ac2298')); + */ + } } \ No newline at end of file diff --git a/app/lang/de/texts.php b/app/lang/de/texts.php index f2f89bea2d06..c4c44257cf3a 100644 --- a/app/lang/de/texts.php +++ b/app/lang/de/texts.php @@ -333,6 +333,13 @@ return array( 'created_product' => 'Produkt erfolgreich erstellt', 'archived_product' => 'Produkt erfolgreich archiviert', 'product_library' => 'Produktbibliothek', + 'pro_plan_custom_fields' => ':link to enable custom fields by joining the Pro Plan', + + 'advanced_settings' => 'Advanced Settings', + 'pro_plan_advanced_settings' => ':link to enable the advanced settings by joining the Pro Plan', + 'invoice_design' => 'Invoice Design', + 'specify_colors' => 'Specify colors', + 'specify_colors_label' => 'Select the colors used in the invoice', 'chart_builder' => 'Diagrammersteller', 'ninja_email_footer' => 'Nutze :site um Kunden eine Rechnung zu stellen und online bezahlt zu werden, kostenlos!', @@ -407,10 +414,13 @@ return array( 'confirm_email_invoice' => 'Are you sure you want to email this invoice?', 'confirm_email_quote' => 'Are you sure you want to email this quote?', - 'confirm_recurring_email_invoice' => 'Are you sure you want this invoice emailed?', + 'confirm_recurring_email_invoice' => 'Recurring is enabled, are you sure you want this invoice emailed?', 'cancel_account' => 'Cancel Account', 'cancel_account_message' => 'Warning: This will permanently erase all of your data, there is no undo.', 'go_back' => 'Go Back', + 'data_visualizations' => 'Data Visualizations', + 'sample_data' => 'Sample data shown', + ); diff --git a/app/lang/en/texts.php b/app/lang/en/texts.php index b8648c28f0be..f7a2e0295b6b 100644 --- a/app/lang/en/texts.php +++ b/app/lang/en/texts.php @@ -422,10 +422,14 @@ return array( 'confirm_email_invoice' => 'Are you sure you want to email this invoice?', 'confirm_email_quote' => 'Are you sure you want to email this quote?', - 'confirm_recurring_email_invoice' => 'Are you sure you want this invoice emailed?', + 'confirm_recurring_email_invoice' => 'Recurring is enabled,re you sure you want this invoice emailed?', 'cancel_account' => 'Cancel Account', 'cancel_account_message' => 'Warning: This will permanently erase all of your data, there is no undo.', 'go_back' => 'Go Back', + 'data_visualizations' => 'Data Visualizations', + 'sample_data' => 'Sample data shown', + + ); \ No newline at end of file diff --git a/app/lang/es/texts.php b/app/lang/es/texts.php index 2335ce1c3afd..05a63547e30c 100644 --- a/app/lang/es/texts.php +++ b/app/lang/es/texts.php @@ -332,6 +332,13 @@ return array( 'updated_product' => 'Successfully updated product', 'created_product' => 'Successfully created product', 'archived_product' => 'Successfully archived product', + 'pro_plan_custom_fields' => ':link to enable custom fields by joining the Pro Plan', + + 'advanced_settings' => 'Advanced Settings', + 'pro_plan_advanced_settings' => ':link to enable the advanced settings by joining the Pro Plan', + 'invoice_design' => 'Invoice Design', + 'specify_colors' => 'Specify colors', + 'specify_colors_label' => 'Select the colors used in the invoice', 'chart_builder' => 'Chart Builder', 'ninja_email_footer' => 'Use :site to invoice your clients and get paid online for free!', @@ -405,10 +412,13 @@ return array( 'confirm_email_invoice' => 'Are you sure you want to email this invoice?', 'confirm_email_quote' => 'Are you sure you want to email this quote?', - 'confirm_recurring_email_invoice' => 'Are you sure you want this invoice emailed?', + 'confirm_recurring_email_invoice' => 'Recurring is enabled, are you sure you want this invoice emailed?', 'cancel_account' => 'Cancel Account', 'cancel_account_message' => 'Warning: This will permanently erase all of your data, there is no undo.', 'go_back' => 'Go Back', + 'data_visualizations' => 'Data Visualizations', + 'sample_data' => 'Sample data shown', + ); diff --git a/app/lang/fr/texts.php b/app/lang/fr/texts.php index 462785a93869..5565e5be70fe 100644 --- a/app/lang/fr/texts.php +++ b/app/lang/fr/texts.php @@ -333,6 +333,13 @@ return array( 'updated_product' => 'Successfully updated product', 'created_product' => 'Successfully created product', 'archived_product' => 'Successfully archived product', + 'pro_plan_custom_fields' => ':link to enable custom fields by joining the Pro Plan', + + 'advanced_settings' => 'Advanced Settings', + 'pro_plan_advanced_settings' => ':link to enable the advanced settings by joining the Pro Plan', + 'invoice_design' => 'Invoice Design', + 'specify_colors' => 'Specify colors', + 'specify_colors_label' => 'Select the colors used in the invoice', 'chart_builder' => 'Chart Builder', 'ninja_email_footer' => 'Use :site to invoice your clients and get paid online for free!', @@ -407,10 +414,14 @@ return array( 'confirm_email_invoice' => 'Are you sure you want to email this invoice?', 'confirm_email_quote' => 'Are you sure you want to email this quote?', - 'confirm_recurring_email_invoice' => 'Are you sure you want this invoice emailed?', + 'confirm_recurring_email_invoice' => 'Recurring is enabled, are you sure you want this invoice emailed?', 'cancel_account' => 'Cancel Account', 'cancel_account_message' => 'Warning: This will permanently erase all of your data, there is no undo.', 'go_back' => 'Go Back', + 'data_visualizations' => 'Data Visualizations', + 'sample_data' => 'Sample data shown', + + ); diff --git a/app/lang/it/texts.php b/app/lang/it/texts.php index c81c33eab1cd..a2c8ad2dec22 100644 --- a/app/lang/it/texts.php +++ b/app/lang/it/texts.php @@ -333,6 +333,13 @@ return array( 'updated_product' => 'Prodotto aggiornato con successo', 'created_product' => 'Prodotto creato con successo', 'archived_product' => 'Prodotto archiviato con successo', + 'pro_plan_custom_fields' => ':link to enable custom fields by joining the Pro Plan', + + 'advanced_settings' => 'Advanced Settings', + 'pro_plan_advanced_settings' => ':link to enable the advanced settings by joining the Pro Plan', + 'invoice_design' => 'Invoice Design', + 'specify_colors' => 'Specify colors', + 'specify_colors_label' => 'Select the colors used in the invoice', 'chart_builder' => 'Creatore grafico', 'ninja_email_footer' => 'Usa :site per fatturare ai tuoi clienti e venire pagato online gratis!', @@ -407,10 +414,13 @@ return array( 'confirm_email_invoice' => 'Are you sure you want to email this invoice?', 'confirm_email_quote' => 'Are you sure you want to email this quote?', - 'confirm_recurring_email_invoice' => 'Are you sure you want this invoice emailed?', + 'confirm_recurring_email_invoice' => 'Recurring is enabled, are you sure you want this invoice emailed?', 'cancel_account' => 'Cancel Account', 'cancel_account_message' => 'Warning: This will permanently erase all of your data, there is no undo.', 'go_back' => 'Go Back', - + + 'data_visualizations' => 'Data Visualizations', + 'sample_data' => 'Sample data shown', + ); diff --git a/app/lang/lt/texts.php b/app/lang/lt/texts.php index d6e5a05821ba..9364251271a3 100644 --- a/app/lang/lt/texts.php +++ b/app/lang/lt/texts.php @@ -422,11 +422,15 @@ return array( 'confirm_email_invoice' => 'Are you sure you want to email this invoice?', 'confirm_email_quote' => 'Are you sure you want to email this quote?', - 'confirm_recurring_email_invoice' => 'Are you sure you want this invoice emailed?', + 'confirm_recurring_email_invoice' => 'Recurring is enabled, are you sure you want this invoice emailed?', 'cancel_account' => 'Cancel Account', 'cancel_account_message' => 'Warning: This will permanently erase all of your data, there is no undo.', 'go_back' => 'Go Back', + 'data_visualizations' => 'Data Visualizations', + 'sample_data' => 'Sample data shown', + + ); diff --git a/app/lang/nb_NO/texts.php b/app/lang/nb_NO/texts.php index abed26d260a7..e590a2cb4eda 100644 --- a/app/lang/nb_NO/texts.php +++ b/app/lang/nb_NO/texts.php @@ -422,10 +422,14 @@ return array( 'confirm_email_invoice' => 'Are you sure you want to email this invoice?', 'confirm_email_quote' => 'Are you sure you want to email this quote?', - 'confirm_recurring_email_invoice' => 'Are you sure you want this invoice emailed?', + 'confirm_recurring_email_invoice' => 'Recurring is enabled, are you sure you want this invoice emailed?', 'cancel_account' => 'Cancel Account', 'cancel_account_message' => 'Warning: This will permanently erase all of your data, there is no undo.', 'go_back' => 'Go Back', + 'data_visualizations' => 'Data Visualizations', + 'sample_data' => 'Sample data shown', + + ); \ No newline at end of file diff --git a/app/lang/nl/texts.php b/app/lang/nl/texts.php index 5ad10e249578..f5b3718995e7 100644 --- a/app/lang/nl/texts.php +++ b/app/lang/nl/texts.php @@ -334,6 +334,13 @@ return array( 'updated_product' => 'Successfully updated product', 'created_product' => 'Successfully created product', 'archived_product' => 'Successfully archived product', + 'pro_plan_custom_fields' => ':link to enable custom fields by joining the Pro Plan', + + 'advanced_settings' => 'Advanced Settings', + 'pro_plan_advanced_settings' => ':link to enable the advanced settings by joining the Pro Plan', + 'invoice_design' => 'Invoice Design', + 'specify_colors' => 'Specify colors', + 'specify_colors_label' => 'Select the colors used in the invoice', 'chart_builder' => 'Chart Builder', 'ninja_email_footer' => 'Use :site to invoice your clients and get paid online for free!', @@ -408,10 +415,14 @@ return array( 'confirm_email_invoice' => 'Are you sure you want to email this invoice?', 'confirm_email_quote' => 'Are you sure you want to email this quote?', - 'confirm_recurring_email_invoice' => 'Are you sure you want this invoice emailed?', - + 'confirm_recurring_email_invoice' => 'Recurring is enabled, are you sure you want this invoice emailed?', + 'cancel_account' => 'Cancel Account', 'cancel_account_message' => 'Warning: This will permanently erase all of your data, there is no undo.', 'go_back' => 'Go Back', + 'data_visualizations' => 'Data Visualizations', + 'sample_data' => 'Sample data shown', + + ); diff --git a/app/lang/pt_BR/texts.php b/app/lang/pt_BR/texts.php index 5aab09b6b887..5084cff31f85 100644 --- a/app/lang/pt_BR/texts.php +++ b/app/lang/pt_BR/texts.php @@ -322,6 +322,13 @@ return array( 'updated_product' => 'Successfully updated product', 'created_product' => 'Successfully created product', 'archived_product' => 'Successfully archived product', + 'pro_plan_custom_fields' => ':link to enable custom fields by joining the Pro Plan', + + 'advanced_settings' => 'Advanced Settings', + 'pro_plan_advanced_settings' => ':link to enable the advanced settings by joining the Pro Plan', + 'invoice_design' => 'Invoice Design', + 'specify_colors' => 'Specify colors', + 'specify_colors_label' => 'Select the colors used in the invoice', 'chart_builder' => 'Chart Builder', 'ninja_email_footer' => 'Use :site to invoice your clients and get paid online for free!', @@ -396,10 +403,14 @@ return array( 'confirm_email_invoice' => 'Are you sure you want to email this invoice?', 'confirm_email_quote' => 'Are you sure you want to email this quote?', - 'confirm_recurring_email_invoice' => 'Are you sure you want this invoice emailed?', - + 'confirm_recurring_email_invoice' => 'Recurring is enabled, are you sure you want this invoice emailed?', + 'cancel_account' => 'Cancel Account', 'cancel_account_message' => 'Warning: This will permanently erase all of your data, there is no undo.', 'go_back' => 'Go Back', + 'data_visualizations' => 'Data Visualizations', + 'sample_data' => 'Sample data shown', + + ); diff --git a/app/models/Account.php b/app/models/Account.php index d02912827f15..c8327c8d6649 100755 --- a/app/models/Account.php +++ b/app/models/Account.php @@ -252,4 +252,49 @@ class Account extends Eloquent { return Subscription::where('account_id', '=', $this->id)->where('event_id', '=', $eventId)->first(); } + + public function hideFieldsForViz() + { + foreach ($this->clients as $client) + { + $client->setVisible([ + 'public_id', + 'name', + 'balance', + 'paid_to_date', + 'invoices', + 'contacts', + ]); + + foreach ($client->invoices as $invoice) + { + $invoice->setVisible([ + 'public_id', + 'invoice_number', + 'amount', + 'balance', + 'invoice_status_id', + 'invoice_items', + 'created_at', + ]); + + foreach ($invoice->invoice_items as $invoiceItem) + { + $invoiceItem->setVisible([ + 'product_key', + 'cost', + 'qty', + ]); + } + } + + foreach ($client->contacts as $contact) + { + $contact->setVisible(['public_id']); + } + } + + return $this; + } + } \ No newline at end of file diff --git a/app/models/Activity.php b/app/models/Activity.php index c3a02ee67f5d..2c32c9453316 100755 --- a/app/models/Activity.php +++ b/app/models/Activity.php @@ -51,7 +51,7 @@ class Activity extends Eloquent if ($entity) { - $activity->user_id = $entity->user_id; + $activity->user_id = $entity instanceof User ? $entity->id : $entity->user_id; $activity->account_id = $entity->account_id; } else if (Auth::check()) @@ -272,7 +272,7 @@ class Activity extends Eloquent } else { - $activity = Activity::getBlank(); + $activity = Activity::getBlank($client); $message = $payment->payment_type_id == PAYMENT_TYPE_CREDIT ? 'applied credit for ' : 'entered ' . $payment->getName() . ' for '; $activity->message = Utils::encodeActivity(Auth::user(), $message, $payment->invoice); } diff --git a/app/models/Client.php b/app/models/Client.php index 92b283e36fb0..78d6926cb383 100755 --- a/app/models/Client.php +++ b/app/models/Client.php @@ -204,6 +204,7 @@ class Client extends EntityModel return $this->created_at->format('m/d/y h:i a'); } } + } /* diff --git a/app/models/EntityModel.php b/app/models/EntityModel.php index dc6d46f26d04..614d1eee79fc 100755 --- a/app/models/EntityModel.php +++ b/app/models/EntityModel.php @@ -5,7 +5,7 @@ class EntityModel extends Eloquent protected $softDelete = true; public $timestamps = true; - protected $hidden = ['id', 'created_at', 'deleted_at', 'updated_at']; + protected $hidden = ['id']; public static function createNew($parent = false) { @@ -14,7 +14,7 @@ class EntityModel extends Eloquent if ($parent) { - $entity->user_id = $parent->user_id; + $entity->user_id = $parent instanceof User ? $parent->id : $parent->user_id; $entity->account_id = $parent->account_id; } else if (Auth::check()) diff --git a/app/ninja/mailers/ContactMailer.php b/app/ninja/mailers/ContactMailer.php index 6dc1369e888e..271edef7adb6 100755 --- a/app/ninja/mailers/ContactMailer.php +++ b/app/ninja/mailers/ContactMailer.php @@ -73,4 +73,21 @@ class ContactMailer extends Mailer { $user = $payment->invitation->user; $this->sendTo($payment->contact->email, $user->email, $user->getDisplayName(), $subject, $view, $data); } + + public function sendLicensePaymentConfirmation($name, $email, $amount, $license) + { + $view = 'payment_confirmation'; + $subject = trans('texts.payment_subject'); + + $data = [ + 'accountName' => trans('texts.email_from'), + 'clientName' => $name, + 'emailFooter' => false, + 'paymentAmount' => Utils::formatMoney($amount, 1), + 'showNinjaFooter' => false, + 'emailMessage' => "Your license: $license", + ]; + + $this->sendTo($email, CONTACT_EMAIL, CONTACT_NAME, $subject, $view, $data); + } } \ No newline at end of file diff --git a/app/routes.php b/app/routes.php index bcd098c9058a..4afaa5980ab5 100755 --- a/app/routes.php +++ b/app/routes.php @@ -80,6 +80,7 @@ Route::group(array('before' => 'auth'), function() Route::resource('products', 'ProductController'); Route::get('products/{product_id}/archive', 'ProductController@archive'); + Route::get('company/advanced_settings/data_visualizations', 'ReportController@d3'); Route::get('company/advanced_settings/chart_builder', 'ReportController@report'); Route::post('company/advanced_settings/chart_builder', 'ReportController@report'); @@ -170,7 +171,7 @@ define('ACCOUNT_CUSTOM_FIELDS', 'custom_fields'); define('ACCOUNT_INVOICE_DESIGN', 'invoice_design'); define('ACCOUNT_CHART_BUILDER', 'chart_builder'); define('ACCOUNT_USER_MANAGEMENT', 'user_management'); - +define('ACCOUNT_DATA_VISUALIZATIONS', 'data_visualizations'); define('DEFAULT_INVOICE_NUMBER', '0001'); define('RECENTLY_VIEWED_LIMIT', 8); @@ -223,6 +224,7 @@ define('GATEWAY_AUTHORIZE_NET', 1); define('GATEWAY_PAYPAL_EXPRESS', 17); define('GATEWAY_BEANSTREAM', 29); define('GATEWAY_PSIGATE', 30); +define('GATEWAY_MOOLAH', 31); define('EVENT_CREATE_CLIENT', 1); define('EVENT_CREATE_INVOICE', 2); diff --git a/app/start/artisan.php b/app/start/artisan.php index 94d1256f4713..3c073ba61a14 100755 --- a/app/start/artisan.php +++ b/app/start/artisan.php @@ -11,4 +11,6 @@ | */ -Artisan::resolve('SendRecurringInvoices'); \ No newline at end of file +Artisan::resolve('SendRecurringInvoices'); +Artisan::resolve('CreateRandomData'); +Artisan::resolve('ResetData'); diff --git a/app/tests/data/Demo/demo.response.json b/app/tests/data/Demo/demo.response.json new file mode 100644 index 000000000000..21ff1e1c096b --- /dev/null +++ b/app/tests/data/Demo/demo.response.json @@ -0,0 +1,5 @@ +{ + "clients":[{"name":"IBM","balance":"0.00","paid_to_date":"13.00","invoices":[{"invoice_status_id":"5","created_at":"2014-09-18 00:00:00","invoice_number":"0001","amount":"13.00","balance":"0.00","invoice_items":[{"product_key":"Colorado","cost":"13.00","qty":"1.00"}],"displayName":"0001","displayTotal":13,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"1"}],"displayName":"IBM","displayTotal":13,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Nestle","balance":null,"paid_to_date":null,"invoices":[],"contacts":[{"public_id":"2"}],"displayName":"Nestle","displayTotal":0,"displayBalance":0,"displayPercent":"NaN","displayAge":null},{"name":"Mitsubishi UFJ Financial","balance":"0.00","paid_to_date":"1701.00","invoices":[{"invoice_status_id":"5","created_at":"2014-06-29 00:00:00","invoice_number":"0002","amount":"85.00","balance":"0.00","invoice_items":[{"product_key":"Kansas","cost":"85.00","qty":"1.00"}],"displayName":"0002","displayTotal":85,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-11 00:00:00","invoice_number":"0003","amount":"142.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"142.00","qty":"1.00"}],"displayName":"0003","displayTotal":142,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-19 00:00:00","invoice_number":"0004","amount":"936.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"936.00","qty":"1.00"}],"displayName":"0004","displayTotal":936,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-19 00:00:00","invoice_number":"0005","amount":"74.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"74.00","qty":"1.00"}],"displayName":"0005","displayTotal":74,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-25 00:00:00","invoice_number":"0006","amount":"101.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"101.00","qty":"1.00"}],"displayName":"0006","displayTotal":101,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-21 00:00:00","invoice_number":"0007","amount":"116.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"116.00","qty":"1.00"}],"displayName":"0007","displayTotal":116,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-17 00:00:00","invoice_number":"0008","amount":"42.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"42.00","qty":"1.00"}],"displayName":"0008","displayTotal":42,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-24 00:00:00","invoice_number":"0009","amount":"66.00","balance":"0.00","invoice_items":[{"product_key":"Hawaii","cost":"66.00","qty":"1.00"}],"displayName":"0009","displayTotal":66,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-21 00:00:00","invoice_number":"0010","amount":"40.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"40.00","qty":"1.00"}],"displayName":"0010","displayTotal":40,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-25 00:00:00","invoice_number":"0011","amount":"99.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"99.00","qty":"1.00"}],"displayName":"0011","displayTotal":99,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"3"}],"displayName":"Mitsubishi UFJ Financial","displayTotal":1701,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Vodafone","balance":"0.00","paid_to_date":"106.00","invoices":[{"invoice_status_id":"5","created_at":"2014-08-26 00:00:00","invoice_number":"0012","amount":"106.00","balance":"0.00","invoice_items":[{"product_key":"Louisiana","cost":"106.00","qty":"1.00"}],"displayName":"0012","displayTotal":106,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"4"}],"displayName":"Vodafone","displayTotal":106,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Eni","balance":"0.00","paid_to_date":"402.00","invoices":[{"invoice_status_id":"5","created_at":"2014-06-29 00:00:00","invoice_number":"0013","amount":"18.00","balance":"0.00","invoice_items":[{"product_key":"Kansas","cost":"18.00","qty":"1.00"}],"displayName":"0013","displayTotal":18,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-04 00:00:00","invoice_number":"0014","amount":"70.00","balance":"0.00","invoice_items":[{"product_key":"Connecticut","cost":"70.00","qty":"1.00"}],"displayName":"0014","displayTotal":70,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-08 00:00:00","invoice_number":"0015","amount":"59.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"59.00","qty":"1.00"}],"displayName":"0015","displayTotal":59,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-25 00:00:00","invoice_number":"0016","amount":"18.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"18.00","qty":"1.00"}],"displayName":"0016","displayTotal":18,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-04 00:00:00","invoice_number":"0017","amount":"61.00","balance":"0.00","invoice_items":[{"product_key":"Maine","cost":"61.00","qty":"1.00"}],"displayName":"0017","displayTotal":61,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-16 00:00:00","invoice_number":"0018","amount":"65.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"65.00","qty":"1.00"}],"displayName":"0018","displayTotal":65,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-24 00:00:00","invoice_number":"0019","amount":"39.00","balance":"0.00","invoice_items":[{"product_key":"Kansas","cost":"39.00","qty":"1.00"}],"displayName":"0019","displayTotal":39,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-31 00:00:00","invoice_number":"0020","amount":"72.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"72.00","qty":"1.00"}],"displayName":"0020","displayTotal":72,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"5"}],"displayName":"Eni","displayTotal":402,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Procter & Gamble","balance":"0.00","paid_to_date":"251.00","invoices":[{"invoice_status_id":"5","created_at":"2014-09-12 00:00:00","invoice_number":"0021","amount":"48.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"48.00","qty":"1.00"}],"displayName":"0021","displayTotal":48,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-24 00:00:00","invoice_number":"0022","amount":"90.00","balance":"0.00","invoice_items":[{"product_key":"Alabama","cost":"90.00","qty":"1.00"}],"displayName":"0022","displayTotal":90,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-31 00:00:00","invoice_number":"0023","amount":"70.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"70.00","qty":"1.00"}],"displayName":"0023","displayTotal":70,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-07 00:00:00","invoice_number":"0024","amount":"43.00","balance":"0.00","invoice_items":[{"product_key":"Illinois","cost":"43.00","qty":"1.00"}],"displayName":"0024","displayTotal":43,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"6"}],"displayName":"Procter & Gamble","displayTotal":251,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Johnson & Johnson","balance":"485.00","paid_to_date":"2188.00","invoices":[{"invoice_status_id":"5","created_at":"2014-09-06 00:00:00","invoice_number":"0025","amount":"137.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"137.00","qty":"1.00"}],"displayName":"0025","displayTotal":137,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-09-30 00:00:00","invoice_number":"0026","amount":"92.00","balance":"92.00","invoice_items":[{"product_key":"Iowa","cost":"92.00","qty":"1.00"}],"displayName":"0026","displayTotal":92,"displayBalance":92,"displayPercent":0,"displayAge":3},{"invoice_status_id":"1","created_at":"2014-08-11 00:00:00","invoice_number":"0027","amount":"95.00","balance":"95.00","invoice_items":[{"product_key":"Arizona","cost":"95.00","qty":"1.00"}],"displayName":"0027","displayTotal":95,"displayBalance":95,"displayPercent":0,"displayAge":53},{"invoice_status_id":"1","created_at":"2014-07-28 00:00:00","invoice_number":"0028","amount":"25.00","balance":"25.00","invoice_items":[{"product_key":"Massachusetts","cost":"25.00","qty":"1.00"}],"displayName":"0028","displayTotal":25,"displayBalance":25,"displayPercent":0,"displayAge":67},{"invoice_status_id":"5","created_at":"2014-09-04 00:00:00","invoice_number":"0029","amount":"966.00","balance":"0.00","invoice_items":[{"product_key":"Iowa","cost":"966.00","qty":"1.00"}],"displayName":"0029","displayTotal":966,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-09-16 00:00:00","invoice_number":"0030","amount":"91.00","balance":"91.00","invoice_items":[{"product_key":"Arizona","cost":"91.00","qty":"1.00"}],"displayName":"0030","displayTotal":91,"displayBalance":91,"displayPercent":0,"displayAge":17},{"invoice_status_id":"5","created_at":"2014-09-03 00:00:00","invoice_number":"0031","amount":"134.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"134.00","qty":"1.00"}],"displayName":"0031","displayTotal":134,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-07-08 00:00:00","invoice_number":"0032","amount":"102.00","balance":"102.00","invoice_items":[{"product_key":"Colorado","cost":"102.00","qty":"1.00"}],"displayName":"0032","displayTotal":102,"displayBalance":102,"displayPercent":0,"displayAge":87},{"invoice_status_id":"1","created_at":"2014-09-17 00:00:00","invoice_number":"0033","amount":"80.00","balance":"80.00","invoice_items":[{"product_key":"New York","cost":"80.00","qty":"1.00"}],"displayName":"0033","displayTotal":80,"displayBalance":80,"displayPercent":0,"displayAge":16},{"invoice_status_id":"5","created_at":"2014-07-23 00:00:00","invoice_number":"0034","amount":"951.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"951.00","qty":"1.00"}],"displayName":"0034","displayTotal":951,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"7"}],"displayName":"Johnson & Johnson","displayTotal":2673,"displayBalance":485,"displayPercent":"0.82","displayAge":87},{"name":"American International Group","balance":"0.00","paid_to_date":"94.00","invoices":[{"invoice_status_id":"5","created_at":"2014-08-23 00:00:00","invoice_number":"0035","amount":"94.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"94.00","qty":"1.00"}],"displayName":"0035","displayTotal":94,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"8"}],"displayName":"American International Group","displayTotal":94,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Banco Santander","balance":"0.00","paid_to_date":"137.00","invoices":[{"invoice_status_id":"5","created_at":"2014-08-13 00:00:00","invoice_number":"0036","amount":"137.00","balance":"0.00","invoice_items":[{"product_key":"Kansas","cost":"137.00","qty":"1.00"}],"displayName":"0036","displayTotal":137,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"9"}],"displayName":"Banco Santander","displayTotal":137,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"BHP Billiton","balance":"2584.00","paid_to_date":"284.00","invoices":[{"invoice_status_id":"1","created_at":"2014-06-24 00:00:00","invoice_number":"0037","amount":"122.00","balance":"122.00","invoice_items":[{"product_key":"Alabama","cost":"122.00","qty":"1.00"}],"displayName":"0037","displayTotal":122,"displayBalance":122,"displayPercent":0,"displayAge":101},{"invoice_status_id":"1","created_at":"2014-09-25 00:00:00","invoice_number":"0038","amount":"44.00","balance":"44.00","invoice_items":[{"product_key":"Arizona","cost":"44.00","qty":"1.00"}],"displayName":"0038","displayTotal":44,"displayBalance":44,"displayPercent":0,"displayAge":8},{"invoice_status_id":"1","created_at":"2014-08-13 00:00:00","invoice_number":"0039","amount":"68.00","balance":"68.00","invoice_items":[{"product_key":"Arizona","cost":"68.00","qty":"1.00"}],"displayName":"0039","displayTotal":68,"displayBalance":68,"displayPercent":0,"displayAge":51},{"invoice_status_id":"1","created_at":"2014-07-23 00:00:00","invoice_number":"0040","amount":"23.00","balance":"23.00","invoice_items":[{"product_key":"Delaware","cost":"23.00","qty":"1.00"}],"displayName":"0040","displayTotal":23,"displayBalance":23,"displayPercent":0,"displayAge":72},{"invoice_status_id":"1","created_at":"2014-07-06 00:00:00","invoice_number":"0041","amount":"61.00","balance":"61.00","invoice_items":[{"product_key":"Colorado","cost":"61.00","qty":"1.00"}],"displayName":"0041","displayTotal":61,"displayBalance":61,"displayPercent":0,"displayAge":89},{"invoice_status_id":"1","created_at":"2014-09-05 00:00:00","invoice_number":"0042","amount":"128.00","balance":"128.00","invoice_items":[{"product_key":"Arizona","cost":"128.00","qty":"1.00"}],"displayName":"0042","displayTotal":128,"displayBalance":128,"displayPercent":0,"displayAge":28},{"invoice_status_id":"5","created_at":"2014-07-17 00:00:00","invoice_number":"0043","amount":"130.00","balance":"0.00","invoice_items":[{"product_key":"Iowa","cost":"130.00","qty":"1.00"}],"displayName":"0043","displayTotal":130,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-07-01 00:00:00","invoice_number":"0044","amount":"139.00","balance":"139.00","invoice_items":[{"product_key":"Arizona","cost":"139.00","qty":"1.00"}],"displayName":"0044","displayTotal":139,"displayBalance":139,"displayPercent":0,"displayAge":94},{"invoice_status_id":"1","created_at":"2014-07-20 00:00:00","invoice_number":"0045","amount":"127.00","balance":"127.00","invoice_items":[{"product_key":"California","cost":"127.00","qty":"1.00"}],"displayName":"0045","displayTotal":127,"displayBalance":127,"displayPercent":0,"displayAge":75},{"invoice_status_id":"1","created_at":"2014-09-15 00:00:00","invoice_number":"0046","amount":"83.00","balance":"83.00","invoice_items":[{"product_key":"Michigan","cost":"83.00","qty":"1.00"}],"displayName":"0046","displayTotal":83,"displayBalance":83,"displayPercent":0,"displayAge":18},{"invoice_status_id":"1","created_at":"2014-07-30 00:00:00","invoice_number":"0047","amount":"62.00","balance":"62.00","invoice_items":[{"product_key":"Florida","cost":"62.00","qty":"1.00"}],"displayName":"0047","displayTotal":62,"displayBalance":62,"displayPercent":0,"displayAge":65},{"invoice_status_id":"1","created_at":"2014-09-16 00:00:00","invoice_number":"0048","amount":"902.00","balance":"902.00","invoice_items":[{"product_key":"New York","cost":"902.00","qty":"1.00"}],"displayName":"0048","displayTotal":902,"displayBalance":902,"displayPercent":0,"displayAge":17},{"invoice_status_id":"1","created_at":"2014-08-07 00:00:00","invoice_number":"0049","amount":"139.00","balance":"139.00","invoice_items":[{"product_key":"Arizona","cost":"139.00","qty":"1.00"}],"displayName":"0049","displayTotal":139,"displayBalance":139,"displayPercent":0,"displayAge":57},{"invoice_status_id":"1","created_at":"2014-07-12 00:00:00","invoice_number":"0050","amount":"124.00","balance":"124.00","invoice_items":[{"product_key":"Arizona","cost":"124.00","qty":"1.00"}],"displayName":"0050","displayTotal":124,"displayBalance":124,"displayPercent":0,"displayAge":83},{"invoice_status_id":"1","created_at":"2014-08-05 00:00:00","invoice_number":"0051","amount":"53.00","balance":"53.00","invoice_items":[{"product_key":"Connecticut","cost":"53.00","qty":"1.00"}],"displayName":"0051","displayTotal":53,"displayBalance":53,"displayPercent":0,"displayAge":59},{"invoice_status_id":"1","created_at":"2014-06-27 00:00:00","invoice_number":"0052","amount":"52.00","balance":"52.00","invoice_items":[{"product_key":"Michigan","cost":"52.00","qty":"1.00"}],"displayName":"0052","displayTotal":52,"displayBalance":52,"displayPercent":0,"displayAge":98},{"invoice_status_id":"1","created_at":"2014-09-04 00:00:00","invoice_number":"0053","amount":"28.00","balance":"28.00","invoice_items":[{"product_key":"New York","cost":"28.00","qty":"1.00"}],"displayName":"0053","displayTotal":28,"displayBalance":28,"displayPercent":0,"displayAge":29},{"invoice_status_id":"1","created_at":"2014-07-28 00:00:00","invoice_number":"0054","amount":"36.00","balance":"36.00","invoice_items":[{"product_key":"Alabama","cost":"36.00","qty":"1.00"}],"displayName":"0054","displayTotal":36,"displayBalance":36,"displayPercent":0,"displayAge":67},{"invoice_status_id":"1","created_at":"2014-08-28 00:00:00","invoice_number":"0055","amount":"111.00","balance":"111.00","invoice_items":[{"product_key":"New York","cost":"111.00","qty":"1.00"}],"displayName":"0055","displayTotal":111,"displayBalance":111,"displayPercent":0,"displayAge":36},{"invoice_status_id":"5","created_at":"2014-08-14 00:00:00","invoice_number":"0056","amount":"43.00","balance":"0.00","invoice_items":[{"product_key":"Delaware","cost":"43.00","qty":"1.00"}],"displayName":"0056","displayTotal":43,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-23 00:00:00","invoice_number":"0057","amount":"111.00","balance":"0.00","invoice_items":[{"product_key":"Idaho","cost":"111.00","qty":"1.00"}],"displayName":"0057","displayTotal":111,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-09-01 00:00:00","invoice_number":"0058","amount":"40.00","balance":"40.00","invoice_items":[{"product_key":"Massachusetts","cost":"40.00","qty":"1.00"}],"displayName":"0058","displayTotal":40,"displayBalance":40,"displayPercent":0,"displayAge":32},{"invoice_status_id":"1","created_at":"2014-09-21 00:00:00","invoice_number":"0059","amount":"116.00","balance":"116.00","invoice_items":[{"product_key":"Maryland","cost":"116.00","qty":"1.00"}],"displayName":"0059","displayTotal":116,"displayBalance":116,"displayPercent":0,"displayAge":12},{"invoice_status_id":"1","created_at":"2014-07-10 00:00:00","invoice_number":"0060","amount":"101.00","balance":"101.00","invoice_items":[{"product_key":"California","cost":"101.00","qty":"1.00"}],"displayName":"0060","displayTotal":101,"displayBalance":101,"displayPercent":0,"displayAge":85},{"invoice_status_id":"1","created_at":"2014-07-19 00:00:00","invoice_number":"0061","amount":"25.00","balance":"25.00","invoice_items":[{"product_key":"New York","cost":"25.00","qty":"1.00"}],"displayName":"0061","displayTotal":25,"displayBalance":25,"displayPercent":0,"displayAge":76}],"contacts":[{"public_id":"10"}],"displayName":"BHP Billiton","displayTotal":2868,"displayBalance":2584,"displayPercent":"0.10","displayAge":101},{"name":"Pfizer","balance":"0.00","paid_to_date":"119.00","invoices":[{"invoice_status_id":"5","created_at":"2014-08-08 00:00:00","invoice_number":"0062","amount":"119.00","balance":"0.00","invoice_items":[{"product_key":"Alabama","cost":"119.00","qty":"1.00"}],"displayName":"0062","displayTotal":119,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"11"}],"displayName":"Pfizer","displayTotal":119,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Itaú Unibanco Holding","balance":null,"paid_to_date":null,"invoices":[],"contacts":[{"public_id":"12"}],"displayName":"Itaú Unibanco Holding","displayTotal":0,"displayBalance":0,"displayPercent":"NaN","displayAge":null},{"name":"Ford Motor","balance":"42.00","paid_to_date":null,"invoices":[{"invoice_status_id":"1","created_at":"2014-07-21 00:00:00","invoice_number":"0063","amount":"42.00","balance":"42.00","invoice_items":[{"product_key":"California","cost":"42.00","qty":"1.00"}],"displayName":"0063","displayTotal":42,"displayBalance":42,"displayPercent":0,"displayAge":74}],"contacts":[{"public_id":"13"}],"displayName":"Ford Motor","displayTotal":42,"displayBalance":42,"displayPercent":"0.00","displayAge":74},{"name":"BMW Group","balance":"0.00","paid_to_date":"34.00","invoices":[{"invoice_status_id":"5","created_at":"2014-07-17 00:00:00","invoice_number":"0064","amount":"34.00","balance":"0.00","invoice_items":[{"product_key":"Michigan","cost":"34.00","qty":"1.00"}],"displayName":"0064","displayTotal":34,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"14"}],"displayName":"BMW Group","displayTotal":34,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Commonwealth Bank","balance":null,"paid_to_date":null,"invoices":[],"contacts":[{"public_id":"15"}],"displayName":"Commonwealth Bank","displayTotal":0,"displayBalance":0,"displayPercent":"NaN","displayAge":null},{"name":"EDF","balance":"0.00","paid_to_date":"108.00","invoices":[{"invoice_status_id":"5","created_at":"2014-07-03 00:00:00","invoice_number":"0065","amount":"108.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"108.00","qty":"1.00"}],"displayName":"0065","displayTotal":108,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"16"}],"displayName":"EDF","displayTotal":108,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Statoil","balance":"0.00","paid_to_date":"38.00","invoices":[{"invoice_status_id":"5","created_at":"2014-09-29 00:00:00","invoice_number":"0066","amount":"38.00","balance":"0.00","invoice_items":[{"product_key":"Delaware","cost":"38.00","qty":"1.00"}],"displayName":"0066","displayTotal":38,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"17"}],"displayName":"Statoil","displayTotal":38,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Google","balance":"0.00","paid_to_date":"5537.00","invoices":[{"invoice_status_id":"5","created_at":"2014-09-13 00:00:00","invoice_number":"0067","amount":"11.00","balance":"0.00","invoice_items":[{"product_key":"Connecticut","cost":"11.00","qty":"1.00"}],"displayName":"0067","displayTotal":11,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-02 00:00:00","invoice_number":"0068","amount":"128.00","balance":"0.00","invoice_items":[{"product_key":"Hawaii","cost":"128.00","qty":"1.00"}],"displayName":"0068","displayTotal":128,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-05 00:00:00","invoice_number":"0069","amount":"959.00","balance":"0.00","invoice_items":[{"product_key":"Louisiana","cost":"959.00","qty":"1.00"}],"displayName":"0069","displayTotal":959,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-13 00:00:00","invoice_number":"0070","amount":"116.00","balance":"0.00","invoice_items":[{"product_key":"Idaho","cost":"116.00","qty":"1.00"}],"displayName":"0070","displayTotal":116,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-04 00:00:00","invoice_number":"0071","amount":"50.00","balance":"0.00","invoice_items":[{"product_key":"Colorado","cost":"50.00","qty":"1.00"}],"displayName":"0071","displayTotal":50,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-11 00:00:00","invoice_number":"0072","amount":"23.00","balance":"0.00","invoice_items":[{"product_key":"Maryland","cost":"23.00","qty":"1.00"}],"displayName":"0072","displayTotal":23,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-28 00:00:00","invoice_number":"0073","amount":"125.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"125.00","qty":"1.00"}],"displayName":"0073","displayTotal":125,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-28 00:00:00","invoice_number":"0074","amount":"981.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"981.00","qty":"1.00"}],"displayName":"0074","displayTotal":981,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-12 00:00:00","invoice_number":"0075","amount":"34.00","balance":"0.00","invoice_items":[{"product_key":"Hawaii","cost":"34.00","qty":"1.00"}],"displayName":"0075","displayTotal":34,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-15 00:00:00","invoice_number":"0076","amount":"24.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"24.00","qty":"1.00"}],"displayName":"0076","displayTotal":24,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-19 00:00:00","invoice_number":"0077","amount":"107.00","balance":"0.00","invoice_items":[{"product_key":"Colorado","cost":"107.00","qty":"1.00"}],"displayName":"0077","displayTotal":107,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-21 00:00:00","invoice_number":"0078","amount":"950.00","balance":"0.00","invoice_items":[{"product_key":"Kentucky","cost":"950.00","qty":"1.00"}],"displayName":"0078","displayTotal":950,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-27 00:00:00","invoice_number":"0079","amount":"148.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"148.00","qty":"1.00"}],"displayName":"0079","displayTotal":148,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-22 00:00:00","invoice_number":"0080","amount":"22.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"22.00","qty":"1.00"}],"displayName":"0080","displayTotal":22,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-22 00:00:00","invoice_number":"0081","amount":"105.00","balance":"0.00","invoice_items":[{"product_key":"Alabama","cost":"105.00","qty":"1.00"}],"displayName":"0081","displayTotal":105,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-02 00:00:00","invoice_number":"0082","amount":"19.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"19.00","qty":"1.00"}],"displayName":"0082","displayTotal":19,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-15 00:00:00","invoice_number":"0083","amount":"102.00","balance":"0.00","invoice_items":[{"product_key":"Illinois","cost":"102.00","qty":"1.00"}],"displayName":"0083","displayTotal":102,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-06-27 00:00:00","invoice_number":"0084","amount":"105.00","balance":"0.00","invoice_items":[{"product_key":"Connecticut","cost":"105.00","qty":"1.00"}],"displayName":"0084","displayTotal":105,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-07 00:00:00","invoice_number":"0085","amount":"138.00","balance":"0.00","invoice_items":[{"product_key":"Connecticut","cost":"138.00","qty":"1.00"}],"displayName":"0085","displayTotal":138,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-15 00:00:00","invoice_number":"0086","amount":"86.00","balance":"0.00","invoice_items":[{"product_key":"Louisiana","cost":"86.00","qty":"1.00"}],"displayName":"0086","displayTotal":86,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-14 00:00:00","invoice_number":"0087","amount":"59.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"59.00","qty":"1.00"}],"displayName":"0087","displayTotal":59,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-22 00:00:00","invoice_number":"0088","amount":"129.00","balance":"0.00","invoice_items":[{"product_key":"Colorado","cost":"129.00","qty":"1.00"}],"displayName":"0088","displayTotal":129,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-06 00:00:00","invoice_number":"0089","amount":"107.00","balance":"0.00","invoice_items":[{"product_key":"Iowa","cost":"107.00","qty":"1.00"}],"displayName":"0089","displayTotal":107,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-07 00:00:00","invoice_number":"0090","amount":"998.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"998.00","qty":"1.00"}],"displayName":"0090","displayTotal":998,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-17 00:00:00","invoice_number":"0091","amount":"11.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"11.00","qty":"1.00"}],"displayName":"0091","displayTotal":11,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"18"}],"displayName":"Google","displayTotal":5537,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Siemens","balance":"0.00","paid_to_date":"57.00","invoices":[{"invoice_status_id":"5","created_at":"2014-08-16 00:00:00","invoice_number":"0092","amount":"57.00","balance":"0.00","invoice_items":[{"product_key":"Idaho","cost":"57.00","qty":"1.00"}],"displayName":"0092","displayTotal":57,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"19"}],"displayName":"Siemens","displayTotal":57,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Novartis","balance":"0.00","paid_to_date":"32.00","invoices":[{"invoice_status_id":"5","created_at":"2014-08-29 00:00:00","invoice_number":"0093","amount":"32.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"32.00","qty":"1.00"}],"displayName":"0093","displayTotal":32,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"20"}],"displayName":"Novartis","displayTotal":32,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Royal Bank of Canada","balance":null,"paid_to_date":null,"invoices":[],"contacts":[{"public_id":"21"}],"displayName":"Royal Bank of Canada","displayTotal":0,"displayBalance":0,"displayPercent":"NaN","displayAge":null},{"name":"Sumitomo Mitsui Financial","balance":"0.00","paid_to_date":"108.00","invoices":[{"invoice_status_id":"5","created_at":"2014-07-06 00:00:00","invoice_number":"0094","amount":"108.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"108.00","qty":"1.00"}],"displayName":"0094","displayTotal":108,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"22"}],"displayName":"Sumitomo Mitsui Financial","displayTotal":108,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Comcast","balance":"0.00","paid_to_date":"18.00","invoices":[{"invoice_status_id":"5","created_at":"2014-09-30 00:00:00","invoice_number":"0095","amount":"18.00","balance":"0.00","invoice_items":[{"product_key":"Alabama","cost":"18.00","qty":"1.00"}],"displayName":"0095","displayTotal":18,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"23"}],"displayName":"Comcast","displayTotal":18,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Sberbank","balance":"466.00","paid_to_date":"127.00","invoices":[{"invoice_status_id":"1","created_at":"2014-07-27 00:00:00","invoice_number":"0096","amount":"135.00","balance":"135.00","invoice_items":[{"product_key":"New York","cost":"135.00","qty":"1.00"}],"displayName":"0096","displayTotal":135,"displayBalance":135,"displayPercent":0,"displayAge":68},{"invoice_status_id":"1","created_at":"2014-09-29 00:00:00","invoice_number":"0097","amount":"133.00","balance":"133.00","invoice_items":[{"product_key":"New York","cost":"133.00","qty":"1.00"}],"displayName":"0097","displayTotal":133,"displayBalance":133,"displayPercent":0,"displayAge":4},{"invoice_status_id":"1","created_at":"2014-09-24 00:00:00","invoice_number":"0098","amount":"118.00","balance":"118.00","invoice_items":[{"product_key":"Colorado","cost":"118.00","qty":"1.00"}],"displayName":"0098","displayTotal":118,"displayBalance":118,"displayPercent":0,"displayAge":9},{"invoice_status_id":"5","created_at":"2014-09-15 00:00:00","invoice_number":"0099","amount":"127.00","balance":"0.00","invoice_items":[{"product_key":"Michigan","cost":"127.00","qty":"1.00"}],"displayName":"0099","displayTotal":127,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-08-26 00:00:00","invoice_number":"0100","amount":"80.00","balance":"80.00","invoice_items":[{"product_key":"Maryland","cost":"80.00","qty":"1.00"}],"displayName":"0100","displayTotal":80,"displayBalance":80,"displayPercent":0,"displayAge":38}],"contacts":[{"public_id":"24"}],"displayName":"Sberbank","displayTotal":593,"displayBalance":466,"displayPercent":"0.21","displayAge":68},{"name":"Goldman Sachs Group","balance":"0.00","paid_to_date":"123.00","invoices":[{"invoice_status_id":"5","created_at":"2014-07-07 00:00:00","invoice_number":"0101","amount":"123.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"123.00","qty":"1.00"}],"displayName":"0101","displayTotal":123,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"25"}],"displayName":"Goldman Sachs Group","displayTotal":123,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Westpac Banking Group","balance":"0.00","paid_to_date":"116.00","invoices":[{"invoice_status_id":"5","created_at":"2014-08-05 00:00:00","invoice_number":"0102","amount":"116.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"116.00","qty":"1.00"}],"displayName":"0102","displayTotal":116,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"26"}],"displayName":"Westpac Banking Group","displayTotal":116,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Nippon Telegraph & Tel","balance":"0.00","paid_to_date":"36.00","invoices":[{"invoice_status_id":"5","created_at":"2014-07-24 00:00:00","invoice_number":"0103","amount":"36.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"36.00","qty":"1.00"}],"displayName":"0103","displayTotal":36,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"27"}],"displayName":"Nippon Telegraph & Tel","displayTotal":36,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Ping An Insurance Group","balance":null,"paid_to_date":null,"invoices":[],"contacts":[{"public_id":"28"}],"displayName":"Ping An Insurance Group","displayTotal":0,"displayBalance":0,"displayPercent":"NaN","displayAge":null},{"name":"Banco Bradesco","balance":"1175.00","paid_to_date":"13.00","invoices":[{"invoice_status_id":"1","created_at":"2014-08-03 00:00:00","invoice_number":"0104","amount":"101.00","balance":"101.00","invoice_items":[{"product_key":"Arizona","cost":"101.00","qty":"1.00"}],"displayName":"0104","displayTotal":101,"displayBalance":101,"displayPercent":0,"displayAge":61},{"invoice_status_id":"1","created_at":"2014-07-06 00:00:00","invoice_number":"0105","amount":"132.00","balance":"132.00","invoice_items":[{"product_key":"Connecticut","cost":"132.00","qty":"1.00"}],"displayName":"0105","displayTotal":132,"displayBalance":132,"displayPercent":0,"displayAge":89},{"invoice_status_id":"5","created_at":"2014-09-13 00:00:00","invoice_number":"0106","amount":"13.00","balance":"0.00","invoice_items":[{"product_key":"Illinois","cost":"13.00","qty":"1.00"}],"displayName":"0106","displayTotal":13,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-07-08 00:00:00","invoice_number":"0107","amount":"942.00","balance":"942.00","invoice_items":[{"product_key":"Arizona","cost":"942.00","qty":"1.00"}],"displayName":"0107","displayTotal":942,"displayBalance":942,"displayPercent":0,"displayAge":87}],"contacts":[{"public_id":"29"}],"displayName":"Banco Bradesco","displayTotal":1188,"displayBalance":1175,"displayPercent":"0.01","displayAge":89},{"name":"Anheuser-Busch InBev","balance":"0.00","paid_to_date":"38.00","invoices":[{"invoice_status_id":"5","created_at":"2014-07-20 00:00:00","invoice_number":"0108","amount":"38.00","balance":"0.00","invoice_items":[{"product_key":"Alabama","cost":"38.00","qty":"1.00"}],"displayName":"0108","displayTotal":38,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"30"}],"displayName":"Anheuser-Busch InBev","displayTotal":38,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Bank of Communications","balance":"0.00","paid_to_date":"145.00","invoices":[{"invoice_status_id":"5","created_at":"2014-08-27 00:00:00","invoice_number":"0109","amount":"145.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"145.00","qty":"1.00"}],"displayName":"0109","displayTotal":145,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"31"}],"displayName":"Bank of Communications","displayTotal":145,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"China Life Insurance","balance":"0.00","paid_to_date":"93.00","invoices":[{"invoice_status_id":"5","created_at":"2014-06-27 00:00:00","invoice_number":"0110","amount":"93.00","balance":"0.00","invoice_items":[{"product_key":"Michigan","cost":"93.00","qty":"1.00"}],"displayName":"0110","displayTotal":93,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"32"}],"displayName":"China Life Insurance","displayTotal":93,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"General Motors","balance":"0.00","paid_to_date":"94.00","invoices":[{"invoice_status_id":"5","created_at":"2014-09-21 00:00:00","invoice_number":"0111","amount":"94.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"94.00","qty":"1.00"}],"displayName":"0111","displayTotal":94,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"33"}],"displayName":"General Motors","displayTotal":94,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Telefónica","balance":"41.00","paid_to_date":null,"invoices":[{"invoice_status_id":"1","created_at":"2014-07-10 00:00:00","invoice_number":"0112","amount":"41.00","balance":"41.00","invoice_items":[{"product_key":"California","cost":"41.00","qty":"1.00"}],"displayName":"0112","displayTotal":41,"displayBalance":41,"displayPercent":0,"displayAge":85}],"contacts":[{"public_id":"34"}],"displayName":"Telefónica","displayTotal":41,"displayBalance":41,"displayPercent":"0.00","displayAge":85},{"name":"MetLife","balance":"0.00","paid_to_date":"3253.00","invoices":[{"invoice_status_id":"5","created_at":"2014-09-25 00:00:00","invoice_number":"0113","amount":"43.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"43.00","qty":"1.00"}],"displayName":"0113","displayTotal":43,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-03 00:00:00","invoice_number":"0114","amount":"980.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"980.00","qty":"1.00"}],"displayName":"0114","displayTotal":980,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-11 00:00:00","invoice_number":"0115","amount":"903.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"903.00","qty":"1.00"}],"displayName":"0115","displayTotal":903,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-18 00:00:00","invoice_number":"0116","amount":"44.00","balance":"0.00","invoice_items":[{"product_key":"Hawaii","cost":"44.00","qty":"1.00"}],"displayName":"0116","displayTotal":44,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-30 00:00:00","invoice_number":"0117","amount":"17.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"17.00","qty":"1.00"}],"displayName":"0117","displayTotal":17,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-17 00:00:00","invoice_number":"0118","amount":"133.00","balance":"0.00","invoice_items":[{"product_key":"Michigan","cost":"133.00","qty":"1.00"}],"displayName":"0118","displayTotal":133,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-13 00:00:00","invoice_number":"0119","amount":"25.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"25.00","qty":"1.00"}],"displayName":"0119","displayTotal":25,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-12 00:00:00","invoice_number":"0120","amount":"982.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"982.00","qty":"1.00"}],"displayName":"0120","displayTotal":982,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-29 00:00:00","invoice_number":"0121","amount":"57.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"57.00","qty":"1.00"}],"displayName":"0121","displayTotal":57,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-16 00:00:00","invoice_number":"0122","amount":"69.00","balance":"0.00","invoice_items":[{"product_key":"Connecticut","cost":"69.00","qty":"1.00"}],"displayName":"0122","displayTotal":69,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"35"}],"displayName":"MetLife","displayTotal":3253,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Honda Motor","balance":"14.00","paid_to_date":null,"invoices":[{"invoice_status_id":"1","created_at":"2014-09-30 00:00:00","invoice_number":"0123","amount":"14.00","balance":"14.00","invoice_items":[{"product_key":"California","cost":"14.00","qty":"1.00"}],"displayName":"0123","displayTotal":14,"displayBalance":14,"displayPercent":0,"displayAge":3}],"contacts":[{"public_id":"36"}],"displayName":"Honda Motor","displayTotal":14,"displayBalance":14,"displayPercent":"0.00","displayAge":3},{"name":"Enel","balance":"0.00","paid_to_date":"105.00","invoices":[{"invoice_status_id":"5","created_at":"2014-09-19 00:00:00","invoice_number":"0124","amount":"105.00","balance":"0.00","invoice_items":[{"product_key":"Delaware","cost":"105.00","qty":"1.00"}],"displayName":"0124","displayTotal":105,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"37"}],"displayName":"Enel","displayTotal":105,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"BASF","balance":null,"paid_to_date":null,"invoices":[],"contacts":[{"public_id":"38"}],"displayName":"BASF","displayTotal":0,"displayBalance":0,"displayPercent":"NaN","displayAge":null},{"name":"Softbank","balance":"68.00","paid_to_date":null,"invoices":[{"invoice_status_id":"1","created_at":"2014-09-28 00:00:00","invoice_number":"0125","amount":"68.00","balance":"68.00","invoice_items":[{"product_key":"Iowa","cost":"68.00","qty":"1.00"}],"displayName":"0125","displayTotal":68,"displayBalance":68,"displayPercent":0,"displayAge":5}],"contacts":[{"public_id":"39"}],"displayName":"Softbank","displayTotal":68,"displayBalance":68,"displayPercent":"0.00","displayAge":5},{"name":"National Australia Bank","balance":"573.00","paid_to_date":"201.00","invoices":[{"invoice_status_id":"1","created_at":"2014-08-17 00:00:00","invoice_number":"0126","amount":"98.00","balance":"98.00","invoice_items":[{"product_key":"Arizona","cost":"98.00","qty":"1.00"}],"displayName":"0126","displayTotal":98,"displayBalance":98,"displayPercent":0,"displayAge":47},{"invoice_status_id":"1","created_at":"2014-09-16 00:00:00","invoice_number":"0127","amount":"68.00","balance":"68.00","invoice_items":[{"product_key":"Maine","cost":"68.00","qty":"1.00"}],"displayName":"0127","displayTotal":68,"displayBalance":68,"displayPercent":0,"displayAge":17},{"invoice_status_id":"1","created_at":"2014-09-30 00:00:00","invoice_number":"0128","amount":"120.00","balance":"120.00","invoice_items":[{"product_key":"New York","cost":"120.00","qty":"1.00"}],"displayName":"0128","displayTotal":120,"displayBalance":120,"displayPercent":0,"displayAge":3},{"invoice_status_id":"5","created_at":"2014-08-08 00:00:00","invoice_number":"0129","amount":"105.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"105.00","qty":"1.00"}],"displayName":"0129","displayTotal":105,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-09-16 00:00:00","invoice_number":"0130","amount":"117.00","balance":"117.00","invoice_items":[{"product_key":"California","cost":"117.00","qty":"1.00"}],"displayName":"0130","displayTotal":117,"displayBalance":117,"displayPercent":0,"displayAge":17},{"invoice_status_id":"1","created_at":"2014-07-08 00:00:00","invoice_number":"0131","amount":"32.00","balance":"32.00","invoice_items":[{"product_key":"Colorado","cost":"32.00","qty":"1.00"}],"displayName":"0131","displayTotal":32,"displayBalance":32,"displayPercent":0,"displayAge":87},{"invoice_status_id":"1","created_at":"2014-07-05 00:00:00","invoice_number":"0132","amount":"35.00","balance":"35.00","invoice_items":[{"product_key":"Arizona","cost":"35.00","qty":"1.00"}],"displayName":"0132","displayTotal":35,"displayBalance":35,"displayPercent":0,"displayAge":90},{"invoice_status_id":"5","created_at":"2014-07-10 00:00:00","invoice_number":"0133","amount":"14.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"14.00","qty":"1.00"}],"displayName":"0133","displayTotal":14,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-12 00:00:00","invoice_number":"0134","amount":"82.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"82.00","qty":"1.00"}],"displayName":"0134","displayTotal":82,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-07-20 00:00:00","invoice_number":"0135","amount":"103.00","balance":"103.00","invoice_items":[{"product_key":"Arizona","cost":"103.00","qty":"1.00"}],"displayName":"0135","displayTotal":103,"displayBalance":103,"displayPercent":0,"displayAge":75}],"contacts":[{"public_id":"40"}],"displayName":"National Australia Bank","displayTotal":774,"displayBalance":573,"displayPercent":"0.26","displayAge":90},{"name":"ANZ","balance":"49.00","paid_to_date":null,"invoices":[{"invoice_status_id":"1","created_at":"2014-06-26 00:00:00","invoice_number":"0136","amount":"49.00","balance":"49.00","invoice_items":[{"product_key":"Massachusetts","cost":"49.00","qty":"1.00"}],"displayName":"0136","displayTotal":49,"displayBalance":49,"displayPercent":0,"displayAge":99}],"contacts":[{"public_id":"41"}],"displayName":"ANZ","displayTotal":49,"displayBalance":49,"displayPercent":"0.00","displayAge":99},{"name":"ConocoPhillips","balance":"0.00","paid_to_date":"20.00","invoices":[{"invoice_status_id":"5","created_at":"2014-09-07 00:00:00","invoice_number":"0137","amount":"20.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"20.00","qty":"1.00"}],"displayName":"0137","displayTotal":20,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"42"}],"displayName":"ConocoPhillips","displayTotal":20,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"TD Bank Group","balance":"756.00","paid_to_date":"56.00","invoices":[{"invoice_status_id":"5","created_at":"2014-09-13 00:00:00","invoice_number":"0138","amount":"56.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"56.00","qty":"1.00"}],"displayName":"0138","displayTotal":56,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-07-26 00:00:00","invoice_number":"0139","amount":"147.00","balance":"147.00","invoice_items":[{"product_key":"Iowa","cost":"147.00","qty":"1.00"}],"displayName":"0139","displayTotal":147,"displayBalance":147,"displayPercent":0,"displayAge":69},{"invoice_status_id":"1","created_at":"2014-09-06 00:00:00","invoice_number":"0140","amount":"47.00","balance":"47.00","invoice_items":[{"product_key":"California","cost":"47.00","qty":"1.00"}],"displayName":"0140","displayTotal":47,"displayBalance":47,"displayPercent":0,"displayAge":27},{"invoice_status_id":"1","created_at":"2014-08-19 00:00:00","invoice_number":"0141","amount":"147.00","balance":"147.00","invoice_items":[{"product_key":"Colorado","cost":"147.00","qty":"1.00"}],"displayName":"0141","displayTotal":147,"displayBalance":147,"displayPercent":0,"displayAge":45},{"invoice_status_id":"1","created_at":"2014-09-27 00:00:00","invoice_number":"0142","amount":"113.00","balance":"113.00","invoice_items":[{"product_key":"Colorado","cost":"113.00","qty":"1.00"}],"displayName":"0142","displayTotal":113,"displayBalance":113,"displayPercent":0,"displayAge":6},{"invoice_status_id":"1","created_at":"2014-07-01 00:00:00","invoice_number":"0143","amount":"48.00","balance":"48.00","invoice_items":[{"product_key":"Indiana","cost":"48.00","qty":"1.00"}],"displayName":"0143","displayTotal":48,"displayBalance":48,"displayPercent":0,"displayAge":94},{"invoice_status_id":"1","created_at":"2014-08-18 00:00:00","invoice_number":"0144","amount":"137.00","balance":"137.00","invoice_items":[{"product_key":"Arizona","cost":"137.00","qty":"1.00"}],"displayName":"0144","displayTotal":137,"displayBalance":137,"displayPercent":0,"displayAge":46},{"invoice_status_id":"1","created_at":"2014-09-25 00:00:00","invoice_number":"0145","amount":"117.00","balance":"117.00","invoice_items":[{"product_key":"New York","cost":"117.00","qty":"1.00"}],"displayName":"0145","displayTotal":117,"displayBalance":117,"displayPercent":0,"displayAge":8}],"contacts":[{"public_id":"43"}],"displayName":"TD Bank Group","displayTotal":812,"displayBalance":756,"displayPercent":"0.07","displayAge":94},{"name":"Intel","balance":"0.00","paid_to_date":"71.00","invoices":[{"invoice_status_id":"5","created_at":"2014-07-24 00:00:00","invoice_number":"0146","amount":"71.00","balance":"0.00","invoice_items":[{"product_key":"Georgia","cost":"71.00","qty":"1.00"}],"displayName":"0146","displayTotal":71,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"44"}],"displayName":"Intel","displayTotal":71,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"UBS","balance":"0.00","paid_to_date":"976.00","invoices":[{"invoice_status_id":"5","created_at":"2014-09-06 00:00:00","invoice_number":"0147","amount":"976.00","balance":"0.00","invoice_items":[{"product_key":"Illinois","cost":"976.00","qty":"1.00"}],"displayName":"0147","displayTotal":976,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"45"}],"displayName":"UBS","displayTotal":976,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Hewlett-Packard","balance":"0.00","paid_to_date":"501.00","invoices":[{"invoice_status_id":"5","created_at":"2014-07-16 00:00:00","invoice_number":"0148","amount":"82.00","balance":"0.00","invoice_items":[{"product_key":"Florida","cost":"82.00","qty":"1.00"}],"displayName":"0148","displayTotal":82,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-22 00:00:00","invoice_number":"0149","amount":"134.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"134.00","qty":"1.00"}],"displayName":"0149","displayTotal":134,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-15 00:00:00","invoice_number":"0150","amount":"147.00","balance":"0.00","invoice_items":[{"product_key":"Illinois","cost":"147.00","qty":"1.00"}],"displayName":"0150","displayTotal":147,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-31 00:00:00","invoice_number":"0151","amount":"16.00","balance":"0.00","invoice_items":[{"product_key":"Kansas","cost":"16.00","qty":"1.00"}],"displayName":"0151","displayTotal":16,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-17 00:00:00","invoice_number":"0152","amount":"14.00","balance":"0.00","invoice_items":[{"product_key":"Indiana","cost":"14.00","qty":"1.00"}],"displayName":"0152","displayTotal":14,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-12 00:00:00","invoice_number":"0153","amount":"61.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"61.00","qty":"1.00"}],"displayName":"0153","displayTotal":61,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-17 00:00:00","invoice_number":"0154","amount":"47.00","balance":"0.00","invoice_items":[{"product_key":"Indiana","cost":"47.00","qty":"1.00"}],"displayName":"0154","displayTotal":47,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"46"}],"displayName":"Hewlett-Packard","displayTotal":501,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Coca-Cola","balance":"289.00","paid_to_date":"82.00","invoices":[{"invoice_status_id":"1","created_at":"2014-09-10 00:00:00","invoice_number":"0155","amount":"137.00","balance":"137.00","invoice_items":[{"product_key":"California","cost":"137.00","qty":"1.00"}],"displayName":"0155","displayTotal":137,"displayBalance":137,"displayPercent":0,"displayAge":23},{"invoice_status_id":"1","created_at":"2014-07-10 00:00:00","invoice_number":"0156","amount":"76.00","balance":"76.00","invoice_items":[{"product_key":"Massachusetts","cost":"76.00","qty":"1.00"}],"displayName":"0156","displayTotal":76,"displayBalance":76,"displayPercent":0,"displayAge":85},{"invoice_status_id":"5","created_at":"2014-07-26 00:00:00","invoice_number":"0157","amount":"82.00","balance":"0.00","invoice_items":[{"product_key":"Maine","cost":"82.00","qty":"1.00"}],"displayName":"0157","displayTotal":82,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-09-29 00:00:00","invoice_number":"0158","amount":"76.00","balance":"76.00","invoice_items":[{"product_key":"New York","cost":"76.00","qty":"1.00"}],"displayName":"0158","displayTotal":76,"displayBalance":76,"displayPercent":0,"displayAge":4}],"contacts":[{"public_id":"47"}],"displayName":"Coca-Cola","displayTotal":371,"displayBalance":289,"displayPercent":"0.22","displayAge":85},{"name":"Cisco Systems","balance":"111.00","paid_to_date":null,"invoices":[{"invoice_status_id":"1","created_at":"2014-08-20 00:00:00","invoice_number":"0159","amount":"111.00","balance":"111.00","invoice_items":[{"product_key":"Arizona","cost":"111.00","qty":"1.00"}],"displayName":"0159","displayTotal":111,"displayBalance":111,"displayPercent":0,"displayAge":44}],"contacts":[{"public_id":"48"}],"displayName":"Cisco Systems","displayTotal":111,"displayBalance":111,"displayPercent":"0.00","displayAge":44},{"name":"UnitedHealth Group","balance":"0.00","paid_to_date":"27.00","invoices":[{"invoice_status_id":"5","created_at":"2014-07-14 00:00:00","invoice_number":"0160","amount":"27.00","balance":"0.00","invoice_items":[{"product_key":"Hawaii","cost":"27.00","qty":"1.00"}],"displayName":"0160","displayTotal":27,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"49"}],"displayName":"UnitedHealth Group","displayTotal":27,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Boeing","balance":"47.00","paid_to_date":null,"invoices":[{"invoice_status_id":"1","created_at":"2014-07-17 00:00:00","invoice_number":"0161","amount":"47.00","balance":"47.00","invoice_items":[{"product_key":"Kansas","cost":"47.00","qty":"1.00"}],"displayName":"0161","displayTotal":47,"displayBalance":47,"displayPercent":0,"displayAge":78}],"contacts":[{"public_id":"50"}],"displayName":"Boeing","displayTotal":47,"displayBalance":47,"displayPercent":"0.00","displayAge":78},{"name":"Zurich Insurance Group","balance":"1134.00","paid_to_date":"172.00","invoices":[{"invoice_status_id":"1","created_at":"2014-08-06 00:00:00","invoice_number":"0162","amount":"31.00","balance":"31.00","invoice_items":[{"product_key":"Indiana","cost":"31.00","qty":"1.00"}],"displayName":"0162","displayTotal":31,"displayBalance":31,"displayPercent":0,"displayAge":58},{"invoice_status_id":"1","created_at":"2014-08-06 00:00:00","invoice_number":"0163","amount":"78.00","balance":"78.00","invoice_items":[{"product_key":"California","cost":"78.00","qty":"1.00"}],"displayName":"0163","displayTotal":78,"displayBalance":78,"displayPercent":0,"displayAge":58},{"invoice_status_id":"5","created_at":"2014-09-24 00:00:00","invoice_number":"0164","amount":"118.00","balance":"0.00","invoice_items":[{"product_key":"Florida","cost":"118.00","qty":"1.00"}],"displayName":"0164","displayTotal":118,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-07-27 00:00:00","invoice_number":"0165","amount":"21.00","balance":"21.00","invoice_items":[{"product_key":"Colorado","cost":"21.00","qty":"1.00"}],"displayName":"0165","displayTotal":21,"displayBalance":21,"displayPercent":0,"displayAge":68},{"invoice_status_id":"5","created_at":"2014-07-30 00:00:00","invoice_number":"0166","amount":"54.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"54.00","qty":"1.00"}],"displayName":"0166","displayTotal":54,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-09-03 00:00:00","invoice_number":"0167","amount":"63.00","balance":"63.00","invoice_items":[{"product_key":"Arizona","cost":"63.00","qty":"1.00"}],"displayName":"0167","displayTotal":63,"displayBalance":63,"displayPercent":0,"displayAge":30},{"invoice_status_id":"1","created_at":"2014-06-26 00:00:00","invoice_number":"0168","amount":"941.00","balance":"941.00","invoice_items":[{"product_key":"Louisiana","cost":"941.00","qty":"1.00"}],"displayName":"0168","displayTotal":941,"displayBalance":941,"displayPercent":0,"displayAge":99}],"contacts":[{"public_id":"51"}],"displayName":"Zurich Insurance Group","displayTotal":1306,"displayBalance":1134,"displayPercent":"0.13","displayAge":99},{"name":"Hyundai Motor","balance":"0.00","paid_to_date":"1643.00","invoices":[{"invoice_status_id":"5","created_at":"2014-08-08 00:00:00","invoice_number":"0169","amount":"69.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"69.00","qty":"1.00"}],"displayName":"0169","displayTotal":69,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-06-24 00:00:00","invoice_number":"0170","amount":"31.00","balance":"0.00","invoice_items":[{"product_key":"Idaho","cost":"31.00","qty":"1.00"}],"displayName":"0170","displayTotal":31,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-30 00:00:00","invoice_number":"0171","amount":"102.00","balance":"0.00","invoice_items":[{"product_key":"Maryland","cost":"102.00","qty":"1.00"}],"displayName":"0171","displayTotal":102,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-24 00:00:00","invoice_number":"0172","amount":"101.00","balance":"0.00","invoice_items":[{"product_key":"Colorado","cost":"101.00","qty":"1.00"}],"displayName":"0172","displayTotal":101,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-24 00:00:00","invoice_number":"0173","amount":"971.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"971.00","qty":"1.00"}],"displayName":"0173","displayTotal":971,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-16 00:00:00","invoice_number":"0174","amount":"34.00","balance":"0.00","invoice_items":[{"product_key":"Kentucky","cost":"34.00","qty":"1.00"}],"displayName":"0174","displayTotal":34,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-15 00:00:00","invoice_number":"0175","amount":"71.00","balance":"0.00","invoice_items":[{"product_key":"Hawaii","cost":"71.00","qty":"1.00"}],"displayName":"0175","displayTotal":71,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-03 00:00:00","invoice_number":"0176","amount":"106.00","balance":"0.00","invoice_items":[{"product_key":"Hawaii","cost":"106.00","qty":"1.00"}],"displayName":"0176","displayTotal":106,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-21 00:00:00","invoice_number":"0177","amount":"134.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"134.00","qty":"1.00"}],"displayName":"0177","displayTotal":134,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-04 00:00:00","invoice_number":"0178","amount":"24.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"24.00","qty":"1.00"}],"displayName":"0178","displayTotal":24,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"52"}],"displayName":"Hyundai Motor","displayTotal":1643,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Sanofi","balance":"0.00","paid_to_date":"20.00","invoices":[{"invoice_status_id":"5","created_at":"2014-07-15 00:00:00","invoice_number":"0179","amount":"20.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"20.00","qty":"1.00"}],"displayName":"0179","displayTotal":20,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"53"}],"displayName":"Sanofi","displayTotal":20,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Credit Agricole","balance":"0.00","paid_to_date":"124.00","invoices":[{"invoice_status_id":"5","created_at":"2014-09-30 00:00:00","invoice_number":"0180","amount":"124.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"124.00","qty":"1.00"}],"displayName":"0180","displayTotal":124,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"54"}],"displayName":"Credit Agricole","displayTotal":124,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"United Technologies","balance":"0.00","paid_to_date":"2598.00","invoices":[{"invoice_status_id":"5","created_at":"2014-06-28 00:00:00","invoice_number":"0181","amount":"33.00","balance":"0.00","invoice_items":[{"product_key":"Colorado","cost":"33.00","qty":"1.00"}],"displayName":"0181","displayTotal":33,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-23 00:00:00","invoice_number":"0182","amount":"114.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"114.00","qty":"1.00"}],"displayName":"0182","displayTotal":114,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-16 00:00:00","invoice_number":"0183","amount":"938.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"938.00","qty":"1.00"}],"displayName":"0183","displayTotal":938,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-15 00:00:00","invoice_number":"0184","amount":"101.00","balance":"0.00","invoice_items":[{"product_key":"Colorado","cost":"101.00","qty":"1.00"}],"displayName":"0184","displayTotal":101,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-03 00:00:00","invoice_number":"0185","amount":"87.00","balance":"0.00","invoice_items":[{"product_key":"Indiana","cost":"87.00","qty":"1.00"}],"displayName":"0185","displayTotal":87,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-20 00:00:00","invoice_number":"0186","amount":"58.00","balance":"0.00","invoice_items":[{"product_key":"Iowa","cost":"58.00","qty":"1.00"}],"displayName":"0186","displayTotal":58,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-24 00:00:00","invoice_number":"0187","amount":"961.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"961.00","qty":"1.00"}],"displayName":"0187","displayTotal":961,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-30 00:00:00","invoice_number":"0188","amount":"132.00","balance":"0.00","invoice_items":[{"product_key":"Colorado","cost":"132.00","qty":"1.00"}],"displayName":"0188","displayTotal":132,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-13 00:00:00","invoice_number":"0189","amount":"60.00","balance":"0.00","invoice_items":[{"product_key":"Hawaii","cost":"60.00","qty":"1.00"}],"displayName":"0189","displayTotal":60,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-30 00:00:00","invoice_number":"0190","amount":"114.00","balance":"0.00","invoice_items":[{"product_key":"Alabama","cost":"114.00","qty":"1.00"}],"displayName":"0190","displayTotal":114,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"55"}],"displayName":"United Technologies","displayTotal":2598,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Roche Holding","balance":null,"paid_to_date":null,"invoices":[],"contacts":[{"public_id":"56"}],"displayName":"Roche Holding","displayTotal":0,"displayBalance":0,"displayPercent":"NaN","displayAge":null},{"name":"Munich Re","balance":"93.00","paid_to_date":null,"invoices":[{"invoice_status_id":"1","created_at":"2014-07-13 00:00:00","invoice_number":"0191","amount":"93.00","balance":"93.00","invoice_items":[{"product_key":"Kentucky","cost":"93.00","qty":"1.00"}],"displayName":"0191","displayTotal":93,"displayBalance":93,"displayPercent":0,"displayAge":82}],"contacts":[{"public_id":"57"}],"displayName":"Munich Re","displayTotal":93,"displayBalance":93,"displayPercent":"0.00","displayAge":82},{"name":"PepsiCo","balance":"0.00","paid_to_date":"41.00","invoices":[{"invoice_status_id":"5","created_at":"2014-10-01 00:00:00","invoice_number":"0192","amount":"41.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"41.00","qty":"1.00"}],"displayName":"0192","displayTotal":41,"displayBalance":0,"displayPercent":1,"displayAge":0}],"contacts":[{"public_id":"58"}],"displayName":"PepsiCo","displayTotal":41,"displayBalance":0,"displayPercent":"1.00","displayAge":0},{"name":"Oracle","balance":"91.00","paid_to_date":null,"invoices":[{"invoice_status_id":"1","created_at":"2014-09-19 00:00:00","invoice_number":"0193","amount":"91.00","balance":"91.00","invoice_items":[{"product_key":"Iowa","cost":"91.00","qty":"1.00"}],"displayName":"0193","displayTotal":91,"displayBalance":91,"displayPercent":0,"displayAge":14}],"contacts":[{"public_id":"59"}],"displayName":"Oracle","displayTotal":91,"displayBalance":91,"displayPercent":"0.00","displayAge":14},{"name":"Bank of Nova Scotia","balance":null,"paid_to_date":null,"invoices":[],"contacts":[{"public_id":"60"}],"displayName":"Bank of Nova Scotia","displayTotal":0,"displayBalance":0,"displayPercent":"NaN","displayAge":null}], + "invoices":[{"invoice_status_id":"5","created_at":"2014-09-18 00:00:00","invoice_number":"0001","amount":"13.00","balance":"0.00","invoice_items":[{"product_key":"Colorado","cost":"13.00","qty":"1.00"}],"displayName":"0001","displayTotal":13,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-06-29 00:00:00","invoice_number":"0002","amount":"85.00","balance":"0.00","invoice_items":[{"product_key":"Kansas","cost":"85.00","qty":"1.00"}],"displayName":"0002","displayTotal":85,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-11 00:00:00","invoice_number":"0003","amount":"142.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"142.00","qty":"1.00"}],"displayName":"0003","displayTotal":142,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-19 00:00:00","invoice_number":"0004","amount":"936.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"936.00","qty":"1.00"}],"displayName":"0004","displayTotal":936,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-19 00:00:00","invoice_number":"0005","amount":"74.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"74.00","qty":"1.00"}],"displayName":"0005","displayTotal":74,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-25 00:00:00","invoice_number":"0006","amount":"101.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"101.00","qty":"1.00"}],"displayName":"0006","displayTotal":101,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-21 00:00:00","invoice_number":"0007","amount":"116.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"116.00","qty":"1.00"}],"displayName":"0007","displayTotal":116,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-17 00:00:00","invoice_number":"0008","amount":"42.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"42.00","qty":"1.00"}],"displayName":"0008","displayTotal":42,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-24 00:00:00","invoice_number":"0009","amount":"66.00","balance":"0.00","invoice_items":[{"product_key":"Hawaii","cost":"66.00","qty":"1.00"}],"displayName":"0009","displayTotal":66,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-21 00:00:00","invoice_number":"0010","amount":"40.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"40.00","qty":"1.00"}],"displayName":"0010","displayTotal":40,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-25 00:00:00","invoice_number":"0011","amount":"99.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"99.00","qty":"1.00"}],"displayName":"0011","displayTotal":99,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-26 00:00:00","invoice_number":"0012","amount":"106.00","balance":"0.00","invoice_items":[{"product_key":"Louisiana","cost":"106.00","qty":"1.00"}],"displayName":"0012","displayTotal":106,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-06-29 00:00:00","invoice_number":"0013","amount":"18.00","balance":"0.00","invoice_items":[{"product_key":"Kansas","cost":"18.00","qty":"1.00"}],"displayName":"0013","displayTotal":18,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-04 00:00:00","invoice_number":"0014","amount":"70.00","balance":"0.00","invoice_items":[{"product_key":"Connecticut","cost":"70.00","qty":"1.00"}],"displayName":"0014","displayTotal":70,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-08 00:00:00","invoice_number":"0015","amount":"59.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"59.00","qty":"1.00"}],"displayName":"0015","displayTotal":59,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-25 00:00:00","invoice_number":"0016","amount":"18.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"18.00","qty":"1.00"}],"displayName":"0016","displayTotal":18,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-04 00:00:00","invoice_number":"0017","amount":"61.00","balance":"0.00","invoice_items":[{"product_key":"Maine","cost":"61.00","qty":"1.00"}],"displayName":"0017","displayTotal":61,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-16 00:00:00","invoice_number":"0018","amount":"65.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"65.00","qty":"1.00"}],"displayName":"0018","displayTotal":65,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-24 00:00:00","invoice_number":"0019","amount":"39.00","balance":"0.00","invoice_items":[{"product_key":"Kansas","cost":"39.00","qty":"1.00"}],"displayName":"0019","displayTotal":39,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-31 00:00:00","invoice_number":"0020","amount":"72.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"72.00","qty":"1.00"}],"displayName":"0020","displayTotal":72,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-12 00:00:00","invoice_number":"0021","amount":"48.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"48.00","qty":"1.00"}],"displayName":"0021","displayTotal":48,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-24 00:00:00","invoice_number":"0022","amount":"90.00","balance":"0.00","invoice_items":[{"product_key":"Alabama","cost":"90.00","qty":"1.00"}],"displayName":"0022","displayTotal":90,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-31 00:00:00","invoice_number":"0023","amount":"70.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"70.00","qty":"1.00"}],"displayName":"0023","displayTotal":70,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-07 00:00:00","invoice_number":"0024","amount":"43.00","balance":"0.00","invoice_items":[{"product_key":"Illinois","cost":"43.00","qty":"1.00"}],"displayName":"0024","displayTotal":43,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-06 00:00:00","invoice_number":"0025","amount":"137.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"137.00","qty":"1.00"}],"displayName":"0025","displayTotal":137,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-09-30 00:00:00","invoice_number":"0026","amount":"92.00","balance":"92.00","invoice_items":[{"product_key":"Iowa","cost":"92.00","qty":"1.00"}],"displayName":"0026","displayTotal":92,"displayBalance":92,"displayPercent":0,"displayAge":3},{"invoice_status_id":"1","created_at":"2014-08-11 00:00:00","invoice_number":"0027","amount":"95.00","balance":"95.00","invoice_items":[{"product_key":"Arizona","cost":"95.00","qty":"1.00"}],"displayName":"0027","displayTotal":95,"displayBalance":95,"displayPercent":0,"displayAge":53},{"invoice_status_id":"1","created_at":"2014-07-28 00:00:00","invoice_number":"0028","amount":"25.00","balance":"25.00","invoice_items":[{"product_key":"Massachusetts","cost":"25.00","qty":"1.00"}],"displayName":"0028","displayTotal":25,"displayBalance":25,"displayPercent":0,"displayAge":67},{"invoice_status_id":"5","created_at":"2014-09-04 00:00:00","invoice_number":"0029","amount":"966.00","balance":"0.00","invoice_items":[{"product_key":"Iowa","cost":"966.00","qty":"1.00"}],"displayName":"0029","displayTotal":966,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-09-16 00:00:00","invoice_number":"0030","amount":"91.00","balance":"91.00","invoice_items":[{"product_key":"Arizona","cost":"91.00","qty":"1.00"}],"displayName":"0030","displayTotal":91,"displayBalance":91,"displayPercent":0,"displayAge":17},{"invoice_status_id":"5","created_at":"2014-09-03 00:00:00","invoice_number":"0031","amount":"134.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"134.00","qty":"1.00"}],"displayName":"0031","displayTotal":134,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-07-08 00:00:00","invoice_number":"0032","amount":"102.00","balance":"102.00","invoice_items":[{"product_key":"Colorado","cost":"102.00","qty":"1.00"}],"displayName":"0032","displayTotal":102,"displayBalance":102,"displayPercent":0,"displayAge":87},{"invoice_status_id":"1","created_at":"2014-09-17 00:00:00","invoice_number":"0033","amount":"80.00","balance":"80.00","invoice_items":[{"product_key":"New York","cost":"80.00","qty":"1.00"}],"displayName":"0033","displayTotal":80,"displayBalance":80,"displayPercent":0,"displayAge":16},{"invoice_status_id":"5","created_at":"2014-07-23 00:00:00","invoice_number":"0034","amount":"951.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"951.00","qty":"1.00"}],"displayName":"0034","displayTotal":951,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-23 00:00:00","invoice_number":"0035","amount":"94.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"94.00","qty":"1.00"}],"displayName":"0035","displayTotal":94,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-13 00:00:00","invoice_number":"0036","amount":"137.00","balance":"0.00","invoice_items":[{"product_key":"Kansas","cost":"137.00","qty":"1.00"}],"displayName":"0036","displayTotal":137,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-06-24 00:00:00","invoice_number":"0037","amount":"122.00","balance":"122.00","invoice_items":[{"product_key":"Alabama","cost":"122.00","qty":"1.00"}],"displayName":"0037","displayTotal":122,"displayBalance":122,"displayPercent":0,"displayAge":101},{"invoice_status_id":"1","created_at":"2014-09-25 00:00:00","invoice_number":"0038","amount":"44.00","balance":"44.00","invoice_items":[{"product_key":"Arizona","cost":"44.00","qty":"1.00"}],"displayName":"0038","displayTotal":44,"displayBalance":44,"displayPercent":0,"displayAge":8},{"invoice_status_id":"1","created_at":"2014-08-13 00:00:00","invoice_number":"0039","amount":"68.00","balance":"68.00","invoice_items":[{"product_key":"Arizona","cost":"68.00","qty":"1.00"}],"displayName":"0039","displayTotal":68,"displayBalance":68,"displayPercent":0,"displayAge":51},{"invoice_status_id":"1","created_at":"2014-07-23 00:00:00","invoice_number":"0040","amount":"23.00","balance":"23.00","invoice_items":[{"product_key":"Delaware","cost":"23.00","qty":"1.00"}],"displayName":"0040","displayTotal":23,"displayBalance":23,"displayPercent":0,"displayAge":72},{"invoice_status_id":"1","created_at":"2014-07-06 00:00:00","invoice_number":"0041","amount":"61.00","balance":"61.00","invoice_items":[{"product_key":"Colorado","cost":"61.00","qty":"1.00"}],"displayName":"0041","displayTotal":61,"displayBalance":61,"displayPercent":0,"displayAge":89},{"invoice_status_id":"1","created_at":"2014-09-05 00:00:00","invoice_number":"0042","amount":"128.00","balance":"128.00","invoice_items":[{"product_key":"Arizona","cost":"128.00","qty":"1.00"}],"displayName":"0042","displayTotal":128,"displayBalance":128,"displayPercent":0,"displayAge":28},{"invoice_status_id":"5","created_at":"2014-07-17 00:00:00","invoice_number":"0043","amount":"130.00","balance":"0.00","invoice_items":[{"product_key":"Iowa","cost":"130.00","qty":"1.00"}],"displayName":"0043","displayTotal":130,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-07-01 00:00:00","invoice_number":"0044","amount":"139.00","balance":"139.00","invoice_items":[{"product_key":"Arizona","cost":"139.00","qty":"1.00"}],"displayName":"0044","displayTotal":139,"displayBalance":139,"displayPercent":0,"displayAge":94},{"invoice_status_id":"1","created_at":"2014-07-20 00:00:00","invoice_number":"0045","amount":"127.00","balance":"127.00","invoice_items":[{"product_key":"California","cost":"127.00","qty":"1.00"}],"displayName":"0045","displayTotal":127,"displayBalance":127,"displayPercent":0,"displayAge":75},{"invoice_status_id":"1","created_at":"2014-09-15 00:00:00","invoice_number":"0046","amount":"83.00","balance":"83.00","invoice_items":[{"product_key":"Michigan","cost":"83.00","qty":"1.00"}],"displayName":"0046","displayTotal":83,"displayBalance":83,"displayPercent":0,"displayAge":18},{"invoice_status_id":"1","created_at":"2014-07-30 00:00:00","invoice_number":"0047","amount":"62.00","balance":"62.00","invoice_items":[{"product_key":"Florida","cost":"62.00","qty":"1.00"}],"displayName":"0047","displayTotal":62,"displayBalance":62,"displayPercent":0,"displayAge":65},{"invoice_status_id":"1","created_at":"2014-09-16 00:00:00","invoice_number":"0048","amount":"902.00","balance":"902.00","invoice_items":[{"product_key":"New York","cost":"902.00","qty":"1.00"}],"displayName":"0048","displayTotal":902,"displayBalance":902,"displayPercent":0,"displayAge":17},{"invoice_status_id":"1","created_at":"2014-08-07 00:00:00","invoice_number":"0049","amount":"139.00","balance":"139.00","invoice_items":[{"product_key":"Arizona","cost":"139.00","qty":"1.00"}],"displayName":"0049","displayTotal":139,"displayBalance":139,"displayPercent":0,"displayAge":57},{"invoice_status_id":"1","created_at":"2014-07-12 00:00:00","invoice_number":"0050","amount":"124.00","balance":"124.00","invoice_items":[{"product_key":"Arizona","cost":"124.00","qty":"1.00"}],"displayName":"0050","displayTotal":124,"displayBalance":124,"displayPercent":0,"displayAge":83},{"invoice_status_id":"1","created_at":"2014-08-05 00:00:00","invoice_number":"0051","amount":"53.00","balance":"53.00","invoice_items":[{"product_key":"Connecticut","cost":"53.00","qty":"1.00"}],"displayName":"0051","displayTotal":53,"displayBalance":53,"displayPercent":0,"displayAge":59},{"invoice_status_id":"1","created_at":"2014-06-27 00:00:00","invoice_number":"0052","amount":"52.00","balance":"52.00","invoice_items":[{"product_key":"Michigan","cost":"52.00","qty":"1.00"}],"displayName":"0052","displayTotal":52,"displayBalance":52,"displayPercent":0,"displayAge":98},{"invoice_status_id":"1","created_at":"2014-09-04 00:00:00","invoice_number":"0053","amount":"28.00","balance":"28.00","invoice_items":[{"product_key":"New York","cost":"28.00","qty":"1.00"}],"displayName":"0053","displayTotal":28,"displayBalance":28,"displayPercent":0,"displayAge":29},{"invoice_status_id":"1","created_at":"2014-07-28 00:00:00","invoice_number":"0054","amount":"36.00","balance":"36.00","invoice_items":[{"product_key":"Alabama","cost":"36.00","qty":"1.00"}],"displayName":"0054","displayTotal":36,"displayBalance":36,"displayPercent":0,"displayAge":67},{"invoice_status_id":"1","created_at":"2014-08-28 00:00:00","invoice_number":"0055","amount":"111.00","balance":"111.00","invoice_items":[{"product_key":"New York","cost":"111.00","qty":"1.00"}],"displayName":"0055","displayTotal":111,"displayBalance":111,"displayPercent":0,"displayAge":36},{"invoice_status_id":"5","created_at":"2014-08-14 00:00:00","invoice_number":"0056","amount":"43.00","balance":"0.00","invoice_items":[{"product_key":"Delaware","cost":"43.00","qty":"1.00"}],"displayName":"0056","displayTotal":43,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-23 00:00:00","invoice_number":"0057","amount":"111.00","balance":"0.00","invoice_items":[{"product_key":"Idaho","cost":"111.00","qty":"1.00"}],"displayName":"0057","displayTotal":111,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-09-01 00:00:00","invoice_number":"0058","amount":"40.00","balance":"40.00","invoice_items":[{"product_key":"Massachusetts","cost":"40.00","qty":"1.00"}],"displayName":"0058","displayTotal":40,"displayBalance":40,"displayPercent":0,"displayAge":32},{"invoice_status_id":"1","created_at":"2014-09-21 00:00:00","invoice_number":"0059","amount":"116.00","balance":"116.00","invoice_items":[{"product_key":"Maryland","cost":"116.00","qty":"1.00"}],"displayName":"0059","displayTotal":116,"displayBalance":116,"displayPercent":0,"displayAge":12},{"invoice_status_id":"1","created_at":"2014-07-10 00:00:00","invoice_number":"0060","amount":"101.00","balance":"101.00","invoice_items":[{"product_key":"California","cost":"101.00","qty":"1.00"}],"displayName":"0060","displayTotal":101,"displayBalance":101,"displayPercent":0,"displayAge":85},{"invoice_status_id":"1","created_at":"2014-07-19 00:00:00","invoice_number":"0061","amount":"25.00","balance":"25.00","invoice_items":[{"product_key":"New York","cost":"25.00","qty":"1.00"}],"displayName":"0061","displayTotal":25,"displayBalance":25,"displayPercent":0,"displayAge":76},{"invoice_status_id":"5","created_at":"2014-08-08 00:00:00","invoice_number":"0062","amount":"119.00","balance":"0.00","invoice_items":[{"product_key":"Alabama","cost":"119.00","qty":"1.00"}],"displayName":"0062","displayTotal":119,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-07-21 00:00:00","invoice_number":"0063","amount":"42.00","balance":"42.00","invoice_items":[{"product_key":"California","cost":"42.00","qty":"1.00"}],"displayName":"0063","displayTotal":42,"displayBalance":42,"displayPercent":0,"displayAge":74},{"invoice_status_id":"5","created_at":"2014-07-17 00:00:00","invoice_number":"0064","amount":"34.00","balance":"0.00","invoice_items":[{"product_key":"Michigan","cost":"34.00","qty":"1.00"}],"displayName":"0064","displayTotal":34,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-03 00:00:00","invoice_number":"0065","amount":"108.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"108.00","qty":"1.00"}],"displayName":"0065","displayTotal":108,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-29 00:00:00","invoice_number":"0066","amount":"38.00","balance":"0.00","invoice_items":[{"product_key":"Delaware","cost":"38.00","qty":"1.00"}],"displayName":"0066","displayTotal":38,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-13 00:00:00","invoice_number":"0067","amount":"11.00","balance":"0.00","invoice_items":[{"product_key":"Connecticut","cost":"11.00","qty":"1.00"}],"displayName":"0067","displayTotal":11,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-02 00:00:00","invoice_number":"0068","amount":"128.00","balance":"0.00","invoice_items":[{"product_key":"Hawaii","cost":"128.00","qty":"1.00"}],"displayName":"0068","displayTotal":128,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-05 00:00:00","invoice_number":"0069","amount":"959.00","balance":"0.00","invoice_items":[{"product_key":"Louisiana","cost":"959.00","qty":"1.00"}],"displayName":"0069","displayTotal":959,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-13 00:00:00","invoice_number":"0070","amount":"116.00","balance":"0.00","invoice_items":[{"product_key":"Idaho","cost":"116.00","qty":"1.00"}],"displayName":"0070","displayTotal":116,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-04 00:00:00","invoice_number":"0071","amount":"50.00","balance":"0.00","invoice_items":[{"product_key":"Colorado","cost":"50.00","qty":"1.00"}],"displayName":"0071","displayTotal":50,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-11 00:00:00","invoice_number":"0072","amount":"23.00","balance":"0.00","invoice_items":[{"product_key":"Maryland","cost":"23.00","qty":"1.00"}],"displayName":"0072","displayTotal":23,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-28 00:00:00","invoice_number":"0073","amount":"125.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"125.00","qty":"1.00"}],"displayName":"0073","displayTotal":125,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-28 00:00:00","invoice_number":"0074","amount":"981.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"981.00","qty":"1.00"}],"displayName":"0074","displayTotal":981,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-12 00:00:00","invoice_number":"0075","amount":"34.00","balance":"0.00","invoice_items":[{"product_key":"Hawaii","cost":"34.00","qty":"1.00"}],"displayName":"0075","displayTotal":34,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-15 00:00:00","invoice_number":"0076","amount":"24.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"24.00","qty":"1.00"}],"displayName":"0076","displayTotal":24,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-19 00:00:00","invoice_number":"0077","amount":"107.00","balance":"0.00","invoice_items":[{"product_key":"Colorado","cost":"107.00","qty":"1.00"}],"displayName":"0077","displayTotal":107,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-21 00:00:00","invoice_number":"0078","amount":"950.00","balance":"0.00","invoice_items":[{"product_key":"Kentucky","cost":"950.00","qty":"1.00"}],"displayName":"0078","displayTotal":950,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-27 00:00:00","invoice_number":"0079","amount":"148.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"148.00","qty":"1.00"}],"displayName":"0079","displayTotal":148,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-22 00:00:00","invoice_number":"0080","amount":"22.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"22.00","qty":"1.00"}],"displayName":"0080","displayTotal":22,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-22 00:00:00","invoice_number":"0081","amount":"105.00","balance":"0.00","invoice_items":[{"product_key":"Alabama","cost":"105.00","qty":"1.00"}],"displayName":"0081","displayTotal":105,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-02 00:00:00","invoice_number":"0082","amount":"19.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"19.00","qty":"1.00"}],"displayName":"0082","displayTotal":19,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-15 00:00:00","invoice_number":"0083","amount":"102.00","balance":"0.00","invoice_items":[{"product_key":"Illinois","cost":"102.00","qty":"1.00"}],"displayName":"0083","displayTotal":102,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-06-27 00:00:00","invoice_number":"0084","amount":"105.00","balance":"0.00","invoice_items":[{"product_key":"Connecticut","cost":"105.00","qty":"1.00"}],"displayName":"0084","displayTotal":105,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-07 00:00:00","invoice_number":"0085","amount":"138.00","balance":"0.00","invoice_items":[{"product_key":"Connecticut","cost":"138.00","qty":"1.00"}],"displayName":"0085","displayTotal":138,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-15 00:00:00","invoice_number":"0086","amount":"86.00","balance":"0.00","invoice_items":[{"product_key":"Louisiana","cost":"86.00","qty":"1.00"}],"displayName":"0086","displayTotal":86,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-14 00:00:00","invoice_number":"0087","amount":"59.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"59.00","qty":"1.00"}],"displayName":"0087","displayTotal":59,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-22 00:00:00","invoice_number":"0088","amount":"129.00","balance":"0.00","invoice_items":[{"product_key":"Colorado","cost":"129.00","qty":"1.00"}],"displayName":"0088","displayTotal":129,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-06 00:00:00","invoice_number":"0089","amount":"107.00","balance":"0.00","invoice_items":[{"product_key":"Iowa","cost":"107.00","qty":"1.00"}],"displayName":"0089","displayTotal":107,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-07 00:00:00","invoice_number":"0090","amount":"998.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"998.00","qty":"1.00"}],"displayName":"0090","displayTotal":998,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-17 00:00:00","invoice_number":"0091","amount":"11.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"11.00","qty":"1.00"}],"displayName":"0091","displayTotal":11,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-16 00:00:00","invoice_number":"0092","amount":"57.00","balance":"0.00","invoice_items":[{"product_key":"Idaho","cost":"57.00","qty":"1.00"}],"displayName":"0092","displayTotal":57,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-29 00:00:00","invoice_number":"0093","amount":"32.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"32.00","qty":"1.00"}],"displayName":"0093","displayTotal":32,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-06 00:00:00","invoice_number":"0094","amount":"108.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"108.00","qty":"1.00"}],"displayName":"0094","displayTotal":108,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-30 00:00:00","invoice_number":"0095","amount":"18.00","balance":"0.00","invoice_items":[{"product_key":"Alabama","cost":"18.00","qty":"1.00"}],"displayName":"0095","displayTotal":18,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-07-27 00:00:00","invoice_number":"0096","amount":"135.00","balance":"135.00","invoice_items":[{"product_key":"New York","cost":"135.00","qty":"1.00"}],"displayName":"0096","displayTotal":135,"displayBalance":135,"displayPercent":0,"displayAge":68},{"invoice_status_id":"1","created_at":"2014-09-29 00:00:00","invoice_number":"0097","amount":"133.00","balance":"133.00","invoice_items":[{"product_key":"New York","cost":"133.00","qty":"1.00"}],"displayName":"0097","displayTotal":133,"displayBalance":133,"displayPercent":0,"displayAge":4},{"invoice_status_id":"1","created_at":"2014-09-24 00:00:00","invoice_number":"0098","amount":"118.00","balance":"118.00","invoice_items":[{"product_key":"Colorado","cost":"118.00","qty":"1.00"}],"displayName":"0098","displayTotal":118,"displayBalance":118,"displayPercent":0,"displayAge":9},{"invoice_status_id":"5","created_at":"2014-09-15 00:00:00","invoice_number":"0099","amount":"127.00","balance":"0.00","invoice_items":[{"product_key":"Michigan","cost":"127.00","qty":"1.00"}],"displayName":"0099","displayTotal":127,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-08-26 00:00:00","invoice_number":"0100","amount":"80.00","balance":"80.00","invoice_items":[{"product_key":"Maryland","cost":"80.00","qty":"1.00"}],"displayName":"0100","displayTotal":80,"displayBalance":80,"displayPercent":0,"displayAge":38},{"invoice_status_id":"5","created_at":"2014-07-07 00:00:00","invoice_number":"0101","amount":"123.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"123.00","qty":"1.00"}],"displayName":"0101","displayTotal":123,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-05 00:00:00","invoice_number":"0102","amount":"116.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"116.00","qty":"1.00"}],"displayName":"0102","displayTotal":116,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-24 00:00:00","invoice_number":"0103","amount":"36.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"36.00","qty":"1.00"}],"displayName":"0103","displayTotal":36,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-08-03 00:00:00","invoice_number":"0104","amount":"101.00","balance":"101.00","invoice_items":[{"product_key":"Arizona","cost":"101.00","qty":"1.00"}],"displayName":"0104","displayTotal":101,"displayBalance":101,"displayPercent":0,"displayAge":61},{"invoice_status_id":"1","created_at":"2014-07-06 00:00:00","invoice_number":"0105","amount":"132.00","balance":"132.00","invoice_items":[{"product_key":"Connecticut","cost":"132.00","qty":"1.00"}],"displayName":"0105","displayTotal":132,"displayBalance":132,"displayPercent":0,"displayAge":89},{"invoice_status_id":"5","created_at":"2014-09-13 00:00:00","invoice_number":"0106","amount":"13.00","balance":"0.00","invoice_items":[{"product_key":"Illinois","cost":"13.00","qty":"1.00"}],"displayName":"0106","displayTotal":13,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-07-08 00:00:00","invoice_number":"0107","amount":"942.00","balance":"942.00","invoice_items":[{"product_key":"Arizona","cost":"942.00","qty":"1.00"}],"displayName":"0107","displayTotal":942,"displayBalance":942,"displayPercent":0,"displayAge":87},{"invoice_status_id":"5","created_at":"2014-07-20 00:00:00","invoice_number":"0108","amount":"38.00","balance":"0.00","invoice_items":[{"product_key":"Alabama","cost":"38.00","qty":"1.00"}],"displayName":"0108","displayTotal":38,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-27 00:00:00","invoice_number":"0109","amount":"145.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"145.00","qty":"1.00"}],"displayName":"0109","displayTotal":145,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-06-27 00:00:00","invoice_number":"0110","amount":"93.00","balance":"0.00","invoice_items":[{"product_key":"Michigan","cost":"93.00","qty":"1.00"}],"displayName":"0110","displayTotal":93,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-21 00:00:00","invoice_number":"0111","amount":"94.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"94.00","qty":"1.00"}],"displayName":"0111","displayTotal":94,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-07-10 00:00:00","invoice_number":"0112","amount":"41.00","balance":"41.00","invoice_items":[{"product_key":"California","cost":"41.00","qty":"1.00"}],"displayName":"0112","displayTotal":41,"displayBalance":41,"displayPercent":0,"displayAge":85},{"invoice_status_id":"5","created_at":"2014-09-25 00:00:00","invoice_number":"0113","amount":"43.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"43.00","qty":"1.00"}],"displayName":"0113","displayTotal":43,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-03 00:00:00","invoice_number":"0114","amount":"980.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"980.00","qty":"1.00"}],"displayName":"0114","displayTotal":980,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-11 00:00:00","invoice_number":"0115","amount":"903.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"903.00","qty":"1.00"}],"displayName":"0115","displayTotal":903,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-18 00:00:00","invoice_number":"0116","amount":"44.00","balance":"0.00","invoice_items":[{"product_key":"Hawaii","cost":"44.00","qty":"1.00"}],"displayName":"0116","displayTotal":44,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-30 00:00:00","invoice_number":"0117","amount":"17.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"17.00","qty":"1.00"}],"displayName":"0117","displayTotal":17,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-17 00:00:00","invoice_number":"0118","amount":"133.00","balance":"0.00","invoice_items":[{"product_key":"Michigan","cost":"133.00","qty":"1.00"}],"displayName":"0118","displayTotal":133,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-13 00:00:00","invoice_number":"0119","amount":"25.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"25.00","qty":"1.00"}],"displayName":"0119","displayTotal":25,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-12 00:00:00","invoice_number":"0120","amount":"982.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"982.00","qty":"1.00"}],"displayName":"0120","displayTotal":982,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-29 00:00:00","invoice_number":"0121","amount":"57.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"57.00","qty":"1.00"}],"displayName":"0121","displayTotal":57,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-16 00:00:00","invoice_number":"0122","amount":"69.00","balance":"0.00","invoice_items":[{"product_key":"Connecticut","cost":"69.00","qty":"1.00"}],"displayName":"0122","displayTotal":69,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-09-30 00:00:00","invoice_number":"0123","amount":"14.00","balance":"14.00","invoice_items":[{"product_key":"California","cost":"14.00","qty":"1.00"}],"displayName":"0123","displayTotal":14,"displayBalance":14,"displayPercent":0,"displayAge":3},{"invoice_status_id":"5","created_at":"2014-09-19 00:00:00","invoice_number":"0124","amount":"105.00","balance":"0.00","invoice_items":[{"product_key":"Delaware","cost":"105.00","qty":"1.00"}],"displayName":"0124","displayTotal":105,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-09-28 00:00:00","invoice_number":"0125","amount":"68.00","balance":"68.00","invoice_items":[{"product_key":"Iowa","cost":"68.00","qty":"1.00"}],"displayName":"0125","displayTotal":68,"displayBalance":68,"displayPercent":0,"displayAge":5},{"invoice_status_id":"1","created_at":"2014-08-17 00:00:00","invoice_number":"0126","amount":"98.00","balance":"98.00","invoice_items":[{"product_key":"Arizona","cost":"98.00","qty":"1.00"}],"displayName":"0126","displayTotal":98,"displayBalance":98,"displayPercent":0,"displayAge":47},{"invoice_status_id":"1","created_at":"2014-09-16 00:00:00","invoice_number":"0127","amount":"68.00","balance":"68.00","invoice_items":[{"product_key":"Maine","cost":"68.00","qty":"1.00"}],"displayName":"0127","displayTotal":68,"displayBalance":68,"displayPercent":0,"displayAge":17},{"invoice_status_id":"1","created_at":"2014-09-30 00:00:00","invoice_number":"0128","amount":"120.00","balance":"120.00","invoice_items":[{"product_key":"New York","cost":"120.00","qty":"1.00"}],"displayName":"0128","displayTotal":120,"displayBalance":120,"displayPercent":0,"displayAge":3},{"invoice_status_id":"5","created_at":"2014-08-08 00:00:00","invoice_number":"0129","amount":"105.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"105.00","qty":"1.00"}],"displayName":"0129","displayTotal":105,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-09-16 00:00:00","invoice_number":"0130","amount":"117.00","balance":"117.00","invoice_items":[{"product_key":"California","cost":"117.00","qty":"1.00"}],"displayName":"0130","displayTotal":117,"displayBalance":117,"displayPercent":0,"displayAge":17},{"invoice_status_id":"1","created_at":"2014-07-08 00:00:00","invoice_number":"0131","amount":"32.00","balance":"32.00","invoice_items":[{"product_key":"Colorado","cost":"32.00","qty":"1.00"}],"displayName":"0131","displayTotal":32,"displayBalance":32,"displayPercent":0,"displayAge":87},{"invoice_status_id":"1","created_at":"2014-07-05 00:00:00","invoice_number":"0132","amount":"35.00","balance":"35.00","invoice_items":[{"product_key":"Arizona","cost":"35.00","qty":"1.00"}],"displayName":"0132","displayTotal":35,"displayBalance":35,"displayPercent":0,"displayAge":90},{"invoice_status_id":"5","created_at":"2014-07-10 00:00:00","invoice_number":"0133","amount":"14.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"14.00","qty":"1.00"}],"displayName":"0133","displayTotal":14,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-12 00:00:00","invoice_number":"0134","amount":"82.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"82.00","qty":"1.00"}],"displayName":"0134","displayTotal":82,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-07-20 00:00:00","invoice_number":"0135","amount":"103.00","balance":"103.00","invoice_items":[{"product_key":"Arizona","cost":"103.00","qty":"1.00"}],"displayName":"0135","displayTotal":103,"displayBalance":103,"displayPercent":0,"displayAge":75},{"invoice_status_id":"1","created_at":"2014-06-26 00:00:00","invoice_number":"0136","amount":"49.00","balance":"49.00","invoice_items":[{"product_key":"Massachusetts","cost":"49.00","qty":"1.00"}],"displayName":"0136","displayTotal":49,"displayBalance":49,"displayPercent":0,"displayAge":99},{"invoice_status_id":"5","created_at":"2014-09-07 00:00:00","invoice_number":"0137","amount":"20.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"20.00","qty":"1.00"}],"displayName":"0137","displayTotal":20,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-13 00:00:00","invoice_number":"0138","amount":"56.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"56.00","qty":"1.00"}],"displayName":"0138","displayTotal":56,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-07-26 00:00:00","invoice_number":"0139","amount":"147.00","balance":"147.00","invoice_items":[{"product_key":"Iowa","cost":"147.00","qty":"1.00"}],"displayName":"0139","displayTotal":147,"displayBalance":147,"displayPercent":0,"displayAge":69},{"invoice_status_id":"1","created_at":"2014-09-06 00:00:00","invoice_number":"0140","amount":"47.00","balance":"47.00","invoice_items":[{"product_key":"California","cost":"47.00","qty":"1.00"}],"displayName":"0140","displayTotal":47,"displayBalance":47,"displayPercent":0,"displayAge":27},{"invoice_status_id":"1","created_at":"2014-08-19 00:00:00","invoice_number":"0141","amount":"147.00","balance":"147.00","invoice_items":[{"product_key":"Colorado","cost":"147.00","qty":"1.00"}],"displayName":"0141","displayTotal":147,"displayBalance":147,"displayPercent":0,"displayAge":45},{"invoice_status_id":"1","created_at":"2014-09-27 00:00:00","invoice_number":"0142","amount":"113.00","balance":"113.00","invoice_items":[{"product_key":"Colorado","cost":"113.00","qty":"1.00"}],"displayName":"0142","displayTotal":113,"displayBalance":113,"displayPercent":0,"displayAge":6},{"invoice_status_id":"1","created_at":"2014-07-01 00:00:00","invoice_number":"0143","amount":"48.00","balance":"48.00","invoice_items":[{"product_key":"Indiana","cost":"48.00","qty":"1.00"}],"displayName":"0143","displayTotal":48,"displayBalance":48,"displayPercent":0,"displayAge":94},{"invoice_status_id":"1","created_at":"2014-08-18 00:00:00","invoice_number":"0144","amount":"137.00","balance":"137.00","invoice_items":[{"product_key":"Arizona","cost":"137.00","qty":"1.00"}],"displayName":"0144","displayTotal":137,"displayBalance":137,"displayPercent":0,"displayAge":46},{"invoice_status_id":"1","created_at":"2014-09-25 00:00:00","invoice_number":"0145","amount":"117.00","balance":"117.00","invoice_items":[{"product_key":"New York","cost":"117.00","qty":"1.00"}],"displayName":"0145","displayTotal":117,"displayBalance":117,"displayPercent":0,"displayAge":8},{"invoice_status_id":"5","created_at":"2014-07-24 00:00:00","invoice_number":"0146","amount":"71.00","balance":"0.00","invoice_items":[{"product_key":"Georgia","cost":"71.00","qty":"1.00"}],"displayName":"0146","displayTotal":71,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-06 00:00:00","invoice_number":"0147","amount":"976.00","balance":"0.00","invoice_items":[{"product_key":"Illinois","cost":"976.00","qty":"1.00"}],"displayName":"0147","displayTotal":976,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-16 00:00:00","invoice_number":"0148","amount":"82.00","balance":"0.00","invoice_items":[{"product_key":"Florida","cost":"82.00","qty":"1.00"}],"displayName":"0148","displayTotal":82,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-22 00:00:00","invoice_number":"0149","amount":"134.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"134.00","qty":"1.00"}],"displayName":"0149","displayTotal":134,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-15 00:00:00","invoice_number":"0150","amount":"147.00","balance":"0.00","invoice_items":[{"product_key":"Illinois","cost":"147.00","qty":"1.00"}],"displayName":"0150","displayTotal":147,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-31 00:00:00","invoice_number":"0151","amount":"16.00","balance":"0.00","invoice_items":[{"product_key":"Kansas","cost":"16.00","qty":"1.00"}],"displayName":"0151","displayTotal":16,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-17 00:00:00","invoice_number":"0152","amount":"14.00","balance":"0.00","invoice_items":[{"product_key":"Indiana","cost":"14.00","qty":"1.00"}],"displayName":"0152","displayTotal":14,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-12 00:00:00","invoice_number":"0153","amount":"61.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"61.00","qty":"1.00"}],"displayName":"0153","displayTotal":61,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-17 00:00:00","invoice_number":"0154","amount":"47.00","balance":"0.00","invoice_items":[{"product_key":"Indiana","cost":"47.00","qty":"1.00"}],"displayName":"0154","displayTotal":47,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-09-10 00:00:00","invoice_number":"0155","amount":"137.00","balance":"137.00","invoice_items":[{"product_key":"California","cost":"137.00","qty":"1.00"}],"displayName":"0155","displayTotal":137,"displayBalance":137,"displayPercent":0,"displayAge":23},{"invoice_status_id":"1","created_at":"2014-07-10 00:00:00","invoice_number":"0156","amount":"76.00","balance":"76.00","invoice_items":[{"product_key":"Massachusetts","cost":"76.00","qty":"1.00"}],"displayName":"0156","displayTotal":76,"displayBalance":76,"displayPercent":0,"displayAge":85},{"invoice_status_id":"5","created_at":"2014-07-26 00:00:00","invoice_number":"0157","amount":"82.00","balance":"0.00","invoice_items":[{"product_key":"Maine","cost":"82.00","qty":"1.00"}],"displayName":"0157","displayTotal":82,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-09-29 00:00:00","invoice_number":"0158","amount":"76.00","balance":"76.00","invoice_items":[{"product_key":"New York","cost":"76.00","qty":"1.00"}],"displayName":"0158","displayTotal":76,"displayBalance":76,"displayPercent":0,"displayAge":4},{"invoice_status_id":"1","created_at":"2014-08-20 00:00:00","invoice_number":"0159","amount":"111.00","balance":"111.00","invoice_items":[{"product_key":"Arizona","cost":"111.00","qty":"1.00"}],"displayName":"0159","displayTotal":111,"displayBalance":111,"displayPercent":0,"displayAge":44},{"invoice_status_id":"5","created_at":"2014-07-14 00:00:00","invoice_number":"0160","amount":"27.00","balance":"0.00","invoice_items":[{"product_key":"Hawaii","cost":"27.00","qty":"1.00"}],"displayName":"0160","displayTotal":27,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-07-17 00:00:00","invoice_number":"0161","amount":"47.00","balance":"47.00","invoice_items":[{"product_key":"Kansas","cost":"47.00","qty":"1.00"}],"displayName":"0161","displayTotal":47,"displayBalance":47,"displayPercent":0,"displayAge":78},{"invoice_status_id":"1","created_at":"2014-08-06 00:00:00","invoice_number":"0162","amount":"31.00","balance":"31.00","invoice_items":[{"product_key":"Indiana","cost":"31.00","qty":"1.00"}],"displayName":"0162","displayTotal":31,"displayBalance":31,"displayPercent":0,"displayAge":58},{"invoice_status_id":"1","created_at":"2014-08-06 00:00:00","invoice_number":"0163","amount":"78.00","balance":"78.00","invoice_items":[{"product_key":"California","cost":"78.00","qty":"1.00"}],"displayName":"0163","displayTotal":78,"displayBalance":78,"displayPercent":0,"displayAge":58},{"invoice_status_id":"5","created_at":"2014-09-24 00:00:00","invoice_number":"0164","amount":"118.00","balance":"0.00","invoice_items":[{"product_key":"Florida","cost":"118.00","qty":"1.00"}],"displayName":"0164","displayTotal":118,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-07-27 00:00:00","invoice_number":"0165","amount":"21.00","balance":"21.00","invoice_items":[{"product_key":"Colorado","cost":"21.00","qty":"1.00"}],"displayName":"0165","displayTotal":21,"displayBalance":21,"displayPercent":0,"displayAge":68},{"invoice_status_id":"5","created_at":"2014-07-30 00:00:00","invoice_number":"0166","amount":"54.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"54.00","qty":"1.00"}],"displayName":"0166","displayTotal":54,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-09-03 00:00:00","invoice_number":"0167","amount":"63.00","balance":"63.00","invoice_items":[{"product_key":"Arizona","cost":"63.00","qty":"1.00"}],"displayName":"0167","displayTotal":63,"displayBalance":63,"displayPercent":0,"displayAge":30},{"invoice_status_id":"1","created_at":"2014-06-26 00:00:00","invoice_number":"0168","amount":"941.00","balance":"941.00","invoice_items":[{"product_key":"Louisiana","cost":"941.00","qty":"1.00"}],"displayName":"0168","displayTotal":941,"displayBalance":941,"displayPercent":0,"displayAge":99},{"invoice_status_id":"5","created_at":"2014-08-08 00:00:00","invoice_number":"0169","amount":"69.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"69.00","qty":"1.00"}],"displayName":"0169","displayTotal":69,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-06-24 00:00:00","invoice_number":"0170","amount":"31.00","balance":"0.00","invoice_items":[{"product_key":"Idaho","cost":"31.00","qty":"1.00"}],"displayName":"0170","displayTotal":31,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-30 00:00:00","invoice_number":"0171","amount":"102.00","balance":"0.00","invoice_items":[{"product_key":"Maryland","cost":"102.00","qty":"1.00"}],"displayName":"0171","displayTotal":102,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-24 00:00:00","invoice_number":"0172","amount":"101.00","balance":"0.00","invoice_items":[{"product_key":"Colorado","cost":"101.00","qty":"1.00"}],"displayName":"0172","displayTotal":101,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-24 00:00:00","invoice_number":"0173","amount":"971.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"971.00","qty":"1.00"}],"displayName":"0173","displayTotal":971,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-16 00:00:00","invoice_number":"0174","amount":"34.00","balance":"0.00","invoice_items":[{"product_key":"Kentucky","cost":"34.00","qty":"1.00"}],"displayName":"0174","displayTotal":34,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-15 00:00:00","invoice_number":"0175","amount":"71.00","balance":"0.00","invoice_items":[{"product_key":"Hawaii","cost":"71.00","qty":"1.00"}],"displayName":"0175","displayTotal":71,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-03 00:00:00","invoice_number":"0176","amount":"106.00","balance":"0.00","invoice_items":[{"product_key":"Hawaii","cost":"106.00","qty":"1.00"}],"displayName":"0176","displayTotal":106,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-21 00:00:00","invoice_number":"0177","amount":"134.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"134.00","qty":"1.00"}],"displayName":"0177","displayTotal":134,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-04 00:00:00","invoice_number":"0178","amount":"24.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"24.00","qty":"1.00"}],"displayName":"0178","displayTotal":24,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-15 00:00:00","invoice_number":"0179","amount":"20.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"20.00","qty":"1.00"}],"displayName":"0179","displayTotal":20,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-30 00:00:00","invoice_number":"0180","amount":"124.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"124.00","qty":"1.00"}],"displayName":"0180","displayTotal":124,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-06-28 00:00:00","invoice_number":"0181","amount":"33.00","balance":"0.00","invoice_items":[{"product_key":"Colorado","cost":"33.00","qty":"1.00"}],"displayName":"0181","displayTotal":33,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-23 00:00:00","invoice_number":"0182","amount":"114.00","balance":"0.00","invoice_items":[{"product_key":"New York","cost":"114.00","qty":"1.00"}],"displayName":"0182","displayTotal":114,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-16 00:00:00","invoice_number":"0183","amount":"938.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"938.00","qty":"1.00"}],"displayName":"0183","displayTotal":938,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-15 00:00:00","invoice_number":"0184","amount":"101.00","balance":"0.00","invoice_items":[{"product_key":"Colorado","cost":"101.00","qty":"1.00"}],"displayName":"0184","displayTotal":101,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-03 00:00:00","invoice_number":"0185","amount":"87.00","balance":"0.00","invoice_items":[{"product_key":"Indiana","cost":"87.00","qty":"1.00"}],"displayName":"0185","displayTotal":87,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-20 00:00:00","invoice_number":"0186","amount":"58.00","balance":"0.00","invoice_items":[{"product_key":"Iowa","cost":"58.00","qty":"1.00"}],"displayName":"0186","displayTotal":58,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-08-24 00:00:00","invoice_number":"0187","amount":"961.00","balance":"0.00","invoice_items":[{"product_key":"California","cost":"961.00","qty":"1.00"}],"displayName":"0187","displayTotal":961,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-30 00:00:00","invoice_number":"0188","amount":"132.00","balance":"0.00","invoice_items":[{"product_key":"Colorado","cost":"132.00","qty":"1.00"}],"displayName":"0188","displayTotal":132,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-07-13 00:00:00","invoice_number":"0189","amount":"60.00","balance":"0.00","invoice_items":[{"product_key":"Hawaii","cost":"60.00","qty":"1.00"}],"displayName":"0189","displayTotal":60,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"5","created_at":"2014-09-30 00:00:00","invoice_number":"0190","amount":"114.00","balance":"0.00","invoice_items":[{"product_key":"Alabama","cost":"114.00","qty":"1.00"}],"displayName":"0190","displayTotal":114,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-07-13 00:00:00","invoice_number":"0191","amount":"93.00","balance":"93.00","invoice_items":[{"product_key":"Kentucky","cost":"93.00","qty":"1.00"}],"displayName":"0191","displayTotal":93,"displayBalance":93,"displayPercent":0,"displayAge":82},{"invoice_status_id":"5","created_at":"2014-10-01 00:00:00","invoice_number":"0192","amount":"41.00","balance":"0.00","invoice_items":[{"product_key":"Arizona","cost":"41.00","qty":"1.00"}],"displayName":"0192","displayTotal":41,"displayBalance":0,"displayPercent":1,"displayAge":0},{"invoice_status_id":"1","created_at":"2014-09-19 00:00:00","invoice_number":"0193","amount":"91.00","balance":"91.00","invoice_items":[{"product_key":"Iowa","cost":"91.00","qty":"1.00"}],"displayName":"0193","displayTotal":91,"displayBalance":91,"displayPercent":0,"displayAge":14}], + "products":[{"key":"Alabama","values":{"amount":642,"paid":484,"age":84},"displayName":"Alabama","displayTotal":642,"displayBalance":158,"displayPercent":"0.75","displayAge":84},{"key":"Arizona","values":{"amount":7480,"paid":5062,"age":52},"displayName":"Arizona","displayTotal":7480,"displayBalance":2418,"displayPercent":"0.68","displayAge":52},{"key":"California","values":{"amount":6249,"paid":5545,"age":58},"displayName":"California","displayTotal":6249,"displayBalance":704,"displayPercent":"0.89","displayAge":58},{"key":"Colorado","values":{"amount":1260,"paid":666,"age":68},"displayName":"Colorado","displayTotal":1260,"displayBalance":594,"displayPercent":"0.53","displayAge":68},{"key":"Connecticut","values":{"amount":578,"paid":393,"age":74},"displayName":"Connecticut","displayTotal":578,"displayBalance":185,"displayPercent":"0.68","displayAge":74},{"key":"Delaware","values":{"amount":209,"paid":186,"age":72},"displayName":"Delaware","displayTotal":209,"displayBalance":23,"displayPercent":"0.89","displayAge":72},{"key":"Florida","values":{"amount":262,"paid":200,"age":65},"displayName":"Florida","displayTotal":262,"displayBalance":62,"displayPercent":"0.76","displayAge":65},{"key":"Georgia","values":{"amount":71,"paid":71},"displayName":"Georgia","displayTotal":71,"displayBalance":0,"displayPercent":"1.00"},{"key":"Hawaii","values":{"amount":536,"paid":536},"displayName":"Hawaii","displayTotal":536,"displayBalance":0,"displayPercent":"1.00"},{"key":"Idaho","values":{"amount":315,"paid":315},"displayName":"Idaho","displayTotal":315,"displayBalance":0,"displayPercent":"1.00"},{"key":"Illinois","values":{"amount":1281,"paid":1281},"displayName":"Illinois","displayTotal":1281,"displayBalance":0,"displayPercent":"1.00"},{"key":"Indiana","values":{"amount":227,"paid":148,"age":76},"displayName":"Indiana","displayTotal":227,"displayBalance":79,"displayPercent":"0.65","displayAge":76},{"key":"Iowa","values":{"amount":1659,"paid":1261,"age":9.5},"displayName":"Iowa","displayTotal":1659,"displayBalance":398,"displayPercent":"0.76","displayAge":9.5},{"key":"Kansas","values":{"amount":342,"paid":295,"age":78},"displayName":"Kansas","displayTotal":342,"displayBalance":47,"displayPercent":"0.86","displayAge":78},{"key":"Kentucky","values":{"amount":1077,"paid":984,"age":82},"displayName":"Kentucky","displayTotal":1077,"displayBalance":93,"displayPercent":"0.91","displayAge":82},{"key":"Louisiana","values":{"amount":2092,"paid":1151,"age":99},"displayName":"Louisiana","displayTotal":2092,"displayBalance":941,"displayPercent":"0.55","displayAge":99},{"key":"Maine","values":{"amount":211,"paid":143,"age":17},"displayName":"Maine","displayTotal":211,"displayBalance":68,"displayPercent":"0.68","displayAge":17},{"key":"Maryland","values":{"amount":321,"paid":125,"age":25},"displayName":"Maryland","displayTotal":321,"displayBalance":196,"displayPercent":"0.39","displayAge":25},{"key":"Massachusetts","values":{"amount":190,"paid":0,"age":76},"displayName":"Massachusetts","displayTotal":190,"displayBalance":190,"displayPercent":"0.00","displayAge":76},{"key":"Michigan","values":{"amount":522,"paid":387,"age":58},"displayName":"Michigan","displayTotal":522,"displayBalance":135,"displayPercent":"0.74","displayAge":58},{"key":"New York","values":{"amount":4396,"paid":2669,"age":16.5},"displayName":"New York","displayTotal":4396,"displayBalance":1727,"displayPercent":"0.61","displayAge":16.5}] +} \ No newline at end of file diff --git a/app/views/accounts/nav_advanced.blade.php b/app/views/accounts/nav_advanced.blade.php index 8e0e03d79c28..498a28d43b26 100644 --- a/app/views/accounts/nav_advanced.blade.php +++ b/app/views/accounts/nav_advanced.blade.php @@ -1,6 +1,7 @@ diff --git a/app/views/accounts/payments.blade.php b/app/views/accounts/payments.blade.php index 88b0abad5e85..73684db59234 100755 --- a/app/views/accounts/payments.blade.php +++ b/app/views/accounts/payments.blade.php @@ -11,28 +11,32 @@ @if ($accountGateway) {{ Former::populateField('gateway_id', $accountGateway->gateway_id) }} {{ Former::populateField('recommendedGateway_id', $accountGateway->gateway_id) }} - @foreach ($accountGateway->fields as $field => $junk) - @if (in_array($field, ['solutionType', 'landingPage', 'headerImageUrl', 'brandName'])) - {{-- do nothing --}} - @else - {{ Former::populateField($accountGateway->gateway_id.'_'.$field, $config->$field) }} - @endif - @endforeach + @if ($config) + @foreach ($accountGateway->fields as $field => $junk) + @if (in_array($field, ['solutionType', 'landingPage', 'headerImageUrl', 'brandName'])) + {{-- do nothing --}} + @else + {{ Former::populateField($accountGateway->gateway_id.'_'.$field, $config->$field) }} + @endif + @endforeach + @endif @endif -
+
{{ Former::checkboxes('creditCardTypes[]')->label('Accepted Credit Cards') ->checkboxes($creditCardTypes)->class('creditcard-types') }}
+ +

 

- {{ Former::radios('recommendedGateway_id')->label('Recommended Gateways') + {{ Former::radios('recommendedGateway_id')->label('Recommended Gateway') ->radios($recommendedGateways)->class('recommended-gateway') }}
- {{ Former::select('gateway_id')->label('PayPal & Other Gateways')->addOption('', '') + {{ Former::select('gateway_id')->label('Select Gateway')->addOption('', '') ->dataClass('gateway-dropdown') ->fromQuery($dropdownGateways, 'name', 'id') ->onchange('setFieldsShown()'); }} @@ -57,6 +61,8 @@ @endforeach +

 

+ {{ Former::actions( Button::lg_success_submit('Save')->append_with_icon('floppy-disk') ) }} {{ Former::close() }} diff --git a/app/views/emails/payment_confirmation_html.blade.php b/app/views/emails/payment_confirmation_html.blade.php index c1dffbac19a0..115478c45e56 100644 --- a/app/views/emails/payment_confirmation_html.blade.php +++ b/app/views/emails/payment_confirmation_html.blade.php @@ -9,6 +9,10 @@ {{ trans('texts.payment_message', ['amount' => $paymentAmount]) }}

+ @if (isset($emailMessage) && $emailMessage) + {{ $emailMessage }}

+ @endif + @if ($emailFooter) {{ nl2br($emailFooter) }} @else diff --git a/app/views/emails/payment_confirmation_text.blade.php b/app/views/emails/payment_confirmation_text.blade.php index 0d2b7a1c5438..15f94c3b8bf9 100644 --- a/app/views/emails/payment_confirmation_text.blade.php +++ b/app/views/emails/payment_confirmation_text.blade.php @@ -2,6 +2,10 @@ {{ trans('texts.payment_message', ['amount' => $paymentAmount]) }} +@if (isset($emailMessage) && $emailMessage) +{{ $emailMessage }} +@endif + @if ($emailFooter) {{ $emailFooter }} @else diff --git a/app/views/plans.blade.php b/app/views/plans.blade.php index 6aa004835e4e..1617aeb9dd2b 100644 --- a/app/views/plans.blade.php +++ b/app/views/plans.blade.php @@ -11,7 +11,7 @@

Multi-user support
Quotes/pro-forma invoices
Custom invoice fields and colors
-
Dynamic chart builder
+
Dynamic data vizualizations
Priority email support
Remove "Created by Invoice Ninja"
Latest and greatest features
@@ -29,7 +29,7 @@
Multi-user support
Quotes/pro-forma invoices
Custom fields and invoice colors
-
Dynamic chart builder
+
Dynamic data vizualizations
Priority email support
Remove "Created by Invoice Ninja"
Latest and greatest features
@@ -47,7 +47,7 @@
Multi-user support
Quotes/pro-forma invoices
Custom invoice fields and colors
-
Dynamic chart builder
+
Dynamic data vizualizations
Priority email support
Remove "Created by Invoice Ninja"
Latest and greatest features
diff --git a/app/views/reports/d3.blade.php b/app/views/reports/d3.blade.php new file mode 100644 index 000000000000..70099d20bc30 --- /dev/null +++ b/app/views/reports/d3.blade.php @@ -0,0 +1,301 @@ +@extends('accounts.nav') + +@section('head') + @parent + + + + +@stop + +@section('content') + @parent + @include('accounts.nav_advanced') + + {{ Former::open() }} + {{ Former::legend('data_visualizations') }} + {{ Former::close() }} + + + +
+ Group By    + +    {{ $message }} +
+ +

 

+ +
+ + + +@stop \ No newline at end of file diff --git a/app/views/reports/report_builder.blade.php b/app/views/reports/report_builder.blade.php index 3ed457524fa9..96cb4702cb20 100755 --- a/app/views/reports/report_builder.blade.php +++ b/app/views/reports/report_builder.blade.php @@ -10,6 +10,10 @@ @parent @include('accounts.nav_advanced') + {{ Former::open() }} + {{ Former::legend('chart_builder') }} + {{ Former::close() }} +
diff --git a/bower.json b/bower.json index 6399e940ee3f..555c45c49ac2 100644 --- a/bower.json +++ b/bower.json @@ -18,10 +18,10 @@ "accounting": "~0.*", "pdfjs": "*", "spectrum": "~1.3.4", - "handsontable": "*" + "handsontable": "*", + "d3": "~3.4.11" }, "resolutions": { - "datatables": "~1.*", "jquery": "~1.11" } } diff --git a/public/built.js b/public/built.js index e17af34c6cd5..a818c20503ea 100644 --- a/public/built.js +++ b/public/built.js @@ -30965,7 +30965,543 @@ var isChrome = !!window.chrome && !isOpera; // Chrome 1+ var isChromium = isChrome && navigator.userAgent.indexOf('Chromium') >= 0; var isIE = /*@cc_on!@*/false || !!document.documentMode; // At least IE6 -function GetReportTemplate4(doc, invoice, layout, checkMath) { + +var invoiceOld; +function generatePDF(invoice, force) { + invoice = calculateAmounts(invoice); + var a = copyInvoice(invoice); + var b = copyInvoice(invoiceOld); + if (!force && _.isEqual(a, b)) { + return; + } + invoiceOld = invoice; + report_id = invoice.invoice_design_id; + doc = GetPdf(invoice, report_id); + return doc; +} + +function copyInvoice(orig) { + if (!orig) return false; + var copy = JSON.stringify(orig); + var copy = JSON.parse(copy); + return copy; +} + + + +function GetPdf(invoice, report_id){ + var layout = { + accountTop: 40, + marginLeft: 50, + marginRight: 550, + headerTop: 150, + headerLeft: 360, + headerRight: 550, + rowHeight: 15, + tableRowHeight: 10, + footerLeft: 420, + tablePadding: 12, + tableTop: 250, + descriptionLeft: 162, + unitCostRight: 410, + qtyRight: 480, + taxRight: 480, + lineTotalRight: 550 + }; + + if (invoice.has_taxes) + { + layout.descriptionLeft -= 20; + layout.unitCostRight -= 40; + layout.qtyRight -= 40; + } + + /* + @param orientation One of "portrait" or "landscape" (or shortcuts "p" (Default), "l") + @param unit Measurement unit to be used when coordinates are specified. One of "pt" (points), "mm" (Default), "cm", "in" + @param format One of 'a3', 'a4' (Default),'a5' ,'letter' ,'legal' + @returns {jsPDF} + */ + var doc = new jsPDF('portrait', 'pt', 'a4'); + + + //Set PDF properities + doc.setProperties({ + title: 'Invoice ' + invoice.invoice_number, + subject: '', + author: 'InvoiceNinja.com', + keywords: 'pdf, invoice', + creator: 'InvoiceNinja.com' + }); + + //set default style for report + doc.setFont('Helvetica',''); + + if (report_id==1) { + return GetReportTemplate1(doc, invoice, layout); + } else if (report_id==2) { + return GetReportTemplate2(doc, invoice, layout); + } else if (report_id==3) { + return GetReportTemplate3(doc, invoice, layout); + } else { + return GetReportTemplate4(doc, invoice, layout); + } +} + +function GetReportTemplate1(doc, invoice, layout) +{ + var GlobalY=0;//Y position of line at current page + + var client = invoice.client; + var account = invoice.account; + var currencyId = client.currency_id; + + layout.headerRight = 550; + layout.rowHeight = 15; + + doc.setFontSize(9); + + if (invoice.image) + { + var left = layout.headerRight - invoice.imageWidth; + doc.addImage(invoice.image, 'JPEG', layout.marginLeft, 30); + } + + if (!invoice.is_pro && logoImages.imageLogo1) + { + pageHeight=820; + y=pageHeight-logoImages.imageLogoHeight1; + doc.addImage(logoImages.imageLogo1, 'JPEG', layout.marginLeft, y, logoImages.imageLogoWidth1, logoImages.imageLogoHeight1); + } + + doc.setFontSize(9); + SetPdfColor('LightBlue', doc, 'primary'); + displayAccount(doc, invoice, 220, layout.accountTop, layout); + + SetPdfColor('LightBlue', doc, 'primary'); + doc.setFontSize('11'); + doc.text(50, layout.headerTop, (invoice.is_quote ? invoiceLabels.quote : invoiceLabels.invoice).toUpperCase()); + + + SetPdfColor('Black',doc); //set black color + doc.setFontSize(9); + + var invoiceHeight = displayInvoice(doc, invoice, 50, 170, layout); + var clientHeight = displayClient(doc, invoice, 220, 170, layout); + var detailsHeight = Math.max(invoiceHeight, clientHeight); + layout.tableTop = Math.max(layout.tableTop, layout.headerTop + detailsHeight + (3 * layout.rowHeight)); + + + + doc.setLineWidth(0.3); + doc.setDrawColor(200,200,200); + doc.line(layout.marginLeft - layout.tablePadding, layout.headerTop + 6, layout.marginRight + layout.tablePadding, layout.headerTop + 6); + doc.line(layout.marginLeft - layout.tablePadding, layout.headerTop + detailsHeight + 14, layout.marginRight + layout.tablePadding, layout.headerTop + detailsHeight + 14); + + + doc.setFontSize(10); + doc.setFontType("bold"); + displayInvoiceHeader(doc, invoice, layout); + var y = displayInvoiceItems(doc, invoice, layout); + + doc.setFontSize(9); + doc.setFontType("bold"); + + GlobalY=GlobalY+25; + + + doc.setLineWidth(0.3); + doc.setDrawColor(241,241,241); + doc.setFillColor(241,241,241); + var x1 = layout.marginLeft - 12; + var y1 = GlobalY-layout.tablePadding; + + var w2 = 510 + 24; + var h2 = doc.internal.getFontSize()*3+layout.tablePadding*2; + + if (invoice.discount) { + h2 += doc.internal.getFontSize()*2; + } + if (invoice.tax_amount) { + h2 += doc.internal.getFontSize()*2; + } + + //doc.rect(x1, y1, w2, h2, 'FD'); + + doc.setFontSize(9); + displayNotesAndTerms(doc, layout, invoice, y); + y += displaySubtotals(doc, layout, invoice, y, layout.unitCostRight); + + + doc.setFontSize(10); + Msg = invoice.is_quote ? invoiceLabels.total : invoiceLabels.balance_due; + var TmpMsgX = layout.unitCostRight-(doc.getStringUnitWidth(Msg) * doc.internal.getFontSize()); + + doc.text(TmpMsgX, y, Msg); + + SetPdfColor('LightBlue', doc, 'primary'); + AmountText = formatMoney(invoice.balance_amount, currencyId); + headerLeft=layout.headerRight+400; + var AmountX = layout.lineTotalRight - (doc.getStringUnitWidth(AmountText) * doc.internal.getFontSize()); + doc.text(AmountX, y, AmountText); + + return doc; +} + + + + +function GetReportTemplate2(doc, invoice, layout) +{ + var GlobalY=0;//Y position of line at current page + + var client = invoice.client; + var account = invoice.account; + var currencyId = client.currency_id; + + layout.headerRight = 150; + layout.rowHeight = 15; + layout.headerTop = 125; + layout.tableTop = 300; + + doc.setLineWidth(0.5); + + if (NINJA.primaryColor) { + setDocHexFill(doc, NINJA.primaryColor); + setDocHexDraw(doc, NINJA.primaryColor); + } else { + doc.setFillColor(46,43,43); + } + + var x1 =0; + var y1 = 0; + var w2 = 595; + var h2 = 100; + doc.rect(x1, y1, w2, h2, 'FD'); + + + if (invoice.image) + { + var left = layout.headerRight - invoice.imageWidth; + doc.addImage(invoice.image, 'JPEG', layout.marginLeft, 30); + } + + Report2AddFooter(invoice,doc); + + doc.setFontSize(7); + doc.setFontType("bold"); + SetPdfColor('White',doc); + + displayAccount(doc, invoice, 300, layout.accountTop, layout); + + + var y = layout.accountTop; + var left = layout.marginLeft; + var headerY = layout.headerTop; + + SetPdfColor('GrayLogo',doc); //set black color + doc.setFontSize(7); + + //show left column + SetPdfColor('Black',doc); //set black color + doc.setFontType("normal"); + + //publish filled box + doc.setDrawColor(200,200,200); + + if (NINJA.secondaryColor) { + setDocHexFill(doc, NINJA.secondaryColor); + } else { + doc.setFillColor(54,164,152); + } + + GlobalY=190; + doc.setLineWidth(0.5); + + var BlockLenght=220; + var x1 =595-BlockLenght; + var y1 = GlobalY-12; + var w2 = BlockLenght; + var h2 = getInvoiceDetailsHeight(invoice, layout) + layout.tablePadding + 2; + + doc.rect(x1, y1, w2, h2, 'FD'); + + SetPdfColor('SomeGreen', doc, 'secondary'); + doc.setFontSize('14'); + doc.setFontType("bold"); + doc.text(50, GlobalY, (invoice.is_quote ? invoiceLabels.your_quote : invoiceLabels.your_invoice).toUpperCase()); + + + var z=GlobalY; + z=z+30; + + doc.setFontSize('8'); + SetPdfColor('Black',doc); + displayClient(doc, invoice, layout.marginLeft, z, layout); + + marginLeft2=395; + + //publish left side information + SetPdfColor('White',doc); + doc.setFontSize('8'); + var detailsHeight = displayInvoice(doc, invoice, marginLeft2, z-25, layout) + 75; + layout.tableTop = Math.max(layout.tableTop, layout.headerTop + detailsHeight + (2 * layout.tablePadding)); + + y=z+60; + x = GlobalY + 100; + doc.setFontType("bold"); + + doc.setFontSize(12); + doc.setFontType("bold"); + SetPdfColor('Black',doc); + displayInvoiceHeader(doc, invoice, layout); + + var y = displayInvoiceItems(doc, invoice, layout); + doc.setLineWidth(0.3); + displayNotesAndTerms(doc, layout, invoice, y); + y += displaySubtotals(doc, layout, invoice, y, layout.unitCostRight); + + doc.setFontType("bold"); + + doc.setFontSize(12); + x += doc.internal.getFontSize()*4; + Msg = invoice.is_quote ? invoiceLabels.total : invoiceLabels.balance_due; + var TmpMsgX = layout.unitCostRight-(doc.getStringUnitWidth(Msg) * doc.internal.getFontSize()); + + doc.text(TmpMsgX, y, Msg); + + //SetPdfColor('LightBlue',doc); + AmountText = formatMoney(invoice.balance_amount , currencyId); + headerLeft=layout.headerRight+400; + var AmountX = headerLeft - (doc.getStringUnitWidth(AmountText) * doc.internal.getFontSize()); + SetPdfColor('SomeGreen', doc, 'secondary'); + doc.text(AmountX, y, AmountText); + + return doc; +} + + +function Report2AddFooter (invoice,doc) +{ + doc.setLineWidth(0.5); + if (NINJA.primaryColor) { + setDocHexFill(doc, NINJA.primaryColor); + setDocHexDraw(doc, NINJA.primaryColor); + } else { + doc.setFillColor(46,43,43); + doc.setDrawColor(46,43,43); + } + + // return doc.setTextColor(240,240,240);//select color Custom Report GRAY Colour + var x1 = 0;//tableLeft-tablePadding ; + var y1 = 750; + var w2 = 596; + var h2 = 94;//doc.internal.getFontSize()*length+length*1.1;//+h;//+tablePadding; + + + doc.rect(x1, y1, w2, h2, 'FD'); + + if (!invoice.is_pro && logoImages.imageLogo2) + { + pageHeight=820; + var left = 250;//headerRight ; + y=pageHeight-logoImages.imageLogoHeight2; + var headerRight=370; + + var left = headerRight - logoImages.imageLogoWidth2; + doc.addImage(logoImages.imageLogo2, 'JPEG', left, y, logoImages.imageLogoWidth2, logoImages.imageLogoHeight2); + } +} + +function Report3AddFooter (invoice, account, doc, layout) +{ + + doc.setLineWidth(0.5); + + if (NINJA.primaryColor) { + setDocHexFill(doc, NINJA.primaryColor); + setDocHexDraw(doc, NINJA.primaryColor); + } else { + doc.setDrawColor(242,101,34); + doc.setFillColor(242,101,34); + } + + var x1 = 0;//tableLeft-tablePadding ; + var y1 = 750; + var w2 = 596; + var h2 = 94;//doc.internal.getFontSize()*length+length*1.1;//+h;//+tablePadding; + + doc.rect(x1, y1, w2, h2, 'FD'); + + if (!invoice.is_pro && logoImages.imageLogo3) + { + pageHeight=820; + // var left = 25;//250;//headerRight ; + y=pageHeight-logoImages.imageLogoHeight3; + //var headerRight=370; + + //var left = headerRight - invoice.imageLogoWidth3; + doc.addImage(logoImages.imageLogo3, 'JPEG', 40, y, logoImages.imageLogoWidth3, logoImages.imageLogoHeight3); + } + + doc.setFontSize(10); + var marginLeft = 340; + displayAccount(doc, invoice, marginLeft, 780, layout); +} + + + +function GetReportTemplate3(doc, invoice, layout) +{ + var client = invoice.client; + var account = invoice.account; + var currencyId = client.currency_id; + + layout.headerRight = 400; + layout.rowHeight = 15; + + + doc.setFontSize(7); + + Report3AddHeader(invoice, layout, doc); + + if (invoice.image) + { + y=130; + var left = layout.headerRight - invoice.imageWidth; + doc.addImage(invoice.image, 'JPEG', layout.marginLeft, y); + } + + Report3AddFooter (invoice, account, doc, layout); + + + SetPdfColor('White',doc); + doc.setFontSize('8'); + var detailsHeight = displayInvoice(doc, invoice, layout.headerRight, layout.accountTop-10, layout); + layout.headerTop = Math.max(layout.headerTop, detailsHeight + 50); + layout.tableTop = Math.max(layout.tableTop, detailsHeight + 150); + + SetPdfColor('Black',doc); //set black color + doc.setFontSize(7); + doc.setFontType("normal"); + displayClient(doc, invoice, layout.headerRight, layout.headerTop, layout); + + + + SetPdfColor('White',doc); + doc.setFontType('bold'); + + doc.setLineWidth(0.3); + if (NINJA.secondaryColor) { + setDocHexFill(doc, NINJA.secondaryColor); + setDocHexDraw(doc, NINJA.secondaryColor); + } else { + doc.setDrawColor(63,60,60); + doc.setFillColor(63,60,60); + } + + var left = layout.marginLeft - layout.tablePadding; + var top = layout.tableTop - layout.tablePadding; + var width = layout.marginRight - (2 * layout.tablePadding); + var height = 20; + doc.rect(left, top, width, height, 'FD'); + + + displayInvoiceHeader(doc, invoice, layout); + SetPdfColor('Black',doc); + var y = displayInvoiceItems(doc, invoice, layout); + + + var height1 = displayNotesAndTerms(doc, layout, invoice, y); + var height2 = displaySubtotals(doc, layout, invoice, y, layout.unitCostRight); + y += Math.max(height1, height2); + + + var left = layout.marginLeft - layout.tablePadding; + var top = y - layout.tablePadding; + var width = layout.marginRight - (2 * layout.tablePadding); + var height = 20; + if (NINJA.secondaryColor) { + setDocHexFill(doc, NINJA.secondaryColor); + setDocHexDraw(doc, NINJA.secondaryColor); + } else { + doc.setDrawColor(63,60,60); + doc.setFillColor(63,60,60); + } + doc.rect(left, top, width, height, 'FD'); + + doc.setFontType('bold'); + SetPdfColor('White', doc); + doc.setFontSize(12); + + var label = invoice.is_quote ? invoiceLabels.total : invoiceLabels.balance_due; + var labelX = layout.unitCostRight-(doc.getStringUnitWidth(label) * doc.internal.getFontSize()); + doc.text(labelX, y+2, label); + + + doc.setFontType('normal'); + var amount = formatMoney(invoice.balance_amount , currencyId); + headerLeft=layout.headerRight+400; + var amountX = layout.lineTotalRight - (doc.getStringUnitWidth(amount) * doc.internal.getFontSize()); + doc.text(amountX, y+2, amount); + + return doc; +} + + + + +function Report3AddHeader (invoice, layout, doc) +{ + doc.setLineWidth(0.5); + + if (NINJA.primaryColor) { + setDocHexFill(doc, NINJA.primaryColor); + setDocHexDraw(doc, NINJA.primaryColor); + } else { + doc.setDrawColor(242,101,34); + doc.setFillColor(242,101,34); + } + + var x1 =0; + var y1 = 0; + var w2 = 595; + var h2 = Math.max(110, getInvoiceDetailsHeight(invoice, layout) + 30); + doc.rect(x1, y1, w2, h2, 'FD'); + + SetPdfColor('White',doc); + + //second column + doc.setFontType('bold'); + var name = invoice.account.name; + if (name) { + doc.setFontSize('30'); + doc.setFontType('bold'); + doc.text(40, 50, name); + } +} + + +function Report1AddNewPage(invoice,account,doc) +{ + doc.addPage(); + if (logoImages.imageLogo1) + { + pageHeight=820; + y=pageHeight-logoImages.imageLogoHeight1; + var left = 20;//headerRight - invoice.imageLogoWidth1; + doc.addImage(logoImages.imageLogo1, 'JPEG', left, y, logoImages.imageLogoWidth1, logoImages.imageLogoHeight1); + + } + + GlobalY = 40; + return GlobalY; +} + + + + +function GetReportTemplate4(doc, invoice, layout) { var client = invoice.client; var account = invoice.account; @@ -31013,29 +31549,10 @@ function GetReportTemplate4(doc, invoice, layout, checkMath) { doc.setFontSize(10); - /* table footer */ - /* - doc.setDrawColor(200,200,200); - doc.setLineWidth(1); - doc.line(layout.marginLeft - layout.tablePadding, x, layout.lineTotalRight+layout.tablePadding, x); - */ - displayNotesAndTerms(doc, layout, invoice, y+20); y += displaySubtotals(doc, layout, invoice, y+20, 480) + 20; - /* - if (checkMath && NINJA.parseFloat(total).toFixed(4) != NINJA.parseFloat(invoice.amount).toFixed(4)) - { - var doc = new jsPDF('p', 'pt'); - doc.setFont('Helvetica',''); - doc.setFontSize(10); - doc.text(100, 100, "An error occurred, please try again later."); - onerror('Failed to generate PDF ' + total + ', ' + invoice.amount ); - return doc; - } - */ - doc.setDrawColor(200,200,200); doc.setFillColor(230,230,230); @@ -31061,26 +31578,51 @@ function GetReportTemplate4(doc, invoice, layout, checkMath) { } -var invoiceOld; -function generatePDF(invoice, force) { - invoice = calculateAmounts(invoice); - var a = copyInvoice(invoice); - var b = copyInvoice(invoiceOld); - if (!force && _.isEqual(a, b)) { - return; +function SetPdfColor(color, doc, role) +{ + if (role === 'primary' && NINJA.primaryColor) { + return setDocHexColor(doc, NINJA.primaryColor); + } else if (role === 'secondary' && NINJA.secondaryColor) { + return setDocHexColor(doc, NINJA.secondaryColor); } - invoiceOld = invoice; - report_id = invoice.invoice_design_id; - doc = GetPdf(invoice, false, report_id); - return doc; + + if (color=='LightBlue') { + return doc.setTextColor(41,156, 194); + } + + if (color=='Black') { + return doc.setTextColor(46,43,43);//select color black + } + if (color=='GrayLogo') { + return doc.setTextColor(207,241, 241);//select color Custom Report GRAY + } + + if (color=='GrayBackground') { + return doc.setTextColor(251,251, 251);//select color Custom Report GRAY + } + + if (color=='GrayText') { + return doc.setTextColor(161,160,160);//select color Custom Report GRAY Colour + } + + if (color=='White') { + return doc.setTextColor(255,255,255);//select color Custom Report GRAY Colour + } + + if (color=='SomeGreen') { + return doc.setTextColor(54,164,152);//select color Custom Report GRAY Colour + } + + if (color=='LightGrayReport2-gray') { + return doc.setTextColor(240,240,240);//select color Custom Report GRAY Colour + } + + if (color=='LightGrayReport2-white') { + return doc.setTextColor(251,251,251);//select color Custom Report GRAY Colour + } + } -function copyInvoice(orig) { - if (!orig) return false; - var copy = JSON.stringify(orig); - var copy = JSON.parse(copy); - return copy; -} /* Handle converting variables in the invoices (ie, MONTH+1) */ function processVariables(str) { @@ -31533,7 +32075,7 @@ function populateInvoiceComboboxes(clientId, invoiceId) { var client = clientMap[invoice.client.public_id]; setComboboxValue($('.client-select'), client.public_id, getClientDisplayName(client)); if (!parseFloat($('#amount').val())) { - $('#amount').val(formatMoney(invoice.balance, invoice.currency_id, true)); + $('#amount').val(parseFloat(invoice.balance).toFixed(2)); } } }); @@ -31569,629 +32111,7 @@ $.fn.datepicker.defaults.todayHighlight = true; -//==================================================================================================================== -function GetPdf(invoice,checkMath,report_id){ - var layout = { - accountTop: 40, - marginLeft: 50, - marginRight: 550, - headerTop: 150, - headerLeft: 360, - headerRight: 550, - rowHeight: 15, - tableRowHeight: 10, - footerLeft: 420, - tablePadding: 12, - tableTop: 250, - descriptionLeft: 162, - unitCostRight: 410, - qtyRight: 480, - taxRight: 480, - lineTotalRight: 550 - }; - - if (invoice.has_taxes) - { - layout.descriptionLeft -= 20; - layout.unitCostRight -= 40; - layout.qtyRight -= 40; - } - - /* - @param orientation One of "portrait" or "landscape" (or shortcuts "p" (Default), "l") - @param unit Measurement unit to be used when coordinates are specified. One of "pt" (points), "mm" (Default), "cm", "in" - @param format One of 'a3', 'a4' (Default),'a5' ,'letter' ,'legal' - @returns {jsPDF} - */ - var doc = new jsPDF('portrait', 'pt', 'a4'); - - - //Set PDF properities - doc.setProperties({ - title: 'Invoice ' + invoice.invoice_number, - subject: '', - author: 'InvoiceNinja.com', - keywords: 'pdf, invoice', - creator: 'InvoiceNinja.com' - }); - - //set default style for report - doc.setFont('Helvetica',''); - - if (report_id==1) { - return GetReportTemplate1(doc, invoice, layout, checkMath); - } else if (report_id==2) { - return GetReportTemplate2(doc, invoice, layout, checkMath); - } else if (report_id==3) { - return GetReportTemplate3(doc, invoice, layout, checkMath); - } else { - return GetReportTemplate4(doc, invoice, layout, checkMath); - } -} - -function GetReportTemplate1(doc, invoice, layout, checkMath) -{ - var GlobalY=0;//Y position of line at current page - - var client = invoice.client; - var account = invoice.account; - var currencyId = client.currency_id; - - layout.headerRight = 550; - layout.rowHeight = 15; - - doc.setFontSize(9); - - if (invoice.image) - { - var left = layout.headerRight - invoice.imageWidth; - doc.addImage(invoice.image, 'JPEG', layout.marginLeft, 30); - } - - if (!invoice.is_pro && logoImages.imageLogo1) - { - pageHeight=820; - y=pageHeight-logoImages.imageLogoHeight1; - doc.addImage(logoImages.imageLogo1, 'JPEG', layout.marginLeft, y, logoImages.imageLogoWidth1, logoImages.imageLogoHeight1); - } - - doc.setFontSize(9); - SetPdfColor('LightBlue', doc, 'primary'); - displayAccount(doc, invoice, 220, layout.accountTop, layout); - - SetPdfColor('LightBlue', doc, 'primary'); - doc.setFontSize('11'); - doc.text(50, layout.headerTop, (invoice.is_quote ? invoiceLabels.quote : invoiceLabels.invoice).toUpperCase()); - - //doc.setDrawColor(220,220,220); - //doc.line(30, y, 560, y); // horizontal line - - - SetPdfColor('Black',doc); //set black color - doc.setFontSize(9); - - var invoiceHeight = displayInvoice(doc, invoice, 50, 170, layout); - var clientHeight = displayClient(doc, invoice, 220, 170, layout); - var detailsHeight = Math.max(invoiceHeight, clientHeight); - layout.tableTop = Math.max(layout.tableTop, layout.headerTop + detailsHeight + (3 * layout.rowHeight)); - - - - doc.setLineWidth(0.3); - doc.setDrawColor(200,200,200); - doc.line(layout.marginLeft - layout.tablePadding, layout.headerTop + 6, layout.marginRight + layout.tablePadding, layout.headerTop + 6); - doc.line(layout.marginLeft - layout.tablePadding, layout.headerTop + detailsHeight + 14, layout.marginRight + layout.tablePadding, layout.headerTop + detailsHeight + 14); - - - //doc.setDrawColor(220,220,220); - //doc.line(30, y-8, 560, y-8); // horizontal line - - - doc.setFontSize(10); - doc.setFontType("bold"); - displayInvoiceHeader(doc, invoice, layout); - var y = displayInvoiceItems(doc, invoice, layout); - - //doc.setFontType("normal"); - doc.setFontSize(9); - - doc.setFontType("bold"); - - GlobalY=GlobalY+25; - - - doc.setLineWidth(0.3); - doc.setDrawColor(241,241,241); - doc.setFillColor(241,241,241); - var x1 = layout.marginLeft - 12; - var y1 = GlobalY-layout.tablePadding; - - var w2 = 510 + 24; - var h2 = doc.internal.getFontSize()*3+layout.tablePadding*2; - - if (invoice.discount) { - h2 += doc.internal.getFontSize()*2; - } - if (invoice.tax_amount) { - h2 += doc.internal.getFontSize()*2; - } - - //doc.rect(x1, y1, w2, h2, 'FD'); - - doc.setFontSize(9); - displayNotesAndTerms(doc, layout, invoice, y); - y += displaySubtotals(doc, layout, invoice, y, layout.unitCostRight); - - - doc.setFontSize(10); - Msg = invoice.is_quote ? invoiceLabels.total : invoiceLabels.balance_due; - var TmpMsgX = layout.unitCostRight-(doc.getStringUnitWidth(Msg) * doc.internal.getFontSize()); - - doc.text(TmpMsgX, y, Msg); - - SetPdfColor('LightBlue', doc, 'primary'); - AmountText = formatMoney(invoice.balance_amount, currencyId); - headerLeft=layout.headerRight+400; - var AmountX = layout.lineTotalRight - (doc.getStringUnitWidth(AmountText) * doc.internal.getFontSize()); - doc.text(AmountX, y, AmountText); - - return doc; -} - - - - -function GetReportTemplate2(doc, invoice, layout, checkMath) -{ - var GlobalY=0;//Y position of line at current page - - var client = invoice.client; - var account = invoice.account; - var currencyId = client.currency_id; - - layout.headerRight = 150; - layout.rowHeight = 15; - layout.headerTop = 125; - layout.tableTop = 300; - - doc.setLineWidth(0.5); - - if (NINJA.primaryColor) { - setDocHexFill(doc, NINJA.primaryColor); - setDocHexDraw(doc, NINJA.primaryColor); - } else { - doc.setFillColor(46,43,43); - } - - var x1 =0; - var y1 = 0; - var w2 = 595; - var h2 = 100; - doc.rect(x1, y1, w2, h2, 'FD'); - - - if (invoice.image) - { - var left = layout.headerRight - invoice.imageWidth; - doc.addImage(invoice.image, 'JPEG', layout.marginLeft, 30); - } - - Report2AddFooter (invoice,doc); - - - doc.setFontSize(7); - doc.setFontType("bold"); - SetPdfColor('White',doc); - - displayAccount(doc, invoice, 300, layout.accountTop, layout); - - /* - var spacer = ' '; - var line1 = account.name + spacer + account.work_email + spacer + account.work_phone; - var lineWidth = doc.getStringUnitWidth(line1) * doc.internal.getFontSize(); - var nameWidth = doc.getStringUnitWidth(account.name + spacer) * doc.internal.getFontSize(); - var nameX = lineTotalRight - lineWidth; - var detailsX = lineTotalRight - (lineWidth - nameWidth); - - doc.text(nameX, accountTop, account.name); - doc.setFontType("normal"); - doc.text(detailsX, accountTop, account.work_email + spacer + account.work_phone); - - var line2 = concatStrings(account.address1, account.address2) + spacer + concatStrings(account.city, account.state, account.postal_code); - var lineWidth = doc.getStringUnitWidth(line2) * doc.internal.getFontSize(); - var line2X = lineTotalRight - lineWidth; - - doc.text(line2X, accountTop + 16, line2); - */ - -//-----------------------------Publish Client Details block-------------------------------------------- - - var y = layout.accountTop; - var left = layout.marginLeft; - - var headerY = layout.headerTop; - - - - SetPdfColor('GrayLogo',doc); //set black color - - - doc.setFontSize(7); - - //show left column - SetPdfColor('Black',doc); //set black color - doc.setFontType("normal"); - - - //publish filled box - doc.setDrawColor(200,200,200); - - if (NINJA.secondaryColor) { - setDocHexFill(doc, NINJA.secondaryColor); - } else { - doc.setFillColor(54,164,152); - } - - GlobalY=190; - doc.setLineWidth(0.5); - - var BlockLenght=220; - var x1 =595-BlockLenght; - var y1 = GlobalY-12; - var w2 = BlockLenght; - var h2 = getInvoiceDetailsHeight(invoice, layout) + layout.tablePadding + 2; - - doc.rect(x1, y1, w2, h2, 'FD'); - - - SetPdfColor('SomeGreen', doc, 'secondary'); - doc.setFontSize('14'); - doc.setFontType("bold"); - doc.text(50, GlobalY, (invoice.is_quote ? invoiceLabels.your_quote : invoiceLabels.your_invoice).toUpperCase()); - - - var z=GlobalY; - z=z+30; - - - doc.setFontSize('8'); - SetPdfColor('Black',doc); - displayClient(doc, invoice, layout.marginLeft, z, layout); - - - marginLeft2=395; - - //publish left side information - - SetPdfColor('White',doc); - doc.setFontSize('8'); - var detailsHeight = displayInvoice(doc, invoice, marginLeft2, z-25, layout) + 75; - layout.tableTop = Math.max(layout.tableTop, layout.headerTop + detailsHeight + (2 * layout.tablePadding)); - - y=z+60; - - - x = GlobalY + 100; - - doc.setFontType("bold"); - - - - doc.setFontSize(12); - doc.setFontType("bold"); - SetPdfColor('Black',doc); - displayInvoiceHeader(doc, invoice, layout); - var y = displayInvoiceItems(doc, invoice, layout); - - //GlobalY=600; - - doc.setLineWidth(0.3); - - /* - doc.setDrawColor(251,251,251); - doc.setFillColor(251,251,251); - var x1 = layout.marginLeft-layout.tablePadding*2 +14; - var y1 = GlobalY-layout.tablePadding; - var w2 = 510+layout.tablePadding*2;//lineTotalRight-tablePadding*5; - var h2 = doc.internal.getFontSize()*3+layout.tablePadding*2; - doc.rect(x1, y1, w2, h2, 'FD'); - */ - - displayNotesAndTerms(doc, layout, invoice, y); - y += displaySubtotals(doc, layout, invoice, y, layout.unitCostRight); - - doc.setFontType("bold"); - - doc.setFontSize(12); - x += doc.internal.getFontSize()*4; - Msg = invoice.is_quote ? invoiceLabels.total : invoiceLabels.balance_due; - var TmpMsgX = layout.unitCostRight-(doc.getStringUnitWidth(Msg) * doc.internal.getFontSize()); - - - - doc.text(TmpMsgX, y, Msg); - - - //SetPdfColor('LightBlue',doc); - AmountText = formatMoney(invoice.balance_amount , currencyId); - headerLeft=layout.headerRight+400; - var AmountX = headerLeft - (doc.getStringUnitWidth(AmountText) * doc.internal.getFontSize()); - SetPdfColor('SomeGreen', doc, 'secondary'); - doc.text(AmountX, y, AmountText); - - return doc; -} - - - - - - - -function SetPdfColor(color, doc, role) -{ - if (role === 'primary' && NINJA.primaryColor) { - return setDocHexColor(doc, NINJA.primaryColor); - } else if (role === 'secondary' && NINJA.secondaryColor) { - return setDocHexColor(doc, NINJA.secondaryColor); - } - - if (color=='LightBlue') { - return doc.setTextColor(41,156, 194); - } - - if (color=='Black') { - return doc.setTextColor(46,43,43);//select color black - } - if (color=='GrayLogo') { - return doc.setTextColor(207,241, 241);//select color Custom Report GRAY - } - - if (color=='GrayBackground') { - return doc.setTextColor(251,251, 251);//select color Custom Report GRAY - } - - if (color=='GrayText') { - return doc.setTextColor(161,160,160);//select color Custom Report GRAY Colour - } - - if (color=='White') { - return doc.setTextColor(255,255,255);//select color Custom Report GRAY Colour - } - - if (color=='SomeGreen') { - return doc.setTextColor(54,164,152);//select color Custom Report GRAY Colour - } - - if (color=='LightGrayReport2-gray') { - return doc.setTextColor(240,240,240);//select color Custom Report GRAY Colour - } - - if (color=='LightGrayReport2-white') { - return doc.setTextColor(251,251,251);//select color Custom Report GRAY Colour - } - -} - -function Report2AddFooter (invoice,doc) -{ - doc.setLineWidth(0.5); - if (NINJA.primaryColor) { - setDocHexFill(doc, NINJA.primaryColor); - setDocHexDraw(doc, NINJA.primaryColor); - } else { - doc.setFillColor(46,43,43); - doc.setDrawColor(46,43,43); - } - - // return doc.setTextColor(240,240,240);//select color Custom Report GRAY Colour - var x1 = 0;//tableLeft-tablePadding ; - var y1 = 750; - var w2 = 596; - var h2 = 94;//doc.internal.getFontSize()*length+length*1.1;//+h;//+tablePadding; - - - doc.rect(x1, y1, w2, h2, 'FD'); - - if (!invoice.is_pro && logoImages.imageLogo2) - { - pageHeight=820; - var left = 250;//headerRight ; - y=pageHeight-logoImages.imageLogoHeight2; - var headerRight=370; - - var left = headerRight - logoImages.imageLogoWidth2; - doc.addImage(logoImages.imageLogo2, 'JPEG', left, y, logoImages.imageLogoWidth2, logoImages.imageLogoHeight2); - } -} - -function Report3AddFooter (invoice, account, doc, layout) -{ - - doc.setLineWidth(0.5); - - if (NINJA.primaryColor) { - setDocHexFill(doc, NINJA.primaryColor); - setDocHexDraw(doc, NINJA.primaryColor); - } else { - doc.setDrawColor(242,101,34); - doc.setFillColor(242,101,34); - } - - var x1 = 0;//tableLeft-tablePadding ; - var y1 = 750; - var w2 = 596; - var h2 = 94;//doc.internal.getFontSize()*length+length*1.1;//+h;//+tablePadding; - - doc.rect(x1, y1, w2, h2, 'FD'); - - if (!invoice.is_pro && logoImages.imageLogo3) - { - pageHeight=820; - // var left = 25;//250;//headerRight ; - y=pageHeight-logoImages.imageLogoHeight3; - //var headerRight=370; - - //var left = headerRight - invoice.imageLogoWidth3; - doc.addImage(logoImages.imageLogo3, 'JPEG', 40, y, logoImages.imageLogoWidth3, logoImages.imageLogoHeight3); - } - - doc.setFontSize(10); - var marginLeft = 340; - displayAccount(doc, invoice, marginLeft, 780, layout); -} - - - -function GetReportTemplate3(doc, invoice, layout, checkMath) -{ - var client = invoice.client; - var account = invoice.account; - var currencyId = client.currency_id; - - layout.headerRight = 400; - layout.rowHeight = 15; - - - doc.setFontSize(7); - - Report3AddHeader(invoice, layout, doc); - - if (invoice.image) - { - y=130; - var left = layout.headerRight - invoice.imageWidth; - doc.addImage(invoice.image, 'JPEG', layout.marginLeft, y); - } - - Report3AddFooter (invoice, account, doc, layout); - - - SetPdfColor('White',doc); - doc.setFontSize('8'); - var detailsHeight = displayInvoice(doc, invoice, layout.headerRight, layout.accountTop-10, layout); - layout.headerTop = Math.max(layout.headerTop, detailsHeight + 50); - layout.tableTop = Math.max(layout.tableTop, detailsHeight + 150); - - SetPdfColor('Black',doc); //set black color - doc.setFontSize(7); - doc.setFontType("normal"); - displayClient(doc, invoice, layout.headerRight, layout.headerTop, layout); - - - - SetPdfColor('White',doc); - doc.setFontType('bold'); - - doc.setLineWidth(0.3); - if (NINJA.secondaryColor) { - setDocHexFill(doc, NINJA.secondaryColor); - setDocHexDraw(doc, NINJA.secondaryColor); - } else { - doc.setDrawColor(63,60,60); - doc.setFillColor(63,60,60); - } - - var left = layout.marginLeft - layout.tablePadding; - var top = layout.tableTop - layout.tablePadding; - var width = layout.marginRight - (2 * layout.tablePadding); - var height = 20; - doc.rect(left, top, width, height, 'FD'); - - - displayInvoiceHeader(doc, invoice, layout); - SetPdfColor('Black',doc); - var y = displayInvoiceItems(doc, invoice, layout); - - - var height1 = displayNotesAndTerms(doc, layout, invoice, y); - var height2 = displaySubtotals(doc, layout, invoice, y, layout.unitCostRight); - y += Math.max(height1, height2); - - - var left = layout.marginLeft - layout.tablePadding; - var top = y - layout.tablePadding; - var width = layout.marginRight - (2 * layout.tablePadding); - var height = 20; - if (NINJA.secondaryColor) { - setDocHexFill(doc, NINJA.secondaryColor); - setDocHexDraw(doc, NINJA.secondaryColor); - } else { - doc.setDrawColor(63,60,60); - doc.setFillColor(63,60,60); - } - doc.rect(left, top, width, height, 'FD'); - - doc.setFontType('bold'); - SetPdfColor('White', doc); - doc.setFontSize(12); - - var label = invoice.is_quote ? invoiceLabels.total : invoiceLabels.balance_due; - var labelX = layout.unitCostRight-(doc.getStringUnitWidth(label) * doc.internal.getFontSize()); - doc.text(labelX, y+2, label); - - - doc.setFontType('normal'); - var amount = formatMoney(invoice.balance_amount , currencyId); - headerLeft=layout.headerRight+400; - var amountX = layout.lineTotalRight - (doc.getStringUnitWidth(amount) * doc.internal.getFontSize()); - doc.text(amountX, y+2, amount); - - return doc; -} - - - - -function Report3AddHeader (invoice, layout, doc) -{ - doc.setLineWidth(0.5); - - if (NINJA.primaryColor) { - setDocHexFill(doc, NINJA.primaryColor); - setDocHexDraw(doc, NINJA.primaryColor); - } else { - doc.setDrawColor(242,101,34); - doc.setFillColor(242,101,34); - } - - var x1 =0; - var y1 = 0; - var w2 = 595; - var h2 = Math.max(110, getInvoiceDetailsHeight(invoice, layout) + 30); - doc.rect(x1, y1, w2, h2, 'FD'); - - SetPdfColor('White',doc); - - //second column - doc.setFontType('bold'); - var MaxWidth=594; - var LineOne= invoice.account.name; - var AlignLine = MaxWidth-30- (doc.getStringUnitWidth(LineOne) * doc.internal.getFontSize()); - if (LineOne) { - doc.setFontSize('30'); - doc.setFontType('bold'); - doc.text(40, 50, LineOne); - } -} - - -function Report1AddNewPage(invoice,account,doc) -{ - doc.addPage(); - if (logoImages.imageLogo1) - { - pageHeight=820; - y=pageHeight-logoImages.imageLogoHeight1; - var left = 20;//headerRight - invoice.imageLogoWidth1; - doc.addImage(logoImages.imageLogo1, 'JPEG', left, y, logoImages.imageLogoWidth1, logoImages.imageLogoHeight1); - - } - - GlobalY = 40; - return GlobalY; -} function displayAccount(doc, invoice, x, y, layout) { var account = invoice.account; @@ -32207,7 +32127,7 @@ function displayAccount(doc, invoice, x, y, layout) { account.work_phone ]; - displayGrid(doc, invoice, data, x, y, layout, true); + displayGrid(doc, invoice, data, x, y, layout, {hasHeader:true}); data = [ concatStrings(account.address1, account.address2), @@ -32238,7 +32158,7 @@ function displayClient(doc, invoice, x, y, layout) { client.contacts[0].email ]; - return displayGrid(doc, invoice, data, x, y, layout, true); + return displayGrid(doc, invoice, data, x, y, layout, {hasheader:true}); } function displayInvoice(doc, invoice, x, y, layout, rightAlignX) { @@ -32247,7 +32167,12 @@ function displayInvoice(doc, invoice, x, y, layout, rightAlignX) { } var data = getInvoiceDetails(invoice); - return displayGrid(doc, invoice, data, x, y, layout, true, rightAlignX); + var options = { + hasheader: true, + rightAlignX: rightAlignX, + }; + + return displayGrid(doc, invoice, data, x, y, layout, options); } function getInvoiceDetails(invoice) { @@ -32316,7 +32241,13 @@ function displaySubtotals(doc, layout, invoice, y, rightAlignTitleX) data.push({'paid_to_date': formatMoney(paid, invoice.client.currency_id)}); } - return displayGrid(doc, invoice, data, 300, y, layout, true, 550, rightAlignTitleX) + 10; + var options = { + hasheader: true, + rightAlignX: 550, + rightAlignTitleX: rightAlignTitleX + }; + + return displayGrid(doc, invoice, data, 300, y, layout, options) + 10; } function concatStrings() { @@ -32339,7 +32270,8 @@ function concatStrings() { return data.length ? concatStr : false; } -function displayGrid(doc, invoice, data, x, y, layout, hasheader, rightAlignX, rightAlignTitleX) { +//function displayGrid(doc, invoice, data, x, y, layout, hasheader, rightAlignX, rightAlignTitleX) { +function displayGrid(doc, invoice, data, x, y, layout, options) { var numLines = 0; var origY = y; for (var i=0; i length) ? (str.substr(0, length-1) + '...') : str; +} diff --git a/public/images/gateways/logo_AuthorizeNet_AIM.png b/public/images/gateways/logo_AuthorizeNet_AIM.png index 7aa524e38e1c..aeea9fba0f8e 100755 Binary files a/public/images/gateways/logo_AuthorizeNet_AIM.png and b/public/images/gateways/logo_AuthorizeNet_AIM.png differ diff --git a/public/js/script.js b/public/js/script.js index de6e28b364f6..8a956e3b74d5 100644 --- a/public/js/script.js +++ b/public/js/script.js @@ -6,7 +6,543 @@ var isChrome = !!window.chrome && !isOpera; // Chrome 1+ var isChromium = isChrome && navigator.userAgent.indexOf('Chromium') >= 0; var isIE = /*@cc_on!@*/false || !!document.documentMode; // At least IE6 -function GetReportTemplate4(doc, invoice, layout, checkMath) { + +var invoiceOld; +function generatePDF(invoice, force) { + invoice = calculateAmounts(invoice); + var a = copyInvoice(invoice); + var b = copyInvoice(invoiceOld); + if (!force && _.isEqual(a, b)) { + return; + } + invoiceOld = invoice; + report_id = invoice.invoice_design_id; + doc = GetPdf(invoice, report_id); + return doc; +} + +function copyInvoice(orig) { + if (!orig) return false; + var copy = JSON.stringify(orig); + var copy = JSON.parse(copy); + return copy; +} + + + +function GetPdf(invoice, report_id){ + var layout = { + accountTop: 40, + marginLeft: 50, + marginRight: 550, + headerTop: 150, + headerLeft: 360, + headerRight: 550, + rowHeight: 15, + tableRowHeight: 10, + footerLeft: 420, + tablePadding: 12, + tableTop: 250, + descriptionLeft: 162, + unitCostRight: 410, + qtyRight: 480, + taxRight: 480, + lineTotalRight: 550 + }; + + if (invoice.has_taxes) + { + layout.descriptionLeft -= 20; + layout.unitCostRight -= 40; + layout.qtyRight -= 40; + } + + /* + @param orientation One of "portrait" or "landscape" (or shortcuts "p" (Default), "l") + @param unit Measurement unit to be used when coordinates are specified. One of "pt" (points), "mm" (Default), "cm", "in" + @param format One of 'a3', 'a4' (Default),'a5' ,'letter' ,'legal' + @returns {jsPDF} + */ + var doc = new jsPDF('portrait', 'pt', 'a4'); + + + //Set PDF properities + doc.setProperties({ + title: 'Invoice ' + invoice.invoice_number, + subject: '', + author: 'InvoiceNinja.com', + keywords: 'pdf, invoice', + creator: 'InvoiceNinja.com' + }); + + //set default style for report + doc.setFont('Helvetica',''); + + if (report_id==1) { + return GetReportTemplate1(doc, invoice, layout); + } else if (report_id==2) { + return GetReportTemplate2(doc, invoice, layout); + } else if (report_id==3) { + return GetReportTemplate3(doc, invoice, layout); + } else { + return GetReportTemplate4(doc, invoice, layout); + } +} + +function GetReportTemplate1(doc, invoice, layout) +{ + var GlobalY=0;//Y position of line at current page + + var client = invoice.client; + var account = invoice.account; + var currencyId = client.currency_id; + + layout.headerRight = 550; + layout.rowHeight = 15; + + doc.setFontSize(9); + + if (invoice.image) + { + var left = layout.headerRight - invoice.imageWidth; + doc.addImage(invoice.image, 'JPEG', layout.marginLeft, 30); + } + + if (!invoice.is_pro && logoImages.imageLogo1) + { + pageHeight=820; + y=pageHeight-logoImages.imageLogoHeight1; + doc.addImage(logoImages.imageLogo1, 'JPEG', layout.marginLeft, y, logoImages.imageLogoWidth1, logoImages.imageLogoHeight1); + } + + doc.setFontSize(9); + SetPdfColor('LightBlue', doc, 'primary'); + displayAccount(doc, invoice, 220, layout.accountTop, layout); + + SetPdfColor('LightBlue', doc, 'primary'); + doc.setFontSize('11'); + doc.text(50, layout.headerTop, (invoice.is_quote ? invoiceLabels.quote : invoiceLabels.invoice).toUpperCase()); + + + SetPdfColor('Black',doc); //set black color + doc.setFontSize(9); + + var invoiceHeight = displayInvoice(doc, invoice, 50, 170, layout); + var clientHeight = displayClient(doc, invoice, 220, 170, layout); + var detailsHeight = Math.max(invoiceHeight, clientHeight); + layout.tableTop = Math.max(layout.tableTop, layout.headerTop + detailsHeight + (3 * layout.rowHeight)); + + + + doc.setLineWidth(0.3); + doc.setDrawColor(200,200,200); + doc.line(layout.marginLeft - layout.tablePadding, layout.headerTop + 6, layout.marginRight + layout.tablePadding, layout.headerTop + 6); + doc.line(layout.marginLeft - layout.tablePadding, layout.headerTop + detailsHeight + 14, layout.marginRight + layout.tablePadding, layout.headerTop + detailsHeight + 14); + + + doc.setFontSize(10); + doc.setFontType("bold"); + displayInvoiceHeader(doc, invoice, layout); + var y = displayInvoiceItems(doc, invoice, layout); + + doc.setFontSize(9); + doc.setFontType("bold"); + + GlobalY=GlobalY+25; + + + doc.setLineWidth(0.3); + doc.setDrawColor(241,241,241); + doc.setFillColor(241,241,241); + var x1 = layout.marginLeft - 12; + var y1 = GlobalY-layout.tablePadding; + + var w2 = 510 + 24; + var h2 = doc.internal.getFontSize()*3+layout.tablePadding*2; + + if (invoice.discount) { + h2 += doc.internal.getFontSize()*2; + } + if (invoice.tax_amount) { + h2 += doc.internal.getFontSize()*2; + } + + //doc.rect(x1, y1, w2, h2, 'FD'); + + doc.setFontSize(9); + displayNotesAndTerms(doc, layout, invoice, y); + y += displaySubtotals(doc, layout, invoice, y, layout.unitCostRight); + + + doc.setFontSize(10); + Msg = invoice.is_quote ? invoiceLabels.total : invoiceLabels.balance_due; + var TmpMsgX = layout.unitCostRight-(doc.getStringUnitWidth(Msg) * doc.internal.getFontSize()); + + doc.text(TmpMsgX, y, Msg); + + SetPdfColor('LightBlue', doc, 'primary'); + AmountText = formatMoney(invoice.balance_amount, currencyId); + headerLeft=layout.headerRight+400; + var AmountX = layout.lineTotalRight - (doc.getStringUnitWidth(AmountText) * doc.internal.getFontSize()); + doc.text(AmountX, y, AmountText); + + return doc; +} + + + + +function GetReportTemplate2(doc, invoice, layout) +{ + var GlobalY=0;//Y position of line at current page + + var client = invoice.client; + var account = invoice.account; + var currencyId = client.currency_id; + + layout.headerRight = 150; + layout.rowHeight = 15; + layout.headerTop = 125; + layout.tableTop = 300; + + doc.setLineWidth(0.5); + + if (NINJA.primaryColor) { + setDocHexFill(doc, NINJA.primaryColor); + setDocHexDraw(doc, NINJA.primaryColor); + } else { + doc.setFillColor(46,43,43); + } + + var x1 =0; + var y1 = 0; + var w2 = 595; + var h2 = 100; + doc.rect(x1, y1, w2, h2, 'FD'); + + + if (invoice.image) + { + var left = layout.headerRight - invoice.imageWidth; + doc.addImage(invoice.image, 'JPEG', layout.marginLeft, 30); + } + + Report2AddFooter(invoice,doc); + + doc.setFontSize(7); + doc.setFontType("bold"); + SetPdfColor('White',doc); + + displayAccount(doc, invoice, 300, layout.accountTop, layout); + + + var y = layout.accountTop; + var left = layout.marginLeft; + var headerY = layout.headerTop; + + SetPdfColor('GrayLogo',doc); //set black color + doc.setFontSize(7); + + //show left column + SetPdfColor('Black',doc); //set black color + doc.setFontType("normal"); + + //publish filled box + doc.setDrawColor(200,200,200); + + if (NINJA.secondaryColor) { + setDocHexFill(doc, NINJA.secondaryColor); + } else { + doc.setFillColor(54,164,152); + } + + GlobalY=190; + doc.setLineWidth(0.5); + + var BlockLenght=220; + var x1 =595-BlockLenght; + var y1 = GlobalY-12; + var w2 = BlockLenght; + var h2 = getInvoiceDetailsHeight(invoice, layout) + layout.tablePadding + 2; + + doc.rect(x1, y1, w2, h2, 'FD'); + + SetPdfColor('SomeGreen', doc, 'secondary'); + doc.setFontSize('14'); + doc.setFontType("bold"); + doc.text(50, GlobalY, (invoice.is_quote ? invoiceLabels.your_quote : invoiceLabels.your_invoice).toUpperCase()); + + + var z=GlobalY; + z=z+30; + + doc.setFontSize('8'); + SetPdfColor('Black',doc); + displayClient(doc, invoice, layout.marginLeft, z, layout); + + marginLeft2=395; + + //publish left side information + SetPdfColor('White',doc); + doc.setFontSize('8'); + var detailsHeight = displayInvoice(doc, invoice, marginLeft2, z-25, layout) + 75; + layout.tableTop = Math.max(layout.tableTop, layout.headerTop + detailsHeight + (2 * layout.tablePadding)); + + y=z+60; + x = GlobalY + 100; + doc.setFontType("bold"); + + doc.setFontSize(12); + doc.setFontType("bold"); + SetPdfColor('Black',doc); + displayInvoiceHeader(doc, invoice, layout); + + var y = displayInvoiceItems(doc, invoice, layout); + doc.setLineWidth(0.3); + displayNotesAndTerms(doc, layout, invoice, y); + y += displaySubtotals(doc, layout, invoice, y, layout.unitCostRight); + + doc.setFontType("bold"); + + doc.setFontSize(12); + x += doc.internal.getFontSize()*4; + Msg = invoice.is_quote ? invoiceLabels.total : invoiceLabels.balance_due; + var TmpMsgX = layout.unitCostRight-(doc.getStringUnitWidth(Msg) * doc.internal.getFontSize()); + + doc.text(TmpMsgX, y, Msg); + + //SetPdfColor('LightBlue',doc); + AmountText = formatMoney(invoice.balance_amount , currencyId); + headerLeft=layout.headerRight+400; + var AmountX = headerLeft - (doc.getStringUnitWidth(AmountText) * doc.internal.getFontSize()); + SetPdfColor('SomeGreen', doc, 'secondary'); + doc.text(AmountX, y, AmountText); + + return doc; +} + + +function Report2AddFooter (invoice,doc) +{ + doc.setLineWidth(0.5); + if (NINJA.primaryColor) { + setDocHexFill(doc, NINJA.primaryColor); + setDocHexDraw(doc, NINJA.primaryColor); + } else { + doc.setFillColor(46,43,43); + doc.setDrawColor(46,43,43); + } + + // return doc.setTextColor(240,240,240);//select color Custom Report GRAY Colour + var x1 = 0;//tableLeft-tablePadding ; + var y1 = 750; + var w2 = 596; + var h2 = 94;//doc.internal.getFontSize()*length+length*1.1;//+h;//+tablePadding; + + + doc.rect(x1, y1, w2, h2, 'FD'); + + if (!invoice.is_pro && logoImages.imageLogo2) + { + pageHeight=820; + var left = 250;//headerRight ; + y=pageHeight-logoImages.imageLogoHeight2; + var headerRight=370; + + var left = headerRight - logoImages.imageLogoWidth2; + doc.addImage(logoImages.imageLogo2, 'JPEG', left, y, logoImages.imageLogoWidth2, logoImages.imageLogoHeight2); + } +} + +function Report3AddFooter (invoice, account, doc, layout) +{ + + doc.setLineWidth(0.5); + + if (NINJA.primaryColor) { + setDocHexFill(doc, NINJA.primaryColor); + setDocHexDraw(doc, NINJA.primaryColor); + } else { + doc.setDrawColor(242,101,34); + doc.setFillColor(242,101,34); + } + + var x1 = 0;//tableLeft-tablePadding ; + var y1 = 750; + var w2 = 596; + var h2 = 94;//doc.internal.getFontSize()*length+length*1.1;//+h;//+tablePadding; + + doc.rect(x1, y1, w2, h2, 'FD'); + + if (!invoice.is_pro && logoImages.imageLogo3) + { + pageHeight=820; + // var left = 25;//250;//headerRight ; + y=pageHeight-logoImages.imageLogoHeight3; + //var headerRight=370; + + //var left = headerRight - invoice.imageLogoWidth3; + doc.addImage(logoImages.imageLogo3, 'JPEG', 40, y, logoImages.imageLogoWidth3, logoImages.imageLogoHeight3); + } + + doc.setFontSize(10); + var marginLeft = 340; + displayAccount(doc, invoice, marginLeft, 780, layout); +} + + + +function GetReportTemplate3(doc, invoice, layout) +{ + var client = invoice.client; + var account = invoice.account; + var currencyId = client.currency_id; + + layout.headerRight = 400; + layout.rowHeight = 15; + + + doc.setFontSize(7); + + Report3AddHeader(invoice, layout, doc); + + if (invoice.image) + { + y=130; + var left = layout.headerRight - invoice.imageWidth; + doc.addImage(invoice.image, 'JPEG', layout.marginLeft, y); + } + + Report3AddFooter (invoice, account, doc, layout); + + + SetPdfColor('White',doc); + doc.setFontSize('8'); + var detailsHeight = displayInvoice(doc, invoice, layout.headerRight, layout.accountTop-10, layout); + layout.headerTop = Math.max(layout.headerTop, detailsHeight + 50); + layout.tableTop = Math.max(layout.tableTop, detailsHeight + 150); + + SetPdfColor('Black',doc); //set black color + doc.setFontSize(7); + doc.setFontType("normal"); + displayClient(doc, invoice, layout.headerRight, layout.headerTop, layout); + + + + SetPdfColor('White',doc); + doc.setFontType('bold'); + + doc.setLineWidth(0.3); + if (NINJA.secondaryColor) { + setDocHexFill(doc, NINJA.secondaryColor); + setDocHexDraw(doc, NINJA.secondaryColor); + } else { + doc.setDrawColor(63,60,60); + doc.setFillColor(63,60,60); + } + + var left = layout.marginLeft - layout.tablePadding; + var top = layout.tableTop - layout.tablePadding; + var width = layout.marginRight - (2 * layout.tablePadding); + var height = 20; + doc.rect(left, top, width, height, 'FD'); + + + displayInvoiceHeader(doc, invoice, layout); + SetPdfColor('Black',doc); + var y = displayInvoiceItems(doc, invoice, layout); + + + var height1 = displayNotesAndTerms(doc, layout, invoice, y); + var height2 = displaySubtotals(doc, layout, invoice, y, layout.unitCostRight); + y += Math.max(height1, height2); + + + var left = layout.marginLeft - layout.tablePadding; + var top = y - layout.tablePadding; + var width = layout.marginRight - (2 * layout.tablePadding); + var height = 20; + if (NINJA.secondaryColor) { + setDocHexFill(doc, NINJA.secondaryColor); + setDocHexDraw(doc, NINJA.secondaryColor); + } else { + doc.setDrawColor(63,60,60); + doc.setFillColor(63,60,60); + } + doc.rect(left, top, width, height, 'FD'); + + doc.setFontType('bold'); + SetPdfColor('White', doc); + doc.setFontSize(12); + + var label = invoice.is_quote ? invoiceLabels.total : invoiceLabels.balance_due; + var labelX = layout.unitCostRight-(doc.getStringUnitWidth(label) * doc.internal.getFontSize()); + doc.text(labelX, y+2, label); + + + doc.setFontType('normal'); + var amount = formatMoney(invoice.balance_amount , currencyId); + headerLeft=layout.headerRight+400; + var amountX = layout.lineTotalRight - (doc.getStringUnitWidth(amount) * doc.internal.getFontSize()); + doc.text(amountX, y+2, amount); + + return doc; +} + + + + +function Report3AddHeader (invoice, layout, doc) +{ + doc.setLineWidth(0.5); + + if (NINJA.primaryColor) { + setDocHexFill(doc, NINJA.primaryColor); + setDocHexDraw(doc, NINJA.primaryColor); + } else { + doc.setDrawColor(242,101,34); + doc.setFillColor(242,101,34); + } + + var x1 =0; + var y1 = 0; + var w2 = 595; + var h2 = Math.max(110, getInvoiceDetailsHeight(invoice, layout) + 30); + doc.rect(x1, y1, w2, h2, 'FD'); + + SetPdfColor('White',doc); + + //second column + doc.setFontType('bold'); + var name = invoice.account.name; + if (name) { + doc.setFontSize('30'); + doc.setFontType('bold'); + doc.text(40, 50, name); + } +} + + +function Report1AddNewPage(invoice,account,doc) +{ + doc.addPage(); + if (logoImages.imageLogo1) + { + pageHeight=820; + y=pageHeight-logoImages.imageLogoHeight1; + var left = 20;//headerRight - invoice.imageLogoWidth1; + doc.addImage(logoImages.imageLogo1, 'JPEG', left, y, logoImages.imageLogoWidth1, logoImages.imageLogoHeight1); + + } + + GlobalY = 40; + return GlobalY; +} + + + + +function GetReportTemplate4(doc, invoice, layout) { var client = invoice.client; var account = invoice.account; @@ -54,29 +590,10 @@ function GetReportTemplate4(doc, invoice, layout, checkMath) { doc.setFontSize(10); - /* table footer */ - /* - doc.setDrawColor(200,200,200); - doc.setLineWidth(1); - doc.line(layout.marginLeft - layout.tablePadding, x, layout.lineTotalRight+layout.tablePadding, x); - */ - displayNotesAndTerms(doc, layout, invoice, y+20); y += displaySubtotals(doc, layout, invoice, y+20, 480) + 20; - /* - if (checkMath && NINJA.parseFloat(total).toFixed(4) != NINJA.parseFloat(invoice.amount).toFixed(4)) - { - var doc = new jsPDF('p', 'pt'); - doc.setFont('Helvetica',''); - doc.setFontSize(10); - doc.text(100, 100, "An error occurred, please try again later."); - onerror('Failed to generate PDF ' + total + ', ' + invoice.amount ); - return doc; - } - */ - doc.setDrawColor(200,200,200); doc.setFillColor(230,230,230); @@ -102,26 +619,51 @@ function GetReportTemplate4(doc, invoice, layout, checkMath) { } -var invoiceOld; -function generatePDF(invoice, force) { - invoice = calculateAmounts(invoice); - var a = copyInvoice(invoice); - var b = copyInvoice(invoiceOld); - if (!force && _.isEqual(a, b)) { - return; +function SetPdfColor(color, doc, role) +{ + if (role === 'primary' && NINJA.primaryColor) { + return setDocHexColor(doc, NINJA.primaryColor); + } else if (role === 'secondary' && NINJA.secondaryColor) { + return setDocHexColor(doc, NINJA.secondaryColor); } - invoiceOld = invoice; - report_id = invoice.invoice_design_id; - doc = GetPdf(invoice, false, report_id); - return doc; + + if (color=='LightBlue') { + return doc.setTextColor(41,156, 194); + } + + if (color=='Black') { + return doc.setTextColor(46,43,43);//select color black + } + if (color=='GrayLogo') { + return doc.setTextColor(207,241, 241);//select color Custom Report GRAY + } + + if (color=='GrayBackground') { + return doc.setTextColor(251,251, 251);//select color Custom Report GRAY + } + + if (color=='GrayText') { + return doc.setTextColor(161,160,160);//select color Custom Report GRAY Colour + } + + if (color=='White') { + return doc.setTextColor(255,255,255);//select color Custom Report GRAY Colour + } + + if (color=='SomeGreen') { + return doc.setTextColor(54,164,152);//select color Custom Report GRAY Colour + } + + if (color=='LightGrayReport2-gray') { + return doc.setTextColor(240,240,240);//select color Custom Report GRAY Colour + } + + if (color=='LightGrayReport2-white') { + return doc.setTextColor(251,251,251);//select color Custom Report GRAY Colour + } + } -function copyInvoice(orig) { - if (!orig) return false; - var copy = JSON.stringify(orig); - var copy = JSON.parse(copy); - return copy; -} /* Handle converting variables in the invoices (ie, MONTH+1) */ function processVariables(str) { @@ -574,7 +1116,7 @@ function populateInvoiceComboboxes(clientId, invoiceId) { var client = clientMap[invoice.client.public_id]; setComboboxValue($('.client-select'), client.public_id, getClientDisplayName(client)); if (!parseFloat($('#amount').val())) { - $('#amount').val(formatMoney(invoice.balance, invoice.currency_id, true)); + $('#amount').val(parseFloat(invoice.balance).toFixed(2)); } } }); @@ -610,629 +1152,7 @@ $.fn.datepicker.defaults.todayHighlight = true; -//==================================================================================================================== -function GetPdf(invoice,checkMath,report_id){ - var layout = { - accountTop: 40, - marginLeft: 50, - marginRight: 550, - headerTop: 150, - headerLeft: 360, - headerRight: 550, - rowHeight: 15, - tableRowHeight: 10, - footerLeft: 420, - tablePadding: 12, - tableTop: 250, - descriptionLeft: 162, - unitCostRight: 410, - qtyRight: 480, - taxRight: 480, - lineTotalRight: 550 - }; - - if (invoice.has_taxes) - { - layout.descriptionLeft -= 20; - layout.unitCostRight -= 40; - layout.qtyRight -= 40; - } - - /* - @param orientation One of "portrait" or "landscape" (or shortcuts "p" (Default), "l") - @param unit Measurement unit to be used when coordinates are specified. One of "pt" (points), "mm" (Default), "cm", "in" - @param format One of 'a3', 'a4' (Default),'a5' ,'letter' ,'legal' - @returns {jsPDF} - */ - var doc = new jsPDF('portrait', 'pt', 'a4'); - - - //Set PDF properities - doc.setProperties({ - title: 'Invoice ' + invoice.invoice_number, - subject: '', - author: 'InvoiceNinja.com', - keywords: 'pdf, invoice', - creator: 'InvoiceNinja.com' - }); - - //set default style for report - doc.setFont('Helvetica',''); - - if (report_id==1) { - return GetReportTemplate1(doc, invoice, layout, checkMath); - } else if (report_id==2) { - return GetReportTemplate2(doc, invoice, layout, checkMath); - } else if (report_id==3) { - return GetReportTemplate3(doc, invoice, layout, checkMath); - } else { - return GetReportTemplate4(doc, invoice, layout, checkMath); - } -} - -function GetReportTemplate1(doc, invoice, layout, checkMath) -{ - var GlobalY=0;//Y position of line at current page - - var client = invoice.client; - var account = invoice.account; - var currencyId = client.currency_id; - - layout.headerRight = 550; - layout.rowHeight = 15; - - doc.setFontSize(9); - - if (invoice.image) - { - var left = layout.headerRight - invoice.imageWidth; - doc.addImage(invoice.image, 'JPEG', layout.marginLeft, 30); - } - - if (!invoice.is_pro && logoImages.imageLogo1) - { - pageHeight=820; - y=pageHeight-logoImages.imageLogoHeight1; - doc.addImage(logoImages.imageLogo1, 'JPEG', layout.marginLeft, y, logoImages.imageLogoWidth1, logoImages.imageLogoHeight1); - } - - doc.setFontSize(9); - SetPdfColor('LightBlue', doc, 'primary'); - displayAccount(doc, invoice, 220, layout.accountTop, layout); - - SetPdfColor('LightBlue', doc, 'primary'); - doc.setFontSize('11'); - doc.text(50, layout.headerTop, (invoice.is_quote ? invoiceLabels.quote : invoiceLabels.invoice).toUpperCase()); - - //doc.setDrawColor(220,220,220); - //doc.line(30, y, 560, y); // horizontal line - - - SetPdfColor('Black',doc); //set black color - doc.setFontSize(9); - - var invoiceHeight = displayInvoice(doc, invoice, 50, 170, layout); - var clientHeight = displayClient(doc, invoice, 220, 170, layout); - var detailsHeight = Math.max(invoiceHeight, clientHeight); - layout.tableTop = Math.max(layout.tableTop, layout.headerTop + detailsHeight + (3 * layout.rowHeight)); - - - - doc.setLineWidth(0.3); - doc.setDrawColor(200,200,200); - doc.line(layout.marginLeft - layout.tablePadding, layout.headerTop + 6, layout.marginRight + layout.tablePadding, layout.headerTop + 6); - doc.line(layout.marginLeft - layout.tablePadding, layout.headerTop + detailsHeight + 14, layout.marginRight + layout.tablePadding, layout.headerTop + detailsHeight + 14); - - - //doc.setDrawColor(220,220,220); - //doc.line(30, y-8, 560, y-8); // horizontal line - - - doc.setFontSize(10); - doc.setFontType("bold"); - displayInvoiceHeader(doc, invoice, layout); - var y = displayInvoiceItems(doc, invoice, layout); - - //doc.setFontType("normal"); - doc.setFontSize(9); - - doc.setFontType("bold"); - - GlobalY=GlobalY+25; - - - doc.setLineWidth(0.3); - doc.setDrawColor(241,241,241); - doc.setFillColor(241,241,241); - var x1 = layout.marginLeft - 12; - var y1 = GlobalY-layout.tablePadding; - - var w2 = 510 + 24; - var h2 = doc.internal.getFontSize()*3+layout.tablePadding*2; - - if (invoice.discount) { - h2 += doc.internal.getFontSize()*2; - } - if (invoice.tax_amount) { - h2 += doc.internal.getFontSize()*2; - } - - //doc.rect(x1, y1, w2, h2, 'FD'); - - doc.setFontSize(9); - displayNotesAndTerms(doc, layout, invoice, y); - y += displaySubtotals(doc, layout, invoice, y, layout.unitCostRight); - - - doc.setFontSize(10); - Msg = invoice.is_quote ? invoiceLabels.total : invoiceLabels.balance_due; - var TmpMsgX = layout.unitCostRight-(doc.getStringUnitWidth(Msg) * doc.internal.getFontSize()); - - doc.text(TmpMsgX, y, Msg); - - SetPdfColor('LightBlue', doc, 'primary'); - AmountText = formatMoney(invoice.balance_amount, currencyId); - headerLeft=layout.headerRight+400; - var AmountX = layout.lineTotalRight - (doc.getStringUnitWidth(AmountText) * doc.internal.getFontSize()); - doc.text(AmountX, y, AmountText); - - return doc; -} - - - - -function GetReportTemplate2(doc, invoice, layout, checkMath) -{ - var GlobalY=0;//Y position of line at current page - - var client = invoice.client; - var account = invoice.account; - var currencyId = client.currency_id; - - layout.headerRight = 150; - layout.rowHeight = 15; - layout.headerTop = 125; - layout.tableTop = 300; - - doc.setLineWidth(0.5); - - if (NINJA.primaryColor) { - setDocHexFill(doc, NINJA.primaryColor); - setDocHexDraw(doc, NINJA.primaryColor); - } else { - doc.setFillColor(46,43,43); - } - - var x1 =0; - var y1 = 0; - var w2 = 595; - var h2 = 100; - doc.rect(x1, y1, w2, h2, 'FD'); - - - if (invoice.image) - { - var left = layout.headerRight - invoice.imageWidth; - doc.addImage(invoice.image, 'JPEG', layout.marginLeft, 30); - } - - Report2AddFooter (invoice,doc); - - - doc.setFontSize(7); - doc.setFontType("bold"); - SetPdfColor('White',doc); - - displayAccount(doc, invoice, 300, layout.accountTop, layout); - - /* - var spacer = ' '; - var line1 = account.name + spacer + account.work_email + spacer + account.work_phone; - var lineWidth = doc.getStringUnitWidth(line1) * doc.internal.getFontSize(); - var nameWidth = doc.getStringUnitWidth(account.name + spacer) * doc.internal.getFontSize(); - var nameX = lineTotalRight - lineWidth; - var detailsX = lineTotalRight - (lineWidth - nameWidth); - - doc.text(nameX, accountTop, account.name); - doc.setFontType("normal"); - doc.text(detailsX, accountTop, account.work_email + spacer + account.work_phone); - - var line2 = concatStrings(account.address1, account.address2) + spacer + concatStrings(account.city, account.state, account.postal_code); - var lineWidth = doc.getStringUnitWidth(line2) * doc.internal.getFontSize(); - var line2X = lineTotalRight - lineWidth; - - doc.text(line2X, accountTop + 16, line2); - */ - -//-----------------------------Publish Client Details block-------------------------------------------- - - var y = layout.accountTop; - var left = layout.marginLeft; - - var headerY = layout.headerTop; - - - - SetPdfColor('GrayLogo',doc); //set black color - - - doc.setFontSize(7); - - //show left column - SetPdfColor('Black',doc); //set black color - doc.setFontType("normal"); - - - //publish filled box - doc.setDrawColor(200,200,200); - - if (NINJA.secondaryColor) { - setDocHexFill(doc, NINJA.secondaryColor); - } else { - doc.setFillColor(54,164,152); - } - - GlobalY=190; - doc.setLineWidth(0.5); - - var BlockLenght=220; - var x1 =595-BlockLenght; - var y1 = GlobalY-12; - var w2 = BlockLenght; - var h2 = getInvoiceDetailsHeight(invoice, layout) + layout.tablePadding + 2; - - doc.rect(x1, y1, w2, h2, 'FD'); - - - SetPdfColor('SomeGreen', doc, 'secondary'); - doc.setFontSize('14'); - doc.setFontType("bold"); - doc.text(50, GlobalY, (invoice.is_quote ? invoiceLabels.your_quote : invoiceLabels.your_invoice).toUpperCase()); - - - var z=GlobalY; - z=z+30; - - - doc.setFontSize('8'); - SetPdfColor('Black',doc); - displayClient(doc, invoice, layout.marginLeft, z, layout); - - - marginLeft2=395; - - //publish left side information - - SetPdfColor('White',doc); - doc.setFontSize('8'); - var detailsHeight = displayInvoice(doc, invoice, marginLeft2, z-25, layout) + 75; - layout.tableTop = Math.max(layout.tableTop, layout.headerTop + detailsHeight + (2 * layout.tablePadding)); - - y=z+60; - - - x = GlobalY + 100; - - doc.setFontType("bold"); - - - - doc.setFontSize(12); - doc.setFontType("bold"); - SetPdfColor('Black',doc); - displayInvoiceHeader(doc, invoice, layout); - var y = displayInvoiceItems(doc, invoice, layout); - - //GlobalY=600; - - doc.setLineWidth(0.3); - - /* - doc.setDrawColor(251,251,251); - doc.setFillColor(251,251,251); - var x1 = layout.marginLeft-layout.tablePadding*2 +14; - var y1 = GlobalY-layout.tablePadding; - var w2 = 510+layout.tablePadding*2;//lineTotalRight-tablePadding*5; - var h2 = doc.internal.getFontSize()*3+layout.tablePadding*2; - doc.rect(x1, y1, w2, h2, 'FD'); - */ - - displayNotesAndTerms(doc, layout, invoice, y); - y += displaySubtotals(doc, layout, invoice, y, layout.unitCostRight); - - doc.setFontType("bold"); - - doc.setFontSize(12); - x += doc.internal.getFontSize()*4; - Msg = invoice.is_quote ? invoiceLabels.total : invoiceLabels.balance_due; - var TmpMsgX = layout.unitCostRight-(doc.getStringUnitWidth(Msg) * doc.internal.getFontSize()); - - - - doc.text(TmpMsgX, y, Msg); - - - //SetPdfColor('LightBlue',doc); - AmountText = formatMoney(invoice.balance_amount , currencyId); - headerLeft=layout.headerRight+400; - var AmountX = headerLeft - (doc.getStringUnitWidth(AmountText) * doc.internal.getFontSize()); - SetPdfColor('SomeGreen', doc, 'secondary'); - doc.text(AmountX, y, AmountText); - - return doc; -} - - - - - - - -function SetPdfColor(color, doc, role) -{ - if (role === 'primary' && NINJA.primaryColor) { - return setDocHexColor(doc, NINJA.primaryColor); - } else if (role === 'secondary' && NINJA.secondaryColor) { - return setDocHexColor(doc, NINJA.secondaryColor); - } - - if (color=='LightBlue') { - return doc.setTextColor(41,156, 194); - } - - if (color=='Black') { - return doc.setTextColor(46,43,43);//select color black - } - if (color=='GrayLogo') { - return doc.setTextColor(207,241, 241);//select color Custom Report GRAY - } - - if (color=='GrayBackground') { - return doc.setTextColor(251,251, 251);//select color Custom Report GRAY - } - - if (color=='GrayText') { - return doc.setTextColor(161,160,160);//select color Custom Report GRAY Colour - } - - if (color=='White') { - return doc.setTextColor(255,255,255);//select color Custom Report GRAY Colour - } - - if (color=='SomeGreen') { - return doc.setTextColor(54,164,152);//select color Custom Report GRAY Colour - } - - if (color=='LightGrayReport2-gray') { - return doc.setTextColor(240,240,240);//select color Custom Report GRAY Colour - } - - if (color=='LightGrayReport2-white') { - return doc.setTextColor(251,251,251);//select color Custom Report GRAY Colour - } - -} - -function Report2AddFooter (invoice,doc) -{ - doc.setLineWidth(0.5); - if (NINJA.primaryColor) { - setDocHexFill(doc, NINJA.primaryColor); - setDocHexDraw(doc, NINJA.primaryColor); - } else { - doc.setFillColor(46,43,43); - doc.setDrawColor(46,43,43); - } - - // return doc.setTextColor(240,240,240);//select color Custom Report GRAY Colour - var x1 = 0;//tableLeft-tablePadding ; - var y1 = 750; - var w2 = 596; - var h2 = 94;//doc.internal.getFontSize()*length+length*1.1;//+h;//+tablePadding; - - - doc.rect(x1, y1, w2, h2, 'FD'); - - if (!invoice.is_pro && logoImages.imageLogo2) - { - pageHeight=820; - var left = 250;//headerRight ; - y=pageHeight-logoImages.imageLogoHeight2; - var headerRight=370; - - var left = headerRight - logoImages.imageLogoWidth2; - doc.addImage(logoImages.imageLogo2, 'JPEG', left, y, logoImages.imageLogoWidth2, logoImages.imageLogoHeight2); - } -} - -function Report3AddFooter (invoice, account, doc, layout) -{ - - doc.setLineWidth(0.5); - - if (NINJA.primaryColor) { - setDocHexFill(doc, NINJA.primaryColor); - setDocHexDraw(doc, NINJA.primaryColor); - } else { - doc.setDrawColor(242,101,34); - doc.setFillColor(242,101,34); - } - - var x1 = 0;//tableLeft-tablePadding ; - var y1 = 750; - var w2 = 596; - var h2 = 94;//doc.internal.getFontSize()*length+length*1.1;//+h;//+tablePadding; - - doc.rect(x1, y1, w2, h2, 'FD'); - - if (!invoice.is_pro && logoImages.imageLogo3) - { - pageHeight=820; - // var left = 25;//250;//headerRight ; - y=pageHeight-logoImages.imageLogoHeight3; - //var headerRight=370; - - //var left = headerRight - invoice.imageLogoWidth3; - doc.addImage(logoImages.imageLogo3, 'JPEG', 40, y, logoImages.imageLogoWidth3, logoImages.imageLogoHeight3); - } - - doc.setFontSize(10); - var marginLeft = 340; - displayAccount(doc, invoice, marginLeft, 780, layout); -} - - - -function GetReportTemplate3(doc, invoice, layout, checkMath) -{ - var client = invoice.client; - var account = invoice.account; - var currencyId = client.currency_id; - - layout.headerRight = 400; - layout.rowHeight = 15; - - - doc.setFontSize(7); - - Report3AddHeader(invoice, layout, doc); - - if (invoice.image) - { - y=130; - var left = layout.headerRight - invoice.imageWidth; - doc.addImage(invoice.image, 'JPEG', layout.marginLeft, y); - } - - Report3AddFooter (invoice, account, doc, layout); - - - SetPdfColor('White',doc); - doc.setFontSize('8'); - var detailsHeight = displayInvoice(doc, invoice, layout.headerRight, layout.accountTop-10, layout); - layout.headerTop = Math.max(layout.headerTop, detailsHeight + 50); - layout.tableTop = Math.max(layout.tableTop, detailsHeight + 150); - - SetPdfColor('Black',doc); //set black color - doc.setFontSize(7); - doc.setFontType("normal"); - displayClient(doc, invoice, layout.headerRight, layout.headerTop, layout); - - - - SetPdfColor('White',doc); - doc.setFontType('bold'); - - doc.setLineWidth(0.3); - if (NINJA.secondaryColor) { - setDocHexFill(doc, NINJA.secondaryColor); - setDocHexDraw(doc, NINJA.secondaryColor); - } else { - doc.setDrawColor(63,60,60); - doc.setFillColor(63,60,60); - } - - var left = layout.marginLeft - layout.tablePadding; - var top = layout.tableTop - layout.tablePadding; - var width = layout.marginRight - (2 * layout.tablePadding); - var height = 20; - doc.rect(left, top, width, height, 'FD'); - - - displayInvoiceHeader(doc, invoice, layout); - SetPdfColor('Black',doc); - var y = displayInvoiceItems(doc, invoice, layout); - - - var height1 = displayNotesAndTerms(doc, layout, invoice, y); - var height2 = displaySubtotals(doc, layout, invoice, y, layout.unitCostRight); - y += Math.max(height1, height2); - - - var left = layout.marginLeft - layout.tablePadding; - var top = y - layout.tablePadding; - var width = layout.marginRight - (2 * layout.tablePadding); - var height = 20; - if (NINJA.secondaryColor) { - setDocHexFill(doc, NINJA.secondaryColor); - setDocHexDraw(doc, NINJA.secondaryColor); - } else { - doc.setDrawColor(63,60,60); - doc.setFillColor(63,60,60); - } - doc.rect(left, top, width, height, 'FD'); - - doc.setFontType('bold'); - SetPdfColor('White', doc); - doc.setFontSize(12); - - var label = invoice.is_quote ? invoiceLabels.total : invoiceLabels.balance_due; - var labelX = layout.unitCostRight-(doc.getStringUnitWidth(label) * doc.internal.getFontSize()); - doc.text(labelX, y+2, label); - - - doc.setFontType('normal'); - var amount = formatMoney(invoice.balance_amount , currencyId); - headerLeft=layout.headerRight+400; - var amountX = layout.lineTotalRight - (doc.getStringUnitWidth(amount) * doc.internal.getFontSize()); - doc.text(amountX, y+2, amount); - - return doc; -} - - - - -function Report3AddHeader (invoice, layout, doc) -{ - doc.setLineWidth(0.5); - - if (NINJA.primaryColor) { - setDocHexFill(doc, NINJA.primaryColor); - setDocHexDraw(doc, NINJA.primaryColor); - } else { - doc.setDrawColor(242,101,34); - doc.setFillColor(242,101,34); - } - - var x1 =0; - var y1 = 0; - var w2 = 595; - var h2 = Math.max(110, getInvoiceDetailsHeight(invoice, layout) + 30); - doc.rect(x1, y1, w2, h2, 'FD'); - - SetPdfColor('White',doc); - - //second column - doc.setFontType('bold'); - var MaxWidth=594; - var LineOne= invoice.account.name; - var AlignLine = MaxWidth-30- (doc.getStringUnitWidth(LineOne) * doc.internal.getFontSize()); - if (LineOne) { - doc.setFontSize('30'); - doc.setFontType('bold'); - doc.text(40, 50, LineOne); - } -} - - -function Report1AddNewPage(invoice,account,doc) -{ - doc.addPage(); - if (logoImages.imageLogo1) - { - pageHeight=820; - y=pageHeight-logoImages.imageLogoHeight1; - var left = 20;//headerRight - invoice.imageLogoWidth1; - doc.addImage(logoImages.imageLogo1, 'JPEG', left, y, logoImages.imageLogoWidth1, logoImages.imageLogoHeight1); - - } - - GlobalY = 40; - return GlobalY; -} function displayAccount(doc, invoice, x, y, layout) { var account = invoice.account; @@ -1248,7 +1168,7 @@ function displayAccount(doc, invoice, x, y, layout) { account.work_phone ]; - displayGrid(doc, invoice, data, x, y, layout, true); + displayGrid(doc, invoice, data, x, y, layout, {hasHeader:true}); data = [ concatStrings(account.address1, account.address2), @@ -1279,7 +1199,7 @@ function displayClient(doc, invoice, x, y, layout) { client.contacts[0].email ]; - return displayGrid(doc, invoice, data, x, y, layout, true); + return displayGrid(doc, invoice, data, x, y, layout, {hasheader:true}); } function displayInvoice(doc, invoice, x, y, layout, rightAlignX) { @@ -1288,7 +1208,12 @@ function displayInvoice(doc, invoice, x, y, layout, rightAlignX) { } var data = getInvoiceDetails(invoice); - return displayGrid(doc, invoice, data, x, y, layout, true, rightAlignX); + var options = { + hasheader: true, + rightAlignX: rightAlignX, + }; + + return displayGrid(doc, invoice, data, x, y, layout, options); } function getInvoiceDetails(invoice) { @@ -1357,7 +1282,13 @@ function displaySubtotals(doc, layout, invoice, y, rightAlignTitleX) data.push({'paid_to_date': formatMoney(paid, invoice.client.currency_id)}); } - return displayGrid(doc, invoice, data, 300, y, layout, true, 550, rightAlignTitleX) + 10; + var options = { + hasheader: true, + rightAlignX: 550, + rightAlignTitleX: rightAlignTitleX + }; + + return displayGrid(doc, invoice, data, 300, y, layout, options) + 10; } function concatStrings() { @@ -1380,7 +1311,8 @@ function concatStrings() { return data.length ? concatStr : false; } -function displayGrid(doc, invoice, data, x, y, layout, hasheader, rightAlignX, rightAlignTitleX) { +//function displayGrid(doc, invoice, data, x, y, layout, hasheader, rightAlignX, rightAlignTitleX) { +function displayGrid(doc, invoice, data, x, y, layout, options) { var numLines = 0; var origY = y; for (var i=0; i length) ? (str.substr(0, length-1) + '...') : str; +}