akaunting 3.0 (the last dance)

This commit is contained in:
Burak Civan
2022-06-01 10:15:55 +03:00
parent cead09f6d4
commit d9c0764572
3812 changed files with 126831 additions and 102949 deletions

View File

@ -38,10 +38,6 @@ Route::group(['prefix' => 'common'], function () {
Route::get('items/export', 'Common\Items@export')->name('items.export');
Route::resource('items', 'Common\Items', ['middleware' => ['money', 'dropzone']]);
Route::post('notifications/disable', 'Common\Notifications@disable')->name('notifications.disable');
Route::get('notifications/readAll', 'Common\Notifications@readAll')->name('notifications.read-all');
Route::resource('notifications', 'Common\Notifications');
Route::post('bulk-actions/{group}/{type}', 'Common\BulkActions@action')->name('bulk-actions.action');
Route::get('reports/{report}/print', 'Common\Reports@print')->name('reports.print');
@ -60,18 +56,17 @@ Route::group(['prefix' => 'auth'], function () {
Route::get('users/{user}/read-invoices', 'Auth\Users@readOverdueInvoices')->name('users.read.invoices');
Route::get('users/{user}/enable', 'Auth\Users@enable')->name('users.enable');
Route::get('users/{user}/disable', 'Auth\Users@disable')->name('users.disable');
Route::get('users/{user}/invite', 'Auth\Users@invite')->name('users.invite');
Route::resource('users', 'Auth\Users', ['middleware' => ['dropzone']]);
Route::resource('roles', 'Auth\Roles');
Route::resource('permissions', 'Auth\Permissions');
Route::get('profile/{user}/edit', 'Auth\Users@edit')->name('profile.edit');
Route::patch('profile/{user}', 'Auth\Users@update')->name('profile.update');
});
Route::group(['prefix' => 'sales'], function () {
Route::get('invoices/{invoice}/sent', 'Sales\Invoices@markSent')->name('invoices.sent');
Route::get('invoices/{invoice}/cancelled', 'Sales\Invoices@markCancelled')->name('invoices.cancelled');
Route::get('invoices/{invoice}/email', 'Sales\Invoices@emailInvoice')->name('invoices.email');
Route::get('invoices/{invoice}/paid', 'Sales\Invoices@markPaid')->name('invoices.paid');
Route::get('invoices/{invoice}/print', 'Sales\Invoices@printInvoice')->name('invoices.print');
Route::get('invoices/{invoice}/pdf', 'Sales\Invoices@pdfInvoice')->name('invoices.pdf');
Route::get('invoices/{invoice}/duplicate', 'Sales\Invoices@duplicate')->name('invoices.duplicate');
@ -79,16 +74,12 @@ Route::group(['prefix' => 'sales'], function () {
Route::get('invoices/export', 'Sales\Invoices@export')->name('invoices.export');
Route::resource('invoices', 'Sales\Invoices', ['middleware' => ['date.format', 'money', 'dropzone']]);
Route::get('revenues/{revenue}/email', 'Sales\Revenues@emailRevenue')->name('revenues.email');
Route::get('revenues/{revenue}/print', 'Sales\Revenues@printRevenue')->name('revenues.print');
Route::get('revenues/{revenue}/pdf', 'Sales\Revenues@pdfRevenue')->name('revenues.pdf');
Route::get('revenues/{revenue}/duplicate', 'Sales\Revenues@duplicate')->name('revenues.duplicate');
Route::post('revenues/import', 'Sales\Revenues@import')->middleware('import')->name('revenues.import');
Route::get('revenues/export', 'Sales\Revenues@export')->name('revenues.export');
Route::resource('revenues', 'Sales\Revenues', ['middleware' => ['date.format', 'money', 'dropzone']]);
Route::get('recurring-invoices/{recurring_invoice}/duplicate', 'Sales\RecurringInvoices@duplicate')->name('recurring-invoices.duplicate');
Route::get('recurring-invoices/{recurring_invoice}/end', 'Sales\RecurringInvoices@end')->name('recurring-invoices.end');
Route::resource('recurring-invoices', 'Sales\RecurringInvoices', ['middleware' => ['date.format', 'money', 'dropzone']]);
Route::get('customers/{customer}/create-invoice', 'Sales\Customers@createInvoice')->name('customers.create-invoice');
Route::get('customers/{customer}/create-revenue', 'Sales\Customers@createRevenue')->name('customers.create-revenue');
Route::get('customers/{customer}/create-income', 'Sales\Customers@createIncome')->name('customers.create-income');
Route::get('customers/{customer}/enable', 'Sales\Customers@enable')->name('customers.enable');
Route::get('customers/{customer}/disable', 'Sales\Customers@disable')->name('customers.disable');
Route::get('customers/{customer}/duplicate', 'Sales\Customers@duplicate')->name('customers.duplicate');
@ -100,7 +91,6 @@ Route::group(['prefix' => 'sales'], function () {
Route::group(['prefix' => 'purchases'], function () {
Route::get('bills/{bill}/received', 'Purchases\Bills@markReceived')->name('bills.received');
Route::get('bills/{bill}/cancelled', 'Purchases\Bills@markCancelled')->name('bills.cancelled');
Route::get('bills/{bill}/paid', 'Purchases\Bills@markPaid')->name('bills.paid');
Route::get('bills/{bill}/print', 'Purchases\Bills@printBill')->name('bills.print');
Route::get('bills/{bill}/pdf', 'Purchases\Bills@pdfBill')->name('bills.pdf');
Route::get('bills/{bill}/duplicate', 'Purchases\Bills@duplicate')->name('bills.duplicate');
@ -108,16 +98,12 @@ Route::group(['prefix' => 'purchases'], function () {
Route::get('bills/export', 'Purchases\Bills@export')->name('bills.export');
Route::resource('bills', 'Purchases\Bills', ['middleware' => ['date.format', 'money', 'dropzone']]);
Route::get('payments/{payment}/email', 'Purchases\Payments@emailPayment')->name('payments.email');
Route::get('payments/{payment}/print', 'Purchases\Payments@printPayment')->name('payments.print');
Route::get('payments/{payment}/pdf', 'Purchases\Payments@pdfPayment')->name('payments.pdf');
Route::get('payments/{payment}/duplicate', 'Purchases\Payments@duplicate')->name('payments.duplicate');
Route::post('payments/import', 'Purchases\Payments@import')->middleware('import')->name('payments.import');
Route::get('payments/export', 'Purchases\Payments@export')->name('payments.export');
Route::resource('payments', 'Purchases\Payments', ['middleware' => ['date.format', 'money', 'dropzone']]);
Route::get('recurring-bills/{recurring_bill}/duplicate', 'Purchases\RecurringBills@duplicate')->name('recurring-bills.duplicate');
Route::get('recurring-bills/{recurring_bill}/end', 'Purchases\RecurringBills@end')->name('recurring-bills.end');
Route::resource('recurring-bills', 'Purchases\RecurringBills', ['middleware' => ['date.format', 'money', 'dropzone']]);
Route::get('vendors/{vendor}/create-bill', 'Purchases\Vendors@createBill')->name('vendors.create-bill');
Route::get('vendors/{vendor}/create-payment', 'Purchases\Vendors@createPayment')->name('vendors.create-payment');
Route::get('vendors/{vendor}/create-expense', 'Purchases\Vendors@createExpense')->name('vendors.create-expense');
Route::get('vendors/{vendor}/enable', 'Purchases\Vendors@enable')->name('vendors.enable');
Route::get('vendors/{vendor}/disable', 'Purchases\Vendors@disable')->name('vendors.disable');
Route::get('vendors/{vendor}/duplicate', 'Purchases\Vendors@duplicate')->name('vendors.duplicate');
@ -128,8 +114,8 @@ Route::group(['prefix' => 'purchases'], function () {
Route::group(['prefix' => 'banking'], function () {
Route::get('accounts/currency', 'Banking\Accounts@currency')->name('accounts.currency');
Route::get('accounts/{account}/create-revenue', 'Banking\Accounts@createRevenue')->name('accounts.create-revenue');
Route::get('accounts/{account}/create-payment', 'Banking\Accounts@createPayment')->name('accounts.create-payment');
Route::get('accounts/{account}/create-income', 'Banking\Accounts@createIncome')->name('accounts.create-income');
Route::get('accounts/{account}/create-expense', 'Banking\Accounts@createExpense')->name('accounts.create-expense');
Route::get('accounts/{account}/create-transfer', 'Banking\Accounts@createTransfer')->name('accounts.create-transfer');
Route::get('accounts/{account}/see-performance', 'Banking\Accounts@seePerformance')->name('accounts.see-performance');
Route::get('accounts/{account}/enable', 'Banking\Accounts@enable')->name('accounts.enable');
@ -137,11 +123,22 @@ Route::group(['prefix' => 'banking'], function () {
Route::get('accounts/{account}/duplicate', 'Banking\Accounts@duplicate')->name('accounts.duplicate');
Route::resource('accounts', 'Banking\Accounts', ['middleware' => ['date.format', 'money']]);
Route::post('transactions/import', 'Banking\Transactions@import')->middleware('import')->name('transactions.import');
Route::post('transactions/import', 'Banking\Transactions@import')->name('transactions.import');
Route::get('transactions/export', 'Banking\Transactions@export')->name('transactions.export');
Route::get('transactions/{transaction}/email', 'Banking\Transactions@emailTransaction')->name('transactions.email');
Route::get('transactions/{transaction}/print', 'Banking\Transactions@printTransaction')->name('transactions.print');
Route::get('transactions/{transaction}/pdf', 'Banking\Transactions@pdfTransaction')->name('transactions.pdf');
Route::get('transactions/{transaction}/duplicate', 'Banking\Transactions@duplicate')->name('transactions.duplicate');
Route::post('transactions/{transaction}/connect', 'Banking\Transactions@connect')->name('transactions.connect');
Route::post('transactions/import', 'Banking\Transactions@import')->middleware('import')->name('transactions.import');
Route::get('transactions/export', 'Banking\Transactions@export')->name('transactions.export');
Route::resource('transactions', 'Banking\Transactions', ['middleware' => ['date.format', 'money', 'dropzone']]);
Route::get('recurring-transactions/{recurring_transaction}/duplicate', 'Banking\RecurringTransactions@duplicate')->name('recurring-transactions.duplicate');
Route::get('recurring-transactions/{recurring_transaction}/end', 'Banking\RecurringTransactions@end')->name('recurring-transactions.end');
Route::resource('recurring-transactions', 'Banking\RecurringTransactions', ['middleware' => ['date.format', 'money', 'dropzone']]);
Route::get('transfers/{transfer}/print', 'Banking\Transfers@printTransfer')->name('transfers.print');
Route::get('transfers/{transfer}/pdf', 'Banking\Transfers@pdfTransfer')->name('transfers.pdf');
Route::get('transfers/{transfer}/duplicate', 'Banking\Transfers@duplicate')->name('transfers.duplicate');
@ -168,18 +165,26 @@ Route::group(['prefix' => 'settings'], function () {
Route::get('taxes/{tax}/enable', 'Settings\Taxes@enable')->name('taxes.enable');
Route::get('taxes/{tax}/disable', 'Settings\Taxes@disable')->name('taxes.disable');
Route::post('taxes/import', 'Settings\Taxes@import')->middleware('import')->name('taxes.import');
Route::get('taxes/export', 'Settings\Taxes@export')->name('taxes.export');
Route::resource('taxes', 'Settings\Taxes');
Route::group(['as' => 'settings.'], function () {
Route::get('settings', 'Settings\Settings@index')->name('index');
Route::patch('settings', 'Settings\Settings@update')->middleware('dropzone')->name('update');
Route::get('company', 'Settings\Company@edit')->name('company.edit');
Route::patch('company', 'Settings\Company@update')->middleware('dropzone')->name('company.update');
Route::get('localisation', 'Settings\Localisation@edit')->name('localisation.edit');
Route::patch('localisation', 'Settings\Localisation@update')->name('localisation.update');
Route::get('invoice', 'Settings\Invoice@edit')->name('invoice.edit');
Route::patch('invoice', 'Settings\Invoice@update')->name('invoice.update');
Route::get('default', 'Settings\Defaults@edit')->name('default.edit');
Route::patch('default', 'Settings\Defaults@update')->name('default.update');
Route::get('email', 'Settings\Email@edit')->name('email.edit');
Route::patch('email', 'Settings\Email@update')->name('email.update');
Route::get('email-templates', 'Settings\EmailTemplates@edit')->name('email-templates.edit');
Route::patch('email-templates', 'Settings\EmailTemplates@update')->name('email-templates.update');
Route::get('email-templates/get', 'Settings\EmailTemplates@get')->name('email-templates.get');
Route::get('schedule', 'Settings\Schedule@edit')->name('schedule.edit');
Route::patch('schedule', 'Settings\Schedule@update')->name('schedule.update');
});
});
@ -204,6 +209,7 @@ Route::group(['as' => 'apps.', 'prefix' => 'apps'], function () {
Route::get('new', 'Modules\Tiles@newModules')->name('new');
Route::get('free', 'Modules\Tiles@freeModules')->name('free');
Route::get('search', 'Modules\Tiles@searchModules')->name('search');
Route::post('{type}/load-more', 'Modules\Tiles@loadMore')->name('load-more');
Route::post('steps', 'Modules\Item@steps')->name('steps');
Route::post('download', 'Modules\Item@download')->name('download');
Route::post('unzip', 'Modules\Item@unzip')->name('unzip');
@ -249,5 +255,10 @@ Route::group(['as' => 'modals.', 'prefix' => 'modals'], function () {
'names' => 'documents.document.transactions',
'middleware' => ['date.format', 'money', 'dropzone']
]);
Route::resource('transactions/{transaction}/emails', 'Modals\TransactionEmails', ['names' => 'transactions.emails']);
Route::resource('transactions/{transaction}/share', 'Modals\TransactionShare', ['names' => 'transactions.share']);
Route::resource('invoices/{invoice}/emails', 'Modals\InvoiceEmails', ['names' => 'invoices.emails']);
Route::resource('invoices/{invoice}/share', 'Modals\InvoiceShare', ['names' => 'invoices.share']);
Route::resource('taxes', 'Modals\Taxes');
});

View File

@ -3,76 +3,82 @@
use Illuminate\Support\Facades\Route;
/**
* 'api' prefix applied to all routes
* 'api' middleware and prefix applied to all routes
*
* @see \App\Providers\Route::mapApiRoutes
*/
$api = app('Dingo\Api\Routing\Router');
Route::group(['as' => 'api.'], function () {
// Ping
Route::get('ping', 'Common\Ping@pong')->name('ping');
$api->version('v3', ['middleware' => ['api']], function($api) {
$api->group(['as' => 'api', 'namespace' => 'App\Http\Controllers\Api'], function($api) {
// Companies
$api->get('companies/{company}/owner', 'Common\Companies@canAccess')->name('.companies.owner');
$api->get('companies/{company}/enable', 'Common\Companies@enable')->name('.companies.enable');
$api->get('companies/{company}/disable', 'Common\Companies@disable')->name('.companies.disable');
$api->resource('companies', 'Common\Companies', ['middleware' => ['dropzone']]);
// Users
Route::get('users/{user}/enable', 'Auth\Users@enable')->name('users.enable');
Route::get('users/{user}/disable', 'Auth\Users@disable')->name('users.disable');
Route::apiResource('users', 'Auth\Users');
// Dashboards
$api->get('dashboards/{dashboard}/enable', 'Common\Dashboards@enable')->name('.dashboards.enable');
$api->get('dashboards/{dashboard}/disable', 'Common\Dashboards@disable')->name('.dashboards.disable');
$api->resource('dashboards', 'Common\Dashboards');
// Companies
Route::get('companies/{company}/owner', 'Common\Companies@canAccess')->name('companies.owner');
Route::get('companies/{company}/enable', 'Common\Companies@enable')->name('companies.enable');
Route::get('companies/{company}/disable', 'Common\Companies@disable')->name('companies.disable');
Route::apiResource('companies', 'Common\Companies', ['middleware' => ['dropzone']]);
// Items
$api->get('items/{item}/enable', 'Common\Items@enable')->name('.items.enable');
$api->get('items/{item}/disable', 'Common\Items@disable')->name('.items.disable');
$api->resource('items', 'Common\Items', ['middleware' => ['dropzone']]);
// Dashboards
Route::get('dashboards/{dashboard}/enable', 'Common\Dashboards@enable')->name('dashboards.enable');
Route::get('dashboards/{dashboard}/disable', 'Common\Dashboards@disable')->name('dashboards.disable');
Route::apiResource('dashboards', 'Common\Dashboards');
// Contacts
$api->get('contacts/{contact}/enable', 'Common\Contacts@enable')->name('.contacts.enable');
$api->get('contacts/{contact}/disable', 'Common\Contacts@disable')->name('.contacts.disable');
$api->resource('contacts', 'Common\Contacts');
// Items
Route::get('items/{item}/enable', 'Common\Items@enable')->name('items.enable');
Route::get('items/{item}/disable', 'Common\Items@disable')->name('items.disable');
Route::apiResource('items', 'Common\Items', ['middleware' => ['dropzone']]);
// Sales
$api->resource('documents', 'Document\Documents', ['middleware' => ['date.format', 'money', 'dropzone']]);
$api->resource('documents.transactions', 'Document\DocumentTransactions', ['middleware' => ['date.format', 'money', 'dropzone']]);
$api->get('documents/{document}/received', 'Document\Documents@received')->name('.documents.received');
// Contacts
Route::get('contacts/{contact}/enable', 'Common\Contacts@enable')->name('contacts.enable');
Route::get('contacts/{contact}/disable', 'Common\Contacts@disable')->name('contacts.disable');
Route::apiResource('contacts', 'Common\Contacts');
// Banking
$api->get('accounts/{account}/enable', 'Banking\Accounts@enable')->name('.accounts.enable');
$api->get('accounts/{account}/disable', 'Banking\Accounts@disable')->name('.accounts.disable');
$api->resource('accounts', 'Banking\Accounts', ['middleware' => ['date.format', 'money', 'dropzone']]);
$api->resource('reconciliations', 'Banking\Reconciliations', ['middleware' => ['date.format', 'money', 'dropzone']]);
$api->resource('transactions', 'Banking\Transactions', ['middleware' => ['date.format', 'money', 'dropzone']]);
$api->resource('transfers', 'Banking\Transfers', ['middleware' => ['date.format', 'money', 'dropzone']]);
// Documents
Route::get('documents/{document}/received', 'Document\Documents@received')->name('documents.received');
Route::apiResource('documents', 'Document\Documents', ['middleware' => ['date.format', 'money', 'dropzone']]);
Route::apiResource('documents.transactions', 'Document\DocumentTransactions', ['middleware' => ['date.format', 'money', 'dropzone']]);
// Reports
$api->resource('reports', 'Common\Reports');
// Accounts
Route::get('accounts/{account}/enable', 'Banking\Accounts@enable')->name('accounts.enable');
Route::get('accounts/{account}/disable', 'Banking\Accounts@disable')->name('accounts.disable');
Route::apiResource('accounts', 'Banking\Accounts', ['middleware' => ['date.format', 'money', 'dropzone']]);
// Translations
$api->get('translations/{locale}/all', 'Common\Translations@all')->name('.translations.all');
$api->get('translations/{locale}/{file}', 'Common\Translations@file')->name('.translations.file');
// Reconciliations
Route::apiResource('reconciliations', 'Banking\Reconciliations', ['middleware' => ['date.format', 'money', 'dropzone']]);
// Settings
$api->get('categories/{category}/enable', 'Settings\Categories@enable')->name('.categories.enable');
$api->get('categories/{category}/disable', 'Settings\Categories@disable')->name('.categories.disable');
$api->resource('categories', 'Settings\Categories');
$api->get('currencies/{currency}/enable', 'Settings\Currencies@enable')->name('.currencies.enable');
$api->get('currencies/{currency}/disable', 'Settings\Currencies@disable')->name('.currencies.disable');
$api->resource('currencies', 'Settings\Currencies');
$api->resource('settings', 'Settings\Settings');
$api->get('taxes/{tax}/enable', 'Settings\Taxes@enable')->name('.taxes.enable');
$api->get('taxes/{tax}/disable', 'Settings\Taxes@disable')->name('.taxes.disable');
$api->resource('taxes', 'Settings\Taxes');
// Transactions
Route::apiResource('transactions', 'Banking\Transactions', ['middleware' => ['date.format', 'money', 'dropzone']]);
// Common
$api->resource('ping', 'Common\Ping');
// Transfers
Route::apiResource('transfers', 'Banking\Transfers', ['middleware' => ['date.format', 'money', 'dropzone']]);
// Auth
$api->resource('permissions', 'Auth\Permissions');
$api->resource('roles', 'Auth\Roles');
$api->get('users/{user}/enable', 'Auth\Users@enable')->name('.users.enable');
$api->get('users/{user}/disable', 'Auth\Users@disable')->name('.users.disable');
$api->resource('users', 'Auth\Users');
});
// Reports
Route::resource('reports', 'Common\Reports');
// Categories
Route::get('categories/{category}/enable', 'Settings\Categories@enable')->name('categories.enable');
Route::get('categories/{category}/disable', 'Settings\Categories@disable')->name('categories.disable');
Route::apiResource('categories', 'Settings\Categories');
// Currencies
Route::get('currencies/{currency}/enable', 'Settings\Currencies@enable')->name('currencies.enable');
Route::get('currencies/{currency}/disable', 'Settings\Currencies@disable')->name('currencies.disable');
Route::apiResource('currencies', 'Settings\Currencies');
// Taxes
Route::get('taxes/{tax}/enable', 'Settings\Taxes@enable')->name('taxes.enable');
Route::get('taxes/{tax}/disable', 'Settings\Taxes@disable')->name('taxes.disable');
Route::apiResource('taxes', 'Settings\Taxes');
// Settings
Route::apiResource('settings', 'Settings\Settings');
// Translations
Route::get('translations/{locale}/all', 'Common\Translations@all')->name('translations.all');
Route::get('translations/{locale}/{file}', 'Common\Translations@file')->name('translations.file');
});

View File

@ -19,6 +19,9 @@ Route::group(['prefix' => 'auth'], function () {
//Route::get('reset', 'Auth\Reset@create');
Route::get('reset/{token}', 'Auth\Reset@create')->name('reset');
Route::post('reset', 'Auth\Reset@store')->name('reset.store');
Route::get('register/{token}', 'Auth\Register@create')->name('register');
Route::post('register', 'Auth\Register@store')->name('register.store');
});
Route::get('/', function () {

View File

@ -12,8 +12,7 @@ use Illuminate\Support\Facades\Route;
Route::group(['as' => 'portal.'], function () {
Route::get('invoices/{invoice}/print', 'Portal\Invoices@printInvoice')->name('invoices.print');
Route::get('invoices/{invoice}/pdf', 'Portal\Invoices@pdfInvoice')->name('invoices.pdf');
Route::post('invoices/{invoice}/payment', 'Portal\Invoices@payment')->name('invoices.payment');
Route::post('invoices/{invoice}/confirm', 'Portal\Invoices@confirm')->name('invoices.confirm');
Route::get('invoices/{invoice}/finish', 'Portal\Invoices@finish')->name('invoices.finish');
Route::resource('invoices', 'Portal\Invoices');
Route::get('payments/currencies', 'Portal\Payments@currencies')->name('payment.currencies');

23
routes/preview.php Normal file
View File

@ -0,0 +1,23 @@
<?php
use Illuminate\Support\Facades\Route;
/**
* 'preview' middleware and prefix applied to all routes
*
* @see \App\Providers\Route::mapPreviewRoutes
* @see \modules\OfflinePayments\Routes\preview.php for module example
*/
Route::group(['as' => 'preview.'], function () {
Route::get('invoices/{invoice}', 'Portal\Invoices@preview')->name('invoices.show');
Route::get('invoices/{invoice}/print', 'Portal\Invoices@printInvoice')->name('invoices.print');
Route::get('invoices/{invoice}/pdf', 'Portal\Invoices@pdfInvoice')->name('invoices.pdf');
Route::post('invoices/{invoice}/payment', 'Portal\Invoices@payment')->name('invoices.payment');
Route::post('invoices/{invoice}/confirm', 'Portal\Invoices@confirm')->name('invoices.confirm');
Route::get('invoices/{invoice}/finish', 'Portal\Invoices@finish')->name('invoices.finish');
Route::get('payments/{payment}', 'Portal\Payments@preview')->name('payments.show');
Route::get('payments/{payment}/print', 'Portal\Payments@printPayment')->name('payments.print');
Route::get('payments/{payment}/pdf', 'Portal\Payments@pdfPayment')->name('payments.pdf');
});

View File

@ -14,6 +14,7 @@ Route::get('invoices/{invoice}/print', 'Portal\Invoices@printInvoice')->name('si
Route::get('invoices/{invoice}/pdf', 'Portal\Invoices@pdfInvoice')->name('signed.invoices.pdf');
Route::post('invoices/{invoice}/payment', 'Portal\Invoices@payment')->name('signed.invoices.payment');
Route::post('invoices/{invoice}/confirm', 'Portal\Invoices@confirm')->name('signed.invoices.confirm');
Route::get('invoices/{invoice}/finish', 'Portal\Invoices@finish')->name('signed.invoices.finish');
Route::get('payments/{payment}', 'Portal\Payments@signed')->name('signed.payments.show');
Route::get('payments/{payment}/print', 'Portal\Payments@printPayment')->name('signed.payments.print');