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

@@ -6,6 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Pagination\Paginator;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\ServiceProvider as Provider;
use Laravel\Sanctum\Sanctum;
class App extends Provider
{
@@ -23,6 +24,8 @@ class App extends Provider
if (config('app.env') !== 'production') {
$this->app->register(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class);
}
Sanctum::ignoreMigrations();
}
/**

View File

@@ -2,6 +2,10 @@
namespace App\Providers;
use App\View\Components\Form\Group\Sswitch;
use App\View\Components\Media\Ffile as MFile;
use App\View\Components\Form\Input\Ffile;
use App\View\Components\Index\Ddefault;
use App\Traits\DateTime;
use Illuminate\Support\Facades\Blade as Facade;
use Illuminate\Support\ServiceProvider;
@@ -28,6 +32,11 @@ class Blade extends ServiceProvider
Facade::if('readonly', function () {
return config('read-only.enabled');
});
Facade::component('form.group.switch', Sswitch::class);
Facade::component('media.file', MFile::class);
Facade::component('form.input.file', Ffile::class);
Facade::component('index.default', Ddefault::class);
}
/**

View File

@@ -15,32 +15,7 @@ class Event extends Provider
'App\Events\Install\UpdateFinished' => [
'App\Listeners\Update\CreateModuleUpdatedHistory',
'App\Listeners\Module\UpdateExtraModules',
'App\Listeners\Update\V20\Version200',
'App\Listeners\Update\V20\Version203',
'App\Listeners\Update\V20\Version205',
'App\Listeners\Update\V20\Version207',
'App\Listeners\Update\V20\Version208',
'App\Listeners\Update\V20\Version209',
'App\Listeners\Update\V20\Version2014',
'App\Listeners\Update\V20\Version2017',
'App\Listeners\Update\V20\Version2020',
'App\Listeners\Update\V20\Version2023',
'App\Listeners\Update\V20\Version2024',
'App\Listeners\Update\V21\Version210',
'App\Listeners\Update\V21\Version213',
'App\Listeners\Update\V21\Version218',
'App\Listeners\Update\V21\Version219',
'App\Listeners\Update\V21\Version2112',
'App\Listeners\Update\V21\Version2114',
'App\Listeners\Update\V21\Version2116',
'App\Listeners\Update\V21\Version2117',
'App\Listeners\Update\V21\Version2118',
'App\Listeners\Update\V21\Version2124',
'App\Listeners\Update\V21\Version2125',
'App\Listeners\Update\V21\Version2126',
'App\Listeners\Update\V21\Version2127',
'App\Listeners\Update\V21\Version2133',
'App\Listeners\Update\V21\Version2134',
'App\Listeners\Update\V30\Version300',
],
'Illuminate\Auth\Events\Login' => [
'App\Listeners\Auth\Login',
@@ -55,6 +30,12 @@ class Event extends Provider
'App\Events\Auth\LandingPageShowing' => [
'App\Listeners\Auth\AddLandingPages',
],
'App\Events\Auth\InvitationCreated' => [
'App\Listeners\Auth\SendUserInvitation',
],
'App\Events\Auth\UserDeleted' => [
'App\Listeners\Auth\DeleteUserInvitation',
],
'App\Events\Document\DocumentCreated' => [
'App\Listeners\Document\CreateDocumentCreatedHistory',
'App\Listeners\Document\IncreaseNextDocumentNumber',
@@ -84,15 +65,28 @@ class Event extends Provider
],
'App\Events\Document\DocumentViewed' => [
'App\Listeners\Document\MarkDocumentViewed',
'App\Listeners\Document\SendDocumentViewNotification',
],
'App\Events\Install\UpdateFailed' => [
'App\Listeners\Update\SendNotificationOnFailure',
],
'App\Events\Menu\NotificationsCreated' => [
'App\Listeners\Menu\ShowInNotifications',
],
'App\Events\Menu\AdminCreated' => [
'App\Listeners\Menu\AddAdminItems',
'App\Listeners\Menu\ShowInAdmin',
],
'App\Events\Menu\ProfileCreated' => [
'App\Listeners\Menu\ShowInProfile',
],
'App\Events\Menu\SettingsCreated' => [
'App\Listeners\Menu\ShowInSettings',
],
'App\Events\Menu\NewwCreated' => [
'App\Listeners\Menu\ShowInNeww',
],
'App\Events\Menu\PortalCreated' => [
'App\Listeners\Menu\AddPortalItems',
'App\Listeners\Menu\ShowInPortal',
],
'App\Events\Module\Installed' => [
'App\Listeners\Module\InstallExtraModules',
@@ -101,6 +95,9 @@ class Event extends Provider
'App\Events\Module\Uninstalled' => [
'App\Listeners\Module\FinishUninstallation',
],
'App\Events\Banking\TransactionCreated' => [
'App\Listeners\Banking\IncreaseNextTransactionNumber',
],
];
/**

View File

@@ -1,160 +0,0 @@
<?php
namespace App\Providers;
use Form as Facade;
use Illuminate\Support\ServiceProvider as Provider;
class Form extends Provider
{
/**
* Register bindings in the container.
*
* @return void
*/
public function boot()
{
// Form components
Facade::component('moneyGroup', 'partials.form.money_group', [
'name', 'text', 'icon', 'attributes' => ['required' => 'required'], 'value' => null, 'col' => 'col-md-6', 'group_class' => null
]);
Facade::component('dateTimeGroup', 'partials.form.date_time_group', [
'name', 'text', 'icon', 'attributes' => ['required' => 'required'], 'value' => null, 'col' => 'col-md-6', 'group_class' => null
]);
Facade::component('dateGroup', 'partials.form.date_group', [
'name', 'text', 'icon', 'attributes' => ['required' => 'required'], 'value' => null, 'col' => 'col-md-6', 'group_class' => null
]);
Facade::component('timeGroup', 'partials.form.time_group', [
'name', 'text', 'icon', 'attributes' => ['required' => 'required'], 'value' => null, 'col' => 'col-md-6', 'group_class' => null
]);
Facade::component('textGroup', 'partials.form.text_group', [
'name', 'text', 'icon', 'attributes' => ['required' => 'required'], 'value' => null, 'col' => 'col-md-6', 'group_class' => null
]);
Facade::component('emailGroup', 'partials.form.email_group', [
'name', 'text', 'icon', 'attributes' => ['required' => 'required'], 'value' => null, 'col' => 'col-md-6', 'group_class' => null
]);
Facade::component('passwordGroup', 'partials.form.password_group', [
'name', 'text', 'icon', 'attributes' => ['required' => 'required'], 'col' => 'col-md-6', 'group_class' => null
]);
Facade::component('numberGroup', 'partials.form.number_group', [
'name', 'text', 'icon', 'attributes' => ['required' => 'required'], 'value' => null, 'col' => 'col-md-6', 'group_class' => null
]);
Facade::component('multiSelectGroup', 'partials.form.multi_select_group', [
'name', 'text', 'icon', 'values', 'selected' => null, 'attributes' => ['required' => 'required'], 'col' => 'col-md-6', 'group_class' => null
]);
Facade::component('multiSelectAddNewGroup', 'partials.form.multi_select_add_new_group', [
'name', 'text', 'icon', 'values', 'selected' => null, 'attributes' => ['required' => 'required'], 'col' => 'col-md-6', 'group_class' => null
]);
Facade::component('multiSelectRemoteGroup', 'partials.form.multi_select_remote_group', [
'name', 'text', 'icon', 'values', 'selected' => null, 'attributes' => ['required' => 'required'], 'col' => 'col-md-6', 'group_class' => null
]);
Facade::component('multiSelectRemoteAddNewGroup', 'partials.form.multi_select_remote_add_new_group', [
'name', 'text', 'icon', 'values', 'selected' => null, 'attributes' => ['required' => 'required', 'path' => ''], 'col' => 'col-md-6', 'group_class' => null
]);
Facade::component('selectGroup', 'partials.form.select_group', [
'name', 'text', 'icon', 'values', 'selected' => null, 'attributes' => ['required' => 'required'], 'col' => 'col-md-6', 'group_class' => null
]);
Facade::component('selectAddNewGroup', 'partials.form.select_add_new_group', [
'name', 'text', 'icon', 'values', 'selected' => null, 'attributes' => ['required' => 'required', 'path' => ''], 'col' => 'col-md-6', 'group_class' => null
]);
Facade::component('selectGroupGroup', 'partials.form.select_group_group', [
'name', 'text', 'icon', 'values', 'selected' => null, 'attributes' => ['required' => 'required'], 'col' => 'col-md-6', 'group_class' => null
]);
Facade::component('selectGroupAddNewGroup', 'partials.form.select_group_add_new_group', [
'name', 'text', 'icon', 'values', 'selected' => null, 'attributes' => ['required' => 'required'], 'col' => 'col-md-6', 'group_class' => null
]);
Facade::component('selectRemoteGroup', 'partials.form.select_remote_group', [
'name', 'text', 'icon', 'values', 'selected' => null, 'attributes' => ['required' => 'required'], 'col' => 'col-md-6', 'group_class' => null
]);
Facade::component('selectRemoteAddNewGroup', 'partials.form.select_remote_add_new_group', [
'name', 'text', 'icon', 'values', 'selected' => null, 'attributes' => ['required' => 'required', 'path' => ''], 'col' => 'col-md-6', 'group_class' => null
]);
Facade::component('textareaGroup', 'partials.form.textarea_group', [
'name', 'text', 'icon', 'value' => null, 'attributes' => ['rows' => '3'], 'col' => 'col-md-12', 'group_class' => null
]);
Facade::component('textEditorGroup', 'partials.form.text_editor_group', [
'name', 'text', 'icon', 'value' => null, 'attributes' => ['rows' => '3'], 'col' => 'col-md-12', 'group_class' => null
]);
Facade::component('radioGroup', 'partials.form.radio_group', [
'name', 'text', 'value' => null, 'enable' => trans('general.yes'), 'disable' => trans('general.no'), 'attributes' => [], 'col' => 'col-md-6',
]);
Facade::component('checkboxGroup', 'partials.form.checkbox_group', [
'name', 'text', 'items' => [], 'value' => 'name', 'id' => 'id', 'selected'=>[], 'attributes' => ['required' => 'required'], 'col' => 'col-md-12',
]);
Facade::component('fileGroup', 'partials.form.file_group', [
'name', 'text', 'icon', 'attributes' => [], 'value' => null, 'col' => 'col-md-6',
]);
Facade::component('deleteButton', 'partials.form.delete_button', [
'item', 'url', 'text' => '', 'value' => 'name', 'id' => 'id',
]);
Facade::component('deleteLink', 'partials.form.delete_link', [
'item', 'url', 'text' => '', 'value' => 'name', 'id' => 'id',
]);
Facade::component('saveButtons', 'partials.form.save_buttons', [
'cancel', 'col' => 'col-md-12',
]);
Facade::component('recurring', 'partials.form.recurring', [
'page', 'model' => null, 'col' => 'col-md-6',
]);
Facade::component('invoice_text', 'partials.form.invoice_text', [
'name', 'text', 'icon', 'values', 'selected' => null, 'attributes' => ['required' => 'required'], 'input_name', 'input_value', 'col' => 'col-md-6', 'group_class' => null
]);
Facade::component('dateRange', 'partials.form.date_range', [
'name', 'text', 'icon', 'attributes' => ['required' => 'required'], 'value' => null, 'col' => 'col-md-6',
]);
Facade::component('bulkActionRowGroup', 'partials.form.bulk_action_row_group', [
'text', 'actions', 'path', 'attributes' => []
]);
Facade::component('bulkActionAllGroup', 'partials.form.bulk_action_all_group', [
'attributes' => []
]);
Facade::component('bulkActionGroup', 'partials.form.bulk_action_group', [
'id', 'name', 'attributes' => []
]);
Facade::component('enabledGroup', 'partials.form.enabled_group', [
'id', 'name', 'value'
]);
}
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
//
}
}

