Invoices, Expenses and Tasks built with Laravel and Flutter

Last update: Jun 20, 2022

Sublime's custom image

Invoice Ninja

Build Status Docs

Hosted | Self-Hosted

We're on Slack, join us at slack.invoiceninja.com or if you like StackOverflow

Just make sure to add the invoice-ninja tag to your question.

Note: v5 is now tagged Stable! To upgrade from v4 you need to install v5 as a separate app and then use the migration tool in the latest version of v4 on Settings > Account Management.

All Pro and Enterprise features from the hosted app are included in the open-code. We offer a $30 per year white-label license to remove the Invoice Ninja branding from client facing parts of the app.

The self-host zip includes all third party libraries whereas downloading the code from GitHub requires using Composer to install the dependencies.

Referral Program

  • Earn 50% of Pro & Enterprise Plans up to 4 years - Learn more

Mobile App

Installation Options

Recommended Providers

Development

Third Party Modules

Feel free to email us for help if you're working on a module, we're happy to provide developer support.

Third Party Tools

Third Party Developers

Contributing

All contributors are welcome!
For information on how contribute to Invoice Ninja, please see our contributing guide.

Credits

Special thanks to:

License

Invoice Ninja is released under the Elastic License 2.0 See LICENSE for details.

GitHub

https://github.com/invoiceninja/invoiceninja
Comments
  • 1. PHP 7.2 issues: count(): Parameter must be an array or an object that implements Countable

    ErrorException in Builder.php line 1231:
    count(): Parameter must be an array or an object that implements Countable
    in Builder.php line 1231
    at HandleExceptions->handleError('2', 'count(): Parameter must be an array or an object that implements Countable', '/var/www/app/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php', '1231', array('scope' => object(Closure), 'parameters' => array(object(Builder)), 'query' => object(Builder)))
    at count(null) in Builder.php line 1231
    at Builder->callScope(object(Closure)) in Builder.php line 1262
    at Builder->applyScopes() in Builder.php line 325
    at Builder->get() in /var/www/app/app/Http/Middleware/StartupCheck.php line 208
    
            // Check data has been cached
            $cachedTables = unserialize(CACHED_TABLES);
            if (Input::has('clear_cache')) {
                Session::flash('message', 'Cache cleared');
            }
            foreach ($cachedTables as $name => $class) {
                if (Input::has('clear_cache') || ! Cache::has($name)) {
                    // check that the table exists in case the migration is pending
                    if (! Schema::hasTable((new $class())->getTable())) {
                        continue;
                    }
                    if ($name == 'paymentTerms') {
                        $orderBy = 'num_days';
                    } elseif ($name == 'fonts') {
                        $orderBy = 'sort_order';
                    } elseif (in_array($name, ['currencies', 'industries', 'languages', 'countries', 'banks'])) {
                        $orderBy = 'name';
                    } else {
                        $orderBy = 'id';
                    }
                    $tableData = $class::orderBy($orderBy)->get(); // This line right here is the error
                    if (count($tableData)) {
                        Cache::forever($name, $tableData);
                    }
                }
            }
    

    Clean install this happens immediately after setup is finished. Database tables exist. Clear compiled does not fix. Latest download as of 8pm Eastern on 12/05/2017

    Reviewed by necrogami at 2017-12-16 01:30
  • 2. The MAC is invalid

    Hi. After installing version 2.6.3 I get the following error messages when accessing the both pages. All other pages seems to be ok. Any idea how to solve this error?

    https://{host}/settings/online-payment

    DecryptException in BaseEncrypter.php line 48:
    The MAC is invalid.
    in BaseEncrypter.php line 48
    at BaseEncrypter->getJsonPayload('eyJpdiI6IjZrSDR2KzVoaDdZTVB5SlJxWGk5dEE9PSIsInZhbHVlIjoiNVlFZXFvcFNveTlCYXhvUzhBUTRseVN2ZlVUY1d0QnhWaTFrZ1A0SG9kZ2ttcGhXcWtxV3QyNGN2dndcL0ZvVEJxZENcL2l1WlUzc2NLK24wMEVkRGxwc1Q5SGRBU0N0SFMrZWxrV1B3R1hYUTdrUGRPOEgwdTY5SWpMOFVPTFlmTnE2ZTFBVWc1VEFtWWQ3UHMzaDJPQXc9PSIsIm1hYyI6ImQ0ZjQ4ZTNiNzZkMzU3ZGM2NmE0YWFhMjY2YzA5ODIzMTQ2NjU0MmI4NTg4NzkyYTAxM2VjNWRlNzhmOTFkYWMifQ==') in McryptEncrypter.php line 115
    at McryptEncrypter->decrypt('eyJpdiI6IjZrSDR2KzVoaDdZTVB5SlJxWGk5dEE9PSIsInZhbHVlIjoiNVlFZXFvcFNveTlCYXhvUzhBUTRseVN2ZlVUY1d0QnhWaTFrZ1A0SG9kZ2ttcGhXcWtxV3QyNGN2dndcL0ZvVEJxZENcL2l1WlUzc2NLK24wMEVkRGxwc1Q5SGRBU0N0SFMrZWxrV1B3R1hYUTdrUGRPOEgwdTY5SWpMOFVPTFlmTnE2ZTFBVWc1VEFtWWQ3UHMzaDJPQXc9PSIsIm1hYyI6ImQ0ZjQ4ZTNiNzZkMzU3ZGM2NmE0YWFhMjY2YzA5ODIzMTQ2NjU0MmI4NTg4NzkyYTAxM2VjNWRlNzhmOTFkYWMifQ==') in Facade.php line 217
    at Facade::__callStatic('decrypt', array('eyJpdiI6IjZrSDR2KzVoaDdZTVB5SlJxWGk5dEE9PSIsInZhbHVlIjoiNVlFZXFvcFNveTlCYXhvUzhBUTRseVN2ZlVUY1d0QnhWaTFrZ1A0SG9kZ2ttcGhXcWtxV3QyNGN2dndcL0ZvVEJxZENcL2l1WlUzc2NLK24wMEVkRGxwc1Q5SGRBU0N0SFMrZWxrV1B3R1hYUTdrUGRPOEgwdTY5SWpMOFVPTFlmTnE2ZTFBVWc1VEFtWWQ3UHMzaDJPQXc9PSIsIm1hYyI6ImQ0ZjQ4ZTNiNzZkMzU3ZGM2NmE0YWFhMjY2YzA5ODIzMTQ2NjU0MmI4NTg4NzkyYTAxM2VjNWRlNzhmOTFkYWMifQ==')) in AccountGateway.php line 108
    at Crypt::decrypt('eyJpdiI6IjZrSDR2KzVoaDdZTVB5SlJxWGk5dEE9PSIsInZhbHVlIjoiNVlFZXFvcFNveTlCYXhvUzhBUTRseVN2ZlVUY1d0QnhWaTFrZ1A0SG9kZ2ttcGhXcWtxV3QyNGN2dndcL0ZvVEJxZENcL2l1WlUzc2NLK24wMEVkRGxwc1Q5SGRBU0N0SFMrZWxrV1B3R1hYUTdrUGRPOEgwdTY5SWpMOFVPTFlmTnE2ZTFBVWc1VEFtWWQ3UHMzaDJPQXc9PSIsIm1hYyI6ImQ0ZjQ4ZTNiNzZkMzU3ZGM2NmE0YWFhMjY2YzA5ODIzMTQ2NjU0MmI4NTg4NzkyYTAxM2VjNWRlNzhmOTFkYWMifQ==') in AccountGateway.php line 108
    at AccountGateway->getConfig() in AccountGateway.php line 117
    at AccountGateway->getConfigField('publishableKey') in AccountGateway.php line 129
    at AccountGateway->getPublishableStripeKey() in AccountController.php line 496
    at AccountController->showOnlinePayments() in AccountController.php line 320
    at AccountController->showSection('online_payments')
    at call_user_func_array(array(object(AccountController), 'showSection'), array('section' => 'online_payments')) in Controller.php line 80
    at Controller->callAction('showSection', array('section' => 'online_payments')) in ControllerDispatcher.php line 146
    at ControllerDispatcher->call(object(AccountController), object(Route), 'showSection') in ControllerDispatcher.php line 94
    at ControllerDispatcher->Illuminate\Routing\{closure}(object(Request))
    at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
    

    or https://{host}/settings/templates_and_reminders

    ErrorException in compiled.php line 13218:
    The MAC is invalid. (View: /srv/www/vhosts/b-nova.com/subdomains/test-ninja/resources/views/accounts/templates_and_reminders.blade.php)
    in compiled.php line 13218
    at CompilerEngine->handleViewException(object(DecryptException), '1') in compiled.php line 15270
    at PhpEngine->evaluatePath('/srv/www/vhosts/b-nova.com/subdomains/test-ninja/storage/framework/views/c0d29888eb503f01ee9f63e5cd0f7e0bc42d3cc6.php', array('__env' => object(Factory), 'app' => object(Application), 'errors' => object(ViewErrorBag), 'account' => object(Account), 'templates' => array('invoice' => array('subject' => 'Ihre Rechnung von $account', 'template' => '<div>Hallo $contact</div><div><br></div><div>Wir möchten uns nochmals für Ihren Auftrag bedanken. Anbei senden wir Ihnen die Rechnung. </div><div>Sie können diese auch online einsehen. Klicken Sie dazu einfach auf den Button. </div><div><br></div><div>$viewButton</div><div><br></div><div>$footer</div>'), 'quote' => array('subject' => 'Neues Angebot von $account', 'template' => '<div>$client,</div><br><div>Klicken Sie auf den folgenden Link um das Angebot über $amount anzuschauen.</div><br><div>$viewLink</div><br>$footer'), 'payment' => array('subject' => 'Zahlungseingang', 'template' => '<div>Hallo $contact</div><div><br></div><div>Ihre Zahlung ist bei uns eingegangen. Wir bedanken uns nochmals für Ihren Auftrag. </div><div><br></div><div style="text-align: center;">$viewButton</div><div><br></div><div>$footer</div>'), 'reminder1' => array('subject' => 'Erinnerung: Rechnung von $account', 'template' => '<div>Hallo $contact</div><div><br></div><div>Sicherlich haben Sie nur übersehen den noch offenen Betrag von $amount zu bezahlen. Bitte überweisen Sie diesen innerhalb 7 Tagen auf das angegebene Konto. </div><div>Die Rechnung können Sie online unter dem folgenden Link einsehen.</div><div><br></div><div>$viewButton</div><div><br></div><div>$footer</div>'), 'reminder2' => array('subject' => '2. Erinnerung: Rechnung von $account', 'template' => '<div>Hallo $contact</div><div><br></div><div>Wir bitten Sie den noch offenen Betrag von $amount innerhalb der nächsten 7 Tage zu überweisen. Sollten Sie den Betrag in der Zwischenzeit bereits bezahlt haben, so betrachten Sie dieses Schreiben als gegenstandslos. </div><div>Ihre Rechnung können Sie über den folgenden Button einsehen. </div><div><br></div><div style="text-align: center;">$viewButton</div><div><br></div><div>$footer</div>'), 'reminder3' => array('subject' => 'Erinnerung: Rechnung $invoice von $account', 'template' => '<div>$client,</div><br><div>Um Ihre Rechnung über $amount einzusehen, klicken Sie bitte auf den folgenden Link:</div><br><div>$viewLink</div><br>$footer')), 'defaultTemplates' => array('invoice' => array('subject' => 'Neue Rechnung $invoice von $account', 'template' => '<div>$client,</div><br><div>Um Ihre Rechnung über $amount einzusehen, klicken Sie bitte auf den folgenden Link:</div><br><div>$viewLink</div><br>$footer'), 'quote' => array('subject' => 'Neues Angebot von $account', 'template' => '<div>$client,</div><br><div>Klicken Sie auf den folgenden Link um das Angebot über $amount anzuschauen.</div><br><div>$viewLink</div><br>$footer'), 'payment' => array('subject' => 'Zahlungseingang', 'template' => '<div>$client,</div><br><div>Vielen Dank für Ihre Zahlung von $amount.</div><br><div>$viewLink</div><br>$footer'), 'reminder1' => array('subject' => 'Erinnerung: Rechnung $invoice von $account', 'template' => '<div>$client,</div><br><div>Um Ihre Rechnung über $amount einzusehen, klicken Sie bitte auf den folgenden Link:</div><br><div>$viewLink</div><br>$footer'), 'reminder2' => array('subject' => 'Erinnerung: Rechnung $invoice von $account', 'template' => '<div>$client,</div><br><div>Um Ihre Rechnung über $amount einzusehen, klicken Sie bitte auf den folgenden Link:</div><br><div>$viewLink</div><br>$footer'), 'reminder3' => array('subject' => 'Erinnerung: Rechnung $invoice von $account', 'template' => '<div>$client,</div><br><div>Um Ihre Rechnung über $amount einzusehen, klicken Sie bitte auf den folgenden Link:</div><br><div>$viewLink</div><br>$footer')), 'emailFooter' => '<p><div>Mit freundlichen Grüßen, <br>$account</div></p>', 'title' => 'E-Mail Vorlagen')) in compiled.php line 15305
    at CompilerEngine->get('/srv/www/vhosts/b-nova.com/subdomains/test-ninja/resources/views/accounts/templates_and_reminders.blade.php', array('__env' => object(Factory), 'app' => object(Application), 'errors' => object(ViewErrorBag), 'account' => object(Account), 'templates' => array('invoice' => array('subject' => 'Ihre Rechnung von $account', 'template' => '<div>Hallo $contact</div><div><br></div><div>Wir möchten uns nochmals für Ihren Auftrag bedanken. Anbei senden wir Ihnen die Rechnung. </div><div>Sie können diese auch online einsehen. Klicken Sie dazu einfach auf den Button. </div><div><br></div><div>$viewButton</div><div><br></div><div>$footer</div>'), 'quote' => array('subject' => 'Neues Angebot von $account', 'template' => '<div>$client,</div><br><div>Klicken Sie auf den folgenden Link um das Angebot über $amount anzuschauen.</div><br><div>$viewLink</div><br>$footer'), 'payment' => array('subject' => 'Zahlungseingang', 'template' => '<div>Hallo $contact</div><div><br></div><div>Ihre Zahlung ist bei uns eingegangen. Wir bedanken uns nochmals für Ihren Auftrag. </div><div><br></div><div style="text-align: center;">$viewButton</div><div><br></div><div>$footer</div>'), 'reminder1' => array('subject' => 'Erinnerung: Rechnung von $account', 'template' => '<div>Hallo $contact</div><div><br></div><div>Sicherlich haben Sie nur übersehen den noch offenen Betrag von $amount zu bezahlen. Bitte überweisen Sie diesen innerhalb 7 Tagen auf das angegebene Konto. </div><div>Die Rechnung können Sie online unter dem folgenden Link einsehen.</div><div><br></div><div>$viewButton</div><div><br></div><div>$footer</div>'), 'reminder2' => array('subject' => '2. Erinnerung: Rechnung von $account', 'template' => '<div>Hallo $contact</div><div><br></div><div>Wir bitten Sie den noch offenen Betrag von $amount innerhalb der nächsten 7 Tage zu überweisen. Sollten Sie den Betrag in der Zwischenzeit bereits bezahlt haben, so betrachten Sie dieses Schreiben als gegenstandslos. </div><div>Ihre Rechnung können Sie über den folgenden Button einsehen. </div><div><br></div><div style="text-align: center;">$viewButton</div><div><br></div><div>$footer</div>'), 'reminder3' => array('subject' => 'Erinnerung: Rechnung $invoice von $account', 'template' => '<div>$client,</div><br><div>Um Ihre Rechnung über $amount einzusehen, klicken Sie bitte auf den folgenden Link:</div><br><div>$viewLink</div><br>$footer')), 'defaultTemplates' => array('invoice' => array('subject' => 'Neue Rechnung $invoice von $account', 'template' => '<div>$client,</div><br><div>Um Ihre Rechnung über $amount einzusehen, klicken Sie bitte auf den folgenden Link:</div><br><div>$viewLink</div><br>$footer'), 'quote' => array('subject' => 'Neues Angebot von $account', 'template' => '<div>$client,</div><br><div>Klicken Sie auf den folgenden Link um das Angebot über $amount anzuschauen.</div><br><div>$viewLink</div><br>$footer'), 'payment' => array('subject' => 'Zahlungseingang', 'template' => '<div>$client,</div><br><div>Vielen Dank für Ihre Zahlung von $amount.</div><br><div>$viewLink</div><br>$footer'), 'reminder1' => array('subject' => 'Erinnerung: Rechnung $invoice von $account', 'template' => '<div>$client,</div><br><div>Um Ihre Rechnung über $amount einzusehen, klicken Sie bitte auf den folgenden Link:</div><br><div>$viewLink</div><br>$footer'), 'reminder2' => array('subject' => 'Erinnerung: Rechnung $invoice von $account', 'template' => '<div>$client,</div><br><div>Um Ihre Rechnung über $amount einzusehen, klicken Sie bitte auf den folgenden Link:</div><br><div>$viewLink</div><br>$footer'), 'reminder3' => array('subject' => 'Erinnerung: Rechnung $invoice von $account', 'template' => '<div>$client,</div><br><div>Um Ihre Rechnung über $amount einzusehen, klicken Sie bitte auf den folgenden Link:</div><br><div>$viewLink</div><br>$footer')), 'emailFooter' => '<p><div>Mit freundlichen Grüßen, <br>$account</div></p>', 'title' => 'E-Mail Vorlagen')) in compiled.php line 15137
    at View->getContents() in compiled.php line 15125
    at View->renderContents() in compiled.php line 15109
    at View->render() in compiled.php line 16347
    at Response->setContent(object(View)) in compiled.php line 15848
    at Response->__construct(object(View)) in compiled.php line 8420
    at Router->prepareResponse(object(Request), object(View)) in compiled.php line 9515
    at ControllerDispatcher->Illuminate\Routing\{closure}(object(Request))
    at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
    at Pipeline->Illuminate\Routing\{closure}(object(Request))
    at call_user_func(object(Closure), object(Request)) in compiled.php line 9992
    at Pipeline->then(object(Closure)) in compiled.php line 9516
    at ControllerDispatcher->callWithinStack(object(AccountController), object(Route), object(Request), 'showSection') in compiled.php line 9503
    at ControllerDispatcher->dispatch(object(Route), object(Request), 'App\Http\Controllers\AccountController', 'showSection') in compiled.php line 8571
    
    Reviewed by bnova-stefan at 2016-07-17 11:39
  • 3. Enable setting all client fields when creating with invoice in API

    I am a complete newbie on here - although I would consider myself quite savvy so I'm either being daft or there are some issues with Zapier. Basically I am trying to automate the invoicing of our company by using zapper to connect our youcanbook.me booking system to invoiceninja.

    1. I created some test bookings/invoices - which works ok but when I delete the invoices they seem to re-appear?
    2. When selecting 'yes' to send invoice to client inside zapier it does not attach the pdf (just a link) but when sending email via invoice ninja itself - it does attach the pdf?
    3. I am not able to add a 'invoice due date' inside Zapier which renders the whole thing useless as it will not send out overdue reminders so we have to do this manually.

    Any help would be greatly appreciated

    Cheers

    Reviewed by jb83 at 2015-10-02 09:00
  • 4. Unable to login

    Hey there, yesterday I wanted to try out the new version, but after setup the following error persists:

    500: Error: {
        "message": "Call to a member function each() on null",
        "exception": "Error",
        "file": "/home/steuerb2/domains/lars-kusch.de/test/app/Utils/Statics.php",
        "line": 78,
        "trace": [
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/app/Http/Controllers/BaseController.php",
                "line": 343,
                "function": "company",
                "class": "App\\Utils\\Statics",
                "type": "::"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/app/Http/Controllers/BaseController.php",
                "line": 300,
                "function": "response",
                "class": "App\\Http\\Controllers\\BaseController",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/app/Http/Controllers/Auth/LoginController.php",
                "line": 172,
                "function": "listResponse",
                "class": "App\\Http\\Controllers\\BaseController",
                "type": "->"
            },
            {
                "function": "apiLogin",
                "class": "App\\Http\\Controllers\\Auth\\LoginController",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
                "line": 54,
                "function": "call_user_func_array"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
                "line": 45,
                "function": "callAction",
                "class": "Illuminate\\Routing\\Controller",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
                "line": 255,
                "function": "dispatch",
                "class": "Illuminate\\Routing\\ControllerDispatcher",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
                "line": 197,
                "function": "runController",
                "class": "Illuminate\\Routing\\Route",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
                "line": 691,
                "function": "run",
                "class": "Illuminate\\Routing\\Route",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
                "line": 128,
                "function": "Illuminate\\Routing\\{closure}",
                "class": "Illuminate\\Routing\\Router",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/app/Http/Middleware/Cors.php",
                "line": 34,
                "function": "Illuminate\\Pipeline\\{closure}",
                "class": "Illuminate\\Pipeline\\Pipeline",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
                "line": 167,
                "function": "handle",
                "class": "App\\Http\\Middleware\\Cors",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/app/Http/Middleware/QueryLogging.php",
                "line": 42,
                "function": "Illuminate\\Pipeline\\{closure}",
                "class": "Illuminate\\Pipeline\\Pipeline",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
                "line": 167,
                "function": "handle",
                "class": "App\\Http\\Middleware\\QueryLogging",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
                "line": 41,
                "function": "Illuminate\\Pipeline\\{closure}",
                "class": "Illuminate\\Pipeline\\Pipeline",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
                "line": 167,
                "function": "handle",
                "class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
                "line": 127,
                "function": "Illuminate\\Pipeline\\{closure}",
                "class": "Illuminate\\Pipeline\\Pipeline",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
                "line": 63,
                "function": "handleRequest",
                "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
                "line": 167,
                "function": "handle",
                "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
                "line": 103,
                "function": "Illuminate\\Pipeline\\{closure}",
                "class": "Illuminate\\Pipeline\\Pipeline",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
                "line": 693,
                "function": "then",
                "class": "Illuminate\\Pipeline\\Pipeline",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
                "line": 668,
                "function": "runRouteWithinStack",
                "class": "Illuminate\\Routing\\Router",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
                "line": 634,
                "function": "runRoute",
                "class": "Illuminate\\Routing\\Router",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
                "line": 623,
                "function": "dispatchToRoute",
                "class": "Illuminate\\Routing\\Router",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
                "line": 166,
                "function": "dispatch",
                "class": "Illuminate\\Routing\\Router",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
                "line": 128,
                "function": "Illuminate\\Foundation\\Http\\{closure}",
                "class": "Illuminate\\Foundation\\Http\\Kernel",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/app/Http/Middleware/Cors.php",
                "line": 34,
                "function": "Illuminate\\Pipeline\\{closure}",
                "class": "Illuminate\\Pipeline\\Pipeline",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
                "line": 167,
                "function": "handle",
                "class": "App\\Http\\Middleware\\Cors",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/fideloper/proxy/src/TrustProxies.php",
                "line": 57,
                "function": "Illuminate\\Pipeline\\{closure}",
                "class": "Illuminate\\Pipeline\\Pipeline",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
                "line": 167,
                "function": "handle",
                "class": "Fideloper\\Proxy\\TrustProxies",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
                "line": 21,
                "function": "Illuminate\\Pipeline\\{closure}",
                "class": "Illuminate\\Pipeline\\Pipeline",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
                "line": 167,
                "function": "handle",
                "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
                "line": 21,
                "function": "Illuminate\\Pipeline\\{closure}",
                "class": "Illuminate\\Pipeline\\Pipeline",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
                "line": 167,
                "function": "handle",
                "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php",
                "line": 27,
                "function": "Illuminate\\Pipeline\\{closure}",
                "class": "Illuminate\\Pipeline\\Pipeline",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
                "line": 167,
                "function": "handle",
                "class": "Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
                "line": 87,
                "function": "Illuminate\\Pipeline\\{closure}",
                "class": "Illuminate\\Pipeline\\Pipeline",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
                "line": 167,
                "function": "handle",
                "class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Tracing/Middleware.php",
                "line": 43,
                "function": "Illuminate\\Pipeline\\{closure}",
                "class": "Illuminate\\Pipeline\\Pipeline",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
                "line": 167,
                "function": "handle",
                "class": "Sentry\\Laravel\\Tracing\\Middleware",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
                "line": 103,
                "function": "Illuminate\\Pipeline\\{closure}",
                "class": "Illuminate\\Pipeline\\Pipeline",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
                "line": 141,
                "function": "then",
                "class": "Illuminate\\Pipeline\\Pipeline",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
                "line": 110,
                "function": "sendRequestThroughRouter",
                "class": "Illuminate\\Foundation\\Http\\Kernel",
                "type": "->"
            },
            {
                "file": "/home/steuerb2/domains/lars-kusch.de/test/public/index.php",
                "line": 57,
                "function": "handle",
                "class": "Illuminate\\Foundation\\Http\\Kernel",
                "type": "->"
            }
        ]
    }
    

    Thank you very much for your incredible cool software, Lars

    Reviewed by LarsK1 at 2020-10-17 13:53
  • 5. License is too restrictive

    Hi there,

    This software looks really great. I'm looking at self-hosted invoice systems and this one is fantastic. That said, I am afraid the license is too restrictive. I have no desire to rip off invoiceninja's business, and I appreciate the many hours that have been put into it programming it. But one of the virtues of open-source is the ability for people to fork software and take it into a different direction without needing to ask for permission.

    Currently the license says this:

    Redistributions of source code, in whole or part and with or without
    modification requires the express permission of the author
    

    Consider these scenarios:

    • You disappear. It could be an unexpected death, or a spontaneous and everlasting trip to the Caribbean. We are now stuck using a system that no one is allowed to advance forward because they cannot ask your permission.
    • Someone wants to take this project in a radically different direction that would benefit a lot of people, but you disagree with them. This prevents us from having a system that may be able to help a lot more people.
    • You decide to stop developing the project for whatever reason. We have to rely on you to update the license or transfer ownership of the project. Humans can be unpredictable though, so that is a risk.

    Under the present license, invoiceninja is "open-source software" by the loosest meaning of the term. Since the author has total control of how the code may be used, it cannot be consider free (libre) software, which I think is preferable

    It seems like this was your intention, but I wanted to bring this up in case it was something you would like to consider. I tend to prefer copyleft licenses like GPL since it has a layer of protection against corporate greed while still allowing people to fork the code freely.

    Thanks for your time

    Reviewed by alexgleason at 2016-08-31 02:14
  • 6. Incomplete Chunked Encoding

    Since the update to 2.6.5, we are experiencing problem on our install with showing pages. It is giving error about ERR_INCOMPLETE_CHUNKED_ENCODING error

    capture d ecran 2016-07-21 a 10 36 06

    Reviewed by gabthefencer at 2016-07-21 14:36
  • 7. [Question] Concatenating text in settings/customize_design#content | pdfmake questions

    Hi again 😄. So I'm working on a customized invoice design and I'd like to use this block:

    {
        "text": "$account.work_phone",
        "margin": [
          5,
          30,
          10,
          5
        ],
        "style": "socialTEL",
        "absolutePosition": {
          "x": 100,
          "y": 100
        }
      },
    

    but instead of only the phone number I want the string "TEL | " to be concatenated before it. So it would spell "TEL | " + $account.work_phone.

    It seems like I can't provide JavaScript functions there and I'm a total noob concerning pdfmake.

    Is there a simple way to concatenate a string and a variable here?

    Reviewed by Braintelligence at 2016-12-19 15:06
  • 8. Converted invoice uses quote template intead of invoice template

    What version of Invoice Ninja are you running? ie v4.5.25 / v5.0.30 5.1.42

    What environment are you running? Docker

    Have you checked log files (storage/logs/) Please provide redacted output not applicable

    Have you searched existing issues? yes

    Have you reported this to Slack/forum before posting? no

    Describe the bug When converting quote to invoice, it uses quote's pdf template instead of invoice's pdf template

    Steps To Reproduce setup

    • settings > invoice design
    • ensure quote and invoice use different templates (I have a custom template for quotes, and a custom template for invoices)

    bug:

    • create quote
    • view pdf: it uses quote template as expected ...ok!
    • clone to invoice
    • view invoice pdf: it uses quote template ...bug!

    Expected behavior Quote and invoice should use their own templates, even in these cases:

    • convert quote to invoice
    • clone from/to quote/invoice
    • ...possibly other workflows I've forgotten?

    Screenshots no

    Additional context no

    (v5) Can you replicate the issue on our demo site? https://demo.invoiceninja.com can't customize on the demo site

    Reviewed by lonix1 at 2021-04-09 14:18
  • 9. Invoice not attached to emails

    Unfortunately, the invoice is not attached to an invoice sent to a customer.

    In email settings, the checkbox "attach invoices" is active. I use the button "send invoices" in the invoice view to send invoices.

    I run version 3.3.1 in a Docker environment.

    Reviewed by MathiasRenner at 2017-05-15 10:05
  • 10. We can't find a user with that e-mail address.

    Hi,

    I have a client trying to reset a password but he gets the message 'We can't find a user with that e-mail address.' I have checked the database and the email address exists. Are you using md5 for password encryption as I was going to try resetting in the database.

    This function was working before I upgraded to the latest version as I have a password reset in the database table.

    Thanks

    Mark

    Reviewed by donttrustem at 2017-04-21 12:35
  • 11. Quote/Invoice Attachments do not show thumbnails after upload

    The javascript model.invoice().documents()[0].preview_url() and model.invoice().documents()[0].url() have the .jpg/.png etc. extensions in the url. generated via app/Models/Document.php via de public function getPreviewUrl() and getUrl(). But dropzone.js doesn't need the extension. in fact the url with extension doesn't download the image. but without the image extension the url works fine to download an image. i'm not sure where to change it (strip extension in javascript or modify the model).

    this could also be the case for the client portal but that i'm not sure.

    Reviewed by eelco2k at 2017-06-02 20:29
  • 12. Bug found in Client Management - Create Client - Phone number

    Dear maintainer,

    I have tried out your application and based on my tests, I have found a weird and inconsistent behavior in the "Create Client" feature. While trying to add phone numbers, we are able to add alphabetical inputs. I'm not sure if this is the intended behavior and thus I am submitting this issue to raise your attention.

    As you can see from the screenshot below, I have inputted "aaa" as the phone number and it gets accepted as a valid phone number input by the system.

    Thank you.

    Capture1

    Reviewed by faheem92mt at 2022-06-28 13:33
  • 13. transaction payment filter

    its important to sincronize payment codes and status with external apis. it should be an index on database to. "transaction_reference" to speed up search.

    Reviewed by hugodeco at 2022-06-27 14:43
  • 14. Single and bulk download of xml invoices

    In a few days Italy will make the Fatturazione Elettronica mandatory for individual too so in order to continue using invoiceninja I need the ability to download invoices in xml (UBL or CII) format; will be that possible? Otherwise I'll need to search for invoiceninja alternatives for legal reason

    Reviewed by Azertooth at 2022-06-27 11:49
  • 15. Recurring Invoices - add name

    What version of Invoice Ninja are you running? ie v4.5 / v5 v5

    What environment are you running? Hosted by invoiceninja

    Have you searched existing issues/requests? Yes

    Additional context I create a recurring invoices for my clients, for different services, since each service starts on a different date. Some clients have multiple recurring invoices, from the main view for recurring invoice, i wish we can name the invoices, for example Hosting, Web Site Maintenance. i would like to be able to name the recurring invoice and see it from the main view.

    Reviewed by mskenderian at 2022-06-23 18:24
  • 16. No visible error indication from ninja:post-update

    What version of Invoice Ninja are you running? ie v4.5 / v5 5.4.2

    What environment are you running? Self-hosted from git (using tagged release commits, not master)

    Have you searched existing issues/requests? Yes

    Screenshots Not applicable

    Additional context As described in the Updating Invoice Ninja docs, I run php artisan ninja:post-update as part of the InvoiceNinja update process. Today I discovered that if the post-update process encounters an error, a generic message is logged to storage/logs/laravel.log at INFO level. For example, a database migration was failing and the only indication was:

    [2022-06-17 06:25:33] production.INFO: I wasn't able to migrate the data.
    

    It would be helpful if ninja:post-update could log errors at ERROR level along with information from the exception about the specific cause. Ideally the error would also be printed to stderr to inform the invoking user and artisan would exit with a non-zero exit code to simplify error handling when it is invoked from another program (e.g. an update script).

    Thanks for considering, Kevin

    Reviewed by kevinoid at 2022-06-17 20:50

