Invoices, Expenses and Tasks built with Laravel and Flutter

Overview

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.

Comments
  • PHP 7.2 issues: count(): Parameter must be an array or an object that implements Countable

    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

    compatibility fixed 
    opened by necrogami 47
  • Update from v5.4.9 to v5.5.6 not possible - Remote file not found

    Update from v5.4.9 to v5.5.6 not possible - Remote file not found

    Could not update. I think it's happen by the error, that the remote file not found on your servers. I've got an "Server Error" on update-frame in the web ui.

    PHP Version

    PHP 8.1.7 (cli) (built: Jun 14 2022 10:02:46) (NTS)
    Copyright (c) The PHP Group
    Zend Engine v4.1.7, Copyright (c) Zend Technologies
        with Zend OPcache v8.1.7, Copyright (c), by Zend Technologies
    
    curl https://github.com/invoiceninja/invoiceninja/releases/download/v5.5.7/invoiceninja.zip
    Not Found
    

    image

    laravel.log

    [2022-08-05 18:59:52] production.ERROR: copy(https://github.com/invoiceninja/invoiceninja/releases/download/v5.5.7/invoiceninja.zip): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
     {"userId":1,"exception":"[object] (ErrorException(code: 0): copy(https://github.com/invoiceninja/invoiceninja/releases/download/v5.5.7/invoiceninja.zip): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
     at /home/users/foobar/www/office.foobar.com/app/Http/Controllers/SelfUpdateController.php:126)
    [stacktrace]
    #0 [internal function]: Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError()
    #1 /home/users/foobar/www/office.foobar.com/app/Http/Controllers/SelfUpdateController.php(126): copy()
    #2 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\\Http\\Controllers\\SelfUpdateController->update()
    #3 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\\Routing\\Controller->callAction()
    #4 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Routing/Route.php(262): Illuminate\\Routing\\ControllerDispatcher->dispatch()
    #5 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController()
    #6 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(721): Illuminate\\Routing\\Route->run()
    #7 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()
    #8 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(127): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
    #9 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(63): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequest()
    #10 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Routing\\Middleware\\ThrottleRequests->handle()
    #11 /home/users/foobar/www/office.foobar.com/app/Http/Middleware/QueryLogging.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
    #12 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\QueryLogging->handle()
    #13 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
    #14 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle()
    #15 /home/users/foobar/www/office.foobar.com/app/Http/Middleware/Locale.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
    #16 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\Locale->handle()
    #17 /home/users/foobar/www/office.foobar.com/app/Http/Middleware/PasswordProtection.php(124): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
    #18 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\PasswordProtection->handle()
    #19 /home/users/foobar/www/office.foobar.com/app/Http/Middleware/TokenAuth.php(99): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
    #20 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\TokenAuth->handle()
    #21 /home/users/foobar/www/office.foobar.com/app/Http/Middleware/SetDb.php(41): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
    #22 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\SetDb->handle()
    #23 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
    #24 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(723): Illuminate\\Pipeline\\Pipeline->then()
    #25 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(698): Illuminate\\Routing\\Router->runRouteWithinStack()
    #26 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\\Routing\\Router->runRoute()
    #27 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(651): Illuminate\\Routing\\Router->dispatchToRoute()
    #28 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\\Routing\\Router->dispatch()
    #29 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
    #30 /home/users/foobar/www/office.foobar.com/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestIpMiddleware.php(45): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
    #31 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Sentry\\Laravel\\Http\\SetRequestIpMiddleware->handle()
    #32 /home/users/foobar/www/office.foobar.com/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestMiddleware.php(42): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
    #33 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Sentry\\Laravel\\Http\\SetRequestMiddleware->handle()
    #34 /home/users/foobar/www/office.foobar.com/vendor/livewire/livewire/src/DisableBrowserCache.php(19): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
    #35 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Livewire\\DisableBrowserCache->handle()
    #36 /home/users/foobar/www/office.foobar.com/app/Http/Middleware/Cors.php(25): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
    #37 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\Cors->handle()
    #38 /home/users/foobar/www/office.foobar.com/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
    #39 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fideloper\\Proxy\\TrustProxies->handle()
    #40 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
    #41 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
    #42 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()
    #43 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
    #44 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
    #45 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
    #46 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
    #47 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()
    #48 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
    #49 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
    #50 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
    #51 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\\Pipeline\\Pipeline->then()
    #52 /home/users/foobar/www/office.foobar.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
    #53 /home/users/foobar/www/office.foobar.com/public/index.php(57): Illuminate\\Foundation\\Http\\Kernel->handle()
    #54 {main}
    "}  
    
    bug fixed 
    opened by pthoelken 46
  • The MAC is invalid

    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
    
    opened by bnova-stefan 45
  • Enable setting all client fields when creating with invoice in API

    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

    opened by jb83 45
  • Unable to login

    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

    question 
    opened by LarsK1 44
  • License is too restrictive

    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

    opened by alexgleason 44
  • Incomplete Chunked Encoding

    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

    fixed 
    opened by gabthefencer 44
  • [Question] Concatenating text in settings/customize_design#content | pdfmake questions

    [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?

    question 
    opened by Braintelligence 39
  • Converted invoice uses quote template intead of invoice template

    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

    bug 
    opened by lonix1 38
  • Invoice not attached to emails

    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.

    question 
    opened by MathiasRenner 36
  • We can't find a user with that e-mail address.

    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

    opened by donttrustem 33
  • Logo too small on buy now subscription

    Logo too small on buy now subscription

    What version of Invoice Ninja are you running? v5.5.19

    What environment are you running? Docker

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

    Have you searched existing issues? yes

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

    Describe the bug logo too small on subs checkout.

    Steps To Reproduce Click on buy now button from a website and the logo seems like its too small

    Expected behavior bigger logo

    Screenshots image

    more info requested 
    opened by jobrien2001 4
  • Problem: Late payment surcharge in same invoice

    Problem: Late payment surcharge in same invoice

    At least in Germany, it is problematic if a sent invoice is subsequently manipulated. Therefore, posting a late surcharge directly to the invoice is critical because it changes the invoice itself.

    A late surcharge must therefore be created as a reminder fee in a separate invoice, which is not yet possible automatically. Therefore, unfortunately, one cannot use this function and must manually create a reminder (new invoice).

    For legal certainty, it is therefore desirable if this requirement is implemented correctly in the future so that one can also use the function.

    grafik

    feature request more info requested 
    opened by RoundAboutWEB 3
  • Payment type editor??

    Payment type editor??

    Once again, great job, i have one more question, when i add a manual payment, i can choose the payment type, but i only work whit money and bank transfer, it is some option that i can see to disable some types? like alipay, american express… in the payment setting the gateway is only for online payment correct?? or is a nice option to add to the app.

    regards

    feature request 
    opened by ArchLinx 0
  • Record bank or card fees for manual payments

    Record bank or card fees for manual payments

    Other invoicing software offers the ability to enter a bank or credit card fee that was incurred during a transaction from their bank or credit card terminal for example. If I take a payment in person with my square terminal and decide that I will cover the fee, 1.6% will be deducted and what I actually earn will not reflect what is on the invoice.

    Eg. The invoice total is $89, I take $89 on my Square terminal and incur a $1.45 fee. I receive $87.55.

    It would be really great to have fee recording/tracking for manual payments, not online as that is already implemented in invoice ninja.

    Here's an example of with quickbooks:

    Record bank charges when receiving payment from customer

    I guess there could be a field on the payment that automatically creates an expense for the fee or something?

    feature request 
    opened by mrkylegp 2
  • htaccess file required in source code files?

    htaccess file required in source code files?

    Dear Team I'm using InvoiceNinja on a shared hosting. Due to several reasons, the standard PHP version of my hosting package is PHP 7.4, therefore I'm using .htaccess to set the PHP version to 8.1 for the InvoiceNinja folder. Updating IN using the internal updater (and the zip file) overwrites the .htaccess file, thus I have to manually change it after each update. Is the .htaccess file really necessary in the source code zip files?

    feature request 
    opened by oliversum-ch 1
  • Automated timestamp client note area.

    Automated timestamp client note area.

    I like how this software is laid out you guys are doing a fantastic job. It’s almost like a CRM/accounting software.

    I promote the heck out of the software. I also deploy it for my clients. I own a small consulting service that deals with technology on a wide variety scale. I mostly deal with lawyers offices and medical billing services. Most of the clients I have I have them on Invoice Ninja.

    My clients would like to see in the near future is more flexibility to be able to store more information about the client that they have on file kind of like a CRM.

    One of my clients suggested that in the note taking area. Have it automatically timestamp the new note and have the newest information go to the top regarding the client. Of course this information is never revealed to the public or the client. Do you have a small area for private information, I would like to see that expanded upon. Thank you for your time.

    feature request 
    opened by kenmarple 0
Releases(v5.5.24)
  • v5.5.24(Sep 21, 2022)

    Working on hosted upgrades Improve trial page Increase backoff period Force company currency for purchase orders Ensure we do not remove gateway fee prematurely Fixes for payment layouts (Regression) Exclude canvaskit path for hosted Implement 3DS for Braintree Fixes for seeders Fixes for checkout.com customer request class

    Source code(tar.gz)
    Source code(zip)
    invoiceninja.zip(118.98 MB)
  • v5.5.23(Sep 16, 2022)

    Fixes for send now functionality of recurring invoice Single root element for wepay signups Fixes for single root - Livewire Update resources to defer Minor fixes for client portal queries Optimize css bundles Fixes for tests If blank exchange rate is sent, force 1

    Source code(tar.gz)
    Source code(zip)
    invoiceninja.zip(118.98 MB)
  • v5.5.22(Sep 15, 2022)

    Configuration for in app purchases Move lightlogs to batch Improve client imports Add recurring invoice id to expense when it is generated Fixes for support messages Fixes for check data Minor fixes for support messages Ensure we also query trashed client records before lock Logging around generates counter Additional logging in generates counter Minor fixes + additional logging Fixes for applying numbers Fixes for entity policy not capturing recurring invoice policies Update customer details Fixes for restricting csv imports Add redundancy checks when creating task numbers Port entity policy changes to view() policy Set SEPA stripe token payments to pending Fixes for QR Ibans with no payment references Fixes for adding a payment method with Checkout.com Adapt Email entity sending using emailentity Fixes for sending custom templates with purchase orders Add webhook functionality to credits Fixes for tests

    Source code(tar.gz)
    Source code(zip)
    invoiceninja.zip(119.25 MB)
  • v5.5.21(Sep 9, 2022)

    Add secondary font as a variable in HTMLENGINE Add additional field for reports to companies table Fixes for InputBag Fixes for race condition when saving expense numbers Improve date resolution in recurring invoices Improve float parsing in csv imports Additional checks for GoCardless webhooks Improve efficiency of lightlogs Fixes for vendor templates Fixes for sending purchase orders when using a custom template Change [] for vendors to contacts.company Move lightlogs back to batching

    Source code(tar.gz)
    Source code(zip)
    invoiceninja.zip(118.58 MB)
  • v5.5.20(Sep 7, 2022)

    Add check if plan is expired Add checks for ninja portal urls Improve handling of purchaseOrder and purchase_order Updates for vendor routes Client Paid To Date updates Fixes for tech template Fixes for braintree Update client presenter methods Updated composer lock Fixes for default mark down settings Fixes for tests. Fixes for auto billing when using credits Working on credit paymenta Fixes for store payment request Ensure documents array is an array Handle single contact object passed into array Handle single contact object passed into array Fixes for handling partial payments with credits Fixes for stripe error message when authorizing credit card Fixes for seeding languages Refactor for client balance Fixes for select box background color Fixes for registration fields and ensure client contact email is uniq… Remove redundant code from CompanySettings CLean up code paths for client balance Remove DispatchNow()

    Source code(tar.gz)
    Source code(zip)
    invoiceninja.zip(118.59 MB)
  • v5.5.19(Sep 2, 2022)

    Stripe Imports: Check for valid bank account property before attempting to iterate Set required fields to lazy Refactor for switch plans Better logging around setLateFee() Better logging around setLateFee() Fresh client prior to updating Update project name to just project for label Add option to send payment email when invoice has been marked as paid Fixes for canvaskit path Fixes for inventory notifications

    Source code(tar.gz)
    Source code(zip)
    invoiceninja.zip(118.17 MB)
  • v5.5.18(Sep 1, 2022)

    Minor fixes for invitation in view portal Fixes for showing invoice Allow client variables in purchase orders Refactor trial confirmed page Fixes for applying payment number Clean up login controller Catch and remove updates for oauth_provider_id Add checks for oauth provider id Fixes for github actions Use transaction when marking an invoice as paid Adjust spam filtering Minor fixes for templates Formatting for client emails Check for exec function prior to attemping to use it Minor fixes for client filter sorted by display name Support for vendor and vendor contact imports update vendor csv for tests Refactor recurring invoice query Improve query efficiency Fixes for transforming vendor contacts Add indexes to DB

    Source code(tar.gz)
    Source code(zip)
    invoiceninja.zip(118.17 MB)
  • v5.5.17(Aug 27, 2022)

    Add vendor & expense includes for purchase orders Add missing translations Add new column for invoice_task_project Fixes for project with both project and client id Wrap client paid to date in transaction Toggle sms verification based on domain Remove ssl config Ensure invoice marked as paid Update purchase order invitations table Update client records when trial activated in Stripe Refactor to nested queries to improve query planner Improve query efficiency

    Source code(tar.gz)
    Source code(zip)
    invoiceninja.zip(118.06 MB)
  • v5.5.16(Aug 24, 2022)

  • v5.5.15(Aug 22, 2022)

    Additions for hosted Update user observer to dispatch a job Set relative path for canvaskit Clean up for mail listener Fixes for task requests Adjust credit balance on client record Working on client credit balance field Tests for credit balance Update credit balances when a payment is deleted Add daily checks for credit balances Fixes for restoring a credit Refactor for payments to improve query efficiency Refactor payment queries for improved efficiency Valid credits rules

    Source code(tar.gz)
    Source code(zip)
    invoiceninja.zip(118.06 MB)
  • v5.5.12(Aug 19, 2022)

    Add validation for task time logs Fixes for single route actions Fixes for base path for canvas kit Fixes for showing fees in both the product and tax tables Change the order of email filters Tests for deleting an invoice Fixes for edge case when deleting an invoice with a partial payment Clean up for tests Remove snappdf download from composer script

    Source code(tar.gz)
    Source code(zip)
    invoiceninja.zip(255.72 MB)
  • v5.5.11(Aug 17, 2022)

  • v5.5.10(Aug 15, 2022)

    Additional checks for checkout.com Add missing fields for activity transformer Paytrace cleanup Improve subscription currencies Convert quote to project Convert quote to project tests Refund feature added for Forte Payment Gateway @kishanmnpatel UI Dashboard improvements

    Source code(tar.gz)
    Source code(zip)
    invoiceninja.zip(255.74 MB)
  • v5.5.9(Aug 12, 2022)

    Recurring invoice due on receipt @yois615 Relocate portalButton variable @yois615 System logger added for Forte. @kishanmnpatel Fixes for phpunit - github actions Centralize where we inject email tags Remove cs-fixer from github actions Fixes for stripe catching aborted payments Clean up logging Paytrace cleanup Update dependencies Fixes for generated number tests Fixes for confirmation password verification: Fixes for custom fields for purchase orders Fixes for language init Add recurring invoice id to licenses table Fixes for paytrace: Fixes for fee labels Make square postal code optional Catch when braintree does not create the customer

    Source code(tar.gz)
    Source code(zip)
    invoiceninja.zip(255.65 MB)
  • v5.5.8(Aug 7, 2022)

  • v5.5.7(Aug 5, 2022)

  • v5.5.6(Aug 3, 2022)

  • v5.5.5(Jul 30, 2022)

  • v5.5.3(Jul 29, 2022)

    Fixes for subscriptions - allow currency id to be passed through Add enabled_expense_tax_rates Fixes for BPP in subscriptions The "with" filter for the QueryFilters Define "with_property" for ProductFilters Fixes for tests Improve efficiency of queries relying on Country Fixes for livewire Fixes for Twilio Fixes for settings purchase order designs Minor fixes for check data Fixes for vendor documents Vendor documents Fixes for emails - remove mime types Rebasing commits from v5-develop Fixes for multidb + twilio Integrate twilio Fixes for lock

    Source code(tar.gz)
    Source code(zip)
    invoiceninja.zip(253.59 MB)
  • v5.5.2(Jul 26, 2022)

  • v5.5.0-R1(Jul 25, 2022)

  • v5.5.0(Jul 25, 2022)

    v5.5.0

    PLEASE NOTE! This is a major release, PHP 8.1 is the minimum PHP version for this release. Do not upgrade if you cannot support 8.1

    Apply Laravel coding style Shift bindings Move resources/lang folder Rename password validation rule Remove fruitcake/laravel-cors dependency Streamline $commands property Replace deprecated HEADER_X_FORWARDED_ALL constant Upgrade to Flysystem 3.0 Convert to Symfony Mailer Shift core files Convert optional() to nullsafe operator Use Faker methods Remove unnecessary $model property Convert route options to fluent methods Shift to class based routes Convert deprecated $dates property to $casts Shift config files Default config files Bump Laravel dependencies Set return type of base TestCase methods Adopt anonymous migrations Shift cleanup Laravel 9 Refactor for store client request Add laravel igniition to dependencies Fixes for tests Working on mail drivers Add boot up for gmail api transport Migration table for failed jobs Fixes for mailers Fixes for gmailer Working on 8.1 support Remove redundant packages Transforming office365 mailer Implement Microsoft Graph email Add psalm Fixes for invokable controllers in api.php Patches from v5-dev Padding for postmark Add hebrew to repo Silence errors from file_get_contents Replace 404 with not available screen for deleted entities Clean up for variables Fixes for portal button

    Source code(tar.gz)
    Source code(zip)
  • v5.4.12(Jul 23, 2022)

    Button for Client Portal @yois615 Add missing translations for task statuses Add exchange rate to factory Fixes for purchase orders and business design Add support for showing related entity documents on invoice Working on signatures Ensure signature is provided in client portal prior to moving to next… Fixes for quote approve button when signature dialog is closed Force delete activities on purge data Prep for Hebrew Fixes for task statuses Add hebrew to repo Client include for expenses Vendor include for expenses Fixes for vendors Fixes for mailer Notification for changes to v5.5

    Source code(tar.gz)
    Source code(zip)
    invoiceninja.zip(250.93 MB)
  • v5.4.11(Jul 19, 2022)

  • v5.4.10(Jul 17, 2022)

    Pad out expense when converted from Purchase Order Pad out expense when converted from Purchase Order Handle pay now redirects offsite Verify hash Add index to payment hashes Fixes for indexes Do no alter client balance after an invoice has been marked as paid Apple ID AUth Allow forced sending of first recurring invoice Silence bounce notifications Add webhook endpoint when connecting Stripe Wrap paid to date in transaction Apple OAuth Fixes for wrong payment types Start recurring invoice on send now Add status and client to task transformer Company Import|Export for purchase orders Add rules for invitations Translate entities

    Source code(tar.gz)
    Source code(zip)
    invoiceninja.zip(249.36 MB)
  • v5.4.9(Jul 8, 2022)

    Remove paid to date from credit PDF Uploads for purchase orders Add quantity to subscriptions Expense a Purchase Order Inventory management from purchase orders Update translations Introduce Bulgarian translations Fixes for migrations Fixes for language seeder Fixes for purchase order to expense Fixes for send_email bulk routes Minor fixes for invoice filters

    Source code(tar.gz)
    Source code(zip)
    invoiceninja.zip(248.79 MB)
Owner
Invoice Ninja
An open-code invoicing app built with Laravel and Flutter
Invoice Ninja
Helpdesk flutter app, working with laravel API

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

Les bogossitos 4 Jul 22, 2022
A simple to-do list built using flutter based on BLoC state management to manage your daily tasks .

?? Table of Contents About ScreenShots from the app Demo vedio Contributors About A to-do list flutter app to manage your daily tasks. it is built bas

Heba Ashraf 5 Sep 12, 2022
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

Darshit Rudani 9 Jul 6, 2022
This is a simple mobile application which calculates the person expenses during each week and tracks up where he spend his money!

Presonal Expenses Tracker Table of content About the project built with Getting Started installation Running ScreenShots About This is a simple mobile

Abdelaziz Salah 7 Sep 14, 2022
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

Artur Rymarz 14 Aug 7, 2022
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

Maksym Koriak 4 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

null 2 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. This plugin is based on WorkManager in Android and NSU

Flutter Community 753 Sep 23, 2022
A sophisticated tool for managing queues of asynchronous tasks, with a stream interface, strong typing and lots of helpful options.

Secretary A sophisticated task manager. Secretary is a tool for keeping your futures in check. It's useful for managing queues of asynchronous tasks,

Alex Baker 4 Aug 9, 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

Souvik Biswas 2 Feb 15, 2022
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

Jobin Biju 131 Sep 23, 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

null 0 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

Sultan Kautsar 1 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

Ahmed Hossny 1 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

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

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

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

huangyanxiong 9 May 13, 2020
Ouday 16 Sep 8, 2022