mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2024-12-24 08:00:12 -06:00
Various PSR12 code cleanup
This commit is contained in:
parent
56b9b66352
commit
5b8e01fbfb
@ -21,7 +21,6 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
use Illuminate\Contracts\View\Factory as ViewFactory;
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Create The Application
|
| Create The Application
|
||||||
@ -67,7 +66,7 @@ if (!function_exists('str_is_equal')) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$app = new Illuminate\Foundation\Application(
|
$app = new Illuminate\Foundation\Application(
|
||||||
realpath(__DIR__ . '/../')
|
realpath(__DIR__.'/../')
|
||||||
);
|
);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
if ('ldap' === strtolower((string) env('AUTHENTICATION_GUARD'))) {
|
if ('ldap' === strtolower((string)env('AUTHENTICATION_GUARD'))) {
|
||||||
die('LDAP is no longer supported by Firefly III v5.7+. Sorry about that. You will have to switch to "remote_user_guard", and use tools like Authelia or Keycloak to use LDAP together with Firefly III.');
|
die('LDAP is no longer supported by Firefly III v5.7+. Sorry about that. You will have to switch to "remote_user_guard", and use tools like Authelia or Keycloak to use LDAP together with Firefly III.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,7 +83,7 @@ return [
|
|||||||
'servers' => [
|
'servers' => [
|
||||||
[
|
[
|
||||||
'host' => env('MEMCACHED_HOST', '127.0.0.1'),
|
'host' => env('MEMCACHED_HOST', '127.0.0.1'),
|
||||||
'port' => (int) env('MEMCACHED_PORT', 11211),
|
'port' => (int)env('MEMCACHED_PORT', 11211),
|
||||||
'weight' => 100,
|
'weight' => 100,
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
@ -142,7 +142,7 @@ return [
|
|||||||
'client' => env('REDIS_CLIENT', 'predis'),
|
'client' => env('REDIS_CLIENT', 'predis'),
|
||||||
'options' => [
|
'options' => [
|
||||||
'cluster' => env('REDIS_CLUSTER', 'predis'),
|
'cluster' => env('REDIS_CLUSTER', 'predis'),
|
||||||
'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_database_'),
|
'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
|
||||||
],
|
],
|
||||||
'default' => [
|
'default' => [
|
||||||
'scheme' => envNonEmpty('REDIS_SCHEME', 'tcp'),
|
'scheme' => envNonEmpty('REDIS_SCHEME', 'tcp'),
|
||||||
|
@ -88,7 +88,7 @@ return [
|
|||||||
'public' => [
|
'public' => [
|
||||||
'driver' => 'local',
|
'driver' => 'local',
|
||||||
'root' => storage_path('app/public'),
|
'root' => storage_path('app/public'),
|
||||||
'url' => env('APP_URL') . '/storage',
|
'url' => env('APP_URL').'/storage',
|
||||||
'visibility' => 'public',
|
'visibility' => 'public',
|
||||||
],
|
],
|
||||||
|
|
||||||
|
@ -87,7 +87,6 @@ use FireflyIII\TransactionRules\Actions\SetSourceAccount;
|
|||||||
use FireflyIII\TransactionRules\Actions\UpdatePiggybank;
|
use FireflyIII\TransactionRules\Actions\UpdatePiggybank;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* DO NOT EDIT THIS FILE. IT IS AUTO GENERATED.
|
* DO NOT EDIT THIS FILE. IT IS AUTO GENERATED.
|
||||||
*
|
*
|
||||||
|
@ -86,7 +86,7 @@ return [
|
|||||||
'include_helpers' => false,
|
'include_helpers' => false,
|
||||||
|
|
||||||
'helper_files' => [
|
'helper_files' => [
|
||||||
base_path() . '/vendor/laravel/framework/src/Illuminate/Support/helpers.php',
|
base_path().'/vendor/laravel/framework/src/Illuminate/Support/helpers.php',
|
||||||
],
|
],
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -93,7 +93,7 @@ return [
|
|||||||
// daily, used in stack 'stack' by default:
|
// daily, used in stack 'stack' by default:
|
||||||
'daily' => [
|
'daily' => [
|
||||||
'driver' => 'daily',
|
'driver' => 'daily',
|
||||||
'path' => storage_path('logs/ff3-' . PHP_SAPI . '.log'),
|
'path' => storage_path('logs/ff3-'.PHP_SAPI.'.log'),
|
||||||
'level' => envNonEmpty('APP_LOG_LEVEL', 'info'),
|
'level' => envNonEmpty('APP_LOG_LEVEL', 'info'),
|
||||||
'days' => 7,
|
'days' => 7,
|
||||||
],
|
],
|
||||||
|
@ -39,12 +39,12 @@ return [
|
|||||||
'smtp' => [
|
'smtp' => [
|
||||||
'transport' => 'smtp',
|
'transport' => 'smtp',
|
||||||
'host' => env('MAIL_HOST', 'smtp.mailtrap.io'),
|
'host' => env('MAIL_HOST', 'smtp.mailtrap.io'),
|
||||||
'port' => (int) env('MAIL_PORT', 2525),
|
'port' => (int)env('MAIL_PORT', 2525),
|
||||||
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
|
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
|
||||||
'username' => env('MAIL_USERNAME'),
|
'username' => env('MAIL_USERNAME'),
|
||||||
'password' => env('MAIL_PASSWORD'),
|
'password' => env('MAIL_PASSWORD'),
|
||||||
'timeout' => null,
|
'timeout' => null,
|
||||||
'verify_peer' => null !== env('MAIL_ENCRYPTION')
|
'verify_peer' => null !== env('MAIL_ENCRYPTION'),
|
||||||
],
|
],
|
||||||
|
|
||||||
'ses' => [
|
'ses' => [
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
@ -174,19 +174,42 @@ return [
|
|||||||
'Form' => ['is_safe' => ['input', 'select', 'checkbox', 'model', 'open', 'radio', 'textarea', 'file']],
|
'Form' => ['is_safe' => ['input', 'select', 'checkbox', 'model', 'open', 'radio', 'textarea', 'file']],
|
||||||
'ExpandedForm' => [
|
'ExpandedForm' => [
|
||||||
'is_safe' => [
|
'is_safe' => [
|
||||||
'date', 'text', 'select', 'balance', 'optionsList', 'checkbox', 'amount', 'tags', 'integer', 'textarea', 'location', 'file', 'staticText',
|
'date',
|
||||||
'password', 'nonSelectableAmount', 'number', 'amountNoCurrency', 'percentage', 'objectGroup',
|
'text',
|
||||||
|
'select',
|
||||||
|
'balance',
|
||||||
|
'optionsList',
|
||||||
|
'checkbox',
|
||||||
|
'amount',
|
||||||
|
'tags',
|
||||||
|
'integer',
|
||||||
|
'textarea',
|
||||||
|
'location',
|
||||||
|
'file',
|
||||||
|
'staticText',
|
||||||
|
'password',
|
||||||
|
'nonSelectableAmount',
|
||||||
|
'number',
|
||||||
|
'amountNoCurrency',
|
||||||
|
'percentage',
|
||||||
|
'objectGroup',
|
||||||
|
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
'AccountForm' => [
|
'AccountForm' => [
|
||||||
'is_safe' => [
|
'is_safe' => [
|
||||||
'activeWithdrawalDestinations', 'activeDepositDestinations', 'assetAccountCheckList', 'assetAccountList', 'longAccountList',
|
'activeWithdrawalDestinations',
|
||||||
|
'activeDepositDestinations',
|
||||||
|
'assetAccountCheckList',
|
||||||
|
'assetAccountList',
|
||||||
|
'longAccountList',
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
'CurrencyForm' => [
|
'CurrencyForm' => [
|
||||||
'is_safe' => [
|
'is_safe' => [
|
||||||
'currencyList', 'currencyListEmpty', 'balanceAll',
|
'currencyList',
|
||||||
|
'currencyListEmpty',
|
||||||
|
'balanceAll',
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
'PiggyBankForm' => [
|
'PiggyBankForm' => [
|
||||||
@ -196,7 +219,8 @@ return [
|
|||||||
],
|
],
|
||||||
'RuleForm' => [
|
'RuleForm' => [
|
||||||
'is_safe' => [
|
'is_safe' => [
|
||||||
'ruleGroupList', 'ruleGroupListWithEmpty',
|
'ruleGroupList',
|
||||||
|
'ruleGroupListWithEmpty',
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 2016_06_16_000000_create_support_tables.php
|
* 2016_06_16_000000_create_support_tables.php
|
||||||
* Copyright (c) 2019 james@firefly-iii.org.
|
* Copyright (c) 2019 james@firefly-iii.org.
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 2016_06_16_000001_create_users_table.php
|
* 2016_06_16_000001_create_users_table.php
|
||||||
* Copyright (c) 2019 james@firefly-iii.org.
|
* Copyright (c) 2019 james@firefly-iii.org.
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 2016_06_16_000002_create_main_tables.php
|
* 2016_06_16_000002_create_main_tables.php
|
||||||
* Copyright (c) 2019 james@firefly-iii.org.
|
* Copyright (c) 2019 james@firefly-iii.org.
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 2016_08_25_091522_changes_for_3101.php
|
* 2016_08_25_091522_changes_for_3101.php
|
||||||
* Copyright (c) 2019 james@firefly-iii.org.
|
* Copyright (c) 2019 james@firefly-iii.org.
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 2016_09_12_121359_fix_nullables.php
|
* 2016_09_12_121359_fix_nullables.php
|
||||||
* Copyright (c) 2019 james@firefly-iii.org.
|
* Copyright (c) 2019 james@firefly-iii.org.
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 2016_10_09_150037_expand_transactions_table.php
|
* 2016_10_09_150037_expand_transactions_table.php
|
||||||
* Copyright (c) 2019 james@firefly-iii.org.
|
* Copyright (c) 2019 james@firefly-iii.org.
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 2016_10_22_075804_changes_for_v410.php
|
* 2016_10_22_075804_changes_for_v410.php
|
||||||
* Copyright (c) 2019 james@firefly-iii.org.
|
* Copyright (c) 2019 james@firefly-iii.org.
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 2016_11_24_210552_changes_for_v420.php
|
* 2016_11_24_210552_changes_for_v420.php
|
||||||
* Copyright (c) 2019 james@firefly-iii.org.
|
* Copyright (c) 2019 james@firefly-iii.org.
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 2016_12_22_150431_changes_for_v430.php
|
* 2016_12_22_150431_changes_for_v430.php
|
||||||
* Copyright (c) 2019 james@firefly-iii.org.
|
* Copyright (c) 2019 james@firefly-iii.org.
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 2016_12_28_203205_changes_for_v431.php
|
* 2016_12_28_203205_changes_for_v431.php
|
||||||
* Copyright (c) 2019 james@firefly-iii.org.
|
* Copyright (c) 2019 james@firefly-iii.org.
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 2017_04_13_163623_changes_for_v440.php
|
* 2017_04_13_163623_changes_for_v440.php
|
||||||
* Copyright (c) 2019 james@firefly-iii.org.
|
* Copyright (c) 2019 james@firefly-iii.org.
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 2017_06_02_105232_changes_for_v450.php
|
* 2017_06_02_105232_changes_for_v450.php
|
||||||
* Copyright (c) 2019 james@firefly-iii.org.
|
* Copyright (c) 2019 james@firefly-iii.org.
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 2017_08_20_062014_changes_for_v470.php
|
* 2017_08_20_062014_changes_for_v470.php
|
||||||
* Copyright (c) 2019 james@firefly-iii.org.
|
* Copyright (c) 2019 james@firefly-iii.org.
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 2017_11_04_170844_changes_for_v470a.php
|
* 2017_11_04_170844_changes_for_v470a.php
|
||||||
* Copyright (c) 2019 james@firefly-iii.org.
|
* Copyright (c) 2019 james@firefly-iii.org.
|
||||||
|
@ -48,7 +48,8 @@ class CreateOauthAuthCodesTable extends Migration
|
|||||||
public function up(): void
|
public function up(): void
|
||||||
{
|
{
|
||||||
Schema::create(
|
Schema::create(
|
||||||
'oauth_auth_codes', static function (Blueprint $table) {
|
'oauth_auth_codes',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->string('id', 100)->primary();
|
$table->string('id', 100)->primary();
|
||||||
$table->integer('user_id');
|
$table->integer('user_id');
|
||||||
$table->integer('client_id');
|
$table->integer('client_id');
|
||||||
|
@ -48,7 +48,8 @@ class CreateOauthAccessTokensTable extends Migration
|
|||||||
public function up(): void
|
public function up(): void
|
||||||
{
|
{
|
||||||
Schema::create(
|
Schema::create(
|
||||||
'oauth_access_tokens', static function (Blueprint $table) {
|
'oauth_access_tokens',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->string('id', 100)->primary();
|
$table->string('id', 100)->primary();
|
||||||
$table->integer('user_id')->index()->nullable();
|
$table->integer('user_id')->index()->nullable();
|
||||||
$table->integer('client_id');
|
$table->integer('client_id');
|
||||||
|
@ -48,7 +48,8 @@ class CreateOauthRefreshTokensTable extends Migration
|
|||||||
public function up(): void
|
public function up(): void
|
||||||
{
|
{
|
||||||
Schema::create(
|
Schema::create(
|
||||||
'oauth_refresh_tokens', static function (Blueprint $table) {
|
'oauth_refresh_tokens',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->string('id', 100)->primary();
|
$table->string('id', 100)->primary();
|
||||||
$table->string('access_token_id', 100)->index();
|
$table->string('access_token_id', 100)->index();
|
||||||
$table->boolean('revoked');
|
$table->boolean('revoked');
|
||||||
|
@ -48,7 +48,8 @@ class CreateOauthClientsTable extends Migration
|
|||||||
public function up(): void
|
public function up(): void
|
||||||
{
|
{
|
||||||
Schema::create(
|
Schema::create(
|
||||||
'oauth_clients', static function (Blueprint $table) {
|
'oauth_clients',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->increments('id');
|
$table->increments('id');
|
||||||
$table->integer('user_id')->index()->nullable();
|
$table->integer('user_id')->index()->nullable();
|
||||||
$table->string('name');
|
$table->string('name');
|
||||||
|
@ -48,7 +48,8 @@ class CreateOauthPersonalAccessClientsTable extends Migration
|
|||||||
public function up(): void
|
public function up(): void
|
||||||
{
|
{
|
||||||
Schema::create(
|
Schema::create(
|
||||||
'oauth_personal_access_clients', static function (Blueprint $table) {
|
'oauth_personal_access_clients',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->increments('id');
|
$table->increments('id');
|
||||||
$table->integer('client_id')->index();
|
$table->integer('client_id')->index();
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
|
@ -43,7 +43,6 @@ class ChangesForV473 extends Migration
|
|||||||
Schema::table(
|
Schema::table(
|
||||||
'bills',
|
'bills',
|
||||||
static function (Blueprint $table) {
|
static function (Blueprint $table) {
|
||||||
|
|
||||||
// cannot drop foreign keys in SQLite:
|
// cannot drop foreign keys in SQLite:
|
||||||
if ('sqlite' !== config('database.default')) {
|
if ('sqlite' !== config('database.default')) {
|
||||||
$table->dropForeign('bills_transaction_currency_id_foreign');
|
$table->dropForeign('bills_transaction_currency_id_foreign');
|
||||||
|
@ -44,7 +44,6 @@ class ChangesForV474 extends Migration
|
|||||||
Schema::table(
|
Schema::table(
|
||||||
'import_jobs',
|
'import_jobs',
|
||||||
static function (Blueprint $table) {
|
static function (Blueprint $table) {
|
||||||
|
|
||||||
// cannot drop foreign keys in SQLite:
|
// cannot drop foreign keys in SQLite:
|
||||||
if ('sqlite' !== config('database.default')) {
|
if ('sqlite' !== config('database.default')) {
|
||||||
$table->dropForeign('import_jobs_tag_id_foreign');
|
$table->dropForeign('import_jobs_tag_id_foreign');
|
||||||
|
@ -56,7 +56,8 @@ class ChangesForV475 extends Migration
|
|||||||
public function up(): void
|
public function up(): void
|
||||||
{
|
{
|
||||||
Schema::create(
|
Schema::create(
|
||||||
'recurrences', static function (Blueprint $table) {
|
'recurrences',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->increments('id');
|
$table->increments('id');
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
$table->softDeletes();
|
$table->softDeletes();
|
||||||
@ -80,7 +81,8 @@ class ChangesForV475 extends Migration
|
|||||||
);
|
);
|
||||||
|
|
||||||
Schema::create(
|
Schema::create(
|
||||||
'recurrences_transactions', static function (Blueprint $table) {
|
'recurrences_transactions',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->increments('id');
|
$table->increments('id');
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
$table->softDeletes();
|
$table->softDeletes();
|
||||||
@ -103,7 +105,8 @@ class ChangesForV475 extends Migration
|
|||||||
);
|
);
|
||||||
|
|
||||||
Schema::create(
|
Schema::create(
|
||||||
'recurrences_repetitions', static function (Blueprint $table) {
|
'recurrences_repetitions',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->increments('id');
|
$table->increments('id');
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
$table->softDeletes();
|
$table->softDeletes();
|
||||||
@ -118,7 +121,8 @@ class ChangesForV475 extends Migration
|
|||||||
);
|
);
|
||||||
|
|
||||||
Schema::create(
|
Schema::create(
|
||||||
'recurrences_meta', static function (Blueprint $table) {
|
'recurrences_meta',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->increments('id');
|
$table->increments('id');
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
$table->softDeletes();
|
$table->softDeletes();
|
||||||
@ -132,7 +136,8 @@ class ChangesForV475 extends Migration
|
|||||||
);
|
);
|
||||||
|
|
||||||
Schema::create(
|
Schema::create(
|
||||||
'rt_meta', static function (Blueprint $table) {
|
'rt_meta',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->increments('id');
|
$table->increments('id');
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
$table->softDeletes();
|
$table->softDeletes();
|
||||||
|
@ -40,8 +40,8 @@ class ChangesForV477 extends Migration
|
|||||||
public function down(): void
|
public function down(): void
|
||||||
{
|
{
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'budget_limits', static function (Blueprint $table) {
|
'budget_limits',
|
||||||
|
static function (Blueprint $table) {
|
||||||
// cannot drop foreign keys in SQLite:
|
// cannot drop foreign keys in SQLite:
|
||||||
if ('sqlite' !== config('database.default')) {
|
if ('sqlite' !== config('database.default')) {
|
||||||
$table->dropForeign('budget_limits_transaction_currency_id_foreign');
|
$table->dropForeign('budget_limits_transaction_currency_id_foreign');
|
||||||
|
@ -40,7 +40,8 @@ class ChangesForV479 extends Migration
|
|||||||
public function down()
|
public function down()
|
||||||
{
|
{
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'transaction_currencies', static function (Blueprint $table) {
|
'transaction_currencies',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->dropColumn(['enabled']);
|
$table->dropColumn(['enabled']);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -54,7 +54,8 @@ class ChangesForV4710 extends Migration
|
|||||||
{
|
{
|
||||||
if (!Schema::hasTable('transaction_groups')) {
|
if (!Schema::hasTable('transaction_groups')) {
|
||||||
Schema::create(
|
Schema::create(
|
||||||
'transaction_groups', static function (Blueprint $table) {
|
'transaction_groups',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->increments('id');
|
$table->increments('id');
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
$table->softDeletes();
|
$table->softDeletes();
|
||||||
|
@ -60,13 +60,15 @@ class ChangesForV4711 extends Migration
|
|||||||
* nice.
|
* nice.
|
||||||
*/
|
*/
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'transaction_journals', static function (Blueprint $table) {
|
'transaction_journals',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->dateTime('date')->change();
|
$table->dateTime('date')->change();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'preferences', static function (Blueprint $table) {
|
'preferences',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->text('data')->nullable()->change();
|
$table->text('data')->nullable()->change();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -59,7 +59,8 @@ class ChangesForV4712 extends Migration
|
|||||||
* nice.
|
* nice.
|
||||||
*/
|
*/
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'transaction_journals', static function (Blueprint $table) {
|
'transaction_journals',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->dateTime('date')->change();
|
$table->dateTime('date')->change();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -40,7 +40,8 @@ class FixLdapConfiguration extends Migration
|
|||||||
public function down(): void
|
public function down(): void
|
||||||
{
|
{
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'users', static function (Blueprint $table) {
|
'users',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->dropColumn(['objectguid']);
|
$table->dropColumn(['objectguid']);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@ -59,7 +60,8 @@ class FixLdapConfiguration extends Migration
|
|||||||
* now. To support this, we add the column.
|
* now. To support this, we add the column.
|
||||||
*/
|
*/
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'users', static function (Blueprint $table) {
|
'users',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->uuid('objectguid')->nullable()->after('id');
|
$table->uuid('objectguid')->nullable()->after('id');
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -50,13 +50,15 @@ class ChangesForV480 extends Migration
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'rule_groups', static function (Blueprint $table) {
|
'rule_groups',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->dropColumn('stop_processing');
|
$table->dropColumn('stop_processing');
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'users', static function (Blueprint $table) {
|
'users',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->dropColumn('mfa_secret');
|
$table->dropColumn('mfa_secret');
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@ -84,12 +86,14 @@ class ChangesForV480 extends Migration
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'rule_groups', static function (Blueprint $table) {
|
'rule_groups',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->boolean('stop_processing')->default(false);
|
$table->boolean('stop_processing')->default(false);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'users', static function (Blueprint $table) {
|
'users',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->string('mfa_secret', 50)->nullable();
|
$table->string('mfa_secret', 50)->nullable();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -51,7 +51,8 @@ class MakeLocationsTable extends Migration
|
|||||||
public function up()
|
public function up()
|
||||||
{
|
{
|
||||||
Schema::create(
|
Schema::create(
|
||||||
'locations', static function (Blueprint $table) {
|
'locations',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->bigIncrements('id');
|
$table->bigIncrements('id');
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
$table->softDeletes();
|
$table->softDeletes();
|
||||||
|
@ -52,7 +52,8 @@ class ChangesForV530 extends Migration
|
|||||||
{
|
{
|
||||||
if (!Schema::hasTable('object_groups')) {
|
if (!Schema::hasTable('object_groups')) {
|
||||||
Schema::create(
|
Schema::create(
|
||||||
'object_groups', static function (Blueprint $table) {
|
'object_groups',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->increments('id');
|
$table->increments('id');
|
||||||
$table->integer('user_id', false, true);
|
$table->integer('user_id', false, true);
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
@ -65,7 +66,8 @@ class ChangesForV530 extends Migration
|
|||||||
}
|
}
|
||||||
if (!Schema::hasTable('object_groupables')) {
|
if (!Schema::hasTable('object_groupables')) {
|
||||||
Schema::create(
|
Schema::create(
|
||||||
'object_groupables', static function (Blueprint $table) {
|
'object_groupables',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->integer('object_group_id');
|
$table->integer('object_group_id');
|
||||||
$table->integer('object_groupable_id', false, true);
|
$table->integer('object_groupable_id', false, true);
|
||||||
$table->string('object_groupable_type', 255);
|
$table->string('object_groupable_type', 255);
|
||||||
|
@ -41,7 +41,8 @@ class ChangesForV530a extends Migration
|
|||||||
public function down(): void
|
public function down(): void
|
||||||
{
|
{
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'bills', static function (Blueprint $table) {
|
'bills',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->dropColumn('order');
|
$table->dropColumn('order');
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@ -55,7 +56,8 @@ class ChangesForV530a extends Migration
|
|||||||
public function up(): void
|
public function up(): void
|
||||||
{
|
{
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'bills', static function (Blueprint $table) {
|
'bills',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->integer('order', false, true)->default(0);
|
$table->integer('order', false, true)->default(0);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -41,19 +41,22 @@ class ChangesForV540 extends Migration
|
|||||||
public function down(): void
|
public function down(): void
|
||||||
{
|
{
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'oauth_clients', static function (Blueprint $table) {
|
'oauth_clients',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->dropColumn('provider');
|
$table->dropColumn('provider');
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'accounts', static function (Blueprint $table) {
|
'accounts',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->dropColumn('order');
|
$table->dropColumn('order');
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'bills', static function (Blueprint $table) {
|
'bills',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->dropColumn('end_date');
|
$table->dropColumn('end_date');
|
||||||
$table->dropColumn('extension_date');
|
$table->dropColumn('extension_date');
|
||||||
}
|
}
|
||||||
@ -68,24 +71,28 @@ class ChangesForV540 extends Migration
|
|||||||
public function up(): void
|
public function up(): void
|
||||||
{
|
{
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'accounts', static function (Blueprint $table) {
|
'accounts',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->integer('order', false, true)->default(0);
|
$table->integer('order', false, true)->default(0);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'oauth_clients', static function (Blueprint $table) {
|
'oauth_clients',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->string('provider')->nullable();
|
$table->string('provider')->nullable();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'bills', static function (Blueprint $table) {
|
'bills',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->date('end_date')->nullable()->after('date');
|
$table->date('end_date')->nullable()->after('date');
|
||||||
$table->date('extension_date')->nullable()->after('end_date');
|
$table->date('extension_date')->nullable()->after('end_date');
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
// make column nullable:
|
// make column nullable:
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'oauth_clients', function (Blueprint $table) {
|
'oauth_clients',
|
||||||
|
function (Blueprint $table) {
|
||||||
$table->string('secret', 100)->nullable()->change();
|
$table->string('secret', 100)->nullable()->change();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -58,7 +58,8 @@ class ChangesForV550 extends Migration
|
|||||||
|
|
||||||
// expand budget / transaction journal table.
|
// expand budget / transaction journal table.
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'budget_transaction_journal', function (Blueprint $table) {
|
'budget_transaction_journal',
|
||||||
|
function (Blueprint $table) {
|
||||||
$table->dropForeign('budget_id_foreign');
|
$table->dropForeign('budget_id_foreign');
|
||||||
$table->dropColumn('budget_limit_id');
|
$table->dropColumn('budget_limit_id');
|
||||||
}
|
}
|
||||||
@ -91,7 +92,8 @@ class ChangesForV550 extends Migration
|
|||||||
Schema::dropIfExists('jobs');
|
Schema::dropIfExists('jobs');
|
||||||
// this is the NEW table
|
// this is the NEW table
|
||||||
Schema::create(
|
Schema::create(
|
||||||
'jobs', function (Blueprint $table) {
|
'jobs',
|
||||||
|
function (Blueprint $table) {
|
||||||
$table->bigIncrements('id');
|
$table->bigIncrements('id');
|
||||||
$table->string('queue')->index();
|
$table->string('queue')->index();
|
||||||
$table->longText('payload');
|
$table->longText('payload');
|
||||||
@ -106,7 +108,8 @@ class ChangesForV550 extends Migration
|
|||||||
|
|
||||||
// create new failed_jobs table.
|
// create new failed_jobs table.
|
||||||
Schema::create(
|
Schema::create(
|
||||||
'failed_jobs', function (Blueprint $table) {
|
'failed_jobs',
|
||||||
|
function (Blueprint $table) {
|
||||||
$table->bigIncrements('id');
|
$table->bigIncrements('id');
|
||||||
$table->string('uuid')->unique();
|
$table->string('uuid')->unique();
|
||||||
$table->text('connection');
|
$table->text('connection');
|
||||||
@ -119,7 +122,8 @@ class ChangesForV550 extends Migration
|
|||||||
|
|
||||||
// update budget / transaction journal table.
|
// update budget / transaction journal table.
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'budget_transaction_journal', function (Blueprint $table) {
|
'budget_transaction_journal',
|
||||||
|
function (Blueprint $table) {
|
||||||
if (!Schema::hasColumn('budget_transaction_journal', 'budget_limit_id')) {
|
if (!Schema::hasColumn('budget_transaction_journal', 'budget_limit_id')) {
|
||||||
$table->integer('budget_limit_id', false, true)->nullable()->default(null)->after('budget_id');
|
$table->integer('budget_limit_id', false, true)->nullable()->default(null)->after('budget_id');
|
||||||
$table->foreign('budget_limit_id', 'budget_id_foreign')->references('id')->on('budget_limits')->onDelete('set null');
|
$table->foreign('budget_limit_id', 'budget_id_foreign')->references('id')->on('budget_limits')->onDelete('set null');
|
||||||
|
@ -39,13 +39,12 @@ class ChangesForV550b2 extends Migration
|
|||||||
public function down(): void
|
public function down(): void
|
||||||
{
|
{
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'recurrences_transactions', function (Blueprint $table) {
|
'recurrences_transactions',
|
||||||
|
function (Blueprint $table) {
|
||||||
$table->dropForeign('type_foreign');
|
$table->dropForeign('type_foreign');
|
||||||
if (Schema::hasColumn('recurrences_transactions', 'transaction_type_id')) {
|
if (Schema::hasColumn('recurrences_transactions', 'transaction_type_id')) {
|
||||||
$table->dropColumn('transaction_type_id');
|
$table->dropColumn('transaction_type_id');
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -59,7 +58,8 @@ class ChangesForV550b2 extends Migration
|
|||||||
{
|
{
|
||||||
// expand recurrence transaction table
|
// expand recurrence transaction table
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'recurrences_transactions', function (Blueprint $table) {
|
'recurrences_transactions',
|
||||||
|
function (Blueprint $table) {
|
||||||
if (!Schema::hasColumn('recurrences_transactions', 'transaction_type_id')) {
|
if (!Schema::hasColumn('recurrences_transactions', 'transaction_type_id')) {
|
||||||
$table->integer('transaction_type_id', false, true)->nullable()->after('transaction_currency_id');
|
$table->integer('transaction_type_id', false, true)->nullable()->after('transaction_currency_id');
|
||||||
$table->foreign('transaction_type_id', 'type_foreign')->references('id')->on('transaction_types')->onDelete('set null');
|
$table->foreign('transaction_type_id', 'type_foreign')->references('id')->on('transaction_types')->onDelete('set null');
|
||||||
|
@ -34,7 +34,8 @@ class AddLdapColumnsToUsersTable extends Migration
|
|||||||
public function down()
|
public function down()
|
||||||
{
|
{
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'users', function (Blueprint $table) {
|
'users',
|
||||||
|
function (Blueprint $table) {
|
||||||
$table->dropColumn(['domain']);
|
$table->dropColumn(['domain']);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@ -46,7 +47,8 @@ class AddLdapColumnsToUsersTable extends Migration
|
|||||||
public function up()
|
public function up()
|
||||||
{
|
{
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'users', function (Blueprint $table) {
|
'users',
|
||||||
|
function (Blueprint $table) {
|
||||||
$table->string('domain')->nullable();
|
$table->string('domain')->nullable();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -49,7 +49,8 @@ class ExtendCurrencyInfo extends Migration
|
|||||||
public function up()
|
public function up()
|
||||||
{
|
{
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'transaction_currencies', function (Blueprint $table) {
|
'transaction_currencies',
|
||||||
|
function (Blueprint $table) {
|
||||||
$table->string('code', 51)->change();
|
$table->string('code', 51)->change();
|
||||||
$table->string('symbol', 51)->change();
|
$table->string('symbol', 51)->change();
|
||||||
}
|
}
|
||||||
|
@ -32,8 +32,21 @@ use Illuminate\Support\Facades\Schema;
|
|||||||
class UserGroups extends Migration
|
class UserGroups extends Migration
|
||||||
{
|
{
|
||||||
private array $tables
|
private array $tables
|
||||||
= ['accounts', 'attachments', 'available_budgets', 'bills', 'budgets', 'categories', 'recurrences', 'rule_groups', 'rules', 'tags',
|
= [
|
||||||
'transaction_groups', 'transaction_journals', 'webhooks'];
|
'accounts',
|
||||||
|
'attachments',
|
||||||
|
'available_budgets',
|
||||||
|
'bills',
|
||||||
|
'budgets',
|
||||||
|
'categories',
|
||||||
|
'recurrences',
|
||||||
|
'rule_groups',
|
||||||
|
'rules',
|
||||||
|
'tags',
|
||||||
|
'transaction_groups',
|
||||||
|
'transaction_journals',
|
||||||
|
'webhooks',
|
||||||
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reverse the migrations.
|
* Reverse the migrations.
|
||||||
@ -46,8 +59,8 @@ class UserGroups extends Migration
|
|||||||
/** @var string $tableName */
|
/** @var string $tableName */
|
||||||
foreach ($this->tables as $tableName) {
|
foreach ($this->tables as $tableName) {
|
||||||
Schema::table(
|
Schema::table(
|
||||||
$tableName, function (Blueprint $table) use ($tableName) {
|
$tableName,
|
||||||
|
function (Blueprint $table) use ($tableName) {
|
||||||
$table->dropForeign(sprintf('%s_to_ugi', $tableName));
|
$table->dropForeign(sprintf('%s_to_ugi', $tableName));
|
||||||
if (Schema::hasColumn($tableName, 'user_group_id')) {
|
if (Schema::hasColumn($tableName, 'user_group_id')) {
|
||||||
$table->dropColumn('user_group_id');
|
$table->dropColumn('user_group_id');
|
||||||
@ -57,13 +70,12 @@ class UserGroups extends Migration
|
|||||||
}
|
}
|
||||||
|
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'users', function (Blueprint $table) {
|
'users',
|
||||||
|
function (Blueprint $table) {
|
||||||
$table->dropForeign('type_user_group_id');
|
$table->dropForeign('type_user_group_id');
|
||||||
if (Schema::hasColumn('users', 'user_group_id')) {
|
if (Schema::hasColumn('users', 'user_group_id')) {
|
||||||
$table->dropColumn('user_group_id');
|
$table->dropColumn('user_group_id');
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -84,7 +96,8 @@ class UserGroups extends Migration
|
|||||||
* may have multiple roles in a group
|
* may have multiple roles in a group
|
||||||
*/
|
*/
|
||||||
Schema::create(
|
Schema::create(
|
||||||
'user_groups', static function (Blueprint $table) {
|
'user_groups',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->bigIncrements('id');
|
$table->bigIncrements('id');
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
$table->softDeletes();
|
$table->softDeletes();
|
||||||
@ -95,7 +108,8 @@ class UserGroups extends Migration
|
|||||||
);
|
);
|
||||||
|
|
||||||
Schema::create(
|
Schema::create(
|
||||||
'user_roles', static function (Blueprint $table) {
|
'user_roles',
|
||||||
|
static function (Blueprint $table) {
|
||||||
$table->bigIncrements('id');
|
$table->bigIncrements('id');
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
$table->softDeletes();
|
$table->softDeletes();
|
||||||
@ -122,7 +136,8 @@ class UserGroups extends Migration
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'users', function (Blueprint $table) {
|
'users',
|
||||||
|
function (Blueprint $table) {
|
||||||
if (!Schema::hasColumn('users', 'user_group_id')) {
|
if (!Schema::hasColumn('users', 'user_group_id')) {
|
||||||
$table->bigInteger('user_group_id', false, true)->nullable();
|
$table->bigInteger('user_group_id', false, true)->nullable();
|
||||||
$table->foreign('user_group_id', 'type_user_group_id')->references('id')->on('user_groups')->onDelete('set null')->onUpdate('cascade');
|
$table->foreign('user_group_id', 'type_user_group_id')->references('id')->on('user_groups')->onDelete('set null')->onUpdate('cascade');
|
||||||
@ -134,15 +149,16 @@ class UserGroups extends Migration
|
|||||||
/** @var string $tableName */
|
/** @var string $tableName */
|
||||||
foreach ($this->tables as $tableName) {
|
foreach ($this->tables as $tableName) {
|
||||||
Schema::table(
|
Schema::table(
|
||||||
$tableName, function (Blueprint $table) use ($tableName) {
|
$tableName,
|
||||||
|
function (Blueprint $table) use ($tableName) {
|
||||||
if (!Schema::hasColumn($tableName, 'user_group_id')) {
|
if (!Schema::hasColumn($tableName, 'user_group_id')) {
|
||||||
$table->bigInteger('user_group_id', false, true)->nullable()->after('user_id');
|
$table->bigInteger('user_group_id', false, true)->nullable()->after('user_id');
|
||||||
$table->foreign('user_group_id', sprintf('%s_to_ugi', $tableName))->references('id')->on('user_groups')->onDelete('set null')->onUpdate('cascade');
|
$table->foreign('user_group_id', sprintf('%s_to_ugi', $tableName))->references('id')->on('user_groups')->onDelete('set null')->onUpdate(
|
||||||
|
'cascade'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ use Illuminate\Support\Facades\Schema;
|
|||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
return new class extends Migration {
|
return new class () extends Migration {
|
||||||
/**
|
/**
|
||||||
* Run the migrations.
|
* Run the migrations.
|
||||||
*
|
*
|
||||||
@ -38,8 +38,8 @@ return new class extends Migration {
|
|||||||
public function up(): void
|
public function up(): void
|
||||||
{
|
{
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'currency_exchange_rates', function (Blueprint $table) {
|
'currency_exchange_rates',
|
||||||
|
function (Blueprint $table) {
|
||||||
if (!Schema::hasColumn('currency_exchange_rates', 'user_group_id')) {
|
if (!Schema::hasColumn('currency_exchange_rates', 'user_group_id')) {
|
||||||
$table->bigInteger('user_group_id', false, true)->nullable()->after('user_id');
|
$table->bigInteger('user_group_id', false, true)->nullable()->after('user_id');
|
||||||
$table->foreign('user_group_id', 'cer_to_ugi')->references('id')->on('user_groups')->onDelete('set null')->onUpdate('cascade');
|
$table->foreign('user_group_id', 'cer_to_ugi')->references('id')->on('user_groups')->onDelete('set null')->onUpdate('cascade');
|
||||||
@ -56,8 +56,8 @@ return new class extends Migration {
|
|||||||
public function down(): void
|
public function down(): void
|
||||||
{
|
{
|
||||||
Schema::table(
|
Schema::table(
|
||||||
'currency_exchange_rates', function (Blueprint $table) {
|
'currency_exchange_rates',
|
||||||
|
function (Blueprint $table) {
|
||||||
$table->dropForeign('cer_to_ugi');
|
$table->dropForeign('cer_to_ugi');
|
||||||
if (Schema::hasColumn('currency_exchange_rates', 'user_group_id')) {
|
if (Schema::hasColumn('currency_exchange_rates', 'user_group_id')) {
|
||||||
$table->dropColumn('user_group_id');
|
$table->dropColumn('user_group_id');
|
||||||
|
@ -26,8 +26,7 @@ use Illuminate\Database\Migrations\Migration;
|
|||||||
use Illuminate\Database\Schema\Blueprint;
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
use Illuminate\Support\Facades\Schema;
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
return new class extends Migration
|
return new class () extends Migration {
|
||||||
{
|
|
||||||
/**
|
/**
|
||||||
* Run the migrations.
|
* Run the migrations.
|
||||||
*
|
*
|
||||||
|
@ -26,8 +26,7 @@ use Illuminate\Database\Migrations\Migration;
|
|||||||
use Illuminate\Database\Schema\Blueprint;
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
use Illuminate\Support\Facades\Schema;
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
return new class extends Migration
|
return new class () extends Migration {
|
||||||
{
|
|
||||||
/**
|
/**
|
||||||
* Run the migrations.
|
* Run the migrations.
|
||||||
*
|
*
|
||||||
|
@ -26,8 +26,7 @@ use Illuminate\Database\Migrations\Migration;
|
|||||||
use Illuminate\Database\Schema\Blueprint;
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
use Illuminate\Support\Facades\Schema;
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
return new class extends Migration
|
return new class () extends Migration {
|
||||||
{
|
|
||||||
/**
|
/**
|
||||||
* Run the migrations.
|
* Run the migrations.
|
||||||
*
|
*
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* AccountTypeSeeder.php
|
* AccountTypeSeeder.php
|
||||||
* Copyright (c) 2019 james@firefly-iii.org.
|
* Copyright (c) 2019 james@firefly-iii.org.
|
||||||
|
@ -49,7 +49,7 @@ class ConfigSeeder extends Seeder
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (null !== $entry) {
|
if (null !== $entry) {
|
||||||
$version = (int) config('firefly.db_version');
|
$version = (int)config('firefly.db_version');
|
||||||
$entry->data = $version;
|
$entry->data = $version;
|
||||||
$entry->save();
|
$entry->save();
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DatabaseSeeder.php
|
* DatabaseSeeder.php
|
||||||
* Copyright (c) 2019 james@firefly-iii.org.
|
* Copyright (c) 2019 james@firefly-iii.org.
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* LinkTypeSeeder.php
|
* LinkTypeSeeder.php
|
||||||
* Copyright (c) 2019 james@firefly-iii.org.
|
* Copyright (c) 2019 james@firefly-iii.org.
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* PermissionSeeder.php
|
* PermissionSeeder.php
|
||||||
* Copyright (c) 2019 james@firefly-iii.org.
|
* Copyright (c) 2019 james@firefly-iii.org.
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TransactionCurrencySeeder.php
|
* TransactionCurrencySeeder.php
|
||||||
* Copyright (c) 2019 james@firefly-iii.org.
|
* Copyright (c) 2019 james@firefly-iii.org.
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TransactionTypeSeeder.php
|
* TransactionTypeSeeder.php
|
||||||
* Copyright (c) 2019 james@firefly-iii.org.
|
* Copyright (c) 2019 james@firefly-iii.org.
|
||||||
|
@ -77,7 +77,7 @@ export default defineComponent(
|
|||||||
|
|
||||||
const getLocale = function () {
|
const getLocale = function () {
|
||||||
return (new Prefs).get('locale').then(data => {
|
return (new Prefs).get('locale').then(data => {
|
||||||
const locale = data.data.data.attributes.data.replace('_','-');
|
const locale = data.data.data.attributes.data.replace('_', '-');
|
||||||
|
|
||||||
ffStore.setLocale(locale);
|
ffStore.setLocale(locale);
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
|
@ -33,7 +33,7 @@ export default class Get extends Api {
|
|||||||
*/
|
*/
|
||||||
get(identifier, date) {
|
get(identifier, date) {
|
||||||
let params = {date: date};
|
let params = {date: date};
|
||||||
if(!date) {
|
if (!date) {
|
||||||
return this.apiGet(identifier);
|
return this.apiGet(identifier);
|
||||||
}
|
}
|
||||||
return this.apiGet(identifier, params);
|
return this.apiGet(identifier, params);
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
import {api} from "boot/axios";
|
import {api} from "boot/axios";
|
||||||
import Api from "src/api/root/api";
|
import Api from "src/api/root/api";
|
||||||
|
|
||||||
export default class List extends Api{
|
export default class List extends Api {
|
||||||
constructor() {
|
constructor() {
|
||||||
super('accounts');
|
super('accounts');
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
import {api} from "boot/axios";
|
import {api} from "boot/axios";
|
||||||
|
|
||||||
export default class Authenticate {
|
export default class Authenticate {
|
||||||
async authenticate() {
|
async authenticate() {
|
||||||
return await api.get('/sanctum/csrf-cookie');
|
return await api.get('/sanctum/csrf-cookie');
|
||||||
}
|
}
|
||||||
|
@ -25,10 +25,12 @@ export default class Get {
|
|||||||
let url = '/api/v1/categories/' + identifier;
|
let url = '/api/v1/categories/' + identifier;
|
||||||
return api.get(url);
|
return api.get(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
transactions(identifier, page, cacheKey) {
|
transactions(identifier, page, cacheKey) {
|
||||||
let url = '/api/v1/categories/' + identifier + '/transactions';
|
let url = '/api/v1/categories/' + identifier + '/transactions';
|
||||||
return api.get(url, {params: {page: page, cache: cacheKey}});
|
return api.get(url, {params: {page: page, cache: cacheKey}});
|
||||||
}
|
}
|
||||||
|
|
||||||
transactionsWithoutCategory(page, cacheKey) {
|
transactionsWithoutCategory(page, cacheKey) {
|
||||||
let url = '/api/v1/categories/transactions-without-category';
|
let url = '/api/v1/categories/transactions-without-category';
|
||||||
return api.get(url, {params: {page: page, cache: cacheKey}});
|
return api.get(url, {params: {page: page, cache: cacheKey}});
|
||||||
|
@ -25,6 +25,7 @@ export default class Get {
|
|||||||
let url = '/api/v1/currencies/' + identifier;
|
let url = '/api/v1/currencies/' + identifier;
|
||||||
return api.get(url);
|
return api.get(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
transactions(identifier, page, cacheKey) {
|
transactions(identifier, page, cacheKey) {
|
||||||
let url = '/api/v1/currencies/' + identifier + '/transactions';
|
let url = '/api/v1/currencies/' + identifier + '/transactions';
|
||||||
return api.get(url, {params: {page: page, cache: cacheKey}});
|
return api.get(url, {params: {page: page, cache: cacheKey}});
|
||||||
|
@ -20,9 +20,12 @@
|
|||||||
|
|
||||||
import {api} from "boot/axios";
|
import {api} from "boot/axios";
|
||||||
import Authenticate from '../authenticate/index';
|
import Authenticate from '../authenticate/index';
|
||||||
|
|
||||||
export default class Currencies {
|
export default class Currencies {
|
||||||
default() {
|
default() {
|
||||||
let auth = new Authenticate();
|
let auth = new Authenticate();
|
||||||
return auth.authenticate().then(() => {return api.get('/api/v1/currencies/default')});
|
return auth.authenticate().then(() => {
|
||||||
|
return api.get('/api/v1/currencies/default')
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,7 @@ export default class Post {
|
|||||||
let url = '/api/v1/currencies';
|
let url = '/api/v1/currencies';
|
||||||
return api.post(url, submission);
|
return api.post(url, submission);
|
||||||
}
|
}
|
||||||
|
|
||||||
makeDefault(currency) {
|
makeDefault(currency) {
|
||||||
let url = '/api/v1/currencies/' + currency + '/default';
|
let url = '/api/v1/currencies/' + currency + '/default';
|
||||||
return api.post(url);
|
return api.post(url);
|
||||||
|
@ -25,6 +25,7 @@ export default class Get {
|
|||||||
let url = '/api/v1/piggy_banks/' + identifier;
|
let url = '/api/v1/piggy_banks/' + identifier;
|
||||||
return api.get(url);
|
return api.get(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
transactions(identifier, page, cacheKey) {
|
transactions(identifier, page, cacheKey) {
|
||||||
let url = '/api/v1/piggy_banks/' + identifier + '/transactions';
|
let url = '/api/v1/piggy_banks/' + identifier + '/transactions';
|
||||||
return api.get(url, {params: {page: page, cache: cacheKey}});
|
return api.get(url, {params: {page: page, cache: cacheKey}});
|
||||||
|
@ -24,6 +24,7 @@ export default class Preferences {
|
|||||||
getByName(name) {
|
getByName(name) {
|
||||||
return api.get('/api/v1/preferences/' + name);
|
return api.get('/api/v1/preferences/' + name);
|
||||||
}
|
}
|
||||||
|
|
||||||
postByName(name, value) {
|
postByName(name, value) {
|
||||||
return api.post('/api/v1/preferences', {name: name, data: value});
|
return api.post('/api/v1/preferences', {name: name, data: value});
|
||||||
}
|
}
|
||||||
|
@ -23,11 +23,12 @@ import {api} from "boot/axios";
|
|||||||
export default class Get {
|
export default class Get {
|
||||||
get(identifier, date) {
|
get(identifier, date) {
|
||||||
let url = '/api/v1/rule_groups/' + identifier;
|
let url = '/api/v1/rule_groups/' + identifier;
|
||||||
if(!date) {
|
if (!date) {
|
||||||
return api.get(url);
|
return api.get(url);
|
||||||
}
|
}
|
||||||
return api.get(url, {params: {date: date}});
|
return api.get(url, {params: {date: date}});
|
||||||
}
|
}
|
||||||
|
|
||||||
rules(identifier, page, cacheKey) {
|
rules(identifier, page, cacheKey) {
|
||||||
let url = '/api/v1/rule_groups/' + identifier + '/rules';
|
let url = '/api/v1/rule_groups/' + identifier + '/rules';
|
||||||
return api.get(url, {params: {page: page, cache: cacheKey}});
|
return api.get(url, {params: {page: page, cache: cacheKey}});
|
||||||
|
@ -23,7 +23,7 @@ import {api} from "boot/axios";
|
|||||||
export default class Get {
|
export default class Get {
|
||||||
get(identifier, date) {
|
get(identifier, date) {
|
||||||
let url = '/api/v1/rules/' + identifier;
|
let url = '/api/v1/rules/' + identifier;
|
||||||
if(!date) {
|
if (!date) {
|
||||||
return api.get(url);
|
return api.get(url);
|
||||||
}
|
}
|
||||||
return api.get(url, {params: {date: date}});
|
return api.get(url, {params: {date: date}});
|
||||||
|
@ -25,6 +25,7 @@ export default class Get {
|
|||||||
let url = '/api/v1/bills/' + identifier;
|
let url = '/api/v1/bills/' + identifier;
|
||||||
return api.get(url);
|
return api.get(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
transactions(identifier, page, cacheKey) {
|
transactions(identifier, page, cacheKey) {
|
||||||
let url = '/api/v1/bills/' + identifier + '/transactions';
|
let url = '/api/v1/bills/' + identifier + '/transactions';
|
||||||
return api.get(url, {params: {page: page, cache: cacheKey}});
|
return api.get(url, {params: {page: page, cache: cacheKey}});
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* configuration.js
|
* configuration.js
|
||||||
* Copyright (c) 2022 james@firefly-iii.org
|
* Copyright (c) 2022 james@firefly-iii.org
|
||||||
@ -22,11 +21,11 @@
|
|||||||
import {api} from "boot/axios";
|
import {api} from "boot/axios";
|
||||||
|
|
||||||
export default class Configuration {
|
export default class Configuration {
|
||||||
get (identifier) {
|
get(identifier) {
|
||||||
return api.get('/api/v1/configuration/' + identifier);
|
return api.get('/api/v1/configuration/' + identifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
put (identifier, value) {
|
put(identifier, value) {
|
||||||
return api.put('/api/v1/configuration/' + identifier, value);
|
return api.put('/api/v1/configuration/' + identifier, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,7 @@ export default class Get {
|
|||||||
let url = '/api/v1/tags/' + identifier;
|
let url = '/api/v1/tags/' + identifier;
|
||||||
return api.get(url);
|
return api.get(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
transactions(identifier, page, cacheKey) {
|
transactions(identifier, page, cacheKey) {
|
||||||
let url = '/api/v1/tags/' + identifier + '/transactions';
|
let url = '/api/v1/tags/' + identifier + '/transactions';
|
||||||
return api.get(url, {params: {page: page, cache: cacheKey}});
|
return api.get(url, {params: {page: page, cache: cacheKey}});
|
||||||
|
@ -33,13 +33,14 @@ export default class Get extends Api {
|
|||||||
*/
|
*/
|
||||||
get(identifier, date) {
|
get(identifier, date) {
|
||||||
let params = {date: date};
|
let params = {date: date};
|
||||||
if(!date) {
|
if (!date) {
|
||||||
return this.apiGet(identifier);
|
return this.apiGet(identifier);
|
||||||
}
|
}
|
||||||
return this.apiGet(identifier, params);
|
return this.apiGet(identifier, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
transactions(identifier, params) {
|
transactions(identifier, params) {
|
||||||
if(!params) {
|
if (!params) {
|
||||||
return this.apiGetTransactions(identifier);
|
return this.apiGetTransactions(identifier);
|
||||||
}
|
}
|
||||||
return this.apiGetTransactions(identifier, params);
|
return this.apiGetTransactions(identifier, params);
|
||||||
|
@ -24,6 +24,7 @@ export default class Preferences {
|
|||||||
get(name) {
|
get(name) {
|
||||||
return api.get('/api/v2/preferences/' + name);
|
return api.get('/api/v2/preferences/' + name);
|
||||||
}
|
}
|
||||||
|
|
||||||
// postByName(name, value) {
|
// postByName(name, value) {
|
||||||
// return api.post('/api/v1/preferences', {name: name, data: value});
|
// return api.post('/api/v1/preferences', {name: name, data: value});
|
||||||
// }
|
// }
|
||||||
|
@ -52,6 +52,7 @@ export default class Api {
|
|||||||
}
|
}
|
||||||
return api.get(url);
|
return api.get(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param object
|
* @param object
|
||||||
|
@ -24,8 +24,8 @@ import {setupCache} from 'axios-cache-adapter'
|
|||||||
|
|
||||||
const cache = setupCache({
|
const cache = setupCache({
|
||||||
maxAge: 15 * 60 * 1000,
|
maxAge: 15 * 60 * 1000,
|
||||||
exclude: { query: false }
|
exclude: {query: false}
|
||||||
})
|
})
|
||||||
|
|
||||||
// Be careful when using SSR for cross-request state pollution
|
// Be careful when using SSR for cross-request state pollution
|
||||||
// due to creating a Singleton instance here;
|
// due to creating a Singleton instance here;
|
||||||
|
@ -18,11 +18,11 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { boot } from 'quasar/wrappers'
|
import {boot} from 'quasar/wrappers'
|
||||||
import { createI18n } from 'vue-i18n'
|
import {createI18n} from 'vue-i18n'
|
||||||
import messages from 'src/i18n'
|
import messages from 'src/i18n'
|
||||||
|
|
||||||
export default boot(({ app }) => {
|
export default boot(({app}) => {
|
||||||
const i18n = createI18n({
|
const i18n = createI18n({
|
||||||
locale: 'en-US',
|
locale: 'en-US',
|
||||||
messages
|
messages
|
||||||
|
@ -19,14 +19,14 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="q-ma-md" v-if="showAlert">
|
<div v-if="showAlert" class="q-ma-md">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<q-banner :class="alertClass" inline-actions>
|
<q-banner :class="alertClass" inline-actions>
|
||||||
{{ message }}
|
{{ message }}
|
||||||
<template v-slot:action>
|
<template v-slot:action>
|
||||||
<q-btn flat @click="dismissBanner" color="white" label="Dismiss"/>
|
<q-btn color="white" flat label="Dismiss" @click="dismissBanner"/>
|
||||||
<q-btn flat color="white" v-if="showAction" :to="actionLink" :label="actionText"/>
|
<q-btn v-if="showAction" :label="actionText" :to="actionLink" color="white" flat/>
|
||||||
</template>
|
</template>
|
||||||
</q-banner>
|
</q-banner>
|
||||||
</div>
|
</div>
|
||||||
@ -90,7 +90,7 @@ export default {
|
|||||||
}
|
}
|
||||||
this.$q.localStorage.set('flash', false);
|
this.$q.localStorage.set('flash', false);
|
||||||
},
|
},
|
||||||
dismissBanner: function() {
|
dismissBanner: function () {
|
||||||
this.showAlert = false;
|
this.showAlert = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,29 +33,23 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import {
|
import {computed, defineComponent, PropType, ref, Ref, toRef,} from 'vue';
|
||||||
defineComponent,
|
import {Meta, Todo} from './models';
|
||||||
PropType,
|
|
||||||
computed,
|
|
||||||
ref,
|
|
||||||
toRef,
|
|
||||||
Ref,
|
|
||||||
} from 'vue';
|
|
||||||
import { Todo, Meta } from './models';
|
|
||||||
|
|
||||||
function useClickCount() {
|
function useClickCount() {
|
||||||
const clickCount = ref(0);
|
const clickCount = ref(0);
|
||||||
|
|
||||||
function increment() {
|
function increment() {
|
||||||
clickCount.value += 1
|
clickCount.value += 1
|
||||||
return clickCount.value;
|
return clickCount.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
return { clickCount, increment };
|
return {clickCount, increment};
|
||||||
}
|
}
|
||||||
|
|
||||||
function useDisplayTodo(todos: Ref<Todo[]>) {
|
function useDisplayTodo(todos: Ref<Todo[]>) {
|
||||||
const todoCount = computed(() => todos.value.length);
|
const todoCount = computed(() => todos.value.length);
|
||||||
return { todoCount };
|
return {todoCount};
|
||||||
}
|
}
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
@ -66,11 +60,11 @@ export default defineComponent({
|
|||||||
required: true
|
required: true
|
||||||
},
|
},
|
||||||
todos: {
|
todos: {
|
||||||
type: Array as PropType<Todo[]>,
|
type: Array as PropType < Todo[] >,
|
||||||
default: () => []
|
default: () => []
|
||||||
},
|
},
|
||||||
meta: {
|
meta: {
|
||||||
type: Object as PropType<Meta>,
|
type: Object as PropType < Meta >,
|
||||||
required: true
|
required: true
|
||||||
},
|
},
|
||||||
active: {
|
active: {
|
||||||
@ -78,7 +72,7 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
setup(props) {
|
setup(props) {
|
||||||
return { ...useClickCount(), ...useDisplayTodo(toRef(props, 'todos')) };
|
return {...useClickCount(), ...useDisplayTodo(toRef(props, 'todos'))};
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@ -22,14 +22,15 @@
|
|||||||
<div class="q-pa-xs">
|
<div class="q-pa-xs">
|
||||||
<div>
|
<div>
|
||||||
<!-- <DatePicker v-model="range" is-range :is-dark="darkMode" :model-config="modelConfig"/> -->
|
<!-- <DatePicker v-model="range" is-range :is-dark="darkMode" :model-config="modelConfig"/> -->
|
||||||
<q-date v-model="localRange" range minimal mask="YYYY-MM-DD"/>
|
<q-date v-model="localRange" mask="YYYY-MM-DD" minimal range/>
|
||||||
</div>
|
</div>
|
||||||
<div class="q-mt-xs">
|
<div class="q-mt-xs">
|
||||||
<span class="q-mr-xs"><q-btn @click="resetRange" size="sm" color="primary" label="Reset"/></span>
|
<span class="q-mr-xs"><q-btn color="primary" label="Reset" size="sm" @click="resetRange"/></span>
|
||||||
<q-btn color="primary" size="sm" label="Change range" icon-right="fas fa-caret-down" title="More options in preferences">
|
<q-btn color="primary" icon-right="fas fa-caret-down" label="Change range" size="sm"
|
||||||
|
title="More options in preferences">
|
||||||
<q-menu>
|
<q-menu>
|
||||||
<q-list style="min-width: 100px">
|
<q-list style="min-width: 100px">
|
||||||
<q-item clickable v-close-popup v-for="choice in rangeChoices" @click="setViewRange(choice)">
|
<q-item v-for="choice in rangeChoices" v-close-popup clickable @click="setViewRange(choice)">
|
||||||
<q-item-section>{{ $t('firefly.pref_' + choice.value) }}</q-item-section>
|
<q-item-section>{{ $t('firefly.pref_' + choice.value) }}</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
</q-list>
|
</q-list>
|
||||||
|
@ -20,16 +20,16 @@
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<q-item
|
<q-item
|
||||||
|
:href="link"
|
||||||
clickable
|
clickable
|
||||||
tag="a"
|
tag="a"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
:href="link"
|
|
||||||
>
|
>
|
||||||
<q-item-section
|
<q-item-section
|
||||||
v-if="icon"
|
v-if="icon"
|
||||||
avatar
|
avatar
|
||||||
>
|
>
|
||||||
<q-icon :name="icon" />
|
<q-icon :name="icon"/>
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
|
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
@ -42,7 +42,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { defineComponent } from 'vue'
|
import {defineComponent} from 'vue'
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'EssentialLink',
|
name: 'EssentialLink',
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
</q-item-section>
|
</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
<q-separator/>
|
<q-separator/>
|
||||||
<ApexChart ref="chart" height="350" type="line" :options="options" :series="series"></ApexChart>
|
<ApexChart ref="chart" :options="options" :series="series" height="350" type="line"></ApexChart>
|
||||||
</q-card>
|
</q-card>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
@ -107,11 +107,11 @@ export default {
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
numberFormatter: function (value, index) {
|
numberFormatter: function (value, index) {
|
||||||
if(index instanceof Object) {
|
if (index instanceof Object) {
|
||||||
let currencyCode = this.currencies[index.seriesIndex] ?? 'EUR';
|
let currencyCode = this.currencies[index.seriesIndex] ?? 'EUR';
|
||||||
return Intl.NumberFormat(this.locale, {style: 'currency', currency: currencyCode}).format(value);
|
return Intl.NumberFormat(this.locale, {style: 'currency', currency: currencyCode}).format(value);
|
||||||
}
|
}
|
||||||
if(Number.isInteger(index)) {
|
if (Number.isInteger(index)) {
|
||||||
let currencyCode = this.currencies[index] ?? 'EUR';
|
let currencyCode = this.currencies[index] ?? 'EUR';
|
||||||
return Intl.NumberFormat(this.locale, {style: 'currency', currency: currencyCode}).format(value);
|
return Intl.NumberFormat(this.locale, {style: 'currency', currency: currencyCode}).format(value);
|
||||||
}
|
}
|
||||||
@ -142,10 +142,10 @@ export default {
|
|||||||
series = {};
|
series = {};
|
||||||
series.name = data[i].label;
|
series.name = data[i].label;
|
||||||
series.data = [];
|
series.data = [];
|
||||||
if(!data[i].converted) {
|
if (!data[i].converted) {
|
||||||
this.currencies.push(data[i].currency_code);
|
this.currencies.push(data[i].currency_code);
|
||||||
}
|
}
|
||||||
if(data[i].converted) {
|
if (data[i].converted) {
|
||||||
this.currencies.push(data[i].native_code);
|
this.currencies.push(data[i].native_code);
|
||||||
}
|
}
|
||||||
for (let ii in data[i].entries) {
|
for (let ii in data[i].entries) {
|
||||||
|
@ -33,10 +33,10 @@
|
|||||||
<q-card-section horizontal>
|
<q-card-section horizontal>
|
||||||
<q-card-section>
|
<q-card-section>
|
||||||
<q-circular-progress
|
<q-circular-progress
|
||||||
:value="percentage"
|
|
||||||
size="50px"
|
|
||||||
:thickness="0.22"
|
:thickness="0.22"
|
||||||
|
:value="percentage"
|
||||||
color="positive"
|
color="positive"
|
||||||
|
size="50px"
|
||||||
track-color="negative"
|
track-color="negative"
|
||||||
/>
|
/>
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
@ -52,10 +52,12 @@
|
|||||||
{{ formatAmount(item.code, item.sum) }}<span v-if="index+1 !== unpaid.length"> + </span></span>
|
{{ formatAmount(item.code, item.sum) }}<span v-if="index+1 !== unpaid.length"> + </span></span>
|
||||||
</span>
|
</span>
|
||||||
<br/>
|
<br/>
|
||||||
<span v-if="paid.length > 0" :title="formatAmount(this.currency, this.paidAmount)">{{ $t('firefly.bills_paid') }}:</span>
|
<span v-if="paid.length > 0" :title="formatAmount(this.currency, this.paidAmount)">{{
|
||||||
|
$t('firefly.bills_paid')
|
||||||
|
}}:</span>
|
||||||
<span v-for="(item, index) in paid">
|
<span v-for="(item, index) in paid">
|
||||||
<span :title="formatAmount(item.native_code, item.native_sum)">
|
<span :title="formatAmount(item.native_code, item.native_sum)">
|
||||||
{{formatAmount(item.code, item.sum) }}
|
{{ formatAmount(item.code, item.sum) }}
|
||||||
</span>
|
</span>
|
||||||
<span v-if="index+1 !== paid.length"> + </span></span>
|
<span v-if="index+1 !== paid.length"> + </span></span>
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
|
@ -139,8 +139,8 @@ export default {
|
|||||||
},
|
},
|
||||||
parseBudgetLimits: function (data, budget) {
|
parseBudgetLimits: function (data, budget) {
|
||||||
console.log('Parse for ' + budget.name);
|
console.log('Parse for ' + budget.name);
|
||||||
for(let i in data) {
|
for (let i in data) {
|
||||||
if(data.hasOwnProperty(i)) {
|
if (data.hasOwnProperty(i)) {
|
||||||
const current = data[i];
|
const current = data[i];
|
||||||
budget.limits.push(
|
budget.limits.push(
|
||||||
{
|
{
|
||||||
|
@ -32,14 +32,16 @@
|
|||||||
<q-separator/>
|
<q-separator/>
|
||||||
<q-card-section horizontal>
|
<q-card-section horizontal>
|
||||||
<q-card-section>
|
<q-card-section>
|
||||||
<q-icon name="fas fa-chart-line" size="50px" :color="primary > 0 ? 'positive' : 'negative'"/>
|
<q-icon :color="primary > 0 ? 'positive' : 'negative'" name="fas fa-chart-line" size="50px"/>
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
<q-separator vertical/>
|
<q-separator vertical/>
|
||||||
<q-card-section>
|
<q-card-section>
|
||||||
<strong>{{ formatAmount(currency, primary) }}</strong><br/>
|
<strong>{{ formatAmount(currency, primary) }}</strong><br/>
|
||||||
<small>
|
<small>
|
||||||
<span v-for="(item, index) in netWorth">
|
<span v-for="(item, index) in netWorth">
|
||||||
<span :title="formatAmount(item.native_code, item.native_sum)">{{ formatAmount(item.code, item.sum) }}</span>
|
<span :title="formatAmount(item.native_code, item.native_sum)">{{
|
||||||
|
formatAmount(item.code, item.sum)
|
||||||
|
}}</span>
|
||||||
<span v-if="index+1 !== netWorth.length"> + </span></span>
|
<span v-if="index+1 !== netWorth.length"> + </span></span>
|
||||||
</small>
|
</small>
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
@ -104,7 +106,7 @@ export default {
|
|||||||
if (!current.converted) {
|
if (!current.converted) {
|
||||||
this.primary = this.primary + parseFloat(current.sum);
|
this.primary = this.primary + parseFloat(current.sum);
|
||||||
}
|
}
|
||||||
if(parseFloat(current.sum) !== 0.0) {
|
if (parseFloat(current.sum) !== 0.0) {
|
||||||
this.netWorth.push(
|
this.netWorth.push(
|
||||||
{
|
{
|
||||||
sum: current.sum,
|
sum: current.sum,
|
||||||
@ -120,7 +122,10 @@ export default {
|
|||||||
},
|
},
|
||||||
// TODO this method is recycled a lot.
|
// TODO this method is recycled a lot.
|
||||||
formatAmount: function (currencyCode, amount) {
|
formatAmount: function (currencyCode, amount) {
|
||||||
return Intl.NumberFormat(this.store?.getLocale ?? 'en-US', {style: 'currency', currency: currencyCode}).format(amount);
|
return Intl.NumberFormat(this.store?.getLocale ?? 'en-US', {
|
||||||
|
style: 'currency',
|
||||||
|
currency: currencyCode
|
||||||
|
}).format(amount);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col q-mb-xs">
|
<div class="col q-mb-xs">
|
||||||
<q-banner rounded class="bg-purple-8 text-white">
|
<q-banner class="bg-purple-8 text-white" rounded>
|
||||||
Hi! You must be new to Firefly III. Welcome! Please fill in this form to create some basic accounts and get you
|
Hi! You must be new to Firefly III. Welcome! Please fill in this form to create some basic accounts and get you
|
||||||
started.
|
started.
|
||||||
</q-banner>
|
</q-banner>
|
||||||
@ -37,12 +37,12 @@
|
|||||||
<div class="row q-mb-xs">
|
<div class="row q-mb-xs">
|
||||||
<div class="col-8 offset-2">
|
<div class="col-8 offset-2">
|
||||||
<q-input
|
<q-input
|
||||||
:error-message="bank_name_error"
|
v-model="bank_name"
|
||||||
:error="bank_name_has_error"
|
|
||||||
bottom-slots
|
|
||||||
:disable="disabledInput"
|
:disable="disabledInput"
|
||||||
clearable
|
:error="bank_name_has_error"
|
||||||
outlined v-model="bank_name" label="The name of your bank">
|
:error-message="bank_name_error"
|
||||||
|
bottom-slots
|
||||||
|
clearable label="The name of your bank" outlined>
|
||||||
<template v-slot:prepend>
|
<template v-slot:prepend>
|
||||||
<q-icon name="fas fa-university"/>
|
<q-icon name="fas fa-university"/>
|
||||||
</template>
|
</template>
|
||||||
@ -52,23 +52,23 @@
|
|||||||
<div class="row q-mb-xs">
|
<div class="row q-mb-xs">
|
||||||
<div class="col-3 offset-2">
|
<div class="col-3 offset-2">
|
||||||
<q-select
|
<q-select
|
||||||
:error-message="currency_error"
|
v-model="currency"
|
||||||
:error="currency_has_error"
|
|
||||||
bottom-slots
|
|
||||||
:disable="disabledInput"
|
:disable="disabledInput"
|
||||||
outlined
|
:error="currency_has_error"
|
||||||
v-model="currency" emit-value class="q-pr-xs"
|
:error-message="currency_error"
|
||||||
map-options :options="currencies" label="Currency"/>
|
:options="currencies"
|
||||||
|
bottom-slots class="q-pr-xs" emit-value
|
||||||
|
label="Currency" map-options outlined/>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-5">
|
<div class="col-5">
|
||||||
<q-input
|
<q-input
|
||||||
:error-message="bank_balance_error"
|
v-model="bank_balance"
|
||||||
:error="bank_balance_has_error"
|
|
||||||
bottom-slots
|
|
||||||
:disable="disabledInput"
|
:disable="disabledInput"
|
||||||
outlined
|
:error="bank_balance_has_error"
|
||||||
v-model="bank_balance" :mask="balance_input_mask" reverse-fill-mask fill-mask="0"
|
:error-message="bank_balance_error"
|
||||||
label="Today's balance" hint="Enter your current balance">
|
:mask="balance_input_mask"
|
||||||
|
bottom-slots fill-mask="0" hint="Enter your current balance" label="Today's balance"
|
||||||
|
outlined reverse-fill-mask>
|
||||||
<template v-slot:prepend>
|
<template v-slot:prepend>
|
||||||
<q-icon name="fas fa-money-bill-wave"/>
|
<q-icon name="fas fa-money-bill-wave"/>
|
||||||
</template>
|
</template>
|
||||||
@ -78,13 +78,13 @@
|
|||||||
<div class="row q-mb-xs">
|
<div class="row q-mb-xs">
|
||||||
<div class="col-8 offset-2">
|
<div class="col-8 offset-2">
|
||||||
<q-input
|
<q-input
|
||||||
:error-message="savings_balance_error"
|
v-model="savings_balance"
|
||||||
:error="savings_balance_has_error"
|
|
||||||
bottom-slots
|
|
||||||
:disable="disabledInput"
|
:disable="disabledInput"
|
||||||
outlined
|
:error="savings_balance_has_error"
|
||||||
v-model="savings_balance" :mask="balance_input_mask" reverse-fill-mask fill-mask="0"
|
:error-message="savings_balance_error"
|
||||||
label="Today's savings account balance" hint="Leave empty or set to zero if not relevant.">
|
:mask="balance_input_mask"
|
||||||
|
bottom-slots fill-mask="0" hint="Leave empty or set to zero if not relevant." label="Today's savings account balance"
|
||||||
|
outlined reverse-fill-mask>
|
||||||
<template v-slot:prepend>
|
<template v-slot:prepend>
|
||||||
<q-icon name="fas fa-coins"/>
|
<q-icon name="fas fa-coins"/>
|
||||||
</template>
|
</template>
|
||||||
@ -105,21 +105,21 @@
|
|||||||
<div class="row q-mb-xs">
|
<div class="row q-mb-xs">
|
||||||
<div class="col-8 offset-2">
|
<div class="col-8 offset-2">
|
||||||
<q-select
|
<q-select
|
||||||
:error-message="language_error"
|
v-model="language"
|
||||||
:error="language_has_error"
|
|
||||||
bottom-slots
|
|
||||||
outlined
|
|
||||||
:disable="disabledInput"
|
:disable="disabledInput"
|
||||||
v-model="language" emit-value
|
:error="language_has_error"
|
||||||
map-options :options="languages" label="I prefer the following language"/>
|
:error-message="language_error"
|
||||||
|
:options="languages"
|
||||||
|
bottom-slots emit-value
|
||||||
|
label="I prefer the following language" map-options outlined/>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-10 offset-2">
|
<div class="col-10 offset-2">
|
||||||
<q-checkbox
|
<q-checkbox
|
||||||
:disable="disabledInput"
|
v-model="manage_cash"
|
||||||
v-model="manage_cash" label="I want to manage cash using Firefly III"/>
|
:disable="disabledInput" label="I want to manage cash using Firefly III"/>
|
||||||
<q-banner v-if="manage_cash_has_error" class="text-white bg-red">{{ manage_cash_error }}</q-banner>
|
<q-banner v-if="manage_cash_has_error" class="text-white bg-red">{{ manage_cash_error }}</q-banner>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -127,8 +127,8 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-8 offset-2">
|
<div class="col-8 offset-2">
|
||||||
<q-checkbox
|
<q-checkbox
|
||||||
:disable="disabledInput"
|
v-model="have_cc"
|
||||||
v-model="have_cc" label="I have a credit card."/>
|
:disable="disabledInput" label="I have a credit card."/>
|
||||||
<q-banner v-if="have_cc_has_error" class="text-white bg-red">{{ have_cc_error }}</q-banner>
|
<q-banner v-if="have_cc_has_error" class="text-white bg-red">{{ have_cc_error }}</q-banner>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -136,8 +136,8 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-8 offset-2">
|
<div class="col-8 offset-2">
|
||||||
<q-checkbox
|
<q-checkbox
|
||||||
:disable="disabledInput"
|
v-model="have_questions"
|
||||||
v-model="have_questions" label="I know where to go when I have questions"/>
|
:disable="disabledInput" label="I know where to go when I have questions"/>
|
||||||
<div class="q-px-sm">
|
<div class="q-px-sm">
|
||||||
Hint: visit <a href="https://github.com/firefly-iii/firefly-iii/discussions/">GitHub</a>
|
Hint: visit <a href="https://github.com/firefly-iii/firefly-iii/discussions/">GitHub</a>
|
||||||
or <a href="#">Gitter.im</a>. You can also
|
or <a href="#">Gitter.im</a>. You can also
|
||||||
|
@ -33,10 +33,10 @@
|
|||||||
<q-card-section horizontal>
|
<q-card-section horizontal>
|
||||||
<q-card-section>
|
<q-card-section>
|
||||||
<q-circular-progress
|
<q-circular-progress
|
||||||
:value="percentage"
|
|
||||||
size="50px"
|
|
||||||
:thickness="0.22"
|
:thickness="0.22"
|
||||||
|
:value="percentage"
|
||||||
color="negative"
|
color="negative"
|
||||||
|
size="50px"
|
||||||
track-color="positive"
|
track-color="positive"
|
||||||
/>
|
/>
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
@ -48,14 +48,20 @@
|
|||||||
<span :title="formatAmount(this.currency, this.budgetedAmount)">{{ $t('firefly.budgeted') }}</span>:
|
<span :title="formatAmount(this.currency, this.budgetedAmount)">{{ $t('firefly.budgeted') }}</span>:
|
||||||
<!-- list budgeted -->
|
<!-- list budgeted -->
|
||||||
<span v-for="(item, index) in budgeted">
|
<span v-for="(item, index) in budgeted">
|
||||||
<span :title="formatAmount(item.native_code, item.native_sum)">{{ formatAmount(item.code, item.sum) }}</span>
|
<span :title="formatAmount(item.native_code, item.native_sum)">{{
|
||||||
|
formatAmount(item.code, item.sum)
|
||||||
|
}}</span>
|
||||||
<span v-if="index+1 !== budgeted.length"> + </span>
|
<span v-if="index+1 !== budgeted.length"> + </span>
|
||||||
</span>
|
</span>
|
||||||
<br />
|
<br/>
|
||||||
<span v-if="spent.length > 0" :title="formatAmount(this.currency, this.spentAmount)">{{ $t('firefly.spent') }}: </span>
|
<span v-if="spent.length > 0" :title="formatAmount(this.currency, this.spentAmount)">{{
|
||||||
|
$t('firefly.spent')
|
||||||
|
}}: </span>
|
||||||
<!-- list spent -->
|
<!-- list spent -->
|
||||||
<span v-for="(item, index) in spent">
|
<span v-for="(item, index) in spent">
|
||||||
<span :title="formatAmount(item.native_code, item.native_sum)">{{ formatAmount(item.code, item.sum) }}</span>
|
<span :title="formatAmount(item.native_code, item.native_sum)">{{
|
||||||
|
formatAmount(item.code, item.sum)
|
||||||
|
}}</span>
|
||||||
<span v-if="index+1 !== spent.length"> + </span></span>
|
<span v-if="index+1 !== spent.length"> + </span></span>
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
<q-item-section>
|
<q-item-section>
|
||||||
<q-item-label><strong>{{ accountName }}</strong>
|
<q-item-label><strong>{{ accountName }}</strong>
|
||||||
<span v-if="accountCurrencyCode !== ''">
|
<span v-if="accountCurrencyCode !== ''">
|
||||||
({{ formatAmount(accountCurrencyCode,accountBalance) }})
|
({{ formatAmount(accountCurrencyCode, accountBalance) }})
|
||||||
</span>
|
</span>
|
||||||
</q-item-label>
|
</q-item-label>
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
@ -52,8 +52,8 @@
|
|||||||
{{ tr.description }}
|
{{ tr.description }}
|
||||||
<br/>
|
<br/>
|
||||||
</span>
|
</span>
|
||||||
<router-link :to="{ name: 'transactions.show', params: {id: transaction.transactionGroupId} }"
|
<router-link v-if="transaction.transactions.length === 1"
|
||||||
v-if="transaction.transactions.length === 1">
|
:to="{ name: 'transactions.show', params: {id: transaction.transactionGroupId} }">
|
||||||
{{ tr.description }}
|
{{ tr.description }}
|
||||||
</router-link>
|
</router-link>
|
||||||
</span>
|
</span>
|
||||||
@ -86,8 +86,13 @@
|
|||||||
|
|
||||||
<!-- show foreign amount if present and not converted (may lead to double amounts) -->
|
<!-- show foreign amount if present and not converted (may lead to double amounts) -->
|
||||||
<span v-if="null !== tr.foreign_amount">
|
<span v-if="null !== tr.foreign_amount">
|
||||||
<span v-if="false === tr.foreign_currency_converted"> ({{ formatAmount(tr.foreign_currency_code, tr.foreign_amount) }})</span>
|
<span v-if="false === tr.foreign_currency_converted"> ({{
|
||||||
<span v-if="true === tr.foreign_currency_converted" :title="formatAmount(tr.foreign_currency_code, tr.foreign_amount)"> ({{ formatAmount(tr.native_currency_code, tr.native_foreign_amount) }})</span>
|
formatAmount(tr.foreign_currency_code, tr.foreign_amount)
|
||||||
|
}})</span>
|
||||||
|
<span v-if="true === tr.foreign_currency_converted"
|
||||||
|
:title="formatAmount(tr.foreign_currency_code, tr.foreign_amount)"> ({{
|
||||||
|
formatAmount(tr.native_currency_code, tr.native_foreign_amount)
|
||||||
|
}})</span>
|
||||||
</span>
|
</span>
|
||||||
<br v-if="transaction.transactions.length > 1"/>
|
<br v-if="transaction.transactions.length > 1"/>
|
||||||
</span>
|
</span>
|
||||||
|
@ -20,8 +20,8 @@
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col q-mr-sm" v-for="(account) in accounts">
|
<div v-for="(account) in accounts" class="col q-mr-sm">
|
||||||
<TransactionList :account-id="account" />
|
<TransactionList :account-id="account"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -44,13 +44,13 @@ export default {
|
|||||||
this.getAccounts();
|
this.getAccounts();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
getAccounts: function() {
|
getAccounts: function () {
|
||||||
(new Preferences).get('frontpageAccounts').then((response) => this.parseAccounts(response.data));
|
(new Preferences).get('frontpageAccounts').then((response) => this.parseAccounts(response.data));
|
||||||
},
|
},
|
||||||
parseAccounts: function(data) {
|
parseAccounts: function (data) {
|
||||||
const content = data.data.attributes.data;
|
const content = data.data.attributes.data;
|
||||||
for(let i in content) {
|
for (let i in content) {
|
||||||
if(content.hasOwnProperty(i)) {
|
if (content.hasOwnProperty(i)) {
|
||||||
this.accounts.push(content[i]);
|
this.accounts.push(content[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,13 +20,13 @@
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<q-table
|
<q-table
|
||||||
:title="title"
|
|
||||||
:rows="rows"
|
|
||||||
:columns="columns"
|
|
||||||
row-key="group_id"
|
|
||||||
v-model:pagination="pagination"
|
v-model:pagination="pagination"
|
||||||
|
:columns="columns"
|
||||||
:loading="loading"
|
:loading="loading"
|
||||||
|
:rows="rows"
|
||||||
|
:title="title"
|
||||||
class="q-ma-md"
|
class="q-ma-md"
|
||||||
|
row-key="group_id"
|
||||||
@request="onRequest"
|
@request="onRequest"
|
||||||
>
|
>
|
||||||
<template v-slot:header="props">
|
<template v-slot:header="props">
|
||||||
@ -44,13 +44,13 @@
|
|||||||
<template v-slot:body="props">
|
<template v-slot:body="props">
|
||||||
<q-tr :props="props">
|
<q-tr :props="props">
|
||||||
<q-td auto-width>
|
<q-td auto-width>
|
||||||
<q-btn size="sm" v-if="props.row.splits.length > 1" round dense @click="props.expand = !props.expand"
|
<q-btn v-if="props.row.splits.length > 1" :icon="props.expand ? 'fas fa-minus-circle' : 'fas fa-plus-circle'" dense round size="sm"
|
||||||
:icon="props.expand ? 'fas fa-minus-circle' : 'fas fa-plus-circle'"/>
|
@click="props.expand = !props.expand"/>
|
||||||
</q-td>
|
</q-td>
|
||||||
<q-td key="type" :props="props">
|
<q-td key="type" :props="props">
|
||||||
<q-icon class="fas fa-long-arrow-alt-right" v-if="'deposit' === props.row.type.toLowerCase()"></q-icon>
|
<q-icon v-if="'deposit' === props.row.type.toLowerCase()" class="fas fa-long-arrow-alt-right"></q-icon>
|
||||||
<q-icon class="fas fa-long-arrow-alt-left" v-if="'withdrawal' === props.row.type.toLowerCase()"></q-icon>
|
<q-icon v-if="'withdrawal' === props.row.type.toLowerCase()" class="fas fa-long-arrow-alt-left"></q-icon>
|
||||||
<q-icon class="fas fa-arrows-alt-h" v-if="'transfer' === props.row.type.toLowerCase()"></q-icon>
|
<q-icon v-if="'transfer' === props.row.type.toLowerCase()" class="fas fa-arrows-alt-h"></q-icon>
|
||||||
</q-td>
|
</q-td>
|
||||||
<q-td key="description" :props="props">
|
<q-td key="description" :props="props">
|
||||||
<router-link :to="{ name: 'transactions.show', params: {id: props.row.group_id} }" class="text-primary">
|
<router-link :to="{ name: 'transactions.show', params: {id: props.row.group_id} }" class="text-primary">
|
||||||
@ -79,12 +79,12 @@
|
|||||||
<q-td key="menu" :props="props">
|
<q-td key="menu" :props="props">
|
||||||
<q-btn-dropdown color="primary" label="Actions" size="sm">
|
<q-btn-dropdown color="primary" label="Actions" size="sm">
|
||||||
<q-list>
|
<q-list>
|
||||||
<q-item clickable v-close-popup :to="{name: 'transactions.edit', params: {id: props.row.group_id}}">
|
<q-item v-close-popup :to="{name: 'transactions.edit', params: {id: props.row.group_id}}" clickable>
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
<q-item-label>Edit</q-item-label>
|
<q-item-label>Edit</q-item-label>
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
<q-item clickable v-close-popup
|
<q-item v-close-popup clickable
|
||||||
@click="deleteTransaction(props.row.group_id, props.row.description, props.row.group_title)">
|
@click="deleteTransaction(props.row.group_id, props.row.description, props.row.group_title)">
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
<q-item-label>Delete</q-item-label>
|
<q-item-label>Delete</q-item-label>
|
||||||
@ -94,7 +94,7 @@
|
|||||||
</q-btn-dropdown>
|
</q-btn-dropdown>
|
||||||
</q-td>
|
</q-td>
|
||||||
</q-tr>
|
</q-tr>
|
||||||
<q-tr v-show="props.expand" :props="props" v-for="currentRow in props.row.splits">
|
<q-tr v-for="currentRow in props.row.splits" v-show="props.expand" :props="props">
|
||||||
<q-td auto-width/>
|
<q-td auto-width/>
|
||||||
<q-td auto-width/>
|
<q-td auto-width/>
|
||||||
<q-td>
|
<q-td>
|
||||||
|
@ -33,17 +33,17 @@
|
|||||||
// Tip: Use the "Theme Builder" on Quasar's documentation website.
|
// Tip: Use the "Theme Builder" on Quasar's documentation website.
|
||||||
|
|
||||||
// $primary : #1976D2;
|
// $primary : #1976D2;
|
||||||
$primary : #1E6581;
|
$primary: #1E6581;
|
||||||
|
|
||||||
$secondary : #26A69A;
|
$secondary: #26A69A;
|
||||||
$accent : #9C27B0;
|
$accent: #9C27B0;
|
||||||
|
|
||||||
$dark : #1D1D1D;
|
$dark: #1D1D1D;
|
||||||
|
|
||||||
// $positive : #21BA45;
|
// $positive : #21BA45;
|
||||||
$positive: #64B624;
|
$positive: #64B624;
|
||||||
// $negative : #C10015;
|
// $negative : #C10015;
|
||||||
$negative: #CD5029;
|
$negative: #CD5029;
|
||||||
|
|
||||||
$info : #31CCEC;
|
$info: #31CCEC;
|
||||||
$warning : #F2C037;
|
$warning: #F2C037;
|
||||||
|
@ -20,44 +20,45 @@
|
|||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title><%= productName %></title>
|
<title><%= productName %></title>
|
||||||
|
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="description" content="<%= productDescription %>">
|
<meta content="<%= productDescription %>" name="description">
|
||||||
<meta name="format-detection" content="telephone=no">
|
<meta content="telephone=no" name="format-detection">
|
||||||
<meta name="msapplication-tap-highlight" content="no">
|
<meta content="no" name="msapplication-tap-highlight">
|
||||||
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width<% if (ctx.mode.cordova || ctx.mode.capacitor) { %>, viewport-fit=cover<% } %>">
|
<meta content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width<% if (ctx.mode.cordova || ctx.mode.capacitor) { %>, viewport-fit=cover<% } %>"
|
||||||
|
name="viewport">
|
||||||
|
|
||||||
|
|
||||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png">
|
<link href="favicon-32x32.png" rel="icon" sizes="32x32" type="image/png">
|
||||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png">
|
<link href="favicon-16x16.png" rel="icon" sizes="16x16" type="image/png">
|
||||||
|
|
||||||
<link rel="apple-touch-icon" sizes="76x76" href="maskable76.png">
|
<link href="maskable76.png" rel="apple-touch-icon" sizes="76x76">
|
||||||
<link rel="apple-touch-icon" sizes="120x120" href="maskable120.png">
|
<link href="maskable120.png" rel="apple-touch-icon" sizes="120x120">
|
||||||
<link rel="apple-touch-icon" sizes="152x152" href="maskable152.png">
|
<link href="maskable152.png" rel="apple-touch-icon" sizes="152x152">
|
||||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png">
|
<link href="apple-touch-icon.png" rel="apple-touch-icon" sizes="180x180">
|
||||||
|
|
||||||
<link rel="mask-icon" href="safari-pinned-tab.svg" color="#3c8dbc">
|
<link color="#3c8dbc" href="safari-pinned-tab.svg" rel="mask-icon">
|
||||||
|
|
||||||
<link href="maskable192.png" rel="icon" sizes="192x192">
|
<link href="maskable192.png" rel="icon" sizes="192x192">
|
||||||
<link href="maskable128.png" rel="icon" sizes="128x128">
|
<link href="maskable128.png" rel="icon" sizes="128x128">
|
||||||
|
|
||||||
<link rel="manifest" href="manifest.webmanifest">
|
<link href="manifest.webmanifest" rel="manifest">
|
||||||
|
|
||||||
<meta name="msapplication-TileColor" content="#1e6581">
|
<meta content="#1e6581" name="msapplication-TileColor">
|
||||||
<meta name="msapplication-TileImage" content="maskable512.png">
|
<meta content="maskable512.png" name="msapplication-TileImage">
|
||||||
<meta name="msapplication-tap-highlight" content="no">
|
<meta content="no" name="msapplication-tap-highlight">
|
||||||
<meta name="application-name" content="Firefly III">
|
<meta content="Firefly III" name="application-name">
|
||||||
<meta name="robots" content="noindex, nofollow, noarchive, noodp, NoImageIndex, noydir">
|
<meta content="noindex, nofollow, noarchive, noodp, NoImageIndex, noydir" name="robots">
|
||||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
<meta content="yes" name="apple-mobile-web-app-capable">
|
||||||
<meta name="apple-mobile-web-app-title" content="Firefly III">
|
<meta content="Firefly III" name="apple-mobile-web-app-title">
|
||||||
<meta name="application-name" content="Firefly III">
|
<meta content="Firefly III" name="application-name">
|
||||||
<meta name="msapplication-TileColor" content="#3c8dbc">
|
<meta content="#3c8dbc" name="msapplication-TileColor">
|
||||||
<meta name="msapplication-TileImage" content="mstile-144x144.png?v=3e8AboOwbd">
|
<meta content="mstile-144x144.png?v=3e8AboOwbd" name="msapplication-TileImage">
|
||||||
<meta name="theme-color" content="#3c8dbc">
|
<meta content="#3c8dbc" name="theme-color">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="q-app"></div>
|
<div id="q-app"></div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -21,24 +21,24 @@
|
|||||||
<template>
|
<template>
|
||||||
<q-layout view="hHh lpR fFf">
|
<q-layout view="hHh lpR fFf">
|
||||||
|
|
||||||
<q-header elevated class="bg-primary text-white">
|
<q-header class="bg-primary text-white" elevated>
|
||||||
<q-toolbar>
|
<q-toolbar>
|
||||||
<q-btn dense flat round icon="fas fa-bars" @click="toggleLeftDrawer"/>
|
<q-btn dense flat icon="fas fa-bars" round @click="toggleLeftDrawer"/>
|
||||||
|
|
||||||
<q-toolbar-title>
|
<q-toolbar-title>
|
||||||
<q-avatar>
|
<q-avatar>
|
||||||
<img src="maskable-icon.svg" alt="Firefly III Logo" title="Firefly III">
|
<img alt="Firefly III Logo" src="maskable-icon.svg" title="Firefly III">
|
||||||
</q-avatar>
|
</q-avatar>
|
||||||
Firefly III
|
Firefly III
|
||||||
</q-toolbar-title>
|
</q-toolbar-title>
|
||||||
|
|
||||||
|
|
||||||
<q-select
|
<q-select
|
||||||
ref="search" dark dense standout use-input hide-selected
|
ref="search" v-model="search" :stack-label="false" class="q-mx-xs" color="black" dark
|
||||||
class="q-mx-xs"
|
dense
|
||||||
color="black" :stack-label="false" label="Search"
|
hide-selected label="Search" standout
|
||||||
v-model="search"
|
|
||||||
style="width: 250px"
|
style="width: 250px"
|
||||||
|
use-input
|
||||||
>
|
>
|
||||||
|
|
||||||
<template v-slot:append>
|
<template v-slot:append>
|
||||||
@ -47,8 +47,8 @@
|
|||||||
|
|
||||||
<template v-slot:option="scope">
|
<template v-slot:option="scope">
|
||||||
<q-item
|
<q-item
|
||||||
v-bind="scope.itemProps"
|
|
||||||
class=""
|
class=""
|
||||||
|
v-bind="scope.itemProps"
|
||||||
>
|
>
|
||||||
<q-item-section side>
|
<q-item-section side>
|
||||||
<q-icon name="collections_bookmark"/>
|
<q-icon name="collections_bookmark"/>
|
||||||
@ -56,8 +56,8 @@
|
|||||||
<q-item-section>
|
<q-item-section>
|
||||||
<q-item-label v-html="scope.opt.label"/>
|
<q-item-label v-html="scope.opt.label"/>
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
<q-item-section side class="default-type">
|
<q-item-section class="default-type" side>
|
||||||
<q-btn outline dense no-caps text-color="blue-grey-5" size="12px" class="bg-grey-1 q-px-sm">
|
<q-btn class="bg-grey-1 q-px-sm" dense no-caps outline size="12px" text-color="blue-grey-5">
|
||||||
{{ 'Jump to' }}
|
{{ 'Jump to' }}
|
||||||
<q-icon name="subdirectory_arrow_left" size="14px"/>
|
<q-icon name="subdirectory_arrow_left" size="14px"/>
|
||||||
</q-btn>
|
</q-btn>
|
||||||
@ -66,49 +66,49 @@
|
|||||||
</template>
|
</template>
|
||||||
</q-select>
|
</q-select>
|
||||||
|
|
||||||
<q-separator dark vertical inset/>
|
<q-separator dark inset vertical/>
|
||||||
<q-btn flat icon="fas fa-skull-crossbones" :to="{name: 'development.index'}" class="q-mx-xs"/>
|
<q-btn :to="{name: 'development.index'}" class="q-mx-xs" flat icon="fas fa-skull-crossbones"/>
|
||||||
<q-separator dark vertical inset/>
|
<q-separator dark inset vertical/>
|
||||||
<q-btn flat icon="fas fa-question-circle" @click="showHelpBox" class="q-mx-xs"/>
|
<q-btn class="q-mx-xs" flat icon="fas fa-question-circle" @click="showHelpBox"/>
|
||||||
<q-separator dark vertical inset/>
|
<q-separator dark inset vertical/>
|
||||||
|
|
||||||
<!-- TODO notifications -->
|
<!-- TODO notifications -->
|
||||||
|
|
||||||
<!-- date range -->
|
<!-- date range -->
|
||||||
<q-btn v-if="$q.screen.gt.xs && $route.meta.dateSelector" flat class="q-mx-xs">
|
<q-btn v-if="$q.screen.gt.xs && $route.meta.dateSelector" class="q-mx-xs" flat>
|
||||||
<div class="row items-center no-wrap">
|
<div class="row items-center no-wrap">
|
||||||
<q-icon name="fas fa-calendar" size="20px"/>
|
<q-icon name="fas fa-calendar" size="20px"/>
|
||||||
<q-icon name="fas fa-caret-down" size="12px" right/>
|
<q-icon name="fas fa-caret-down" right size="12px"/>
|
||||||
</div>
|
</div>
|
||||||
<q-menu>
|
<q-menu>
|
||||||
<DateRange></DateRange>
|
<DateRange></DateRange>
|
||||||
</q-menu>
|
</q-menu>
|
||||||
</q-btn>
|
</q-btn>
|
||||||
<q-separator dark vertical inset v-if="$route.meta.dateSelector"/>
|
<q-separator v-if="$route.meta.dateSelector" dark inset vertical/>
|
||||||
|
|
||||||
<!-- specials -->
|
<!-- specials -->
|
||||||
<q-btn v-if="$q.screen.gt.xs" flat class="q-mx-xs">
|
<q-btn v-if="$q.screen.gt.xs" class="q-mx-xs" flat>
|
||||||
<div class="row items-center no-wrap">
|
<div class="row items-center no-wrap">
|
||||||
<q-icon name="fas fa-dragon" size="20px"/>
|
<q-icon name="fas fa-dragon" size="20px"/>
|
||||||
<q-icon name="fas fa-caret-down" size="12px" right/>
|
<q-icon name="fas fa-caret-down" right size="12px"/>
|
||||||
</div>
|
</div>
|
||||||
<q-menu auto-close>
|
<q-menu auto-close>
|
||||||
<q-list style="min-width: 120px">
|
<q-list style="min-width: 120px">
|
||||||
<q-item clickable :to="{ name: 'webhooks.index' }">
|
<q-item :to="{ name: 'webhooks.index' }" clickable>
|
||||||
<q-item-section>Webhooks</q-item-section>
|
<q-item-section>Webhooks</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
<q-item clickable :to="{ name: 'currencies.index' }">
|
<q-item :to="{ name: 'currencies.index' }" clickable>
|
||||||
<q-item-section>Currencies</q-item-section>
|
<q-item-section>Currencies</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
<q-item clickable :to="{ name: 'admin.index' }">
|
<q-item :to="{ name: 'admin.index' }" clickable>
|
||||||
<q-item-section>Administration</q-item-section>
|
<q-item-section>Administration</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
</q-list>
|
</q-list>
|
||||||
</q-menu>
|
</q-menu>
|
||||||
</q-btn>
|
</q-btn>
|
||||||
<q-separator dark vertical inset/>
|
<q-separator dark inset vertical/>
|
||||||
<!-- profile -->
|
<!-- profile -->
|
||||||
<q-btn v-if="$q.screen.gt.xs" flat class="q-mx-xs">
|
<q-btn v-if="$q.screen.gt.xs" class="q-mx-xs" flat>
|
||||||
<div class="row items-center no-wrap">
|
<div class="row items-center no-wrap">
|
||||||
<q-icon name="fas fa-user-circle" size="20px"/>
|
<q-icon name="fas fa-user-circle" size="20px"/>
|
||||||
<q-icon name="fas fa-caret-down" right size="12px"/>
|
<q-icon name="fas fa-caret-down" right size="12px"/>
|
||||||
@ -116,20 +116,20 @@
|
|||||||
<q-menu auto-close>
|
<q-menu auto-close>
|
||||||
<q-list style="min-width: 180px">
|
<q-list style="min-width: 180px">
|
||||||
|
|
||||||
<q-item clickable :to="{ name: 'profile.index' }">
|
<q-item :to="{ name: 'profile.index' }" clickable>
|
||||||
<q-item-section> Profile</q-item-section>
|
<q-item-section> Profile</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
<q-item clickable :to="{ name: 'profile.daa' }">
|
<q-item :to="{ name: 'profile.daa' }" clickable>
|
||||||
<q-item-section> Data management</q-item-section>
|
<q-item-section> Data management</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
<q-item clickable :to="{ name: 'preferences.index' }">
|
<q-item :to="{ name: 'preferences.index' }" clickable>
|
||||||
<q-item-section>Preferences</q-item-section>
|
<q-item-section>Preferences</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
<q-item clickable :to="{ name: 'export.index' }">
|
<q-item :to="{ name: 'export.index' }" clickable>
|
||||||
<q-item-section>Export data</q-item-section>
|
<q-item-section>Export data</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
<q-separator/>
|
<q-separator/>
|
||||||
<q-item clickable :to="{ name: 'logout' }">
|
<q-item :to="{ name: 'logout' }" clickable>
|
||||||
<q-item-section>Logout</q-item-section>
|
<q-item-section>Logout</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
</q-list>
|
</q-list>
|
||||||
@ -137,11 +137,11 @@
|
|||||||
</q-btn>
|
</q-btn>
|
||||||
</q-toolbar>
|
</q-toolbar>
|
||||||
</q-header>
|
</q-header>
|
||||||
<q-drawer show-if-above v-model="leftDrawerOpen" side="left" bordered>
|
<q-drawer v-model="leftDrawerOpen" bordered show-if-above side="left">
|
||||||
<q-scroll-area class="fit">
|
<q-scroll-area class="fit">
|
||||||
<div class="q-pa-md">
|
<div class="q-pa-md">
|
||||||
<q-list>
|
<q-list>
|
||||||
<q-item clickable v-ripple :to="{ name: 'index' }">
|
<q-item v-ripple :to="{ name: 'index' }" clickable>
|
||||||
<q-item-section avatar>
|
<q-item-section avatar>
|
||||||
<q-icon name="fas fa-tachometer-alt"/>
|
<q-icon name="fas fa-tachometer-alt"/>
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
@ -149,7 +149,7 @@
|
|||||||
Dashboard
|
Dashboard
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
<q-item clickable v-ripple :to="{ name: 'budgets.index' }">
|
<q-item v-ripple :to="{ name: 'budgets.index' }" clickable>
|
||||||
<q-item-section avatar>
|
<q-item-section avatar>
|
||||||
<q-icon name="fas fa-chart-pie"/>
|
<q-icon name="fas fa-chart-pie"/>
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
@ -157,7 +157,7 @@
|
|||||||
Budgets
|
Budgets
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
<q-item clickable v-ripple :to="{ name: 'subscriptions.index' }">
|
<q-item v-ripple :to="{ name: 'subscriptions.index' }" clickable>
|
||||||
<q-item-section avatar>
|
<q-item-section avatar>
|
||||||
<q-icon name="far fa-calendar-alt"/>
|
<q-icon name="far fa-calendar-alt"/>
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
@ -165,7 +165,7 @@
|
|||||||
Subscriptions
|
Subscriptions
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
<q-item clickable v-ripple :to="{ name: 'piggy-banks.index' }">
|
<q-item v-ripple :to="{ name: 'piggy-banks.index' }" clickable>
|
||||||
<q-item-section avatar>
|
<q-item-section avatar>
|
||||||
<q-icon name="fas fa-piggy-bank"/>
|
<q-icon name="fas fa-piggy-bank"/>
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
@ -175,22 +175,25 @@
|
|||||||
</q-item>
|
</q-item>
|
||||||
|
|
||||||
<q-expansion-item
|
<q-expansion-item
|
||||||
|
:default-opened="this.$route.name === 'transactions.index' || this.$route.name === 'transactions.show'"
|
||||||
expand-separator
|
expand-separator
|
||||||
icon="fas fa-exchange-alt"
|
icon="fas fa-exchange-alt"
|
||||||
label="Transactions"
|
label="Transactions"
|
||||||
:default-opened="this.$route.name === 'transactions.index' || this.$route.name === 'transactions.show'"
|
|
||||||
>
|
>
|
||||||
<q-item :inset-level="1" clickable v-ripple :to="{ name: 'transactions.index', params: {type: 'withdrawal'} }">
|
<q-item v-ripple :inset-level="1" :to="{ name: 'transactions.index', params: {type: 'withdrawal'} }"
|
||||||
|
clickable>
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
Withdrawals
|
Withdrawals
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
<q-item clickable v-ripple :inset-level="1" :to="{ name: 'transactions.index', params: {type: 'deposit'} }">
|
<q-item v-ripple :inset-level="1" :to="{ name: 'transactions.index', params: {type: 'deposit'} }"
|
||||||
|
clickable>
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
Deposits
|
Deposits
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
<q-item clickable v-ripple :inset-level="1" :to="{ name: 'transactions.index', params: {type: 'transfers'} }">
|
<q-item v-ripple :inset-level="1" :to="{ name: 'transactions.index', params: {type: 'transfers'} }"
|
||||||
|
clickable>
|
||||||
|
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
Transfers
|
Transfers
|
||||||
@ -202,17 +205,17 @@
|
|||||||
|
|
||||||
|
|
||||||
<q-expansion-item
|
<q-expansion-item
|
||||||
|
default-unopened
|
||||||
expand-separator
|
expand-separator
|
||||||
icon="fas fa-microchip"
|
icon="fas fa-microchip"
|
||||||
label="Automation"
|
label="Automation"
|
||||||
default-unopened
|
|
||||||
>
|
>
|
||||||
<q-item :inset-level="1" clickable v-ripple :to="{ name: 'rules.index' }">
|
<q-item v-ripple :inset-level="1" :to="{ name: 'rules.index' }" clickable>
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
Rules
|
Rules
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
<q-item :inset-level="1" clickable v-ripple :to="{ name: 'recurring.index' }">
|
<q-item v-ripple :inset-level="1" :to="{ name: 'recurring.index' }" clickable>
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
Recurring transactions
|
Recurring transactions
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
@ -221,27 +224,28 @@
|
|||||||
</q-expansion-item>
|
</q-expansion-item>
|
||||||
|
|
||||||
<q-expansion-item
|
<q-expansion-item
|
||||||
|
:default-opened="this.$route.name === 'accounts.index' || this.$route.name === 'accounts.show'"
|
||||||
expand-separator
|
expand-separator
|
||||||
icon="fas fa-credit-card"
|
icon="fas fa-credit-card"
|
||||||
label="Accounts"
|
label="Accounts"
|
||||||
:default-opened="this.$route.name === 'accounts.index' || this.$route.name === 'accounts.show'"
|
|
||||||
>
|
>
|
||||||
<q-item clickable v-ripple :inset-level="1" :to="{ name: 'accounts.index', params: {type: 'asset'} }">
|
<q-item v-ripple :inset-level="1" :to="{ name: 'accounts.index', params: {type: 'asset'} }" clickable>
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
Asset accounts
|
Asset accounts
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
<q-item clickable v-ripple :inset-level="1" :to="{ name: 'accounts.index', params: {type: 'expense'} }">
|
<q-item v-ripple :inset-level="1" :to="{ name: 'accounts.index', params: {type: 'expense'} }" clickable>
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
Expense accounts
|
Expense accounts
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
<q-item clickable v-ripple :inset-level="1" :to="{ name: 'accounts.index', params: {type: 'revenue'} }">
|
<q-item v-ripple :inset-level="1" :to="{ name: 'accounts.index', params: {type: 'revenue'} }" clickable>
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
Revenue accounts
|
Revenue accounts
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
<q-item clickable v-ripple :inset-level="1" :to="{ name: 'accounts.index', params: {type: 'liabilities'} }">
|
<q-item v-ripple :inset-level="1" :to="{ name: 'accounts.index', params: {type: 'liabilities'} }"
|
||||||
|
clickable>
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
Liabilities
|
Liabilities
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
@ -250,28 +254,28 @@
|
|||||||
</q-expansion-item>
|
</q-expansion-item>
|
||||||
|
|
||||||
<q-expansion-item
|
<q-expansion-item
|
||||||
|
default-unopened
|
||||||
expand-separator
|
expand-separator
|
||||||
icon="fas fa-tags"
|
icon="fas fa-tags"
|
||||||
label="Classification"
|
label="Classification"
|
||||||
default-unopened
|
|
||||||
>
|
>
|
||||||
<q-item clickable v-ripple :inset-level="1" :to="{ name: 'categories.index' }">
|
<q-item v-ripple :inset-level="1" :to="{ name: 'categories.index' }" clickable>
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
Categories
|
Categories
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
<q-item clickable v-ripple :inset-level="1" :to="{ name: 'tags.index' }">
|
<q-item v-ripple :inset-level="1" :to="{ name: 'tags.index' }" clickable>
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
Tags
|
Tags
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
<q-item clickable v-ripple :inset-level="1" :to="{ name: 'groups.index'}">
|
<q-item v-ripple :inset-level="1" :to="{ name: 'groups.index'}" clickable>
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
Groups
|
Groups
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
</q-expansion-item>
|
</q-expansion-item>
|
||||||
<q-item clickable v-ripple :to="{ name: 'reports.index'}">
|
<q-item v-ripple :to="{ name: 'reports.index'}" clickable>
|
||||||
<q-item-section avatar>
|
<q-item-section avatar>
|
||||||
<q-icon name="far fa-chart-bar"/>
|
<q-icon name="far fa-chart-bar"/>
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
@ -296,7 +300,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
<q-breadcrumbs align="right">
|
<q-breadcrumbs align="right">
|
||||||
<q-breadcrumbs-el label="Home" :to="{ name: 'index' }"/>
|
<q-breadcrumbs-el :to="{ name: 'index' }" label="Home"/>
|
||||||
<q-breadcrumbs-el v-for="step in $route.meta.breadcrumbs" :label="$t('breadcrumbs.' + step.title)"
|
<q-breadcrumbs-el v-for="step in $route.meta.breadcrumbs" :label="$t('breadcrumbs.' + step.title)"
|
||||||
:to="step.route ? {name: step.route, params: step.params} : ''"/>
|
:to="step.route ? {name: step.route, params: step.params} : ''"/>
|
||||||
</q-breadcrumbs>
|
</q-breadcrumbs>
|
||||||
@ -307,7 +311,7 @@
|
|||||||
<router-view/>
|
<router-view/>
|
||||||
</q-page-container>
|
</q-page-container>
|
||||||
|
|
||||||
<q-footer elevated class="bg-grey-8 text-white">
|
<q-footer class="bg-grey-8 text-white" elevated>
|
||||||
<q-toolbar>
|
<q-toolbar>
|
||||||
<div>
|
<div>
|
||||||
<small>Firefly III v TODO © James Cole, AGPL-3.0-or-later.</small>
|
<small>Firefly III v TODO © James Cole, AGPL-3.0-or-later.</small>
|
||||||
|
@ -32,18 +32,18 @@
|
|||||||
<q-btn
|
<q-btn
|
||||||
class="q-mt-xl"
|
class="q-mt-xl"
|
||||||
color="white"
|
color="white"
|
||||||
text-color="blue"
|
|
||||||
unelevated
|
|
||||||
to="/"
|
|
||||||
label="Go Home"
|
label="Go Home"
|
||||||
no-caps
|
no-caps
|
||||||
|
text-color="blue"
|
||||||
|
to="/"
|
||||||
|
unelevated
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { defineComponent } from 'vue'
|
import {defineComponent} from 'vue'
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'Error404'
|
name: 'Error404'
|
||||||
|
@ -22,10 +22,10 @@
|
|||||||
<q-page>
|
<q-page>
|
||||||
<div class="row q-mx-md">
|
<div class="row q-mx-md">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<q-banner inline-actions rounded class="bg-orange text-white" v-if="'' !== errorMessage">
|
<q-banner v-if="'' !== errorMessage" class="bg-orange text-white" inline-actions rounded>
|
||||||
{{ errorMessage }}
|
{{ errorMessage }}
|
||||||
<template v-slot:action>
|
<template v-slot:action>
|
||||||
<q-btn flat @click="dismissBanner" label="Dismiss"/>
|
<q-btn flat label="Dismiss" @click="dismissBanner"/>
|
||||||
</template>
|
</template>
|
||||||
</q-banner>
|
</q-banner>
|
||||||
</div>
|
</div>
|
||||||
@ -40,22 +40,22 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12 q-mb-xs">
|
<div class="col-12 q-mb-xs">
|
||||||
<q-input
|
<q-input
|
||||||
:error-message="submissionErrors.name"
|
v-model="name"
|
||||||
:error="hasSubmissionErrors.name"
|
|
||||||
bottom-slots
|
|
||||||
:disable="disabledInput"
|
:disable="disabledInput"
|
||||||
type="text" clearable v-model="name" :label="$t('form.name')"
|
:error="hasSubmissionErrors.name"
|
||||||
outlined/>
|
:error-message="submissionErrors.name"
|
||||||
|
:label="$t('form.name')" bottom-slots clearable outlined
|
||||||
|
type="text"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12 q-mb-xs">
|
<div class="col-12 q-mb-xs">
|
||||||
<q-input
|
<q-input
|
||||||
:error-message="submissionErrors.iban"
|
v-model="iban"
|
||||||
|
:disable="disabledInput"
|
||||||
:error="hasSubmissionErrors.iban"
|
:error="hasSubmissionErrors.iban"
|
||||||
mask="AA## XXXX XXXX XXXX XXXX XXXX XXXX XXXX XX"
|
:error-message="submissionErrors.iban" :label="$t('form.iban')" bottom-slots clearable mask="AA## XXXX XXXX XXXX XXXX XXXX XXXX XXXX XX" outlined
|
||||||
bottom-slots :disable="disabledInput" type="text" clearable v-model="iban" :label="$t('form.iban')"
|
type="text"/>
|
||||||
outlined/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
@ -74,9 +74,11 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12 text-right">
|
<div class="col-12 text-right">
|
||||||
<q-checkbox :disable="disabledInput" v-model="doReturnHere" left-label label="Return here to create another one"/>
|
<q-checkbox v-model="doReturnHere" :disable="disabledInput" label="Return here to create another one"
|
||||||
|
left-label/>
|
||||||
<br/>
|
<br/>
|
||||||
<q-checkbox v-model="doResetForm" left-label :disable="!doReturnHere || disabledInput" label="Reset form after submission"/>
|
<q-checkbox v-model="doResetForm" :disable="!doReturnHere || disabledInput" label="Reset form after submission"
|
||||||
|
left-label/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
|
@ -22,10 +22,10 @@
|
|||||||
<q-page>
|
<q-page>
|
||||||
<div class="row q-mx-md">
|
<div class="row q-mx-md">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<q-banner inline-actions rounded class="bg-orange text-white" v-if="'' !== errorMessage">
|
<q-banner v-if="'' !== errorMessage" class="bg-orange text-white" inline-actions rounded>
|
||||||
{{ errorMessage }}
|
{{ errorMessage }}
|
||||||
<template v-slot:action>
|
<template v-slot:action>
|
||||||
<q-btn flat @click="dismissBanner" label="Dismiss"/>
|
<q-btn flat label="Dismiss" @click="dismissBanner"/>
|
||||||
</template>
|
</template>
|
||||||
</q-banner>
|
</q-banner>
|
||||||
</div>
|
</div>
|
||||||
@ -40,20 +40,20 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12 q-mb-xs">
|
<div class="col-12 q-mb-xs">
|
||||||
<q-input
|
<q-input
|
||||||
:error-message="submissionErrors.name"
|
v-model="name"
|
||||||
:error="hasSubmissionErrors.name"
|
:disable="disabledInput"
|
||||||
bottom-slots :disable="disabledInput" type="text" clearable v-model="name" :label="$t('form.name')"
|
:error="hasSubmissionErrors.name" :error-message="submissionErrors.name" :label="$t('form.name')" bottom-slots clearable outlined
|
||||||
outlined/>
|
type="text"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12 q-mb-xs">
|
<div class="col-12 q-mb-xs">
|
||||||
<q-input
|
<q-input
|
||||||
:error-message="submissionErrors.iban"
|
v-model="iban"
|
||||||
|
:disable="disabledInput"
|
||||||
:error="hasSubmissionErrors.iban"
|
:error="hasSubmissionErrors.iban"
|
||||||
mask="AA## XXXX XXXX XXXX XXXX XXXX XXXX XXXX XX"
|
:error-message="submissionErrors.iban" :label="$t('form.iban')" bottom-slots clearable mask="AA## XXXX XXXX XXXX XXXX XXXX XXXX XXXX XX" outlined
|
||||||
bottom-slots :disable="disabledInput" type="text" clearable v-model="iban" :label="$t('form.iban')"
|
type="text"/>
|
||||||
outlined/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
@ -72,7 +72,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12 text-right">
|
<div class="col-12 text-right">
|
||||||
<q-checkbox :disable="disabledInput" v-model="doReturnHere" left-label label="Return here"/>
|
<q-checkbox v-model="doReturnHere" :disable="disabledInput" label="Return here" left-label/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
@ -117,11 +117,11 @@ export default {
|
|||||||
this.collectAccount();
|
this.collectAccount();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
collectAccount: function() {
|
collectAccount: function () {
|
||||||
let get = new Get;
|
let get = new Get;
|
||||||
get.get(this.id).then((response) => this.parseAccount(response));
|
get.get(this.id).then((response) => this.parseAccount(response));
|
||||||
},
|
},
|
||||||
parseAccount: function(response) {
|
parseAccount: function (response) {
|
||||||
this.name = response.data.data.attributes.name;
|
this.name = response.data.data.attributes.name;
|
||||||
this.iban = response.data.data.attributes.iban;
|
this.iban = response.data.data.attributes.iban;
|
||||||
},
|
},
|
||||||
|
@ -21,14 +21,14 @@
|
|||||||
<template>
|
<template>
|
||||||
<q-page>
|
<q-page>
|
||||||
<q-table
|
<q-table
|
||||||
:title="$t('firefly.' + this.type + '_accounts')"
|
|
||||||
:rows="rows"
|
|
||||||
:columns="columns"
|
|
||||||
row-key="id"
|
|
||||||
:dense="$q.screen.lt.md"
|
|
||||||
v-model:pagination="pagination"
|
v-model:pagination="pagination"
|
||||||
|
:columns="columns"
|
||||||
|
:dense="$q.screen.lt.md"
|
||||||
:loading="loading"
|
:loading="loading"
|
||||||
|
:rows="rows"
|
||||||
|
:title="$t('firefly.' + this.type + '_accounts')"
|
||||||
class="q-ma-md"
|
class="q-ma-md"
|
||||||
|
row-key="id"
|
||||||
>
|
>
|
||||||
<template v-slot:header="props">
|
<template v-slot:header="props">
|
||||||
<q-tr :props="props">
|
<q-tr :props="props">
|
||||||
@ -47,14 +47,14 @@
|
|||||||
<router-link :to="{ name: 'accounts.show', params: {id: props.row.id} }" class="text-primary">
|
<router-link :to="{ name: 'accounts.show', params: {id: props.row.id} }" class="text-primary">
|
||||||
{{ props.row.name }}
|
{{ props.row.name }}
|
||||||
</router-link>
|
</router-link>
|
||||||
<q-popup-edit v-model="props.row.name" v-slot="scope">
|
<q-popup-edit v-slot="scope" v-model="props.row.name">
|
||||||
<q-input v-model="scope.value" dense autofocus counter />
|
<q-input v-model="scope.value" autofocus counter dense/>
|
||||||
</q-popup-edit>
|
</q-popup-edit>
|
||||||
</q-td>
|
</q-td>
|
||||||
<q-td key="iban" :props="props">
|
<q-td key="iban" :props="props">
|
||||||
{{ formatIban(props.row.iban) }}
|
{{ formatIban(props.row.iban) }}
|
||||||
<q-popup-edit v-model="props.row.iban" v-slot="scope">
|
<q-popup-edit v-slot="scope" v-model="props.row.iban">
|
||||||
<q-input v-model="scope.value" dense autofocus counter />
|
<q-input v-model="scope.value" autofocus counter dense/>
|
||||||
</q-popup-edit>
|
</q-popup-edit>
|
||||||
</q-td>
|
</q-td>
|
||||||
<q-td key="current_balance" :props="props">
|
<q-td key="current_balance" :props="props">
|
||||||
@ -67,19 +67,20 @@
|
|||||||
C
|
C
|
||||||
</q-td>
|
</q-td>
|
||||||
<q-td key="menu" :props="props">
|
<q-td key="menu" :props="props">
|
||||||
<q-btn-dropdown color="primary" :label="$t('firefly.actions')" size="sm">
|
<q-btn-dropdown :label="$t('firefly.actions')" color="primary" size="sm">
|
||||||
<q-list>
|
<q-list>
|
||||||
<q-item clickable v-close-popup :to="{name: 'accounts.edit', params: {id: props.row.id}}">
|
<q-item v-close-popup :to="{name: 'accounts.edit', params: {id: props.row.id}}" clickable>
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
<q-item-label>{{ $t('firefly.edit') }}</q-item-label>
|
<q-item-label>{{ $t('firefly.edit') }}</q-item-label>
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
<q-item clickable v-close-popup :to="{name: 'accounts.reconcile', params: {id: props.row.id}}" v-if="'asset' === props.row.type">
|
<q-item v-if="'asset' === props.row.type" v-close-popup :to="{name: 'accounts.reconcile', params: {id: props.row.id}}"
|
||||||
|
clickable>
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
<q-item-label>{{ $t('firefly.reconcile') }}</q-item-label>
|
<q-item-label>{{ $t('firefly.reconcile') }}</q-item-label>
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
<q-item clickable v-close-popup @click="deleteAccount(props.row.id, props.row.name)">
|
<q-item v-close-popup clickable @click="deleteAccount(props.row.id, props.row.name)">
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
<q-item-label>{{ $t('firefly.delete') }}</q-item-label>
|
<q-item-label>{{ $t('firefly.delete') }}</q-item-label>
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
@ -90,19 +91,20 @@
|
|||||||
</q-tr>
|
</q-tr>
|
||||||
</template>
|
</template>
|
||||||
</q-table>
|
</q-table>
|
||||||
<q-page-sticky position="bottom-right" :offset="[18, 18]">
|
<q-page-sticky :offset="[18, 18]" position="bottom-right">
|
||||||
<q-fab
|
<q-fab
|
||||||
:label="$t('firefly.actions')"
|
:label="$t('firefly.actions')"
|
||||||
|
color="green"
|
||||||
|
direction="up"
|
||||||
|
icon="fas fa-chevron-up"
|
||||||
|
label-position="left"
|
||||||
square
|
square
|
||||||
vertical-actions-align="right"
|
vertical-actions-align="right"
|
||||||
label-position="left"
|
|
||||||
color="green"
|
|
||||||
icon="fas fa-chevron-up"
|
|
||||||
direction="up"
|
|
||||||
>
|
>
|
||||||
<!-- TODO -->
|
<!-- TODO -->
|
||||||
<!--<q-fab-action color="primary" square :to="{ name: 'accounts.create', params: {type: 'liability'} }" icon="fas fa-long-arrow-alt-right" label="New liability"/>-->
|
<!--<q-fab-action color="primary" square :to="{ name: 'accounts.create', params: {type: 'liability'} }" icon="fas fa-long-arrow-alt-right" label="New liability"/>-->
|
||||||
<q-fab-action color="primary" square :to="{ name: 'accounts.create', params: {type: 'asset'} }" icon="fas fa-exchange-alt" :label="$t('firefly.create_new_asset')"/>
|
<q-fab-action :label="$t('firefly.create_new_asset')" :to="{ name: 'accounts.create', params: {type: 'asset'} }" color="primary"
|
||||||
|
icon="fas fa-exchange-alt" square/>
|
||||||
</q-fab>
|
</q-fab>
|
||||||
</q-page-sticky>
|
</q-page-sticky>
|
||||||
</q-page>
|
</q-page>
|
||||||
@ -161,7 +163,6 @@ export default {
|
|||||||
this.type = this.$route.params.type;
|
this.type = this.$route.params.type;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (null === this.store.getRange.start || null === this.store.getRange.end) {
|
if (null === this.store.getRange.start || null === this.store.getRange.end) {
|
||||||
// subscribe, then update:
|
// subscribe, then update:
|
||||||
this.store.$onAction(
|
this.store.$onAction(
|
||||||
@ -193,7 +194,7 @@ export default {
|
|||||||
},
|
},
|
||||||
destroyAccount: function (id) {
|
destroyAccount: function (id) {
|
||||||
(new Destroy('accounts')).destroy(id).then(() => {
|
(new Destroy('accounts')).destroy(id).then(() => {
|
||||||
this.rows= [];
|
this.rows = [];
|
||||||
this.store.refreshCacheKey().then(() => {
|
this.store.refreshCacheKey().then(() => {
|
||||||
this.triggerUpdate();
|
this.triggerUpdate();
|
||||||
});
|
});
|
||||||
@ -218,7 +219,7 @@ export default {
|
|||||||
return string.replace(NON_ALPHANUM, '').toUpperCase().replace(EVERY_FOUR_CHARS, "$1 ");
|
return string.replace(NON_ALPHANUM, '').toUpperCase().replace(EVERY_FOUR_CHARS, "$1 ");
|
||||||
},
|
},
|
||||||
triggerUpdate: function () {
|
triggerUpdate: function () {
|
||||||
this.rows= [];
|
this.rows = [];
|
||||||
if (true === this.loading) {
|
if (true === this.loading) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user