View File

@@ -2,6 +2,7 @@
namespace App\Providers;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Http\Request;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Str;
@@ -27,7 +28,7 @@ class Macro extends ServiceProvider
public function boot()
{
Request::macro('isApi', function () {
return $this->is(config('api.subtype') . '/*');
return $this->is(config('api.prefix') . '/*');
});
Request::macro('isNotApi', function () {
@@ -50,6 +51,14 @@ class Macro extends ServiceProvider
return !$this->isInstall();
});
Request::macro('isPreview', function ($company_id) {
return $this->is($company_id . '/preview/*');
});
Request::macro('isNotPreview', function ($company_id) {
return !$this->isPreview($company_id);
});
Request::macro('isSigned', function ($company_id) {
return $this->is($company_id . '/signed/*');
});
@@ -109,5 +118,15 @@ class Macro extends ServiceProvider
return false;
});
Collection::macro('withChildren', function ($relation, $addChildren) {
$list = new Collection();
foreach ($this as $model) {
$addChildren($list, $model, $relation, 0, $addChildren);
}
return $list;
});
}
}

View File

@@ -3,6 +3,7 @@
namespace App\Providers;
use App\Models\Banking\Transaction;
use App\Models\Setting\Category;
use Illuminate\Support\ServiceProvider as Provider;
class Observer extends Provider
@@ -25,5 +26,6 @@ class Observer extends Provider
public function boot()
{
Transaction::observe('App\Observers\Transaction');
Category::observe('App\Observers\Category');
}
}