Related

This is Personal Expenses Planner. You can see and made any recipes from this application. I developed this project using flutter.

meals A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if this is

Sep 4, 2021
Expenses Pal - Flutter
Expenses Pal - Flutter

Expenses Pal Who does not like to spend money on various things? Do we nowadays control ourselves or just do not care and randomly spend hard earned m

Nov 10, 2021
App for tracking your expenses

Expense Manager App for tracking your expenses Purpose of the project This app may help people to control their spendings. My task was to create custo

Mar 13, 2022
This is a expenses app which keeps a track of the money spend. Mostly helpful for college students like me...

expenses_app A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if

Jun 5, 2022
Flutter Downloader - A plugin for creating and managing download tasks. Supports iOS and Android.
Flutter Downloader - A plugin for creating and managing download tasks. Supports iOS and Android.

Flutter Downloader A plugin for creating and managing download tasks. Supports iOS and Android. This plugin is based on WorkManager in Android and NSU

Jun 18, 2022
Flutter cloud functions - A sample project demonstrating how to run backend tasks in Flutter
Flutter cloud functions - A sample project demonstrating how to run backend tasks in Flutter

Flutter Cloud Functions A sample project demonstrating how to run backend tasks

Feb 15, 2022
Flutter app to manage tasks.
Flutter app to manage tasks.

