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

80
config/apexcharts.php Normal file
View File

@@ -0,0 +1,80 @@
<?php
return [
'options' => [
'chart' => [
'width' => '100%',
'height' => 300,
'toolbar' => [
'show' => false,
],
'stacked' => false,
'zoom' => [
'enabled' => false,
],
'fontFamily' => '"Quicksand", sans-serif',
'foreColor' => '#595959',
],
'legend' => [
'horizontalAlign' => 'left',
],
'dataLabels' => [
'enabled' => false,
],
'grid' => [
'show' => true,
'borderColor' => '#E5E7EB',
],
'markers' => [
'size' => 5,
/*'colors' => [
'#ffffff',
],
'strokeColors' => '#444444',
'strokeWidth' => 2,*/
'hover' => [
'size' => 8,
],
],
'states' => [
'hover' => [
'filter' => [
'value' => 0.01,
],
],
],
'stroke' => [
'show' => true,
'curve' => 'straight',
'width' => 2,
],
'fill' => [
'opacity' => 1,
],
'tooltip' => [
'shared' => false,
'followCursor' => true,
'onDatasetHover' => [
'highlightDataSeries' => true,
],
],
'xaxis' => [
'labels' => [
'rotate' => 0,
],
'tickAmount' => 3,
],
],
];

View File