View File

@@ -43,10 +43,8 @@ class Queue extends Provider
$payload = $event->job->payload();
if (!array_key_exists('company_id', $payload)) {
$event->job->delete();
throw new \Exception('Missing company. Payload: ' . json_encode($payload));
if (! array_key_exists('company_id', $payload)) {
return;
}
$company = company($payload['company_id']);

View File

@@ -78,6 +78,14 @@ class Route extends Provider
], $attributes));
});
Facade::macro('preview', function ($alias, $routes, $attributes = []) {
return Facade::module($alias, $routes, array_merge([
'middleware' => 'preview',
'prefix' => 'preview/' . $alias,
'as' => 'preview.' . $alias . '.',
], $attributes));
});
Facade::macro('portal', function ($alias, $routes, $attributes = []) {
return Facade::module($alias, $routes, array_merge([
'middleware' => 'portal',
@@ -94,18 +102,14 @@ class Route extends Provider
], $attributes));
});
Facade::macro('api', function ($alias, $routes, $attrs = []) {
$attributes = array_merge([
Facade::macro('api', function ($alias, $routes, $attributes = []) {
return Facade::module($alias, $routes, array_merge([
'namespace' => 'Modules\\' . module($alias)->getStudlyName() . '\Http\Controllers\Api',
'prefix' => $alias,
'as' => 'api.' . $alias,
], $attrs);
$api = app('Dingo\Api\Routing\Router');
return $api->version(config('api.version'), ['middleware' => ['api']], function($api) use ($attributes, $routes) {
$api->group($attributes, $routes);
});
'domain' => config('api.domain'),
'middleware' => config('api.middleware'),
'prefix' => config('api.prefix') ? config('api.prefix') . '/' . $alias : $alias,
'as' => 'api.' . $alias . '.',
], $attributes));
});
}
@@ -130,6 +134,8 @@ class Route extends Provider
$this->mapAdminRoutes();
$this->mapPreviewRoutes();
$this->mapPortalRoutes();
$this->mapSignedRoutes();
@@ -159,8 +165,10 @@ class Route extends Provider
*/
protected function mapApiRoutes()
{
Facade::prefix('api')
->namespace($this->namespace)
Facade::prefix(config('api.prefix'))
->domain(config('api.domain'))
->middleware(config('api.middleware'))
->namespace($this->namespace . '\Api')
->group(base_path('routes/api.php'));
}
@@ -222,6 +230,20 @@ class Route extends Provider
->namespace($this->namespace)
->group(base_path('routes/admin.php'));
}
/**
* Define the "preview" routes for the application.
*
* These routes all receive session state, CSRF protection, etc.
*
* @return void
*/
protected function mapPreviewRoutes()
{
Facade::prefix('{company_id}/preview')
->middleware('preview')
->namespace($this->namespace)
->group(base_path('routes/preview.php'));
}
/**
* Define the "portal" routes for the application.

View File

@@ -46,11 +46,11 @@ class Validation extends Provider
Validator::extend('amount', function ($attribute, $value, $parameters, $validator) use (&$amount) {
$status = false;
if ($value > 0) {
if ($value > 0 || in_array($value, $parameters)) {
$status = true;
}
if (!preg_match("/^(?=.*?[0-9])[0-9.,]+$/", $value)) {
if (! preg_match("/^(?=.*?[0-9])[0-9.,]+$/", $value)) {
$status = false;
}

View File

@@ -3,7 +3,7 @@
namespace App\Providers;
use Illuminate\Support\ServiceProvider as Provider;
use View;
use Illuminate\Support\Facades\View;
class ViewComposer extends Provider
{
@@ -14,46 +14,10 @@ class ViewComposer extends Provider
*/
public function boot()
{
// Suggestions
// Add Contact Type
View::composer(
'partials.admin.header', 'App\Http\ViewComposers\Suggestions'
);
// Notifications
View::composer(
'partials.admin.content', 'App\Http\ViewComposers\Notifications'
);
// Add company info to menu
View::composer(
['partials.admin.menu', 'partials.portal.menu'],
'App\Http\ViewComposers\Menu'
);
// Add notifications to header
View::composer(
['partials.wizard.navbar', 'partials.admin.navbar', 'partials.portal.navbar'],
'App\Http\ViewComposers\Header'
);
// Add limits and bulk actions to index
View::composer(
'*.index', 'App\Http\ViewComposers\Index'
);
// Add limits to show
View::composer(
'*.show', 'App\Http\ViewComposers\Index'
);
// Add Modules
View::composer(
'modules.*', 'App\Http\ViewComposers\Modules'
);
// Add recurring
View::composer(
'partials.form.recurring', 'App\Http\ViewComposers\Recurring'
['contacts.*'],
'App\Http\ViewComposers\ContactType'
);
// Add Document Type
@@ -62,13 +26,14 @@ class ViewComposer extends Provider
'App\Http\ViewComposers\DocumentType'
);
// Wizard
// Document Recurring Metadata
View::composer(
'layouts.wizard', 'App\Http\ViewComposers\Wizard'
['components.documents.form.metadata'],
'App\Http\ViewComposers\DocumentRecurring'
);
View::composer(
['partials.admin.content'],
['components.layouts.admin.notifications'],
'App\Http\ViewComposers\ReadOnlyNotification'
);
}