A new Flutter app project to manage tasks. Getting Started A few resources to get you started if this is your first Flutter project: Lab: Write your f

Jun 20, 2022
copy of google tasks app, just to practice some flutter

tasks_copy A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if th

Dec 28, 2021
Flutter UI Travel app for completing tasks in mobile development classes 📱

cti3i3-app-travel-ui Flutter UI Travel app for completing tasks in mobile development classes. Setup Run the following commands to install the depende

May 14, 2022
To Do App help me to remember my tasks , notify me .

todoapp A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if this

Jan 10, 2022
A fully functional Movies Application built with Flutter. The application built with null safety and clean architecture, also uses OMDB API for fetching movies in the search item
A fully functional Movies Application built with Flutter. The application built with null safety and clean architecture, also uses OMDB API for fetching movies in the search item

Cinema DB Project Details This project uses null safety feature Project uses clean code architecture (Uncle Bob's Architecture) Project can run on bot

Dec 18, 2021
Github Trending app built with Flutter+Redux+Built(Immutable Data)

Github Trending app built with Flutter+Redux+Built(Immutable Data)

May 13, 2020
Computer science courses, books and exams in your pocket. Built with Flutter and Free! ❤️
Computer science courses, books and exams in your pocket. Built with Flutter and Free! ❤️

Computeiro - Free courses, books and exams Computer science exams in your pocket. Built with Flutter. Free Courses • Contributing ❤️ • License This pr

Jun 30, 2022
A customizable carousel slider for Flutter. Supports infinite sliding, custom indicators, and custom animations with many pre-built indicators and animations.
A customizable carousel slider for Flutter. Supports infinite sliding, custom indicators, and custom animations with many pre-built indicators and animations.

Flutter Carousel Slider A customizable carousel slider for flutter Screenshots Installing dependencies: flutter_carousel_slider: ^1.0.8 Demo Demo a

Jun 22, 2022
A Marvel Heroes and Comics guide, built with Flutter and MarvelAPI to help people get to know more about this amazing universe
A Marvel Heroes and Comics guide, built with Flutter and MarvelAPI to help people get to know more about this amazing universe

?? Marvel Guide ?? ?? Project A Marvel Heroes and Comics guide, built with Flutter and MarvelAPI to help people get to know more about this amazing un

May 28, 2022
A Dart EPUB parser built from the ground up, and designed to support a variety of use cases and custom

A Dart EPUB parser built from the ground up, and designed to support a variety of use cases and custom implementations such as on-device caching and serving content from a server.

May 2, 2022
Collection of cool Layouts built with Flutter to Inspire Other UI developers and explore the possibilities of Flutter.
Collection of cool Layouts built with Flutter to Inspire Other UI developers and explore the possibilities of Flutter.

Awesome_Flutter_Layouts Would you like to Contribute your Designs? Please refer the Contribution guidelines before you dive In Need help? or Looks Som

Jun 10, 2022