@@ -1,5 +1,6 @@
<?php
use Illuminate\Cache\RateLimiting\Limit;
return [
@@ -8,7 +9,7 @@ return [
| Standards Tree
|--------------------------------------------------------------------------
|
| Versioning an API with Dingo revolves around content negotiation and
| Versioning an API revolves around content negotiation and
| custom MIME types. A custom type will belong to one of three
| standards trees, the Vendor tree (vnd), the Personal tree
| (prs), and the Unregistered tree (x).
@@ -33,7 +34,7 @@ return [
|
*/
'subtype' => env('API_SUBTYPE', 'api'),
'subtype' => env('API_SUBTYPE', 'akaunting'),
/*
|--------------------------------------------------------------------------
@@ -70,7 +71,7 @@ return [
|
*/
'domain' => env('API_DOMAIN', null),
'domain' => env('API_DOMAIN'),
/*
|--------------------------------------------------------------------------
@@ -123,7 +124,7 @@ return [
|
*/
'debug' => env('API_DEBUG', true),
'debug' => env('API_DEBUG', false),
/*
|--------------------------------------------------------------------------
@@ -137,7 +138,7 @@ return [
|
*/
'errorFormat' => [
'error_format' => [
'message' => ':message',
'errors' => ':errors',
'code' => ':code',
@@ -154,27 +155,11 @@ return [
|
*/
'middleware' => [
],
'middleware' => explode(',', env('API_MIDDLEWARE', 'api')),
/*
|--------------------------------------------------------------------------
| Authentication Providers
|--------------------------------------------------------------------------
|
| The authentication providers that should be used when attempting to
| authenticate an incoming API request.
|
*/
'auth' => [
'basic' => 'Dingo\Api\Auth\Provider\Basic',
],
/*
|--------------------------------------------------------------------------
| Throttling / Rate Limiting
| Rate Limit (Throttle)
|--------------------------------------------------------------------------
|
| Consumers of your API can be limited to the amount of requests they can
@@ -183,51 +168,8 @@ return [
|
*/
'throttling' => [
],
/*
|--------------------------------------------------------------------------
| Response Transformer
|--------------------------------------------------------------------------
|
| Responses can be transformed so that they are easier to format. By
| default a Fractal transformer will be used to transform any
| responses prior to formatting. You can easily replace
| this with your own transformer.
|
*/
'transformer' => env('API_TRANSFORMER', Dingo\Api\Transformer\Adapter\Fractal::class),
/*
|--------------------------------------------------------------------------
| Response Formats
|--------------------------------------------------------------------------
|
| Responses can be returned in multiple formats by registering different
| response formatters. You can also customize an existing response
| formatter with a number of options to configure its output.
|
*/
'defaultFormat' => env('API_DEFAULT_FORMAT', 'json'),
'formats' => [
'json' => Dingo\Api\Http\Response\Format\Json::class,
],
'formatsOptions' => [
'json' => [
'pretty_print' => env('API_JSON_FORMAT_PRETTY_PRINT_ENABLED', false),
'indent_style' => env('API_JSON_FORMAT_INDENT_STYLE', 'space'),
'indent_size' => env('API_JSON_FORMAT_INDENT_SIZE', 2),
],
'rate_limit' => [
Limit::perMinute(env('API_RATE_LIMIT', 60)),
],
];

View File

@@ -1,5 +1,7 @@
<?php
use Illuminate\Support\Facades\Facade;
return [
/*
@@ -64,7 +66,7 @@ return [
'url' => env('APP_URL', ''),
'asset_url' => env('ASSET_URL', null),
'asset_url' => env('ASSET_URL'),
/*
|--------------------------------------------------------------------------
@@ -184,7 +186,6 @@ return [
App\Providers\Blade::class,
// App\Providers\Broadcast::class,
App\Providers\Event::class,
App\Providers\Form::class,
App\Providers\Macro::class,
App\Providers\Observer::class,
App\Providers\Queue::class,
@@ -205,47 +206,8 @@ return [
|
*/
'aliases' => [
'App' => Illuminate\Support\Facades\App::class,
'Arr' => Illuminate\Support\Arr::class,
'Artisan' => Illuminate\Support\Facades\Artisan::class,
'Auth' => Illuminate\Support\Facades\Auth::class,
'Blade' => Illuminate\Support\Facades\Blade::class,
'Broadcast' => Illuminate\Support\Facades\Broadcast::class,
'Bus' => Illuminate\Support\Facades\Bus::class,
'Cache' => Illuminate\Support\Facades\Cache::class,
'Config' => Illuminate\Support\Facades\Config::class,
'Cookie' => Illuminate\Support\Facades\Cookie::class,
'Crypt' => Illuminate\Support\Facades\Crypt::class,
'aliases' => Facade::defaultAliases()->merge([
'Date' => App\Utilities\Date::class,
'DB' => Illuminate\Support\Facades\DB::class,
'Eloquent' => Illuminate\Database\Eloquent\Model::class,
'Event' => Illuminate\Support\Facades\Event::class,
'File' => Illuminate\Support\Facades\File::class,
'Gate' => Illuminate\Support\Facades\Gate::class,
'Hash' => Illuminate\Support\Facades\Hash::class,
'Http' => Illuminate\Support\Facades\Http::class,
'Lang' => Illuminate\Support\Facades\Lang::class,
'Log' => Illuminate\Support\Facades\Log::class,
'Mail' => Illuminate\Support\Facades\Mail::class,
'Notification' => Illuminate\Support\Facades\Notification::class,
'Password' => Illuminate\Support\Facades\Password::class,
'Queue' => Illuminate\Support\Facades\Queue::class,
'RateLimiter' => Illuminate\Support\Facades\RateLimiter::class,
'Redirect' => Illuminate\Support\Facades\Redirect::class,
'Redis' => Illuminate\Support\Facades\Redis::class,
'Request' => Illuminate\Support\Facades\Request::class,
'Response' => Illuminate\Support\Facades\Response::class,
'Route' => Illuminate\Support\Facades\Route::class,
'Schema' => Illuminate\Support\Facades\Schema::class,
'Session' => Illuminate\Support\Facades\Session::class,
'Storage' => Illuminate\Support\Facades\Storage::class,
'Str' => Illuminate\Support\Str::class,
'URL' => Illuminate\Support\Facades\URL::class,
'Validator' => Illuminate\Support\Facades\Validator::class,
'View' => Illuminate\Support\Facades\View::class,
],
])->toArray(),
];

View File

@@ -86,7 +86,7 @@ return [
| than one user table or model in the application and you want to have
| separate password reset settings based on the specific user types.
|
| The expire time is the number of minutes that the reset token should be
| The expire time is the number of minutes that each reset token will be
| considered valid. This security feature keeps tokens short-lived so
| they have less time to be guessed. You may change this as needed.
|

View File

@@ -39,6 +39,9 @@ return [
'cluster' => env('PUSHER_APP_CLUSTER'),
'useTLS' => true,
],
'client_options' => [
// Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html
],
],
'ably' => [

View File

@@ -105,6 +105,6 @@ return [
|
*/
'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_cache'),
'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_cache_'),
];

View File

@@ -1,106 +0,0 @@
<?php
return [
/*
spec columns
*/
'columns' => [
'alpha' => [
'rows' => ['name', 'contact_name', 'customer_name', 'vendor_name', 'display_name', 'company_name', 'domain', 'email', 'description', 'code', 'type', 'status', 'vendor', 'account', 'category'],
'class' => 'fas fa-sort-alpha',
],
'amount' => [
'rows' => ['amount', 'price', 'sale_price', 'purchase_price', 'total_price', 'current_balance', 'total_price', 'opening_balance'],
'class' => 'fas fa-sort-amount',
],
'numeric' => [
'rows' => ['created_at', 'updated_at', 'paid_at', 'issued_at', 'due_at', 'id', 'quantity', 'rate', 'number', 'document_number'],
'class' => 'fas fa-sort-numeric',
],
],
/*
whether icons should be enabled
*/
'enable_icons' => true,
/*
defines icon set to use when sorted data is none above (alpha nor amount nor numeric)
*/
'default_icon_set' => 'fas fa-arrow-down sort-icon',
/*
icon that shows when generating sortable link while column is not sorted
*/
'sortable_icon' => 'fas fa-arrow-down sort-icon',
/*
generated icon is clickable non-clickable (default)
*/
'clickable_icon' => false,
/*
icon and text separator (any string)
in case of 'clickable_icon' => true; separator creates possibility to style icon and anchor-text properly
*/
'icon_text_separator' => '&nbsp; ',
/*
suffix class that is appended when ascending order is applied
*/
'asc_suffix' => '-down',
/*
suffix class that is appended when descending order is applied
*/
'desc_suffix' => '-up',
/*
default anchor class, if value is null none is added
*/
'anchor_class' => null,
/*
relation - column separator ex: detail.phone_number means relation "detail" and column "phone_number"
*/
'uri_relation_column_separator' => '.',
/*
formatting function applied to name of column, use null to turn formatting off
*/
'formatting_function' => 'ucfirst',
/*
inject title parameter in query strings, use null to turn injection off
example: 'inject_title' => 't' will result in ..user/?t="formatted title of sorted column"
*/
'inject_title_as' => null,
/*
allow request modification, when default sorting is set but is not in URI (first load)
*/
'allow_request_modification' => true,
/*
default order for: $user->sortable('id') usage
*/
'default_direction' => 'asc',
/*
default order for non-sorted columns
*/
'default_direction_unsorted' => 'asc',
/*
use the first defined sortable column (Model::$sortable) as default
also applies if sorting parameters are invalid for example: 'sort' => 'name', 'direction' => ''
*/
'default_first_column' => false,
/*
join type: join vs leftJoin (default leftJoin)
for more information see https://github.com/Kyslik/column-sortable/issues/59
*/
'join_type' => 'leftJoin',
];

View File

@@ -15,7 +15,7 @@ return [
|
*/
'paths' => [env('API_SUBTYPE', 'api') . '/*'],
'paths' => [env('API_PREFIX', 'api') . '/*'],
'allowed_methods' => ['*'],

View File

@@ -92,7 +92,7 @@ return [
'charset' => 'utf8',
'prefix' => env('DB_PREFIX', 'ak_'),
'prefix_indexes' => true,
'schema' => 'public',
'search_path' => 'public',
'sslmode' => 'prefer',
],
@@ -147,7 +147,7 @@ return [
'default' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
],

View File

@@ -147,7 +147,7 @@ return [
'types' => ['SELECT'], // // workaround ['SELECT'] only. https://github.com/barryvdh/laravel-debugbar/issues/888 ['SELECT', 'INSERT', 'UPDATE', 'DELETE']; for MySQL 5.6.3+
],
'hints' => true, // Show hints for common mistakes
'show_copy' => true, // Show copy button next to the query
'show_copy' => true, // Show copy button next to the query
],
'mail' => [
'full_log' => false

View File

@@ -15,6 +15,11 @@ return [
'orientation' => 'portrait',
/*
* Dejavu Sans font is missing glyphs for converted entities, turn it off if you need to show € and £.
*/
'convert_entities' => false,
'defines' => [
/**
* The location of the DOMPDF font directory
@@ -40,7 +45,7 @@ return [
* Times-Roman, Times-Bold, Times-BoldItalic, Times-Italic,
* Symbol, ZapfDingbats.
*/
"font_dir" => storage_path('fonts/'), // advised by dompdf (https://github.com/dompdf/dompdf/pull/782)
"font_dir" => storage_path('fonts'), // advised by dompdf (https://github.com/dompdf/dompdf/pull/782)
/**
* The location of the DOMPDF font cache directory
@@ -50,7 +55,7 @@ return [
*
* Note: This directory must exist and be writable by the webserver process.
*/
"font_cache" => storage_path('fonts/'),
"font_cache" => storage_path('fonts'),
/**
* The location of a temporary directory.

View File

@@ -13,7 +13,7 @@ return [
|
*/
'default' => env('FILESYSTEM_DRIVER', 'uploads'),
'default' => env('FILESYSTEM_DISK', 'uploads'),
/*
|--------------------------------------------------------------------------
@@ -52,7 +52,7 @@ return [
|
| Here you may configure as many filesystem "disks" as you wish, and you
| may even configure multiple disks of the same driver. Defaults have
| been setup for each driver as an example of the required options.
| been set up for each driver as an example of the required values.
|
| Supported Drivers: "local", "ftp", "sftp", "s3"
|

View File

@@ -44,9 +44,9 @@ return [
*/
'argon' => [
'memory' => 1024,
'threads' => 2,
'time' => 2,
'memory' => 65536,
'threads' => 1,
'time' => 4,
],
];

View File

@@ -33,6 +33,17 @@ return [
*/
'url' => false,
/*
|--------------------------------------------------------------------------
| Set strategy
|--------------------------------------------------------------------------
|
| This option will determine the strategy used to determine the back url.
| It can be 'session' (default) or 'referer'
|
*/
'back' => 'session',
/*
|--------------------------------------------------------------------------
| Carbon Language
@@ -109,7 +120,10 @@ return [
| Language code mode
|--------------------------------------------------------------------------
|
| This option indicates the language code to be used, short or long
| This option indicates the language code and name to be used, short/long
| and english/native.
| Short: language code (en)
| Long: languagecode-COUNTRYCODE (en-GB)
|
*/
'mode' => ['code' => 'long', 'name' => 'native'],
@@ -119,79 +133,74 @@ return [
| Allowed languages
|--------------------------------------------------------------------------
|
| This options indicates the allowed languages.
| This options indicates the language allowed languages.
|
*/
'allowed' => ['ar-SA', 'az-AZ', 'bg-BG', 'bn-BD', 'bs-BA', 'ca-ES', 'cs-CZ', 'da-DK', 'de-DE', 'el-GR', 'en-AU', 'en-GB', 'en-US', 'es-AR', 'es-ES', 'es-MX', 'et-EE', 'fa-IR', 'fr-FR', 'he-IL', 'hi-IN', 'hr-HR', 'hu-HU', 'id-ID', 'is-IS', 'it-IT', 'ja-JP', 'ka-GE', 'ko-KR', 'lt-LT', 'lv-LV', 'mk-MK', 'ms-MY', 'nb-NO', 'ne-NP', 'nl-NL', 'pl-PL', 'pt-BR', 'pt-PT', 'ro-RO', 'ru-RU', 'sk-SK', 'sl-SI', 'sr-RS', 'sq-AL', 'sv-SE', 'th-TH', 'tr-TR', 'uk-UA', 'ur-PK', 'uz-UZ', 'vi-VN', 'zh-CN', 'zh-TW'],
/*
|--------------------------------------------------------------------------
| All languages
| All Languages
|--------------------------------------------------------------------------
|
| This option indicates the language codes and names.
|
*/
'all' => [
['short' => 'ar', 'long' => 'ar-SA', 'english' => 'Arabic', 'native' => 'العربية'],
['short' => 'az', 'long' => 'az-AZ', 'english' => 'Azerbaijani', 'native' => 'Azərbaycan'],
['short' => 'bg', 'long' => 'bg-BG', 'english' => 'Bulgarian', 'native' => 'български'],
['short' => 'bn', 'long' => 'bn-BD', 'english' => 'Bengali', 'native' => 'বাংলা'],
['short' => 'bs', 'long' => 'bs-BA', 'english' => 'Bosnian', 'native' => 'Bosanski'],
['short' => 'ca', 'long' => 'ca-ES', 'english' => 'Catalan', 'native' => 'Català'],
['short' => 'cn', 'long' => 'zh-CN', 'english' => 'Chinese (S)', 'native' => '简体中文'],
['short' => 'cs', 'long' => 'cs-CZ', 'english' => 'Czech', 'native' => 'Čeština'],
['short' => 'da', 'long' => 'da-DK', 'english' => 'Danish', 'native' => 'Dansk'],
['short' => 'de', 'long' => 'de-DE', 'english' => 'German', 'native' => 'Deutsch'],
['short' => 'de', 'long' => 'de-AT', 'english' => 'Austrian', 'native' => 'Österreichisches Deutsch'],
['short' => 'fi', 'long' => 'fi-FI', 'english' => 'Finnish', 'native' => 'Suomi'],
['short' => 'fr', 'long' => 'fr-FR', 'english' => 'French', 'native' => 'Français'],
['short' => 'ea', 'long' => 'es-AR', 'english' => 'Spanish (Argentina)', 'native' => 'Español de Argentina'],
['short' => 'el', 'long' => 'el-GR', 'english' => 'Greek', 'native' => 'Ελληνικά'],
['short' => 'en', 'long' => 'en-AU', 'english' => 'English (AU)', 'native' => 'English (AU)'],
['short' => 'en', 'long' => 'en-CA', 'english' => 'English (CA)', 'native' => 'English (CA)'],
['short' => 'en', 'long' => 'en-GB', 'english' => 'English (GB)', 'native' => 'English (GB)'],
['short' => 'en', 'long' => 'en-US', 'english' => 'English (US)', 'native' => 'English (US)'],
['short' => 'es', 'long' => 'es-ES', 'english' => 'Spanish', 'native' => 'Español'],
['short' => 'et', 'long' => 'et-EE', 'english' => 'Estonian', 'native' => 'Eesti'],
['short' => 'he', 'long' => 'he-IL', 'english' => 'Hebrew', 'native' => 'עִבְרִית'],
['short' => 'hi', 'long' => 'hi-IN', 'english' => 'Hindi', 'native' => 'हिन्दी'],
['short' => 'hr', 'long' => 'hr-HR', 'english' => 'Croatian', 'native' => 'Hrvatski'],
['short' => 'hu', 'long' => 'hu-HU', 'english' => 'Hungarian', 'native' => 'Magyar'],
['short' => 'hy', 'long' => 'hy-AM', 'english' => 'Armenian', 'native' => 'Հայերեն'],
['short' => 'id', 'long' => 'id-ID', 'english' => 'Indonesian', 'native' => 'Bahasa Indonesia'],
['short' => 'is', 'long' => 'is-IS', 'english' => 'Icelandic', 'native' => 'Íslenska'],
['short' => 'it', 'long' => 'it-IT', 'english' => 'Italian', 'native' => 'Italiano'],
['short' => 'ir', 'long' => 'fa-IR', 'english' => 'Persian', 'native' => 'فارسی'],
['short' => 'jp', 'long' => 'ja-JP', 'english' => 'Japanese', 'native' => '日本語'],
['short' => 'ka', 'long' => 'ka-GE', 'english' => 'Georgian', 'native' => 'ქართული'],
['short' => 'ko', 'long' => 'ko-KR', 'english' => 'Korean', 'native' => '한국어'],
['short' => 'lt', 'long' => 'lt-LT', 'english' => 'Lithuanian', 'native' => 'Lietuvių'],
['short' => 'lv', 'long' => 'lv-LV', 'english' => 'Latvian', 'native' => 'Latviešu valoda'],
['short' => 'mk', 'long' => 'mk-MK', 'english' => 'Macedonian', 'native' => 'Македонски јазик'],
['short' => 'ms', 'long' => 'ms-MY', 'english' => 'Malay', 'native' => 'Bahasa Melayu'],
['short' => 'mx', 'long' => 'es-MX', 'english' => 'Spanish (Mexico)', 'native' => 'Español de México'],
['short' => 'nb', 'long' => 'nb-NO', 'english' => 'Norwegian', 'native' => 'Norsk Bokmål'],
['short' => 'ne', 'long' => 'ne-NP', 'english' => 'Nepali', 'native' => 'नेपाली'],
['short' => 'nl', 'long' => 'nl-NL', 'english' => 'Dutch', 'native' => 'Nederlands'],
['short' => 'pl', 'long' => 'pl-PL', 'english' => 'Polish', 'native' => 'Polski'],
['short' => 'pt-BR', 'long' => 'pt-BR', 'english' => 'Brazilian', 'native' => 'Português do Brasil'],
['short' => 'pt', 'long' => 'pt-PT', 'english' => 'Portuguese', 'native' => 'Português'],
['short' => 'ro', 'long' => 'ro-RO', 'english' => 'Romanian', 'native' => 'Română'],
['short' => 'ru', 'long' => 'ru-RU', 'english' => 'Russian', 'native' => 'Русский'],
['short' => 'sr', 'long' => 'sr-RS', 'english' => 'Serbian (Cyrillic)', 'native' => 'Српски језик'],
['short' => 'sr', 'long' => 'sr-CS', 'english' => 'Serbian (Latin)', 'native' => 'Српски језик'],
['short' => 'sq', 'long' => 'sq-AL', 'english' => 'Albanian', 'native' => 'Shqip'],
['short' => 'sk', 'long' => 'sk-SK', 'english' => 'Slovak', 'native' => 'Slovenčina'],
['short' => 'sl', 'long' => 'sl-SI', 'english' => 'Slovenian', 'native' => 'Slovenščina'],
['short' => 'sv', 'long' => 'sv-SE', 'english' => 'Swedish', 'native' => 'Svenska'],
['short' => 'th', 'long' => 'th-TH', 'english' => 'Thai', 'native' => 'ไทย'],
['short' => 'tr', 'long' => 'tr-TR', 'english' => 'Turkish', 'native' => 'Türkçe'],
['short' => 'tw', 'long' => 'zh-TW', 'english' => 'Chinese (T)', 'native' => '繁體中文'],
['short' => 'uk', 'long' => 'uk-UA', 'english' => 'Ukrainian', 'native' => 'Українська'],
['short' => 'ur', 'long' => 'ur-PK', 'english' => 'Urdu (Pakistan)', 'native' => 'اردو'],
['short' => 'uz', 'long' => 'uz-UZ', 'english' => 'Uzbek', 'native' => 'Ozbekcha'],
['short' => 'vi', 'long' => 'vi-VN', 'english' => 'Vietnamese', 'native' => 'Tiếng Việt'],
['short' => 'ar', 'long' => 'ar-SA', 'english' => 'Arabic', 'native' => 'العربية', 'direction' => 'rtl'],
['short' => 'bg', 'long' => 'bg-BG', 'english' => 'Bulgarian', 'native' => 'български', 'direction' => 'ltr'],
['short' => 'bn', 'long' => 'bn-BD', 'english' => 'Bengali', 'native' => 'বাংলা', 'direction' => 'ltr'],
['short' => 'cn', 'long' => 'zh-CN', 'english' => 'Chinese (S)', 'native' => '简体中文', 'direction' => 'ltr'],
['short' => 'cs', 'long' => 'cs-CZ', 'english' => 'Czech', 'native' => 'Čeština', 'direction' => 'ltr'],
['short' => 'da', 'long' => 'da-DK', 'english' => 'Danish', 'native' => 'Dansk', 'direction' => 'ltr'],
['short' => 'de', 'long' => 'de-DE', 'english' => 'German', 'native' => 'Deutsch', 'direction' => 'ltr'],
['short' => 'de', 'long' => 'de-AT', 'english' => 'Austrian', 'native' => 'Österreichisches Deutsch', 'direction' => 'ltr'],
['short' => 'fi', 'long' => 'fi-FI', 'english' => 'Finnish', 'native' => 'Suomi', 'direction' => 'ltr'],
['short' => 'fr', 'long' => 'fr-FR', 'english' => 'French', 'native' => 'Français', 'direction' => 'ltr'],
['short' => 'el', 'long' => 'el-GR', 'english' => 'Greek', 'native' => 'Ελληνικά', 'direction' => 'ltr'],
['short' => 'en', 'long' => 'en-AU', 'english' => 'English (AU)', 'native' => 'English (AU)', 'direction' => 'ltr'],
['short' => 'en', 'long' => 'en-CA', 'english' => 'English (CA)', 'native' => 'English (CA)', 'direction' => 'ltr'],
['short' => 'en', 'long' => 'en-GB', 'english' => 'English (GB)', 'native' => 'English (GB)', 'direction' => 'ltr'],
['short' => 'en', 'long' => 'en-US', 'english' => 'English (US)', 'native' => 'English (US)', 'direction' => 'ltr'],
['short' => 'es', 'long' => 'es-ES', 'english' => 'Spanish', 'native' => 'Español', 'direction' => 'ltr'],
['short' => 'et', 'long' => 'et-EE', 'english' => 'Estonian', 'native' => 'Eesti', 'direction' => 'ltr'],
['short' => 'he', 'long' => 'he-IL', 'english' => 'Hebrew', 'native' => 'עִבְרִית', 'direction' => 'rtl'],
['short' => 'hi', 'long' => 'hi-IN', 'english' => 'Hindi', 'native' => 'हिन्दी', 'direction' => 'ltr'],
['short' => 'hr', 'long' => 'hr-HR', 'english' => 'Croatian', 'native' => 'Hrvatski', 'direction' => 'ltr'],
['short' => 'hu', 'long' => 'hu-HU', 'english' => 'Hungarian', 'native' => 'Magyar', 'direction' => 'ltr'],
['short' => 'hy', 'long' => 'hy-AM', 'english' => 'Armenian', 'native' => 'Հայերեն', 'direction' => 'ltr'],
['short' => 'id', 'long' => 'id-ID', 'english' => 'Indonesian', 'native' => 'Bahasa Indonesia', 'direction' => 'ltr'],
['short' => 'it', 'long' => 'it-IT', 'english' => 'Italian', 'native' => 'Italiano', 'direction' => 'ltr'],
['short' => 'ir', 'long' => 'fa-IR', 'english' => 'Persian', 'native' => 'فارسی', 'direction' => 'rtl'],
['short' => 'jp', 'long' => 'ja-JP', 'english' => 'Japanese', 'native' => '日本語', 'direction' => 'ltr'],
['short' => 'ka', 'long' => 'ka-GE', 'english' => 'Georgian', 'native' => 'ქართული', 'direction' => 'ltr'],
['short' => 'ko', 'long' => 'ko-KR', 'english' => 'Korean', 'native' => '한국어', 'direction' => 'ltr'],
['short' => 'lt', 'long' => 'lt-LT', 'english' => 'Lithuanian', 'native' => 'Lietuvių', 'direction' => 'ltr'],
['short' => 'lv', 'long' => 'lv-LV', 'english' => 'Latvian', 'native' => 'Latviešu valoda', 'direction' => 'ltr'],
['short' => 'mk', 'long' => 'mk-MK', 'english' => 'Macedonian', 'native' => 'Македонски јазик', 'direction' => 'ltr'],
['short' => 'ms', 'long' => 'ms-MY', 'english' => 'Malay', 'native' => 'Bahasa Melayu', 'direction' => 'ltr'],
['short' => 'mx', 'long' => 'es-MX', 'english' => 'Mexico', 'native' => 'Español de México', 'direction' => 'ltr'],
['short' => 'nb', 'long' => 'nb-NO', 'english' => 'Norwegian', 'native' => 'Norsk Bokmål', 'direction' => 'ltr'],
['short' => 'ne', 'long' => 'ne-NP', 'english' => 'Nepali', 'native' => 'नेपाली', 'direction' => 'ltr'],
['short' => 'nl', 'long' => 'nl-NL', 'english' => 'Dutch', 'native' => 'Nederlands', 'direction' => 'ltr'],
['short' => 'pl', 'long' => 'pl-PL', 'english' => 'Polish', 'native' => 'Polski', 'direction' => 'ltr'],
['short' => 'pt-BR', 'long' => 'pt-BR', 'english' => 'Brazilian', 'native' => 'Português do Brasil', 'direction' => 'ltr'],
['short' => 'pt', 'long' => 'pt-PT', 'english' => 'Portuguese', 'native' => 'Português', 'direction' => 'ltr'],
['short' => 'ro', 'long' => 'ro-RO', 'english' => 'Romanian', 'native' => 'Română', 'direction' => 'ltr'],
['short' => 'ru', 'long' => 'ru-RU', 'english' => 'Russian', 'native' => 'Русский', 'direction' => 'ltr'],
['short' => 'sr', 'long' => 'sr-RS', 'english' => 'Serbian (Cyrillic)', 'native' => 'Српски језик', 'direction' => 'ltr'],
['short' => 'sr', 'long' => 'sr-CS', 'english' => 'Serbian (Latin)', 'native' => 'Српски језик', 'direction' => 'ltr'],
['short' => 'sq', 'long' => 'sq-AL', 'english' => 'Albanian', 'native' => 'Shqip', 'direction' => 'ltr'],
['short' => 'sk', 'long' => 'sk-SK', 'english' => 'Slovak', 'native' => 'Slovenčina', 'direction' => 'ltr'],
['short' => 'sl', 'long' => 'sl-SL', 'english' => 'Slovenian', 'native' => 'Slovenščina', 'direction' => 'ltr'],
['short' => 'sv', 'long' => 'sv-SE', 'english' => 'Swedish', 'native' => 'Svenska', 'direction' => 'ltr'],
['short' => 'th', 'long' => 'th-TH', 'english' => 'Thai', 'native' => 'ไทย', 'direction' => 'ltr'],
['short' => 'tr', 'long' => 'tr-TR', 'english' => 'Turkish', 'native' => 'Türkçe', 'direction' => 'ltr'],
['short' => 'tw', 'long' => 'zh-TW', 'english' => 'Chinese (T)', 'native' => '繁體中文', 'direction' => 'ltr'],
['short' => 'uk', 'long' => 'uk-UA', 'english' => 'Ukrainian', 'native' => 'Українська', 'direction' => 'ltr'],
['short' => 'ur', 'long' => 'ur-PK', 'english' => 'Urdu (Pakistan)', 'native' => 'اردو', 'direction' => 'rtl'],
['short' => 'uz', 'long' => 'uz-UZ', 'english' => 'Uzbek', 'native' => 'O\'zbek', 'direction' => 'ltr'],
['short' => 'vi', 'long' => 'vi-VN', 'english' => 'Vietnamese', 'native' => 'Tiếng Việt', 'direction' => 'ltr'],
],
];

View File

@@ -29,6 +29,18 @@ return [
'view_path' => resource_path('views/livewire'),
/*
|--------------------------------------------------------------------------
| Layout
|--------------------------------------------------------------------------
| The default layout view that will be used when rendering a component via
| Route::get('/some-endpoint', SomeComponent::class);. In this case the
| the view returned by SomeComponent will be wrapped in "layouts.app"
|
*/
'layout' => 'components.layouts.admin',
/*
|--------------------------------------------------------------------------
| Livewire Assets URL
@@ -44,6 +56,20 @@ return [
'asset_url' => env('ASSET_URL', 'public'),
/*
|--------------------------------------------------------------------------
| Livewire App URL
|--------------------------------------------------------------------------
|
| This value should be used if livewire assets are served from CDN.
| Livewire will communicate with an app through this url.
|
| Examples: "https://my-app.com", "myurl.com/app".
|
*/
'app_url' => env('APP_URL', 'localhost'),
/*
|--------------------------------------------------------------------------
| Livewire Endpoint Middleware Group
@@ -77,8 +103,9 @@ return [
'preview_mimes' => [ // Supported file types for temporary pre-signed file URLs.
'png', 'gif', 'bmp', 'svg', 'wav', 'mp4',
'mov', 'avi', 'wmv', 'mp3', 'm4a',
'jpeg', 'mpga', 'webp', 'wma',
'jpg', 'jpeg', 'mpga', 'webp', 'wma',
],
'max_upload_time' => 5, // Max duration (in minutes) before an upload gets invalidated.
],
/*
@@ -88,7 +115,7 @@ return [
|
| This value sets the path to the Livewire manifest file.
| The default should work for most cases (which is
| "<app_root>/bootstrap/cache/livewire-components.php)", but for specific
| "<app_root>/bootstrap/cache/livewire-components.php"), but for specific
| cases like when hosting on Laravel Vapor, it could be set to a different value.
|
| Example: for Laravel Vapor, it would be "/tmp/storage/bootstrap/cache/livewire-components.php".
@@ -97,4 +124,35 @@ return [
'manifest_path' => null,
/*
|--------------------------------------------------------------------------
| Back Button Cache
|--------------------------------------------------------------------------
|
| This value determines whether the back button cache will be used on pages
| that contain Livewire. By disabling back button cache, it ensures that
| the back button shows the correct state of components, instead of
| potentially stale, cached data.
|
| Setting it to "false" (default) will disable back button cache.
|
*/
'back_button_cache' => false,
/*
|--------------------------------------------------------------------------
| Render On Redirect
|--------------------------------------------------------------------------
|
| This value determines whether Livewire will render before it's redirected
| or not. Setting it to "false" (default) will mean the render method is
| skipped when redirecting. And "true" will mean the render method is
| run before redirecting. Browsers bfcache can store a potentially
| stale view if render is skipped on redirect.
|
*/
'render_on_redirect' => false,
];

View File

@@ -19,6 +19,20 @@ return [
'default' => env('LOG_CHANNEL', 'stack'),
/*
|--------------------------------------------------------------------------
| Deprecations Log Channel
|--------------------------------------------------------------------------
|
| This option controls the log channel that should be used to log warnings
| regarding deprecated PHP and library features. This allows you to get
| your application ready for upcoming major versions of dependencies.
|
*/
'deprecations' => env('LOG_DEPRECATIONS_CHANNEL', 'null'),
/*
|--------------------------------------------------------------------------
| Log Channels

View File

@@ -29,7 +29,7 @@ return [
| mailers below. You are free to add additional mailers as required.
|
| Supported: "smtp", "sendmail", "mailgun", "ses",
| "postmark", "log", "array", "mail"
| "postmark", "log", "array", "mail", "failover"
|
*/
@@ -42,7 +42,6 @@ return [
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'timeout' => env('MAIL_TIMEOUT'),
'auth_mode' => env('MAIL_AUTH_MODE'),
],
'ses' => [
@@ -63,7 +62,7 @@ return [
'sendmail' => [
'transport' => 'sendmail',
'path' => '/usr/sbin/sendmail -bs',
'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -t -i'),
],
'log' => [

View File

@@ -3,7 +3,7 @@
return [
'styles' => [
'argon' => \Akaunting\Menu\Presenters\Admin\Argon::class,
'tailwind' => \App\View\Presenters\Menu::class,
],
'home_urls' => [

View File

@@ -45,6 +45,6 @@ return [
| Skip livewire paths
|--------------------------------------------------------------------------
*/
'livewire' => explode(',', env('READ_ONLY_LIVEWIRE', 'common.search')),
'livewire' => explode(',', env('READ_ONLY_LIVEWIRE', 'menu.notifications,menu.settings,menu.neww')),
];

67
config/sanctum.php Normal file
View File

@@ -0,0 +1,67 @@
<?php
use Laravel\Sanctum\Sanctum;
return [
/*
|--------------------------------------------------------------------------
| Stateful Domains
|--------------------------------------------------------------------------
|
| Requests from the following domains / hosts will receive stateful API
| authentication cookies. Typically, these should include your local
| and production domains which access your API via a frontend SPA.
|
*/
'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
'%s%s',
'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',
Sanctum::currentApplicationUrlWithPort()
))),
/*
|--------------------------------------------------------------------------
| Sanctum Guards
|--------------------------------------------------------------------------
|
| This array contains the authentication guards that will be checked when
| Sanctum is trying to authenticate a request. If none of these guards
| are able to authenticate the request, Sanctum will use the bearer
| token that's present on an incoming request for authentication.
|
*/
'guard' => ['web'],
/*
|--------------------------------------------------------------------------
| Expiration Minutes
|--------------------------------------------------------------------------
|
| This value controls the number of minutes until an issued token will be
| considered expired. If this value is null, personal access tokens do
| not expire. This won't tweak the lifetime of first-party sessions.
|
*/
'expiration' => null,
/*
|--------------------------------------------------------------------------
| Sanctum Middleware
|--------------------------------------------------------------------------
|
| When authenticating your first-party SPA with Sanctum you may need to
| customize some of the middleware Sanctum uses while processing the
| request. You may change the middleware listed below as required.
|
*/
'middleware' => [
'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class,
'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class,
],
];

View File

@@ -94,7 +94,12 @@ return [
App\Models\Banking\Transaction::class => [
'columns' => [
'id',
'type',
'type' => [
'values' => [
'income' => 'general.incomes',
'expense' => 'general.expenses',
],
],
'account_id' => [
'route' => ['accounts.index', 'search=enabled:1'],
],
@@ -109,7 +114,7 @@ return [
'payment_method',
'reference',
'category_id' => [
'route' => ['categories.index', 'search=enabled:1'],
'route' => ['categories.index', 'search=type:income,expense enabled:1']
],
'parent_id',
'recurring' => [
@@ -117,7 +122,7 @@ return [
'foreign_key' => '',
'relationship' => true,
'boolean' => true,
]
],
],
],
@@ -161,7 +166,7 @@ return [
'category_id' => [
'route' => ['categories.index', 'search=type:item enabled:1']
],
'sales_price',
'sale_price',
'purchase_price',
],
],
@@ -185,6 +190,44 @@ return [
],
],
'App\Models\Purchase\Vendor' => [
'columns' => [
'id',
'type',
'name' => ['searchable' => true],
'email' => ['searchable' => true],
'tax_number' => ['searchable' => true],
'phone' => ['searchable' => true],
'address' => ['searchable' => true],
'website' => ['searchable' => true],
'currency_code' => [
'route' => ['currencies.index', 'search=enabled:1'],
],
'reference',
'user_id',
'enabled' => ['boolean' => true],
],
],
'App\Models\Sale\Customer' => [
'columns' => [
'id',
'type',
'name' => ['searchable' => true],
'email' => ['searchable' => true],
'tax_number' => ['searchable' => true],
'phone' => ['searchable' => true],
'address' => ['searchable' => true],
'website' => ['searchable' => true],
'currency_code' => [
'route' => ['currencies.index', 'search=enabled:1'],
],
'reference',
'user_id',
'enabled' => ['boolean' => true],
],
],
App\Models\Document\Document::class => [
'columns' => [
'id',
@@ -208,14 +251,14 @@ return [
'contact_phone' => ['searchable' => true],
'contact_address' => ['searchable' => true],
'category_id' => [
'route' => ['categories.index', 'search=enabled:1'],
'route' => ['categories.index', 'search=type:income,expense enabled:1']
],
'parent_id',
'recurring' => [
'key' => 'recurring',
'relationship' => true,
'boolean' => true,
]
],
],
],
@@ -256,42 +299,9 @@ return [
'parent_id',
'recurring' => [
'key' => 'recurring',
'foreign_key' => '',
'relationship' => true,
'boolean' => true,
]
],
],
'App\Models\Purchase\Payment' => [
'columns' => [
'id',
'type',
'account_id' => [
'route' => ['accounts.index', 'search=enabled:1'],
],
'paid_at' => ['date' => true],
'amount',
'currency_code' => [
'route' => ['currencies.index', 'search=enabled:1'],
],
'document_id',
'contact_id' => [
'route' => ['vendors.index', 'search=enabled:1'],
],
'description' => ['searchable' => true],
'payment_method',
'reference',
'category_id' => [
'route' => ['categories.index', 'search=type:expense enabled:1']
],
'parent_id',
'recurring' => [
'key' => 'recurring',
'foreign_key' => '',
'relationship' => true,
'boolean' => true,
]
],
],
@@ -333,42 +343,9 @@ return [
'parent_id',
'recurring' => [
'key' => 'recurring',
'foreign_key' => '',
'relationship' => true,
'boolean' => true,
]
],
],
'App\Models\Sale\Revenue' => [
'columns' => [
'id',
'type',
'account_id' => [
'route' => ['accounts.index', 'search=enabled:1'],
],
'paid_at' => ['date' => true],
'amount',
'currency_code' => [
'route' => ['currencies.index', 'search=enabled:1'],
],
'document_id',
'contact_id' => [
'route' => ['customers.index', 'search=enabled:1'],
],
'description' => ['searchable' => true],
'payment_method',
'reference',
'category_id' => [
'route' => ['categories.index', 'search=type:income enabled:1'],
],
'parent_id',
'recurring' => [
'key' => 'recurring',
'foreign_key' => '',
'relationship' => true,
'boolean' => true,
]
],
],
@@ -402,6 +379,14 @@ return [
],
],
App\Models\Setting\EmailTemplate::class => [
'columns' => [
'id',
'name' => ['searchable' => true],
'subject' => ['searchable' => true],
],
],
App\Models\Setting\Tax::class => [
'columns' => [
'id',

View File

@@ -72,7 +72,7 @@ return [
|
*/
'connection' => env('SESSION_CONNECTION', null),
'connection' => env('SESSION_CONNECTION'),
/*
|--------------------------------------------------------------------------
@@ -100,7 +100,7 @@ return [
|
*/
'store' => env('SESSION_STORE', null),
'store' => env('SESSION_STORE'),
/*
|--------------------------------------------------------------------------
@@ -152,7 +152,7 @@ return [
|
*/
'domain' => env('SESSION_DOMAIN', null),
'domain' => env('SESSION_DOMAIN'),
/*
|--------------------------------------------------------------------------

View File

@@ -124,18 +124,28 @@ return [
'logo_size_height' => env('SETTING_FALLBACK_INVOICE_LOGO_SIZE_HEIGHT', 128),
'item_search_char_limit' => env('SETTING_FALLBACK_INVOICE_ITEM_SEARCH_CHAR_LIMIT', 3),
],
'invoice-recurring' => [
'number_prefix' => env('SETTING_FALLBACK_INVOICE_RECURRING_NUMBER_PREFIX', 'RCI-'),
'number_digit' => env('SETTING_FALLBACK_INVOICE_RECURRING_NUMBER_DIGIT', '5'),
'number_next' => env('SETTING_FALLBACK_INVOICE_RECURRING_NUMBER_NEXT', '1'),
],
'bill' => [
'number_prefix' => env('SETTING_FALLBACK_BILL_NUMBER_PREFIX', 'BILL-'),
'number_digit' => env('SETTING_FALLBACK_BILL_NUMBER_DIGIT', '5'),
'number_next' => env('SETTING_FALLBACK_BILL_NUMBER_NEXT', '1'),
'item_name' => env('SETTING_FALLBACK_BILL_ITEM_NAME', 'settings.bill.item'),
'price_name' => env('SETTING_FALLBACK_BILL_PRICE_NAME', 'settings.bill.price'),
'quantity_name' => env('SETTING_FALLBACK_BILL_QUANTITY_NAME', 'settings.bill.quantity'),
'item_name' => env('SETTING_FALLBACK_BILL_ITEM_NAME', 'settings.invoice.item'),
'price_name' => env('SETTING_FALLBACK_BILL_PRICE_NAME', 'settings.invoice.price'),
'quantity_name' => env('SETTING_FALLBACK_BILL_QUANTITY_NAME', 'settings.invoice.quantity'),
'payment_terms' => env('SETTING_FALLBACK_BILL_PAYMENT_TERMS', '0'),
'template' => env('SETTING_FALLBACK_BILL_TEMPLATE', 'default'),
'color' => env('SETTING_FALLBACK_BILL_COLOR', '#55588b'),
'item_search_char_limit' => env('SETTING_FALLBACK_BILL_ITEM_SEARCH_CHAR_LIMIT', 3),
],
'bill-recurring' => [
'number_prefix' => env('SETTING_FALLBACK_BILL_RECURRING_NUMBER_PREFIX', 'RCB-'),
'number_digit' => env('SETTING_FALLBACK_BILL_RECURRING_NUMBER_DIGIT', '5'),
'number_next' => env('SETTING_FALLBACK_BILL_RECURRING_NUMBER_NEXT', '1'),
],
'default' => [
'currency' => env('SETTING_FALLBACK_DEFAULT_CURRENCY', 'USD'),
'locale' => env('SETTING_FALLBACK_DEFAULT_LOCALE', 'en-GB'),
@@ -161,11 +171,19 @@ return [
],
],
'transaction' => [
'number_prefix' => env('SETTING_FALLBACK_TRANSACTION_NUMBER_PREFIX', 'TRA-'),
'number_digit' => env('SETTING_FALLBACK_TRANSACTION_NUMBER_DIGIT', '5'),
'number_next' => env('SETTING_FALLBACK_TRANSACTION_NUMBER_NEXT', '1'),
'type' => [
'income' => env('SETTING_FALLBACK_TRANSACTION_TYPE_INCOME', 'income'),
'expense' => env('SETTING_FALLBACK_TRANSACTION_TYPE_EXPENSE', 'expense'),
],
],
'transaction-recurring' => [
'number_prefix' => env('SETTING_FALLBACK_TRANSACTION_RECURRING_NUMBER_PREFIX', 'RCT-'),
'number_digit' => env('SETTING_FALLBACK_TRANSACTION_RECURRING_NUMBER_DIGIT', '5'),
'number_next' => env('SETTING_FALLBACK_TRANSACTION_RECURRING_NUMBER_NEXT', '1'),
],
'transfer' => [
'template' => env('SETTING_FALLBACK_BANKING_TEMPLATE', 'default'),
],

79
config/sortable.php Normal file
View File

@@ -0,0 +1,79 @@
<?php
return [
'types' => [
'alpha' => [
'fields' => ['name', 'contact_name', 'customer_name', 'vendor_name', 'display_name', 'company_name', 'domain', 'email', 'description', 'code', 'type', 'status', 'vendor', 'account', 'category'],
'icon' => 'arrow_drop',
],
'amount' => [
'fields' => ['amount', 'price', 'sale_price', 'purchase_price', 'total_price', 'current_balance', 'total_price', 'opening_balance'],
'icon' => 'arrow_drop',
],
'numeric' => [
'fields' => ['created_at', 'updated_at', 'paid_at', 'issued_at', 'due_at', 'id', 'quantity', 'rate', 'number', 'document_number'],
'icon' => 'arrow_drop',
],
],
'icons' => [
'enabled' => true,
'wrapper' => '<span class="material-icons-outlined text-xl align-middle" style="line-height:0">{icon}</span>',
'default' => 'arrow_drop',
// Icon that shows when generating sortable link for columns not sorted by, not applied if value is null
'sortable' => null,
'clickable' => false,
'prefix' => '&nbsp;',
'suffix' => '',
'asc_suffix' => '_down',
'desc_suffix' => '_up',
],
// Default anchor class, not applied if value is null
'anchor_class' => null,
// Default active anchor class, not applied if value is null
'active_anchor_class' => null,
// Default sort direction anchor class, not applied if value is null
'direction_anchor_class_prefix' => null,
// Relation - column separator ex: author.name means relation "author" and column "name"
'relation_column_separator' => '.',
// Formatting function applied to name of column, use null to turn formatting off
'formatting_function' => 'ucfirst',
// Apply formatting function to custom titles as well as column names
'format_custom_titles' => true,
// Inject title parameter in query strings, use null to turn injection off
// Example: 'inject_title' => 't' will result in ..user/?t="formatted title of sorted column"
'inject_title_as' => null,
// Allow request modification, when default sorting is set but is not in URI (first load)
'allow_request_modification' => true,
// Default direction for: $user->sortable('id') usage
'default_direction' => 'asc',
// Default direction for non-sorted columns
'default_direction_unsorted' => 'asc',
// Use the first defined sortable column (Model::$sortable) as default
// Also applies if sorting parameters are invalid for example: 'sort' => 'name', 'direction' => ''
'default_first_column' => false,
// Join type: join vs leftJoin
'join_type' => 'leftJoin',
];

View File

@@ -1,152 +1,393 @@
<?php
use App\Models\Banking\Transaction;
use App\Models\Common\Contact;
use App\Models\Document\Document;
use App\Models\Setting\Category;
return [
// Documents
Document::INVOICE_TYPE => [
'alias' => '', // core empty but module write own alias
'group' => 'sales', // controller folder name for permission and route
'route' => [
'prefix' => 'invoices', // core use with group + prefix, module ex. estimates
'parameter' => 'invoice', // sales/invoices/{parameter}/edit
//'create' => 'invoices.create', // if you change route, you can write full path
// Categories
'category' => [
Category::INCOME_TYPE => [
'alias' => '',
'translation' => [
'prefix' => 'general',
],
],
'permission' => [
'prefix' => 'invoices', // this controller file name.
//'create' => 'create-sales-invoices', // if you change action permission key, you can write full permission
],
'translation' => [
'prefix' => 'invoices', // this translation file name.
'add_contact' => 'general.customers', //
'issued_at' => 'invoices.invoice_date',
'due_at' => 'invoices.due_date',
],
'setting' => [
'prefix' => 'invoice',
],
'category_type' => 'income',
'transaction_type' => 'income',
'contact_type' => 'customer', // use contact type
'hide' => [], // for document items
'class' => [],
'notification' => [
'class' => 'App\Notifications\Sale\Invoice',
'notify_contact' => true,
'notify_user' => true,
],
],
Document::BILL_TYPE => [
'alias' => '',
'group' => 'purchases',
'route' => [
'prefix' => 'bills',
'parameter' => 'bill',
//'create' => 'bilss.create',
Category::EXPENSE_TYPE => [
'alias' => '',
'translation' => [
'prefix' => 'general',
],
],
'permission' => [
'prefix' => 'bills',
//'create' => 'create-purchases-bills',
Category::ITEM_TYPE => [
'alias' => '',
'translation' => [
'prefix' => 'general',
],
],
'translation' => [
'prefix' => 'bills',
'issued_at' => 'bills.bill_date',
'due_at' => 'bills.due_date',
],
'setting' => [
'prefix' => 'bill',
],
'category_type' => 'expense',
'transaction_type' => 'expense',
'contact_type' => 'vendor',
'hide' => [],
'notification' => [
'class' => 'App\Notifications\Purchase\Bill',
'notify_contact' => false,
'notify_user' => true,
Category::OTHER_TYPE => [
'alias' => '',
'translation' => [
'prefix' => 'general',
],
],
],
// Contacts
'customer' => [
'group' => 'sales',
'permission' => [
'prefix' => 'customers',
//'create' => 'create-sales-customers',
'contact' => [
Contact::CUSTOMER_TYPE => [
'group' => 'sales',
'route' => [
'prefix' => 'customers', // core use with group + prefix, module ex. estimates
'parameter' => 'customer', // sales/customers/{parameter}/edit
//'create' => 'customers.create', // if you change route, you can write full path
],
'permission' => [
'prefix' => 'customers',
//'create' => 'create-sales-customers',
],
'translation' => [
'prefix' => 'customers', // this translation file name.
'section_general_description' => 'customers.form_description.general',
'section_billing_description' => 'customers.form_description.billing',
'section_address_description' => 'customers.form_description.address',
],
'category_type' => 'income',
'document_type' => 'invoice',
'transaction_type' => 'income',
'hide' => [],
'class' => [],
'script' => [
'folder' => 'common',
'file' => 'contacts',
],
],
Contact::VENDOR_TYPE => [
'group' => 'purchases',
'route' => [
'prefix' => 'vendors', // core use with group + prefix, module ex. estimates
'parameter' => 'vendor', // sales/vendors/{parameter}/edit
//'create' => 'vendors.create', // if you change route, you can write full path
],
'permission' => [
'prefix' => 'vendors',
//'create' => 'create-purchases-vendors',
],
'translation' => [
'prefix' => 'vendors', // this translation file name.
'section_general_description' => 'vendors.form_description.general',
'section_billing_description' => 'vendors.form_description.billing',
'section_address_description' => 'vendors.form_description.address',
],
'category_type' => 'expense',
'document_type' => 'bill',
'transaction_type' => 'expense',
'hide' => [],
'class' => [],
'script' => [
'folder' => 'common',
'file' => 'contacts',
],
],
],
'vendor' => [
'group' => 'purchases',
'permission' => [
'prefix' => 'vendors',
//'create' => 'create-purchases-vendors',
// Documents
'document' => [
Document::INVOICE_TYPE => [
'alias' => '', // core empty but module write own alias
'group' => 'sales', // controller folder name for permission and route
'route' => [
'prefix' => 'invoices', // core use with group + prefix, module ex. estimates
'parameter' => 'invoice', // sales/invoices/{parameter}/edit
'document' => 'invoices.index',
'recurring' => 'recurring-invoices.index',
//'create' => 'invoices.create', // if you change route, you can write full path
],
'permission' => [
'prefix' => 'invoices', // this controller file name.
//'create' => 'create-sales-invoices', // if you change action permission key, you can write full permission
],
'translation' => [
'prefix' => 'invoices', // this translation file name.
'add_contact' => 'general.customers', //
'issued_at' => 'invoices.invoice_date',
'due_at' => 'invoices.due_date',
'section_billing_description' => 'invoices.form_description.billing',
],
'setting' => [
'prefix' => 'invoice',
],
'category_type' => 'income',
'transaction_type' => 'income',
'contact_type' => 'customer', // use contact type
'hide' => [], // for document items
'class' => [],
'notification' => [
'class' => 'App\Notifications\Sale\Invoice',
'notify_contact' => true,
'notify_user' => true,
],
'script' => [
'folder' => 'common',
'file' => 'documents',
],
'status_workflow' => [
'draft' => 'send',
'sent' => 'get-paid',
'viewed' => 'get-paid',
'partial' => 'get-paid',
'paid' => 'get-paid',
'cancelled' => 'restore',
],
],
Document::INVOICE_RECURRING_TYPE => [
'alias' => '', // core empty but module write own alias
'group' => 'sales', // controller folder name for permission and route
'route' => [
'prefix' => 'recurring-invoices', // core use with group + prefix, module ex. estimates
'parameter' => 'recurring_invoice', // sales/invoices/{parameter}/edit
'document' => 'invoices.index',
'recurring' => 'recurring-invoices.index',
'end' => 'recurring-invoices.end',
//'create' => 'invoices.create', // if you change route, you can write full path
],
'permission' => [
'prefix' => 'invoices', // this controller file name.
//'create' => 'create-sales-invoices', // if you change action permission key, you can write full permission
],
'translation' => [
'prefix' => 'invoices', // this translation file name.
'add_contact' => 'general.customers', //
'issued_at' => 'invoices.invoice_date',
'due_at' => 'invoices.due_date',
'tab_document' => 'general.invoices',
'section_billing_description' => 'invoices.form_description.billing',
],
'setting' => [
'prefix' => 'invoice',
],
'category_type' => 'income',
'transaction_type' => 'income',
'contact_type' => 'customer', // use contact type
'hide' => [], // for document items
'class' => [],
'notification' => [
],
'image_empty_page' => 'public/img/empty_pages/recurring_templates.png',
'script' => [
'folder' => 'common',
'file' => 'documents',
],
'status_workflow' => [
'draft' => 'schedule',
'active' => 'schedule',
'end' => 'schedule',
],
],
Document::BILL_TYPE => [
'alias' => '',
'group' => 'purchases',
'route' => [
'prefix' => 'bills',
'parameter' => 'bill',
'document' => 'bills.index',
'recurring' => 'recurring-bills.index',
//'create' => 'bilss.create',
],
'permission' => [
'prefix' => 'bills',
//'create' => 'create-purchases-bills',
],
'translation' => [
'prefix' => 'bills',
'issued_at' => 'bills.bill_date',
'due_at' => 'bills.due_date',
'section_billing_description' => 'bills.form_description.billing',
],
'setting' => [
'prefix' => 'bill',
],
'category_type' => 'expense',
'transaction_type' => 'expense',
'contact_type' => 'vendor',
'hide' => [],
'notification' => [
'class' => 'App\Notifications\Purchase\Bill',
'notify_contact' => false,
'notify_user' => true,
],
'script' => [
'folder' => 'common',
'file' => 'documents',
],
'status_workflow' => [
'draft' => 'receive',
'received' => 'make-payment',
'viewed' => 'make-payment',
'partial' => 'make-payment',
'paid' => 'make-payment',
'cancelled' => 'restore',
],
],
Document::BILL_RECURRING_TYPE => [
'alias' => '',
'group' => 'purchases',
'route' => [
'prefix' => 'recurring-bills',
'parameter' => 'recurring_bill',
'document' => 'bills.index',
'recurring' => 'recurring-bills.index',
'end' => 'recurring-bills.end',
//'create' => 'bilss.create',
],
'permission' => [
'prefix' => 'bills',
//'create' => 'create-purchases-bills',
],
'translation' => [
'prefix' => 'bills',
'issued_at' => 'bills.bill_date',
'due_at' => 'bills.due_date',
'tab_document' => 'general.bills',
'section_billing_description' => 'bills.form_description.billing',
],
'setting' => [
'prefix' => 'bill',
],
'category_type' => 'expense',
'transaction_type' => 'expense',
'contact_type' => 'vendor',
'hide' => [],
'notification' => [
],
'image_empty_page' => 'public/img/empty_pages/recurring_templates.png',
'script' => [
'folder' => 'common',
'file' => 'documents',
],
'status_workflow' => [
'draft' => 'schedule',
'active' => 'schedule',
'end' => 'schedule',
],
],
],
// Transactions
'income' => [
'group' => 'sales',
'route' => [
'prefix' => 'revenues', // core use with group + prefix, module ex. estimates
'parameter' => 'revenue', // sales/invoices/{parameter}/edit
//'create' => 'invoices.create', // if you change route, you can write full path
'transaction' => [
Transaction::INCOME_TYPE => [
'group' => 'banking',
'route' => [
'prefix' => 'transactions', // core use with group + prefix, module ex. estimates
'parameter' => 'income', // sales/invoices/{parameter}/edit
//'create' => 'invoices.create', // if you change route, you can write full path
],
'permission' => [
'prefix' => 'transactions',
//'create' => 'create-banking-transactions',
],
'translation' => [
'prefix' => 'transactions', // this translation file name.
'related_document_amount' => 'invoices.invoice_amount',
'transactions' => 'general.incomes',
],
'contact_type' => 'customer',
'document_type' => 'invoice',
'split_type' => Transaction::INCOME_SPLIT_TYPE,
'email_template' => 'payment_received_customer',
'script' => [
'folder' => 'banking',
'file' => 'transactions',
],
],
'permission' => [
'prefix' => 'revenues',
//'create' => 'create-sales-revenues',
],
'translation' => [
'prefix' => 'revenues', // this translation file name.
'related_document_amount' => 'invoices.invoice_amount',
],
'contact_type' => 'customer',
],
'expense' => [
'group' => 'purchases',
'route' => [
'prefix' => 'payments', // core use with group + prefix, module ex. estimates
'parameter' => 'payment', // sales/invoices/{parameter}/edit
//'create' => 'invoices.create', // if you change route, you can write full path
Transaction::INCOME_RECURRING_TYPE => [
'group' => 'banking',
'route' => [
'prefix' => 'recurring-transactions', // core use with group + prefix, module ex. estimates
'parameter' => 'recurring_transaction', // sales/invoices/{parameter}/edit
//'create' => 'invoices.create', // if you change route, you can write full path
],
'permission' => [
'prefix' => 'transactions',
//'create' => 'create-banking-transactions',
],
'translation' => [
'prefix' => 'transactions', // this translation file name.
'new' => 'general.recurring_incomes',
'transactions' => 'general.expenses',
],
'image_empty_page' => 'public/img/empty_pages/recurring_templates.png',
'script' => [
'folder' => 'banking',
'file' => 'transactions',
],
'status_workflow' => [
'draft' => 'schedule',
'active' => 'schedule',
'end' => 'schedule',
],
],
'permission' => [
'prefix' => 'payments',
//'create' => 'create-purchases-payments',
],
'translation' => [
'prefix' => 'payments', // this translation file name.
'related_document_amount' => 'bills.bill_amount',
],
'contact_type' => 'vendor',
],
// Categories
'category' => [
'income' => [
'alias' => '',
Transaction::EXPENSE_TYPE => [
'group' => 'banking',
'route' => [
'prefix' => 'transactions', // core use with group + prefix, module ex. estimates
'parameter' => 'expense', // sales/invoices/{parameter}/edit
//'create' => 'invoices.create', // if you change route, you can write full path
],
'permission' => [
'prefix' => 'transactions',
//'create' => 'create-banking-transactions',
],
'translation' => [
'prefix' => 'general',
'prefix' => 'transactions', // this translation file name.
'related_document_amount' => 'bills.bill_amount',
],
'contact_type' => 'vendor',
'document_type' => 'bill',
'split_type' => Transaction::EXPENSE_SPLIT_TYPE,
'email_template' => 'payment_made_vendor',
'script' => [
'folder' => 'banking',
'file' => 'transactions',
],
],
'expense' => [
'alias' => '',
'translation' => [
'prefix' => 'general',
Transaction::EXPENSE_RECURRING_TYPE => [
'group' => 'banking',
'route' => [
'prefix' => 'recurring-transactions', // core use with group + prefix, module ex. estimates
'parameter' => 'recurring_transaction', // sales/invoices/{parameter}/edit
//'create' => 'invoices.create', // if you change route, you can write full path
],
],
'item' => [
'alias' => '',
'translation' => [
'prefix' => 'general',
'permission' => [
'prefix' => 'transactions',
//'create' => 'create-banking-transactions',
],
],
'other' => [
'alias' => '',
'translation' => [
'prefix' => 'general',
'new' => 'general.recurring_expenses',
],
'image_empty_page' => 'public/img/empty_pages/recurring_templates.png',
'script' => [
'folder' => 'banking',
'file' => 'transactions',
],
'status_workflow' => [
'draft' => 'schedule',
'active' => 'schedule',
'end' => 'schedule',
],
],
],

View File

@@ -4,21 +4,21 @@ return [
'name' => 'Akaunting',
'code' => 'Document',
'code' => 'Tailwind',
'major' => '2',
'major' => '3',
'minor' => '1',
'minor' => '0',
'patch' => '35',
'patch' => '0',
'build' => '',
'status' => 'Stable',
'date' => '27-April-2021',
'date' => '1-June-2022',
'time' => '14:00',
'time' => '10:00',
'zone' => 'GMT +3',