mirror of
https://github.com/crater-invoice/crater.git
synced 2025-10-27 11:41:09 -04:00
v6 update
This commit is contained in:
111
routes/api.php
111
routes/api.php
@ -48,6 +48,16 @@ use Crater\Http\Controllers\V1\Admin\Invoice\SendInvoicePreviewController;
|
||||
use Crater\Http\Controllers\V1\Admin\Item\ItemsController;
|
||||
use Crater\Http\Controllers\V1\Admin\Item\UnitsController;
|
||||
use Crater\Http\Controllers\V1\Admin\Mobile\AuthController;
|
||||
use Crater\Http\Controllers\V1\Admin\Modules\ApiTokenController;
|
||||
use Crater\Http\Controllers\V1\Admin\Modules\CompleteModuleInstallationController;
|
||||
use Crater\Http\Controllers\V1\Admin\Modules\CopyModuleController;
|
||||
use Crater\Http\Controllers\V1\Admin\Modules\DisableModuleController;
|
||||
use Crater\Http\Controllers\V1\Admin\Modules\DownloadModuleController;
|
||||
use Crater\Http\Controllers\V1\Admin\Modules\EnableModuleController;
|
||||
use Crater\Http\Controllers\V1\Admin\Modules\ModuleController;
|
||||
use Crater\Http\Controllers\V1\Admin\Modules\ModulesController;
|
||||
use Crater\Http\Controllers\V1\Admin\Modules\UnzipModuleController;
|
||||
use Crater\Http\Controllers\V1\Admin\Modules\UploadModuleController;
|
||||
use Crater\Http\Controllers\V1\Admin\Payment\PaymentMethodsController;
|
||||
use Crater\Http\Controllers\V1\Admin\Payment\PaymentsController;
|
||||
use Crater\Http\Controllers\V1\Admin\Payment\SendPaymentController;
|
||||
@ -60,10 +70,12 @@ use Crater\Http\Controllers\V1\Admin\Settings\CompanyController;
|
||||
use Crater\Http\Controllers\V1\Admin\Settings\DiskController;
|
||||
use Crater\Http\Controllers\V1\Admin\Settings\GetCompanyMailConfigurationController;
|
||||
use Crater\Http\Controllers\V1\Admin\Settings\GetCompanySettingsController;
|
||||
use Crater\Http\Controllers\V1\Admin\Settings\GetSettingsController;
|
||||
use Crater\Http\Controllers\V1\Admin\Settings\GetUserSettingsController;
|
||||
use Crater\Http\Controllers\V1\Admin\Settings\MailConfigurationController;
|
||||
use Crater\Http\Controllers\V1\Admin\Settings\TaxTypesController;
|
||||
use Crater\Http\Controllers\V1\Admin\Settings\UpdateCompanySettingsController;
|
||||
use Crater\Http\Controllers\V1\Admin\Settings\UpdateSettingsController;
|
||||
use Crater\Http\Controllers\V1\Admin\Settings\UpdateUserSettingsController;
|
||||
use Crater\Http\Controllers\V1\Admin\Update\CheckVersionController;
|
||||
use Crater\Http\Controllers\V1\Admin\Update\CopyFilesController;
|
||||
@ -73,6 +85,17 @@ use Crater\Http\Controllers\V1\Admin\Update\FinishUpdateController;
|
||||
use Crater\Http\Controllers\V1\Admin\Update\MigrateUpdateController;
|
||||
use Crater\Http\Controllers\V1\Admin\Update\UnzipUpdateController;
|
||||
use Crater\Http\Controllers\V1\Admin\Users\UsersController;
|
||||
use Crater\Http\Controllers\V1\Customer\Auth\ForgotPasswordController as AuthForgotPasswordController;
|
||||
use Crater\Http\Controllers\V1\Customer\Auth\ResetPasswordController as AuthResetPasswordController;
|
||||
use Crater\Http\Controllers\V1\Customer\Estimate\AcceptEstimateController as CustomerAcceptEstimateController;
|
||||
use Crater\Http\Controllers\V1\Customer\Estimate\EstimatesController as CustomerEstimatesController;
|
||||
use Crater\Http\Controllers\V1\Customer\Expense\ExpensesController as CustomerExpensesController;
|
||||
use Crater\Http\Controllers\V1\Customer\General\BootstrapController as CustomerBootstrapController;
|
||||
use Crater\Http\Controllers\V1\Customer\General\DashboardController as CustomerDashboardController;
|
||||
use Crater\Http\Controllers\V1\Customer\General\ProfileController as CustomerProfileController;
|
||||
use Crater\Http\Controllers\V1\Customer\Invoice\InvoicesController as CustomerInvoicesController;
|
||||
use Crater\Http\Controllers\V1\Customer\Payment\PaymentMethodController;
|
||||
use Crater\Http\Controllers\V1\Customer\Payment\PaymentsController as CustomerPaymentsController;
|
||||
use Crater\Http\Controllers\V1\Installation\AppDomainController;
|
||||
use Crater\Http\Controllers\V1\Installation\DatabaseConfigurationController;
|
||||
use Crater\Http\Controllers\V1\Installation\FilePermissionsController;
|
||||
@ -80,6 +103,7 @@ use Crater\Http\Controllers\V1\Installation\FinishController;
|
||||
use Crater\Http\Controllers\V1\Installation\LoginController;
|
||||
use Crater\Http\Controllers\V1\Installation\OnboardingWizardController;
|
||||
use Crater\Http\Controllers\V1\Installation\RequirementsController;
|
||||
use Crater\Http\Controllers\V1\Webhook\CronJobController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
/*
|
||||
@ -161,8 +185,6 @@ Route::prefix('/v1')->group(function () {
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
Route::middleware(['auth:sanctum', 'company'])->group(function () {
|
||||
Route::middleware(['bouncer'])->group(function () {
|
||||
|
||||
@ -368,6 +390,10 @@ Route::prefix('/v1')->group(function () {
|
||||
|
||||
Route::post('/company/settings', UpdateCompanySettingsController::class);
|
||||
|
||||
Route::get('/settings', GetSettingsController::class);
|
||||
|
||||
Route::post('/settings', UpdateSettingsController::class);
|
||||
|
||||
|
||||
// Mails
|
||||
//----------------------------------
|
||||
@ -435,5 +461,86 @@ Route::prefix('/v1')->group(function () {
|
||||
Route::post('/users/delete', [UsersController::class, 'delete']);
|
||||
|
||||
Route::apiResource('/users', UsersController::class);
|
||||
|
||||
|
||||
// Modules
|
||||
//----------------------------------
|
||||
|
||||
Route::prefix('/modules')->group(function () {
|
||||
Route::get('/', ModulesController::class);
|
||||
|
||||
Route::get('/check', ApiTokenController::class);
|
||||
|
||||
Route::get('/{module}', ModuleController::class);
|
||||
|
||||
Route::post('/{module}/enable', EnableModuleController::class);
|
||||
|
||||
Route::post('/{module}/disable', DisableModuleController::class);
|
||||
|
||||
Route::post('/download', DownloadModuleController::class);
|
||||
|
||||
Route::post('/upload', UploadModuleController::class);
|
||||
|
||||
Route::post('/unzip', UnzipModuleController::class);
|
||||
|
||||
Route::post('/copy', CopyModuleController::class);
|
||||
|
||||
Route::post('/complete', CompleteModuleInstallationController::class);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Route::prefix('/{company:slug}/customer')->group(function () {
|
||||
|
||||
|
||||
// Authentication & Password Reset
|
||||
//----------------------------------
|
||||
|
||||
Route::group(['prefix' => 'auth'], function () {
|
||||
|
||||
// Send reset password mail
|
||||
Route::post('password/email', [AuthForgotPasswordController::class, 'sendResetLinkEmail']);
|
||||
|
||||
// handle reset password form process
|
||||
Route::post('reset/password', [AuthResetPasswordController::class, 'reset'])->name('customer.password.reset');
|
||||
});
|
||||
|
||||
|
||||
// Invoices, Estimates, Payments and Expenses endpoints
|
||||
//-------------------------------------------------------
|
||||
|
||||
Route::middleware(['auth:customer', 'customer-portal'])->group(function () {
|
||||
Route::get('/bootstrap', CustomerBootstrapController::class);
|
||||
|
||||
Route::get('/dashboard', CustomerDashboardController::class);
|
||||
|
||||
Route::get('invoices', [CustomerInvoicesController::class, 'index']);
|
||||
|
||||
Route::get('invoices/{id}', [CustomerInvoicesController::class, 'show']);
|
||||
|
||||
Route::post('/estimate/{estimate}/status', CustomerAcceptEstimateController::class);
|
||||
|
||||
Route::get('estimates', [ CustomerEstimatesController::class, 'index']);
|
||||
|
||||
Route::get('estimates/{id}', [CustomerEstimatesController::class, 'show']);
|
||||
|
||||
Route::get('payments', [CustomerPaymentsController::class, 'index']);
|
||||
|
||||
Route::get('payments/{id}', [CustomerPaymentsController::class, 'show']);
|
||||
|
||||
Route::get('/payment-method', PaymentMethodController::class);
|
||||
|
||||
Route::get('expenses', [CustomerExpensesController::class, 'index']);
|
||||
|
||||
Route::get('expenses/{id}', [CustomerExpensesController::class, 'show']);
|
||||
|
||||
Route::post('/profile', [CustomerProfileController::class, 'updateProfile']);
|
||||
|
||||
Route::get('/me', [CustomerProfileController::class, 'getUser']);
|
||||
|
||||
Route::get('/countries', CountriesController::class);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Route::get('/cron', CronJobController::class)->middleware('cron-job');
|
||||
|
||||
179
routes/web.php
179
routes/web.php
@ -7,14 +7,17 @@ use Crater\Http\Controllers\V1\Admin\Report\ExpensesReportController;
|
||||
use Crater\Http\Controllers\V1\Admin\Report\ItemSalesReportController;
|
||||
use Crater\Http\Controllers\V1\Admin\Report\ProfitLossReportController;
|
||||
use Crater\Http\Controllers\V1\Admin\Report\TaxSummaryReportController;
|
||||
use Crater\Http\Controllers\V1\Customer\Auth\LoginController as CustomerLoginController;
|
||||
use Crater\Http\Controllers\V1\Customer\EstimatePdfController as CustomerEstimatePdfController;
|
||||
use Crater\Http\Controllers\V1\Customer\InvoicePdfController as CustomerInvoicePdfController;
|
||||
use Crater\Http\Controllers\V1\PDF\DownloadInvoicePdfController;
|
||||
use Crater\Http\Controllers\V1\PDF\DownloadPaymentPdfController;
|
||||
use Crater\Http\Controllers\V1\Customer\PaymentPdfController as CustomerPaymentPdfController;
|
||||
use Crater\Http\Controllers\V1\Modules\ScriptController;
|
||||
use Crater\Http\Controllers\V1\Modules\StyleController;
|
||||
use Crater\Http\Controllers\V1\PDF\DownloadReceiptController;
|
||||
use Crater\Http\Controllers\V1\PDF\EstimatePdfController;
|
||||
use Crater\Http\Controllers\V1\PDF\InvoicePdfController;
|
||||
use Crater\Http\Controllers\V1\PDF\PaymentPdfController;
|
||||
use Crater\Models\Company;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
/*
|
||||
@ -24,84 +27,93 @@ use Illuminate\Support\Facades\Route;
|
||||
|
|
||||
*/
|
||||
|
||||
|
||||
// Script Includes
|
||||
// ----------------------------------------------
|
||||
|
||||
|
||||
Route::get('/modules/styles/{style}', StyleController::class);
|
||||
|
||||
Route::get('/modules/scripts/{script}', ScriptController::class);
|
||||
|
||||
|
||||
// Admin Auth
|
||||
// ----------------------------------------------
|
||||
|
||||
Route::post('login', [LoginController::class, 'login']);
|
||||
|
||||
|
||||
Route::middleware('auth:sanctum')->prefix('reports')->group(function () {
|
||||
|
||||
// sales report by customer
|
||||
//----------------------------------
|
||||
Route::get('/sales/customers/{hash}', CustomerSalesReportController::class);
|
||||
|
||||
// sales report by items
|
||||
//----------------------------------
|
||||
Route::get('/sales/items/{hash}', ItemSalesReportController::class);
|
||||
|
||||
// report for expenses
|
||||
//----------------------------------
|
||||
Route::get('/expenses/{hash}', ExpensesReportController::class);
|
||||
|
||||
// report for tax summary
|
||||
//----------------------------------
|
||||
Route::get('/tax-summary/{hash}', TaxSummaryReportController::class);
|
||||
|
||||
// report for profit and loss
|
||||
//----------------------------------
|
||||
Route::get('/profit-loss/{hash}', ProfitLossReportController::class);
|
||||
});
|
||||
|
||||
|
||||
// view invoice pdf
|
||||
// -------------------------------------------------
|
||||
|
||||
Route::get('/invoices/pdf/{invoice:unique_hash}', InvoicePdfController::class);
|
||||
|
||||
|
||||
// download invoice pdf
|
||||
// -------------------------------------------------
|
||||
|
||||
Route::get('/invoices/pdf/download/{invoice:unique_hash}', DownloadInvoicePdfController::class);
|
||||
|
||||
|
||||
|
||||
// view estimate pdf
|
||||
// -------------------------------------------------
|
||||
|
||||
Route::get('/estimates/pdf/{estimate:unique_hash}', EstimatePdfController::class);
|
||||
|
||||
|
||||
// view payment pdf
|
||||
// -------------------------------------------------
|
||||
|
||||
Route::get('/payments/pdf/{payment:unique_hash}', PaymentPdfController::class);
|
||||
|
||||
|
||||
// download payment pdf
|
||||
// -------------------------------------------------
|
||||
|
||||
Route::get('/payments/pdf/download/{payment:unique_hash}', DownloadPaymentPdfController::class);
|
||||
|
||||
|
||||
// download expense receipt
|
||||
// -------------------------------------------------
|
||||
|
||||
Route::get('/expenses/{expense}/download-receipt', DownloadReceiptController::class);
|
||||
Route::get('/expenses/{expense}/receipt', ShowReceiptController::class);
|
||||
|
||||
|
||||
// customer pdf endpoints for invoice and estimate
|
||||
// -------------------------------------------------
|
||||
|
||||
Route::get('/customer/invoices/pdf/{invoice:unique_hash}', CustomerInvoicePdfController::class);
|
||||
|
||||
Route::get('/customer/estimates/pdf/{estimate:unique_hash}', CustomerEstimatePdfController::class);
|
||||
|
||||
|
||||
Route::get('auth/logout', function () {
|
||||
Auth::guard('web')->logout();
|
||||
});
|
||||
|
||||
|
||||
// Customer auth
|
||||
// ----------------------------------------------
|
||||
|
||||
Route::post('/{company:slug}/customer/login', CustomerLoginController::class);
|
||||
|
||||
Route::get('/{company:slug}/customer/logout', function () {
|
||||
Auth::guard('customer')->logout();
|
||||
});
|
||||
|
||||
Route::middleware('pdf-auth')->group(function () {
|
||||
Route::prefix('reports')->group(function () {
|
||||
|
||||
// sales report by customer
|
||||
//----------------------------------
|
||||
Route::get('/sales/customers/{hash}', CustomerSalesReportController::class);
|
||||
|
||||
// sales report by items
|
||||
//----------------------------------
|
||||
Route::get('/sales/items/{hash}', ItemSalesReportController::class);
|
||||
|
||||
// report for expenses
|
||||
//----------------------------------
|
||||
Route::get('/expenses/{hash}', ExpensesReportController::class);
|
||||
|
||||
// report for tax summary
|
||||
//----------------------------------
|
||||
Route::get('/tax-summary/{hash}', TaxSummaryReportController::class);
|
||||
|
||||
// report for profit and loss
|
||||
//----------------------------------
|
||||
Route::get('/profit-loss/{hash}', ProfitLossReportController::class);
|
||||
});
|
||||
|
||||
// invoice pdf
|
||||
// -------------------------------------------------
|
||||
Route::get('/invoices/pdf/{invoice:unique_hash}', InvoicePdfController::class);
|
||||
|
||||
// estimate pdf
|
||||
// -------------------------------------------------
|
||||
Route::get('/estimates/pdf/{estimate:unique_hash}', EstimatePdfController::class);
|
||||
|
||||
// payment pdf
|
||||
// -------------------------------------------------
|
||||
Route::get('/payments/pdf/{payment:unique_hash}', PaymentPdfController::class);
|
||||
|
||||
// download expense receipt
|
||||
// -------------------------------------------------
|
||||
Route::get('/expenses/{expense}/download-receipt', DownloadReceiptController::class);
|
||||
Route::get('/expenses/{expense}/receipt', ShowReceiptController::class);
|
||||
});
|
||||
|
||||
|
||||
// customer pdf endpoints for invoice, estimate and Payment
|
||||
// -------------------------------------------------
|
||||
|
||||
Route::prefix('/customer')->group(function () {
|
||||
Route::get('/invoices/{email_log:token}', [CustomerInvoicePdfController::class, 'getInvoice']);
|
||||
Route::get('/invoices/view/{email_log:token}', [CustomerInvoicePdfController::class, 'getPdf'])->name('invoice');
|
||||
|
||||
Route::get('/estimates/{email_log:token}', [CustomerEstimatePdfController::class, 'getEstimate']);
|
||||
Route::get('/estimates/view/{email_log:token}', [CustomerEstimatePdfController::class, 'getPdf'])->name('estimate');
|
||||
|
||||
Route::get('/payments/{email_log:token}', [CustomerPaymentPdfController::class, 'getPayment']);
|
||||
Route::get('/payments/view/{email_log:token}', [CustomerPaymentPdfController::class, 'getPdf'])->name('payment');
|
||||
});
|
||||
|
||||
|
||||
// Setup for installation of app
|
||||
// ----------------------------------------------
|
||||
|
||||
@ -117,10 +129,21 @@ Route::get('/admin/{vue?}', function () {
|
||||
return view('app');
|
||||
})->where('vue', '[\/\w\.-]*')->name('admin')->middleware(['install', 'redirect-if-unauthenticated']);
|
||||
|
||||
Route::get('{company:slug}/customer/{vue?}', function (Company $company) {
|
||||
return view('app')->with([
|
||||
'customer_logo' => get_customer_logo($company->id),
|
||||
'current_theme' => get_customer_portal_theme($company->id)
|
||||
]);
|
||||
})->where('vue', '[\/\w\.-]*')->name('customer.login')->middleware(['install']);
|
||||
|
||||
// Move other http requests to the Vue App
|
||||
// -------------------------------------------------
|
||||
|
||||
Route::get('/{vue?}', function () {
|
||||
Route::get('/', function () {
|
||||
return view('app');
|
||||
})->where('vue', '[\/\w\.-]*')->name('login')->middleware(['install']);
|
||||
})->where('vue', '[\/\w\.-]*')->name('home')->middleware(['install', 'guest']);
|
||||
|
||||
Route::get('/reset-password/{token}', function () {
|
||||
return view('app');
|
||||
})->where('vue', '[\/\w\.-]*')->name('home')->middleware(['install', 'guest']);
|
||||
|
||||
Route::get('/login', function () {
|
||||
return view('app');
|
||||
})->where('vue', '[\/\w\.-]*')->name('login')->middleware(['install', 'guest']);
|
||||
|
||||
Reference in New Issue
Block a user