Merge branch 'release/4.8.2-alpha.3'

This commit is contained in:
James Cole
2019-11-13 07:04:55 +01:00
47 changed files with 503 additions and 252 deletions

View File

@@ -26,12 +26,13 @@ APP_URL=http://localhost
TRUSTED_PROXIES=
# The log channel defines where your log entries go to.
# - If you use DOCKER, use 'docker_out'
# - Docker + versions <= 4.8.1.8 and before: use "stdout"
# - Docker + versions > 4.8.1.8: use "docker_out"
# - For everything else, use 'daily'
# Several other options exist. You can use 'single' for one big fat error log (not recommended).
# Also available are 'syslog', 'errorlog' and 'stdout' which will log to the system itself.
LOG_CHANNEL=docker_out
LOG_CHANNEL=stdout
# Log level. You can set this from least severe to most severe:
# debug, info, notice, warning, error, critical, alert, emergency

View File

@@ -14,21 +14,21 @@ jobs:
include:
- dist: xenial
arch: amd64
env: ARCH=amd64 CHANNEL=alpha VERSION=4.8.2-alpha.2
env: ARCH=amd64 CHANNEL=alpha VERSION=4.8.2-alpha.3
stage: build
script: ./.deploy/docker/travis.sh
- dist: xenial
arch: amd64
env: ARCH=arm CHANNEL=alpha VERSION=4.8.2-alpha.2
env: ARCH=arm CHANNEL=alpha VERSION=4.8.2-alpha.3
stage: build
script: ./.deploy/docker/travis.sh
- dist: xenial
arch: arm64
env: ARCH=arm64 CHANNEL=alpha VERSION=4.8.2-alpha.2
env: ARCH=arm64 CHANNEL=alpha VERSION=4.8.2-alpha.3
stage: build
script: ./.deploy/docker/travis.sh
- dist: xenial
arch: amd64
env: CHANNEL=alpha VERSION=4.8.2-alpha.2
env: CHANNEL=alpha VERSION=4.8.2-alpha.3
stage: manifest
script: ./.deploy/docker/manifest.sh

View File

@@ -0,0 +1,50 @@
<?php
namespace FireflyIII\Console\Commands;
use Illuminate\Console\Command;
class SetLatestVersion extends Command
{
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'firefly-iii:set-latest-version {--james-is-cool}';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
if (!$this->option('james-is-cool')) {
$this->error('Am too!');
return;
}
app('fireflyconfig')->set('db_version', config('firefly.db_version'));
app('fireflyconfig')->set('ff3_version', config('firefly.version'));
$this->line('Updated version.');
return 0;
}
}

View File

@@ -101,6 +101,7 @@ class GracefulNotFoundHandler extends ExceptionHandler
break;
case 'tags.show.all':
case 'tags.show':
case 'tags.edit':
$request->session()->reflash();
return redirect(route('tags.index'));

View File

@@ -332,7 +332,7 @@ class TransactionJournalFactory
$transactionFactory->setCurrency($sourceCurrency);
$transactionFactory->setForeignCurrency($sourceForeignCurrency);
$transactionFactory->setReconciled($row['reconciled'] ?? false);
$transactionFactory->createNegative((string)$row['amount'], $row['foreign_amount']);
$transactionFactory->createNegative((string)$row['amount'], (string)$row['foreign_amount']);
// and the destination one:
/** @var TransactionFactory $transactionFactory */
@@ -343,7 +343,7 @@ class TransactionJournalFactory
$transactionFactory->setCurrency($destCurrency);
$transactionFactory->setForeignCurrency($destForeignCurrency);
$transactionFactory->setReconciled($row['reconciled'] ?? false);
$transactionFactory->createPositive((string)$row['amount'], $row['foreign_amount']);
$transactionFactory->createPositive((string)$row['amount'], (string)$row['foreign_amount']);
// verify that journal has two transactions. Otherwise, delete and cancel.
// TODO this can't be faked so it can't be tested.

View File

@@ -70,6 +70,8 @@ class GroupCollector implements GroupCollectorInterface
private $total;
/** @var User The user object. */
private $user;
/** @var array */
private $integerFields;
/**
* Group collector constructor.
@@ -84,7 +86,23 @@ class GroupCollector implements GroupCollectorInterface
$this->hasBudgetInformation = false;
$this->hasBillInformation = false;
$this->hasJoinedTagTables = false;
$this->integerFields = [
'transaction_group_id',
'user_id',
'transaction_journal_id',
'transaction_type_id',
'order',
'source_transaction_id',
'source_account_id',
'currency_id',
'currency_decimal_places',
'foreign_currency_id',
'foreign_currency_decimal_places',
'destination_transaction_id',
'destination_account_id',
'category_id',
'budget_id'
];
$this->total = 0;
$this->fields = [
# group
@@ -903,6 +921,22 @@ class GroupCollector implements GroupCollectorInterface
return $this;
}
/**
* Convert a selected set of fields to arrays.
*
* @param array $array
*
* @return array
*/
private function convertToInteger(array $array): array
{
foreach ($this->integerFields as $field) {
$array[$field] = isset($array[$field]) ? (int)$array[$field] : null;
}
return $array;
}
/**
* Join table to get tag information.
*/
@@ -965,8 +999,8 @@ class GroupCollector implements GroupCollectorInterface
// make new array
$parsedGroup = $this->parseAugmentedGroup($augumentedJournal);
$groupArray = [
'id' => $augumentedJournal->transaction_group_id,
'user_id' => $augumentedJournal->user_id,
'id' => (int)$augumentedJournal->transaction_group_id,
'user_id' => (int)$augumentedJournal->user_id,
'title' => $augumentedJournal->transaction_group_title,
'transaction_type' => $parsedGroup['transaction_type_type'],
'count' => 1,
@@ -1014,6 +1048,10 @@ class GroupCollector implements GroupCollectorInterface
} catch (Exception $e) {
Log::error($e->getMessage());
}
// convert values to integers:
$result = $this->convertToInteger($result);
$result['reconciled'] = 1 === (int)$result['reconciled'];
if (isset($augumentedJournal['tag_id'])) { // assume the other fields are present as well.
$tagId = (int)$augumentedJournal['tag_id'];

View File

@@ -26,6 +26,7 @@ use Carbon\Carbon;
use FireflyIII\Http\Controllers\Controller;
use FireflyIII\Models\Account;
use FireflyIII\Models\AccountType;
use FireflyIII\Models\PiggyBank;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
@@ -282,6 +283,39 @@ class AutoCompleteController extends Controller
return response()->json($return);
}
/**
* An auto-complete specifically for asset accounts and liabilities, used when mass updating and for rules mostly.
*
* @param Request $request
*
* @return JsonResponse
*/
public function assetAccounts(Request $request): JsonResponse
{
$search = $request->get('search');
/** @var AccountRepositoryInterface $repository */
$repository = app(AccountRepositoryInterface::class);
// filter the account types:
$allowedAccountTypes = [AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE];
Log::debug(sprintf('Now in expenseAccounts(%s). Filtering results.', $search), $allowedAccountTypes);
$return = [];
$result = $repository->searchAccount((string)$search, $allowedAccountTypes);
/** @var Account $account */
foreach ($result as $account) {
$return[] = [
'id' => $account->id,
'name' => $account->name,
'type' => $account->accountType->type,
];
}
return response()->json($return);
}
/**
* @return JsonResponse
* @codeCoverageIgnore
@@ -291,7 +325,26 @@ class AutoCompleteController extends Controller
/** @var PiggyBankRepositoryInterface $repository */
$repository = app(PiggyBankRepositoryInterface::class);
return response()->json($repository->getPiggyBanks()->toArray());
/** @var AccountRepositoryInterface $accountRepos */
$accountRepos = app(AccountRepositoryInterface::class);
$piggies = $repository->getPiggyBanks();
$defaultCurrency = \Amount::getDefaultCurrency();
$response = [];
/** @var PiggyBank $piggy */
foreach ($piggies as $piggy) {
$currency = $accountRepos->getAccountCurrency($piggy->account) ?? $defaultCurrency;
$currentAmount = $repository->getRepetition($piggy)->currentamount ?? '0';
$piggy->name_with_amount = sprintf(
'%s (%s / %s)',
$piggy->name,
app('amount')->formatAnything($currency, $currentAmount, false),
app('amount')->formatAnything($currency, $piggy->targetamount, false),
);
$response[] = $piggy->toArray();
}
return response()->json($response);
}
/**

View File

@@ -102,6 +102,9 @@ class InstallController extends Controller
'firefly-iii:rename-meta-fields' => [],
'firefly-iii:fix-ob-currencies' => [],
'firefly-iii:fix-long-descriptions' => [],
// final command to set latest version in DB
'firefly-iii:set-latest-version' => ['--james-is-cool' => true],
];
}

View File

@@ -557,8 +557,13 @@ class AccountRepository implements AccountRepositoryInterface
->orderBy('accounts.name', 'ASC')
->with(['accountType']);
if ('' !== $query) {
$search = sprintf('%%%s%%', $query);
$dbQuery->where('name', 'LIKE', $search);
// split query on spaces just in case:
$parts = explode(' ', $query);
foreach($parts as $part) {
$search = sprintf('%%%s%%', $part);
$dbQuery->where('name', 'LIKE', $search);
}
}
if (count($types) > 0) {
$dbQuery->leftJoin('account_types', 'accounts.account_type_id', '=', 'account_types.id');

View File

@@ -418,9 +418,11 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface
*/
public function getPiggyBanks(): Collection
{
return $this->user->piggyBanks()->orderBy('order', 'ASC')->get();
return $this->user->piggyBanks()->with(['account'])->orderBy('order', 'ASC')->get();
}
/**
* Also add amount in name.
*

View File

@@ -575,8 +575,7 @@ trait PeriodOverview
$return[$currencyId]['amount'] = bcadd($return[$currencyId]['amount'], $journal['amount'] ?? '0');
$return[$currencyId]['count']++;
if (null !== $foreignCurrencyId) {
if (null !== $foreignCurrencyId && null !== $journal['foreign_amount']) {
if (!isset($return[$foreignCurrencyId])) {
$return[$foreignCurrencyId] = [
'amount' => '0',

View File

@@ -72,7 +72,7 @@ trait UserNavigation
return false;
}
$type = $journal->transactionType->type;
$editable = [TransactionType::WITHDRAWAL, TransactionType::TRANSFER, TransactionType::DEPOSIT];
$editable = [TransactionType::WITHDRAWAL, TransactionType::TRANSFER, TransactionType::DEPOSIT, TransactionType::RECONCILIATION];
return in_array($type, $editable, true);
}

View File

@@ -83,6 +83,7 @@ class Navigation
$date->$function($add);
// if period is 1M and diff in month is 2 and new DOM > 1, sub a number of days:
// AND skip is 1
// result is:
// '2019-01-29', '2019-02-28'
// '2019-01-30', '2019-02-28'
@@ -90,7 +91,7 @@ class Navigation
$months = ['1M', 'month', 'monthly'];
$difference = $date->month - $theDate->month;
if (2 === $difference && $date->day > 0 && in_array($repeatFreq, $months, true)) {
if (1 === $add && 2 === $difference && $date->day > 0 && in_array($repeatFreq, $months, true)) {
$date->subDays($date->day);
}

View File

@@ -169,7 +169,7 @@
"@php artisan firefly-iii:report-empty-objects",
"@php artisan firefly-iii:report-sum",
"@php artisan firefly-iii:restore-oauth-keys",
"@php artisan firefly-iii:set-latest-version --james-is-cool",
"@php artisan firefly:instructions update",
"@php artisan passport:install"
],

326
composer.lock generated
View File

@@ -8,16 +8,16 @@
"packages": [
{
"name": "adldap2/adldap2",
"version": "v10.1.1",
"version": "v10.2.0",
"source": {
"type": "git",
"url": "https://github.com/Adldap2/Adldap2.git",
"reference": "9252328a3fb8ea7be7194fd0d956e40ce3e51149"
"reference": "aebcb3005552c15de6c8a04358683b810900ed65"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Adldap2/Adldap2/zipball/9252328a3fb8ea7be7194fd0d956e40ce3e51149",
"reference": "9252328a3fb8ea7be7194fd0d956e40ce3e51149",
"url": "https://api.github.com/repos/Adldap2/Adldap2/zipball/aebcb3005552c15de6c8a04358683b810900ed65",
"reference": "aebcb3005552c15de6c8a04358683b810900ed65",
"shasum": ""
},
"require": {
@@ -63,7 +63,7 @@
"ldap",
"windows"
],
"time": "2019-09-24T13:06:16+00:00"
"time": "2019-11-06T14:37:17+00:00"
},
{
"name": "adldap2/adldap2-laravel",
@@ -525,16 +525,16 @@
},
{
"name": "doctrine/cache",
"version": "v1.8.1",
"version": "1.9.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/cache.git",
"reference": "d4374ae95b36062d02ef310100ed33d78738d76c"
"reference": "c15dcd24b756f9e52ea7c3ae8227354f3628f11a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/cache/zipball/d4374ae95b36062d02ef310100ed33d78738d76c",
"reference": "d4374ae95b36062d02ef310100ed33d78738d76c",
"url": "https://api.github.com/repos/doctrine/cache/zipball/c15dcd24b756f9e52ea7c3ae8227354f3628f11a",
"reference": "c15dcd24b756f9e52ea7c3ae8227354f3628f11a",
"shasum": ""
},
"require": {
@@ -545,7 +545,7 @@
},
"require-dev": {
"alcaeus/mongo-php-adapter": "^1.1",
"doctrine/coding-standard": "^4.0",
"doctrine/coding-standard": "^6.0",
"mongodb/mongodb": "^1.1",
"phpunit/phpunit": "^7.0",
"predis/predis": "~1.0"
@@ -556,7 +556,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.8.x-dev"
"dev-master": "1.9.x-dev"
}
},
"autoload": {
@@ -590,13 +590,21 @@
"email": "schmittjoh@gmail.com"
}
],
"description": "Caching library offering an object-oriented API for many cache backends",
"homepage": "https://www.doctrine-project.org",
"description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.",
"homepage": "https://www.doctrine-project.org/projects/cache.html",
"keywords": [
"abstraction",
"apcu",
"cache",
"caching"
"caching",
"couchdb",
"memcached",
"php",
"redis",
"riak",
"xcache"
],
"time": "2019-10-28T09:31:32+00:00"
"time": "2019-11-11T10:31:52+00:00"
},
{
"name": "doctrine/dbal",
@@ -692,16 +700,16 @@
},
{
"name": "doctrine/event-manager",
"version": "v1.0.0",
"version": "1.1.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/event-manager.git",
"reference": "a520bc093a0170feeb6b14e9d83f3a14452e64b3"
"reference": "629572819973f13486371cb611386eb17851e85c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/event-manager/zipball/a520bc093a0170feeb6b14e9d83f3a14452e64b3",
"reference": "a520bc093a0170feeb6b14e9d83f3a14452e64b3",
"url": "https://api.github.com/repos/doctrine/event-manager/zipball/629572819973f13486371cb611386eb17851e85c",
"reference": "629572819973f13486371cb611386eb17851e85c",
"shasum": ""
},
"require": {
@@ -711,7 +719,7 @@
"doctrine/common": "<2.9@dev"
},
"require-dev": {
"doctrine/coding-standard": "^4.0",
"doctrine/coding-standard": "^6.0",
"phpunit/phpunit": "^7.0"
},
"type": "library",
@@ -730,6 +738,10 @@
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
@@ -738,10 +750,6 @@
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
@@ -755,27 +763,29 @@
"email": "ocramius@gmail.com"
}
],
"description": "Doctrine Event Manager component",
"description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.",
"homepage": "https://www.doctrine-project.org/projects/event-manager.html",
"keywords": [
"event",
"eventdispatcher",
"eventmanager"
"event dispatcher",
"event manager",
"event system",
"events"
],
"time": "2018-06-11T11:59:03+00:00"
"time": "2019-11-10T09:48:07+00:00"
},
{
"name": "doctrine/inflector",
"version": "v1.3.0",
"version": "1.3.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/inflector.git",
"reference": "5527a48b7313d15261292c149e55e26eae771b0a"
"reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a",
"reference": "5527a48b7313d15261292c149e55e26eae771b0a",
"url": "https://api.github.com/repos/doctrine/inflector/zipball/ec3a55242203ffa6a4b27c58176da97ff0a7aec1",
"reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1",
"shasum": ""
},
"require": {
@@ -800,6 +810,10 @@
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
@@ -808,10 +822,6 @@
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
@@ -829,20 +839,20 @@
"singularize",
"string"
],
"time": "2018-01-09T20:05:19+00:00"
"time": "2019-10-30T19:59:35+00:00"
},
{
"name": "doctrine/lexer",
"version": "1.1.0",
"version": "1.2.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/lexer.git",
"reference": "e17f069ede36f7534b95adec71910ed1b49c74ea"
"reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/lexer/zipball/e17f069ede36f7534b95adec71910ed1b49c74ea",
"reference": "e17f069ede36f7534b95adec71910ed1b49c74ea",
"url": "https://api.github.com/repos/doctrine/lexer/zipball/5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6",
"reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6",
"shasum": ""
},
"require": {
@@ -856,7 +866,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1.x-dev"
"dev-master": "1.2.x-dev"
}
},
"autoload": {
@@ -891,7 +901,7 @@
"parser",
"php"
],
"time": "2019-07-30T19:33:28+00:00"
"time": "2019-10-30T14:39:59+00:00"
},
{
"name": "dragonmantank/cron-expression",
@@ -1727,16 +1737,16 @@
},
{
"name": "league/commonmark",
"version": "1.1.0",
"version": "1.1.1",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/commonmark.git",
"reference": "d927c05e9a391688b1e59a606c97465a90531789"
"reference": "d74654d85954e3b9451d67faaebacd210fc70252"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/commonmark/zipball/d927c05e9a391688b1e59a606c97465a90531789",
"reference": "d927c05e9a391688b1e59a606c97465a90531789",
"url": "https://api.github.com/repos/thephpleague/commonmark/zipball/d74654d85954e3b9451d67faaebacd210fc70252",
"reference": "d74654d85954e3b9451d67faaebacd210fc70252",
"shasum": ""
},
"require": {
@@ -1794,7 +1804,7 @@
"markdown",
"parser"
],
"time": "2019-10-31T13:30:15+00:00"
"time": "2019-11-11T22:23:29+00:00"
},
{
"name": "league/csv",
@@ -2512,24 +2522,24 @@
},
{
"name": "paragonie/constant_time_encoding",
"version": "v2.2.3",
"version": "v2.3.0",
"source": {
"type": "git",
"url": "https://github.com/paragonie/constant_time_encoding.git",
"reference": "55af0dc01992b4d0da7f6372e2eac097bbbaffdb"
"reference": "47a1cedd2e4d52688eb8c96469c05ebc8fd28fa2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/55af0dc01992b4d0da7f6372e2eac097bbbaffdb",
"reference": "55af0dc01992b4d0da7f6372e2eac097bbbaffdb",
"url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/47a1cedd2e4d52688eb8c96469c05ebc8fd28fa2",
"reference": "47a1cedd2e4d52688eb8c96469c05ebc8fd28fa2",
"shasum": ""
},
"require": {
"php": "^7"
"php": "^7|^8"
},
"require-dev": {
"phpunit/phpunit": "^6|^7",
"vimeo/psalm": "^1|^2"
"vimeo/psalm": "^1|^2|^3"
},
"type": "library",
"autoload": {
@@ -2544,15 +2554,15 @@
"authors": [
{
"name": "Paragon Initiative Enterprises",
"role": "Maintainer",
"email": "security@paragonie.com",
"homepage": "https://paragonie.com"
"homepage": "https://paragonie.com",
"role": "Maintainer"
},
{
"name": "Steve 'Sc00bz' Thomas",
"role": "Original Developer",
"email": "steve@tobtu.com",
"homepage": "https://www.tobtu.com"
"homepage": "https://www.tobtu.com",
"role": "Original Developer"
}
],
"description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)",
@@ -2570,7 +2580,7 @@
"hex2bin",
"rfc4648"
],
"time": "2019-01-03T20:26:31+00:00"
"time": "2019-11-06T19:20:29+00:00"
},
{
"name": "paragonie/random_compat",
@@ -2619,28 +2629,28 @@
},
{
"name": "phpoption/phpoption",
"version": "1.5.0",
"version": "1.5.2",
"source": {
"type": "git",
"url": "https://github.com/schmittjoh/php-option.git",
"reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed"
"reference": "2ba2586380f8d2b44ad1b9feb61c371020b27793"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/schmittjoh/php-option/zipball/94e644f7d2051a5f0fcf77d81605f152eecff0ed",
"reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed",
"url": "https://api.github.com/repos/schmittjoh/php-option/zipball/2ba2586380f8d2b44ad1b9feb61c371020b27793",
"reference": "2ba2586380f8d2b44ad1b9feb61c371020b27793",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"require-dev": {
"phpunit/phpunit": "4.7.*"
"phpunit/phpunit": "^4.7|^5.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.3-dev"
"dev-master": "1.5-dev"
}
},
"autoload": {
@@ -2650,7 +2660,7 @@
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"Apache2"
"Apache-2.0"
],
"authors": [
{
@@ -2665,7 +2675,7 @@
"php",
"type"
],
"time": "2015-07-25T16:39:46+00:00"
"time": "2019-11-06T22:27:00+00:00"
},
{
"name": "phpseclib/phpseclib",
@@ -3513,16 +3523,16 @@
},
{
"name": "swiftmailer/swiftmailer",
"version": "v6.2.1",
"version": "v6.2.3",
"source": {
"type": "git",
"url": "https://github.com/swiftmailer/swiftmailer.git",
"reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a"
"reference": "149cfdf118b169f7840bbe3ef0d4bc795d1780c9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a",
"reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a",
"url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/149cfdf118b169f7840bbe3ef0d4bc795d1780c9",
"reference": "149cfdf118b169f7840bbe3ef0d4bc795d1780c9",
"shasum": ""
},
"require": {
@@ -3571,20 +3581,20 @@
"mail",
"mailer"
],
"time": "2019-04-21T09:21:45+00:00"
"time": "2019-11-12T09:31:26+00:00"
},
{
"name": "symfony/console",
"version": "v4.3.6",
"version": "v4.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "136c4bd62ea871d00843d1bc0316de4c4a84bb78"
"reference": "d2e39dbddae68560fa6be0c576da6ad4e945b90d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/136c4bd62ea871d00843d1bc0316de4c4a84bb78",
"reference": "136c4bd62ea871d00843d1bc0316de4c4a84bb78",
"url": "https://api.github.com/repos/symfony/console/zipball/d2e39dbddae68560fa6be0c576da6ad4e945b90d",
"reference": "d2e39dbddae68560fa6be0c576da6ad4e945b90d",
"shasum": ""
},
"require": {
@@ -3646,11 +3656,11 @@
],
"description": "Symfony Console Component",
"homepage": "https://symfony.com",
"time": "2019-10-30T12:58:49+00:00"
"time": "2019-11-05T15:00:49+00:00"
},
{
"name": "symfony/css-selector",
"version": "v4.3.6",
"version": "v4.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
@@ -3703,7 +3713,7 @@
},
{
"name": "symfony/debug",
"version": "v4.3.6",
"version": "v4.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug.git",
@@ -3759,16 +3769,16 @@
},
{
"name": "symfony/event-dispatcher",
"version": "v4.3.6",
"version": "v4.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
"reference": "6229f58993e5a157f6096fc7145c0717d0be8807"
"reference": "0df002fd4f500392eabd243c2947061a50937287"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/6229f58993e5a157f6096fc7145c0717d0be8807",
"reference": "6229f58993e5a157f6096fc7145c0717d0be8807",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/0df002fd4f500392eabd243c2947061a50937287",
"reference": "0df002fd4f500392eabd243c2947061a50937287",
"shasum": ""
},
"require": {
@@ -3825,7 +3835,7 @@
],
"description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com",
"time": "2019-10-01T16:40:32+00:00"
"time": "2019-11-03T09:04:05+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
@@ -3887,7 +3897,7 @@
},
{
"name": "symfony/finder",
"version": "v4.3.6",
"version": "v4.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
@@ -3936,16 +3946,16 @@
},
{
"name": "symfony/http-foundation",
"version": "v4.3.6",
"version": "v4.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "38f63e471cda9d37ac06e76d14c5ea2ec5887051"
"reference": "514e5bbcbc783465c6fce5a7b2e28657f2e114b7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/38f63e471cda9d37ac06e76d14c5ea2ec5887051",
"reference": "38f63e471cda9d37ac06e76d14c5ea2ec5887051",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/514e5bbcbc783465c6fce5a7b2e28657f2e114b7",
"reference": "514e5bbcbc783465c6fce5a7b2e28657f2e114b7",
"shasum": ""
},
"require": {
@@ -3987,20 +3997,20 @@
],
"description": "Symfony HttpFoundation Component",
"homepage": "https://symfony.com",
"time": "2019-10-30T12:58:49+00:00"
"time": "2019-11-05T14:48:09+00:00"
},
{
"name": "symfony/http-kernel",
"version": "v4.3.6",
"version": "v4.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
"reference": "56acfda9e734e8715b3b0e6859cdb4f5b28757bf"
"reference": "9f493716a89635b64ae15b01cb2a8fc093a95bce"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/56acfda9e734e8715b3b0e6859cdb4f5b28757bf",
"reference": "56acfda9e734e8715b3b0e6859cdb4f5b28757bf",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/9f493716a89635b64ae15b01cb2a8fc093a95bce",
"reference": "9f493716a89635b64ae15b01cb2a8fc093a95bce",
"shasum": ""
},
"require": {
@@ -4079,11 +4089,11 @@
],
"description": "Symfony HttpKernel Component",
"homepage": "https://symfony.com",
"time": "2019-11-01T10:00:03+00:00"
"time": "2019-11-11T16:38:54+00:00"
},
{
"name": "symfony/mime",
"version": "v4.3.6",
"version": "v4.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
@@ -4601,7 +4611,7 @@
},
{
"name": "symfony/process",
"version": "v4.3.6",
"version": "v4.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
@@ -4715,16 +4725,16 @@
},
{
"name": "symfony/routing",
"version": "v4.3.6",
"version": "v4.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
"reference": "63a9920cc86fcc745e5ea254e362f02b615290b9"
"reference": "533fd12a41fb9ce8d4e861693365427849487c0e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/routing/zipball/63a9920cc86fcc745e5ea254e362f02b615290b9",
"reference": "63a9920cc86fcc745e5ea254e362f02b615290b9",
"url": "https://api.github.com/repos/symfony/routing/zipball/533fd12a41fb9ce8d4e861693365427849487c0e",
"reference": "533fd12a41fb9ce8d4e861693365427849487c0e",
"shasum": ""
},
"require": {
@@ -4787,20 +4797,20 @@
"uri",
"url"
],
"time": "2019-10-30T12:58:49+00:00"
"time": "2019-11-04T20:23:03+00:00"
},
{
"name": "symfony/service-contracts",
"version": "v1.1.7",
"version": "v1.1.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
"reference": "ffcde9615dc5bb4825b9f6aed07716f1f57faae0"
"reference": "ffc7f5692092df31515df2a5ecf3b7302b3ddacf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/ffcde9615dc5bb4825b9f6aed07716f1f57faae0",
"reference": "ffcde9615dc5bb4825b9f6aed07716f1f57faae0",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/ffc7f5692092df31515df2a5ecf3b7302b3ddacf",
"reference": "ffc7f5692092df31515df2a5ecf3b7302b3ddacf",
"shasum": ""
},
"require": {
@@ -4845,20 +4855,20 @@
"interoperability",
"standards"
],
"time": "2019-09-17T11:12:18+00:00"
"time": "2019-10-14T12:27:06+00:00"
},
{
"name": "symfony/translation",
"version": "v4.3.6",
"version": "v4.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
"reference": "a3aa590ce944afb3434d7a55f81b00927144d5ec"
"reference": "bbce239b35b0cd47bd75848b23e969f17dd970e7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation/zipball/a3aa590ce944afb3434d7a55f81b00927144d5ec",
"reference": "a3aa590ce944afb3434d7a55f81b00927144d5ec",
"url": "https://api.github.com/repos/symfony/translation/zipball/bbce239b35b0cd47bd75848b23e969f17dd970e7",
"reference": "bbce239b35b0cd47bd75848b23e969f17dd970e7",
"shasum": ""
},
"require": {
@@ -4921,7 +4931,7 @@
],
"description": "Symfony Translation Component",
"homepage": "https://symfony.com",
"time": "2019-10-30T12:53:54+00:00"
"time": "2019-11-06T23:21:49+00:00"
},
{
"name": "symfony/translation-contracts",
@@ -4982,7 +4992,7 @@
},
{
"name": "symfony/var-dumper",
"version": "v4.3.6",
"version": "v4.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
@@ -5058,16 +5068,16 @@
},
{
"name": "tightenco/collect",
"version": "v6.4.1",
"version": "v6.5.1",
"source": {
"type": "git",
"url": "https://github.com/tightenco/collect.git",
"reference": "9796fcd7ad3286dda60d0cf5120afbff8e3b9db6"
"reference": "afe2597c5ca6344dc47905743a0b73220f6cca8a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/tightenco/collect/zipball/9796fcd7ad3286dda60d0cf5120afbff8e3b9db6",
"reference": "9796fcd7ad3286dda60d0cf5120afbff8e3b9db6",
"url": "https://api.github.com/repos/tightenco/collect/zipball/afe2597c5ca6344dc47905743a0b73220f6cca8a",
"reference": "afe2597c5ca6344dc47905743a0b73220f6cca8a",
"shasum": ""
},
"require": {
@@ -5104,7 +5114,7 @@
"collection",
"laravel"
],
"time": "2019-10-23T21:04:40+00:00"
"time": "2019-11-13T04:13:45+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
@@ -5157,16 +5167,16 @@
},
{
"name": "twig/twig",
"version": "v1.42.3",
"version": "v1.42.4",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
"reference": "201baee843e0ffe8b0b956f336dd42b2a92fae4e"
"reference": "e587180584c3d2d6cb864a0454e777bb6dcb6152"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/201baee843e0ffe8b0b956f336dd42b2a92fae4e",
"reference": "201baee843e0ffe8b0b956f336dd42b2a92fae4e",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/e587180584c3d2d6cb864a0454e777bb6dcb6152",
"reference": "e587180584c3d2d6cb864a0454e777bb6dcb6152",
"shasum": ""
},
"require": {
@@ -5199,19 +5209,19 @@
"authors": [
{
"name": "Fabien Potencier",
"role": "Lead Developer",
"email": "fabien@symfony.com",
"homepage": "http://fabien.potencier.org"
"homepage": "http://fabien.potencier.org",
"role": "Lead Developer"
},
{
"name": "Twig Team",
"role": "Contributors",
"homepage": "https://twig.symfony.com/contributors"
"homepage": "https://twig.symfony.com/contributors",
"role": "Contributors"
},
{
"name": "Armin Ronacher",
"role": "Project Founder",
"email": "armin.ronacher@active-4.com"
"email": "armin.ronacher@active-4.com",
"role": "Project Founder"
}
],
"description": "Twig, the flexible, fast, and secure template language for PHP",
@@ -5219,7 +5229,7 @@
"keywords": [
"templating"
],
"time": "2019-08-24T12:51:03+00:00"
"time": "2019-11-11T16:49:32+00:00"
},
{
"name": "vlucas/phpdotenv",
@@ -5280,16 +5290,16 @@
},
{
"name": "zendframework/zend-diactoros",
"version": "2.1.5",
"version": "2.2.0",
"source": {
"type": "git",
"url": "https://github.com/zendframework/zend-diactoros.git",
"reference": "6dcf9e760a6b476f3e9d80abbc9ce9c4aa921f9c"
"reference": "66eded992a75bfe75a829005a2884aae5ca86daa"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/6dcf9e760a6b476f3e9d80abbc9ce9c4aa921f9c",
"reference": "6dcf9e760a6b476f3e9d80abbc9ce9c4aa921f9c",
"url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/66eded992a75bfe75a829005a2884aae5ca86daa",
"reference": "66eded992a75bfe75a829005a2884aae5ca86daa",
"shasum": ""
},
"require": {
@@ -5343,7 +5353,7 @@
"psr",
"psr-7"
],
"time": "2019-10-10T17:38:20+00:00"
"time": "2019-11-12T17:26:16+00:00"
}
],
"packages-dev": [
@@ -5727,24 +5737,24 @@
},
{
"name": "composer/xdebug-handler",
"version": "1.3.3",
"version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/composer/xdebug-handler.git",
"reference": "46867cbf8ca9fb8d60c506895449eb799db1184f"
"reference": "cbe23383749496fe0f373345208b79568e4bc248"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/xdebug-handler/zipball/46867cbf8ca9fb8d60c506895449eb799db1184f",
"reference": "46867cbf8ca9fb8d60c506895449eb799db1184f",
"url": "https://api.github.com/repos/composer/xdebug-handler/zipball/cbe23383749496fe0f373345208b79568e4bc248",
"reference": "cbe23383749496fe0f373345208b79568e4bc248",
"shasum": ""
},
"require": {
"php": "^5.3.2 || ^7.0",
"php": "^5.3.2 || ^7.0 || ^8.0",
"psr/log": "^1.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5"
"phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8"
},
"type": "library",
"autoload": {
@@ -5762,25 +5772,25 @@
"email": "john-stevenson@blueyonder.co.uk"
}
],
"description": "Restarts a process without xdebug.",
"description": "Restarts a process without Xdebug.",
"keywords": [
"Xdebug",
"performance"
],
"time": "2019-05-27T17:52:04+00:00"
"time": "2019-11-06T16:40:04+00:00"
},
{
"name": "doctrine/instantiator",
"version": "1.2.0",
"version": "1.3.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/instantiator.git",
"reference": "a2c590166b2133a4633738648b6b064edae0814a"
"reference": "ae466f726242e637cebdd526a7d991b9433bacf1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a",
"reference": "a2c590166b2133a4633738648b6b064edae0814a",
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1",
"reference": "ae466f726242e637cebdd526a7d991b9433bacf1",
"shasum": ""
},
"require": {
@@ -5823,7 +5833,7 @@
"constructor",
"instantiate"
],
"time": "2019-03-17T17:37:11+00:00"
"time": "2019-10-21T16:45:58+00:00"
},
{
"name": "filp/whoops",
@@ -6780,16 +6790,16 @@
},
{
"name": "phpunit/phpunit",
"version": "8.4.2",
"version": "8.4.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "a142a7e66c0ea7b5b6c04ee27f08d10d1137cd9b"
"reference": "67f9e35bffc0dd52d55d565ddbe4230454fd6a4e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a142a7e66c0ea7b5b6c04ee27f08d10d1137cd9b",
"reference": "a142a7e66c0ea7b5b6c04ee27f08d10d1137cd9b",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/67f9e35bffc0dd52d55d565ddbe4230454fd6a4e",
"reference": "67f9e35bffc0dd52d55d565ddbe4230454fd6a4e",
"shasum": ""
},
"require": {
@@ -6859,7 +6869,7 @@
"testing",
"xunit"
],
"time": "2019-10-28T10:39:51+00:00"
"time": "2019-11-06T09:42:23+00:00"
},
{
"name": "roave/security-advisories",
@@ -6867,12 +6877,12 @@
"source": {
"type": "git",
"url": "https://github.com/Roave/SecurityAdvisories.git",
"reference": "f8c8349a4b12a26edfa8b21d07d3dbeb6dcedcfa"
"reference": "15eb463aecc9e315b89b744ee0feb0bb1b4c6787"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/f8c8349a4b12a26edfa8b21d07d3dbeb6dcedcfa",
"reference": "f8c8349a4b12a26edfa8b21d07d3dbeb6dcedcfa",
"url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/15eb463aecc9e315b89b744ee0feb0bb1b4c6787",
"reference": "15eb463aecc9e315b89b744ee0feb0bb1b4c6787",
"shasum": ""
},
"conflict": {
@@ -6961,7 +6971,7 @@
"propel/propel": ">=2-alpha.1,<=2-alpha.7",
"propel/propel1": ">=1,<=1.7.1",
"pusher/pusher-php-server": "<2.2.1",
"robrichards/xmlseclibs": ">=1,<3.0.2",
"robrichards/xmlseclibs": ">=1,<3.0.4",
"sabre/dav": ">=1.6,<1.6.99|>=1.7,<1.7.11|>=1.8,<1.8.9",
"sensiolabs/connect": "<4.2.3",
"serluck/phpwhois": "<=4.2.6",
@@ -7075,7 +7085,7 @@
}
],
"description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it",
"time": "2019-10-29T22:11:03+00:00"
"time": "2019-11-07T10:12:47+00:00"
},
{
"name": "sebastian/code-unit-reverse-lookup",
@@ -7787,7 +7797,7 @@
},
{
"name": "symfony/filesystem",
"version": "v4.3.6",
"version": "v4.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",

View File

@@ -125,7 +125,7 @@ return [
'is_demo_site' => false,
],
'encryption' => null === env('USE_ENCRYPTION') || env('USE_ENCRYPTION') === true,
'version' => '4.8.2-alpha.2',
'version' => '4.8.2-alpha.3',
'api_version' => '0.10.5',
'db_version' => 11,
'maxUploadSize' => 15242880,

2
public/v1/js/app.js vendored

File diff suppressed because one or more lines are too long

View File

@@ -252,11 +252,11 @@ function updateActionInput(selectList) {
break;
case 'set_source_account':
console.log('Select list value is ' + selectList.val() + ', so input needs auto complete.');
createAutoComplete(inputResult, 'json/all-accounts');
createAutoComplete(inputResult, 'json/accounts');
break;
case 'set_destination_account':
console.log('Select list value is ' + selectList.val() + ', so input needs auto complete.');
createAutoComplete(inputResult, 'json/all-accounts');
createAutoComplete(inputResult, 'json/accounts');
break;
case 'convert_withdrawal':
console.log('Select list value is ' + selectList.val() + ', so input needs expense accounts auto complete.');
@@ -434,4 +434,4 @@ function testRuleTriggers() {
alert('Cannot get transactions for given triggers.');
});
return false;
}
}

View File

@@ -95,11 +95,13 @@
}
},
ready() {
// console.log('ready(): this.name = this.accountName (' + this.accountName + ')');
this.name = this.accountName;
},
mounted() {
this.target = this.$refs.input;
let types = this.allowedTypes.join(',');
// console.log('mounted(): this.name = this.accountName (' + this.accountName + ')');
this.name = this.accountName;
this.accountAutoCompleteURI = document.getElementsByTagName('base')[0].href + "json/accounts?types=" + types + "&search=";
this.triggerTransactionType();
@@ -115,6 +117,10 @@
types = this.defaultAccountTypeFilters.join(',');
}
this.accountAutoCompleteURI = document.getElementsByTagName('base')[0].href + "json/accounts?types=" + types + "&search=";
},
name() {
// console.log('Watch: name()');
// console.log(this.name);
}
},
methods:
@@ -123,7 +129,16 @@
return this.error.length > 0;
},
triggerTransactionType: function () {
// console.log('On triggerTransactionType(' + this.inputName + ')');
if(null === this.name) {
// console.log('this.name is NULL.');
}
if (null === this.transactionType) {
// console.log('Transaction type is NULL.');
return;
}
if ('' === this.transactionType) {
// console.log('Transaction type is "".');
return;
}
this.inputDisabled = false;
@@ -148,21 +163,24 @@
}
},
selectedItem: function (e) {
//console.log('In SelectedItem()');
// console.log('In SelectedItem()');
if (typeof this.name === 'undefined') {
//console.log('Is undefined');
// console.log('Is undefined');
return;
}
if(typeof this.name === 'string') {
//console.log('Is a string.');
// console.log('Is a string.');
//this.trType = null;
this.$emit('clear:value');
}
// emit the fact that the user selected a type of account
// (influencing the destination)
// console.log('Is some object maybe:');
// console.log(this.name);
this.$emit('select:account', this.name);
},
clearSource: function (e) {
// console.log('clearSource()');
//props.value = '';
this.name = '';
// some event?

View File

@@ -22,10 +22,9 @@
<div class="form-group" v-bind:class="{ 'has-error': hasError()}">
<label class="col-sm-4 control-label" ref="cur"></label>
<div class="col-sm-8">
<input type="number" ref="amount" :value="value" @input="handleInput" step="any"
class="form-control"
<input type="number" @input="handleInput" ref="amount" :value="value" step="any" class="form-control"
name="amount[]"
title="amount" autocomplete="off" v-bind:placeholder="$t('firefly.amount')">
title="$t('firefly.amount')" autocomplete="off" v-bind:placeholder="$t('firefly.amount')">
<ul class="list-unstyled" v-for="error in this.error">
<li class="text-danger">{{ error }}</li>
</ul>

View File

@@ -45,7 +45,7 @@
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">
{{ $t('firefly.split_title_help')}}
{{ $t('firefly.split_transaction_title')}}
</h3>
</div>
<div class="box-body">
@@ -219,6 +219,7 @@
},
methods: {
convertData: function () {
// console.log('Now in convertData()');
let data = {
'transactions': [],
};
@@ -254,6 +255,7 @@
return data;
},
convertDataRow(row, index, transactionType) {
// console.log('Now in convertDataRow()');
let tagList = [];
let foreignAmount = null;
let foreignCurrency = null;
@@ -371,6 +373,7 @@
},
// submit transaction
submit(e) {
// console.log('Now in submit()');
const uri = './api/v1/transactions?_token=' + document.head.querySelector('meta[name="csrf-token"]').content;
const data = this.convertData();
@@ -378,10 +381,11 @@
button.prop("disabled", true);
axios.post(uri, data).then(response => {
// console.log('Did a succesfull POST');
// this method will ultimately send the user on (or not).
if (0 === this.collectAttachmentData(response)) {
this.redirectUser(response.data.data.id, button);
// console.log('Will now go to redirectUser()');
this.redirectUser(response.data.data.id, button, response.data.data);
}
}).catch(error => {
// give user errors things back.
@@ -397,19 +401,27 @@
e.preventDefault();
}
},
redirectUser(groupId, button) {
//console.log('In redirectUser()');
escapeHTML(unsafeText) {
let div = document.createElement('div');
div.innerText = unsafeText;
return div.innerHTML;
},
redirectUser(groupId, button, transactionData) {
// console.log('In redirectUser()');
// console.log(transactionData);
let title = null === transactionData.attributes.group_title ? transactionData.attributes.transactions[0].description : transactionData.attributes.group_title;
// console.log('Title is "' + title + '"');
// if count is 0, send user onwards.
if (this.createAnother) {
//console.log('Will create another.');
// do message:
this.success_message = '<a href="transactions/show/' + groupId + '">Transaction #' + groupId + '</a> has been stored.';
this.success_message = '<a href="transactions/show/' + groupId + '">Transaction #' + groupId + ' ("' + this.escapeHTML(title) + '")</a> has been stored.';
this.error_message = '';
if (this.resetFormAfter) {
// also clear form.
this.resetTransactions();
this.addTransactionToArray();
// do a short time out?
setTimeout(() => this.addTransactionToArray(), 50);
//this.addTransactionToArray();
}
// clear errors:
@@ -472,7 +484,7 @@
}
);
if (fileData.length === count) {
theParent.uploadFiles(fileData, groupId);
theParent.uploadFiles(fileData, groupId, response.data.data);
}
}
};
@@ -483,7 +495,7 @@
return count;
},
uploadFiles(fileData, groupId) {
uploadFiles(fileData, groupId, transactionData) {
let count = fileData.length;
let uploads = 0;
for (const key in fileData) {
@@ -502,13 +514,13 @@
// console.log('Uploading attachment #' + key);
const uploadUri = './api/v1/attachments/' + response.data.data.id + '/upload';
axios.post(uploadUri, fileData[key].content)
.then(response => {
.then(attachmentResponse => {
// console.log('Uploaded attachment #' + key);
uploads++;
if (uploads === count) {
// finally we can redirect the user onwards.
// console.log('FINAL UPLOAD');
this.redirectUser(groupId);
this.redirectUser(groupId, null, transactionData);
}
// console.log('Upload complete!');
return true;
@@ -520,7 +532,7 @@
if (uploads === count) {
// finally we can redirect the user onwards.
// console.log('FINAL UPLOAD');
this.redirectUser(groupId);
this.redirectUser(groupId, null, transactionData);
}
// console.log('Upload complete!');
return false;
@@ -619,9 +631,11 @@
}
},
resetTransactions: function () {
// console.log('Now in resetTransactions()');
this.transactions = [];
},
addTransactionToArray: function (e) {
// console.log('Now in addTransactionToArray()');
this.transactions.push({
description: "",
date: "",
@@ -693,9 +707,13 @@
}
});
if (this.transactions.length === 1) {
// console.log('Length == 1, set date to today.');
// set first date.
let today = new Date();
this.transactions[0].date = today.getFullYear() + '-' + ("0" + (today.getMonth() + 1)).slice(-2) + '-' + ("0" + today.getDate()).slice(-2);
// call for extra clear thing:
// this.clearSource(0);
//this.clearDestination(0);
}
if (e) {
e.preventDefault();
@@ -735,6 +753,7 @@
},
selectedSourceAccount: function (index, model) {
// console.log('Now in selectedSourceAccount()');
if (typeof model === 'string') {
// cant change types, only name.
this.transactions[index].source_account.name = model;
@@ -756,6 +775,7 @@
}
},
selectedDestinationAccount: function (index, model) {
// console.log('Now in selectedDestinationAccount()');
if (typeof model === 'string') {
// cant change types, only name.
this.transactions[index].destination_account.name = model;

View File

@@ -76,13 +76,13 @@
<div class="box-body">
<div class="row">
<div class="col-lg-4">
<transaction-description
<transaction-description v-if="transactionType.toLowerCase() !== 'reconciliation'"
v-model="transaction.description"
:index="index"
:error="transaction.errors.description"
>
</transaction-description>
<account-select
<account-select v-if="transactionType.toLowerCase() !== 'reconciliation'"
inputName="source[]"
v-bind:title="$t('firefly.source_account')"
:accountName="transaction.source_account.name"
@@ -93,7 +93,7 @@
v-on:select:account="selectedSourceAccount(index, $event)"
:error="transaction.errors.source_account"
></account-select>
<account-select
<account-select v-if="transactionType.toLowerCase() !== 'reconciliation'"
inputName="destination[]"
v-bind:title="$t('firefly.destination_account')"
:accountName="transaction.destination_account.name"
@@ -104,7 +104,7 @@
v-on:select:account="selectedDestinationAccount(index, $event)"
:error="transaction.errors.destination_account"
></account-select>
<standard-date
<standard-date v-if="transactionType.toLowerCase() !== 'reconciliation'"
v-model="transaction.date"
:index="index"
:error="transaction.errors.date"
@@ -162,7 +162,7 @@
</div>
</div>
</div>
<div class="box-footer" v-if="transactions.length-1 === index">
<div class="box-footer" v-if="transactions.length-1 === index && transactionType.toLowerCase() !== 'reconciliation'">
<button class="btn btn-primary" type="button" @click="addTransaction">{{ $t('firefly.add_another_split') }}</button>
</div>
</div>

View File

@@ -19,7 +19,11 @@
-->
<template>
<div class="form-group" v-bind:class="{ 'has-error': hasError()}" v-if="null == this.transactionType || null != this.transactionType && (this.enabledCurrencies.length > 2 && this.transactionType === 'Deposit') || this.transactionType.toLowerCase() === 'transfer'">
<div class="form-group" v-bind:class="{ 'has-error': hasError()}" v-if="
null == this.transactionType ||
null != this.transactionType && (this.enabledCurrencies.length > 2 && (this.transactionType.toLowerCase() === 'deposit' || this.transactionType.toLowerCase() === 'withdrawal')) ||
this.liability ||
(null != this.transactionType && this.transactionType.toLowerCase() === 'transfer')">
<div class="col-sm-4">
<select class="form-control" ref="currency_select" name="foreign_currency[]" @input="handleInput">
<option
@@ -49,43 +53,68 @@
<script>
export default {
name: "ForeignAmountSelect",
props: ['source', 'destination', 'transactionType', 'value', 'error', 'no_currency', 'title'],
props: ['source', 'destination', 'transactionType', 'value', 'error', 'no_currency', 'title',],
mounted() {
//console.log('loadCurrencies()');
this.liability = false;
this.loadCurrencies();
},
data() {
return {
currencies: [],
enabledCurrencies: [],
exclude: null
exclude: null,
// liability overrules the drop down list if the source or dest is a liability
liability: false
}
},
watch: {
source: function () {
// console.log('watch source in foreign currency');
this.changeData();
},
destination: function () {
// console.log('watch destination in foreign currency');
this.changeData();
},
transactionType: function () {
// console.log('watch transaction type in foreign currency');
this.changeData();
}
},
methods: {
hasError: function () {
// console.log('Has error');
return this.error.length > 0;
},
handleInput(e) {
this.$emit('input', {
amount: +this.$refs.amount.value,
// console.log('handleInput');
let obj = {
amount: this.$refs.amount.value,
currency_id: this.$refs.currency_select.value,
}
};
// console.log(obj);
this.$emit('input', obj
);
},
changeData: function () {
//console.log('Now in changeData()');
this.enabledCurrencies = [];
if (this.transactionType === 'Transfer') {
// lock source on currencyID of destination
let destType = this.destination.type ? this.destination.type.toLowerCase() : 'invalid';
let srcType = this.source.type ? this.source.type.toLowerCase() : 'invalid';
let tType =this.transactionType ? this.transactionType.toLowerCase() : 'invalid';
let liabilities = ['loan','debt','mortgage'];
let sourceIsLiability = liabilities.indexOf(srcType) !== -1;
let destIsLiability = liabilities.indexOf(destType) !== -1;
// console.log(srcType + ' (source) is a liability: ' + sourceIsLiability);
// console.log(destType + ' (dest) is a liability: ' + destIsLiability);
if (tType === 'transfer' || destIsLiability || sourceIsLiability) {
//console.log('Source is liability OR dest is liability, OR transfer. Lock list on currency of destination.');
this.liability = true;
// lock dropdown list on on currencyID of destination.
for (const key in this.currencies) {
if (this.currencies.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294) {
if (this.currencies[key].id === this.destination.currency_id) {
@@ -93,11 +122,12 @@
}
}
}
console.log('Enabled currencies length is now ' + this.enabledCurrencies.length);
//console.log('Enabled currencies length is now ' + this.enabledCurrencies.length);
return;
}
// if type is withdrawal, list all but skip the source account ID.
if (this.transactionType === 'Withdrawal' && this.source) {
if (tType === 'withdrawal' && this.source && false === sourceIsLiability) {
for (const key in this.currencies) {
if (this.currencies.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294) {
if (this.source.currency_id !== this.currencies[key].id) {
@@ -109,7 +139,7 @@
}
// if type is deposit, list all but skip the source account ID.
if (this.transactionType === 'Deposit' && this.destination) {
if (tType === 'deposit' && this.destination) {
for (const key in this.currencies) {
if (this.currencies.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294) {
if (this.destination.currency_id !== this.currencies[key].id) {
@@ -126,6 +156,7 @@
}
},
loadCurrencies: function () {
// console.log('loadCurrencies');
let URI = document.getElementsByTagName('base')[0].href + "json/currencies";
axios.get(URI, {}).then((res) => {
this.currencies = [

View File

@@ -24,7 +24,7 @@
v-if="typeof this.transactionType !== 'undefined' && this.transactionType === 'Transfer'">
<div class="col-sm-12">
<select name="piggy_bank[]" ref="piggy" @input="handleInput" class="form-control" v-if="this.piggies.length > 0">
<option v-for="piggy in this.piggies" :label="piggy.name" :value="piggy.id">{{piggy.name}}</option>
<option v-for="piggy in this.piggies" :label="piggy.name_with_amount" :value="piggy.id">{{piggy.name_with_amount}}</option>
</select>
<ul class="list-unstyled" v-for="error in this.error">
<li class="text-danger">{{ error }}</li>
@@ -57,7 +57,7 @@
axios.get(URI, {}).then((res) => {
this.piggies = [
{
name: this.no_piggy_bank,
name_with_amount: this.no_piggy_bank,
id: 0,
}
];

View File

@@ -28,7 +28,8 @@
"split_title_help": "Pokud vytvo\u0159\u00edte roz\u00fa\u010dtov\u00e1n\u00ed, je t\u0159eba, aby zde byl celkov\u00fd popis pro v\u0161echna roz\u00fa\u010dtov\u00e1n\u00ed dan\u00e9 transakce.",
"none_in_select_list": "(\u017e\u00e1dn\u00e9)",
"no_piggy_bank": "(no piggy bank)",
"description": "Popis"
"description": "Popis",
"split_transaction_title_help": "If you create a split transaction, there must be a global description for all splits of the transaction."
},
"form": {
"interest_date": "\u00darokov\u00e9 datum",

View File

@@ -28,7 +28,8 @@
"split_title_help": "Wenn Sie eine Splittbuchung anlegen, muss es eine eindeutige Beschreibung f\u00fcr alle Aufteilungen der Buchhaltung geben.",
"none_in_select_list": "(Keine)",
"no_piggy_bank": "(kein Sparschwein)",
"description": "Beschreibung"
"description": "Beschreibung",
"split_transaction_title_help": "Wenn Sie eine Splittbuchung anlegen, muss es eine eindeutige Beschreibung f\u00fcr alle Aufteilungen der Buchung geben."
},
"form": {
"interest_date": "Zinstermin",

View File

@@ -28,7 +28,8 @@
"split_title_help": "If you create a split transaction, there must be a global description for all splits of the transaction.",
"none_in_select_list": "(\u03c4\u03af\u03c0\u03bf\u03c4\u03b1)",
"no_piggy_bank": "(no piggy bank)",
"description": "Description"
"description": "Description",
"split_transaction_title_help": "If you create a split transaction, there must be a global description for all splits of the transaction."
},
"form": {
"interest_date": "\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1 \u03c4\u03bf\u03ba\u03b9\u03c3\u03bc\u03bf\u03cd",

View File

@@ -28,7 +28,8 @@
"split_title_help": "If you create a split transaction, there must be a global description for all splits of the transaction.",
"none_in_select_list": "(none)",
"no_piggy_bank": "(no piggy bank)",
"description": "Description"
"description": "Description",
"split_transaction_title_help": "If you create a split transaction, there must be a global description for all splits of the transaction."
},
"form": {
"interest_date": "Interest date",

View File

@@ -28,7 +28,8 @@
"split_title_help": "Si crea una transacci\u00f3n dividida, debe haber una descripci\u00f3n global para todos los fragmentos de la transacci\u00f3n.",
"none_in_select_list": "(ninguno)",
"no_piggy_bank": "(sin alcanc\u00eda)",
"description": "Descripci\u00f3n"
"description": "Descripci\u00f3n",
"split_transaction_title_help": "If you create a split transaction, there must be a global description for all splits of the transaction."
},
"form": {
"interest_date": "Fecha de inter\u00e9s",

View File

@@ -5,15 +5,15 @@
"flash_success": "Termin\u00e9 avec succ\u00e8s !",
"close": "Fermer",
"split_transaction_title": "Description de l'op\u00e9ration ventil\u00e9e",
"errors_submission": "There was something wrong with your submission. Please check out the errors below.",
"errors_submission": "Certaines informations ne sont pas correctes dans votre formulaire. Veuillez v\u00e9rifier les erreurs ci-dessous.",
"split": "Ventiler",
"transaction_journal_information": "Informations sur les transactions",
"source_account": "Compte d'origine",
"destination_account": "Compte de destination",
"add_another_split": "Ajouter une autre fraction",
"submission": "Submission",
"create_another": "After storing, return here to create another one.",
"reset_after": "Reset form after submission",
"submission": "Soumission",
"create_another": "Apr\u00e8s enregistrement, revenir ici pour en cr\u00e9er un nouveau.",
"reset_after": "R\u00e9initialiser le formulaire apr\u00e8s soumission",
"submit": "Soumettre",
"amount": "Montant",
"date": "Date",
@@ -22,13 +22,14 @@
"category": "Cat\u00e9gorie",
"attachments": "Pi\u00e8ces jointes",
"notes": "Notes",
"update_transaction": "Update transaction",
"after_update_create_another": "After updating, return here to continue editing.",
"store_as_new": "Store as a new transaction instead of updating.",
"update_transaction": "Mettre \u00e0 jour la transaction",
"after_update_create_another": "Apr\u00e8s la mise \u00e0 jour, revenir ici pour continuer l'\u00e9dition.",
"store_as_new": "Enregistrer comme une nouvelle transaction au lieu de mettre \u00e0 jour.",
"split_title_help": "Si vous cr\u00e9ez une op\u00e9ration ventil\u00e9e, il doit y avoir une description globale pour chaque fractions de l'op\u00e9ration.",
"none_in_select_list": "(aucun)",
"no_piggy_bank": "(no piggy bank)",
"description": "Description"
"no_piggy_bank": "(aucune tirelire)",
"description": "Description",
"split_transaction_title_help": "Si vous cr\u00e9ez une op\u00e9ration ventil\u00e9e, il doit y avoir une description globale pour chaque fraction de l'op\u00e9ration."
},
"form": {
"interest_date": "Date de l\u2019int\u00e9r\u00eat",

View File

@@ -28,7 +28,8 @@
"split_title_help": "Felosztott tranzakci\u00f3 l\u00e9trehoz\u00e1sakor meg kell adni egy glob\u00e1lis le\u00edr\u00e1st a tranzakci\u00f3 \u00f6sszes feloszt\u00e1sa r\u00e9sz\u00e9re.",
"none_in_select_list": "(nincs)",
"no_piggy_bank": "(no piggy bank)",
"description": "Le\u00edr\u00e1s"
"description": "Le\u00edr\u00e1s",
"split_transaction_title_help": "If you create a split transaction, there must be a global description for all splits of the transaction."
},
"form": {
"interest_date": "Kamatfizet\u00e9si id\u0151pont",

View File

@@ -28,7 +28,8 @@
"split_title_help": "If you create a split transaction, there must be a global description for all splits of the transaction.",
"none_in_select_list": "(none)",
"no_piggy_bank": "(no piggy bank)",
"description": "Deskripsi"
"description": "Deskripsi",
"split_transaction_title_help": "If you create a split transaction, there must be a global description for all splits of the transaction."
},
"form": {
"interest_date": "Tanggal bunga",

View File

@@ -28,7 +28,8 @@
"split_title_help": "Se crei una transazione suddivisa \u00e8 necessario che ci sia una descrizione globale per tutte le suddivisioni della transazione.",
"none_in_select_list": "(nessuna)",
"no_piggy_bank": "(nessun salvadanaio)",
"description": "Descrizione"
"description": "Descrizione",
"split_transaction_title_help": "Se crei una transazione suddivisa, \u00e8 necessario che ci sia una descrizione globale per tutte le suddivisioni della transazione."
},
"form": {
"interest_date": "Data interesse",

View File

@@ -28,7 +28,8 @@
"split_title_help": "If you create a split transaction, there must be a global description for all splits of the transaction.",
"none_in_select_list": "(ingen)",
"no_piggy_bank": "(no piggy bank)",
"description": "Beskrivelse"
"description": "Beskrivelse",
"split_transaction_title_help": "If you create a split transaction, there must be a global description for all splits of the transaction."
},
"form": {
"interest_date": "Rentedato",

View File

@@ -28,7 +28,8 @@
"split_title_help": "Als je een gesplitste transactie maakt, moet er een algemene beschrijving zijn voor alle splitsingen van de transactie.",
"none_in_select_list": "(geen)",
"no_piggy_bank": "(geen spaarpotje)",
"description": "Omschrijving"
"description": "Omschrijving",
"split_transaction_title_help": "If you create a split transaction, there must be a global description for all splits of the transaction."
},
"form": {
"interest_date": "Rentedatum",

View File

@@ -27,8 +27,9 @@
"store_as_new": "Zapisz jako now\u0105 zamiast aktualizowa\u0107.",
"split_title_help": "Podzielone transakcje musz\u0105 posiada\u0107 globalny opis.",
"none_in_select_list": "(\u017cadne)",
"no_piggy_bank": "(brak skarbonek)",
"description": "Opis"
"no_piggy_bank": "(brak skarbonki)",
"description": "Opis",
"split_transaction_title_help": "If you create a split transaction, there must be a global description for all splits of the transaction."
},
"form": {
"interest_date": "Data odsetek",

View File

@@ -28,7 +28,8 @@
"split_title_help": "Se voc\u00ea criar uma transa\u00e7\u00e3o dividida, \u00e9 necess\u00e1rio haver uma descri\u00e7\u00e3o global para todas as partes da transa\u00e7\u00e3o.",
"none_in_select_list": "(nenhum)",
"no_piggy_bank": "(nenhum cofrinho)",
"description": "Descri\u00e7\u00e3o"
"description": "Descri\u00e7\u00e3o",
"split_transaction_title_help": "If you create a split transaction, there must be a global description for all splits of the transaction."
},
"form": {
"interest_date": "Data de interesse",

View File

@@ -28,7 +28,8 @@
"split_title_help": "If you create a split transaction, there must be a global description for all splits of the transaction.",
"none_in_select_list": "(nici unul)",
"no_piggy_bank": "(no piggy bank)",
"description": "Descriere"
"description": "Descriere",
"split_transaction_title_help": "If you create a split transaction, there must be a global description for all splits of the transaction."
},
"form": {
"interest_date": "Data de interes",

View File

@@ -28,7 +28,8 @@
"split_title_help": "\u0415\u0441\u043b\u0438 \u0432\u044b \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u0443\u044e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e, \u0442\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431\u0449\u0435\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u043b\u0435 \u0432\u0441\u0435\u0445 \u0435\u0451 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445.",
"none_in_select_list": "(\u043d\u0435\u0442)",
"no_piggy_bank": "(\u043d\u0435\u0442 \u043a\u043e\u043f\u0438\u043b\u043a\u0438)",
"description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435"
"description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",
"split_transaction_title_help": "\u0415\u0441\u043b\u0438 \u0432\u044b \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u0443\u044e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e, \u0442\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431\u0449\u0435\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0435\u0451 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445."
},
"form": {
"interest_date": "\u0414\u0430\u0442\u0430 \u0432\u044b\u043f\u043b\u0430\u0442\u044b",

View File

@@ -28,7 +28,8 @@
"split_title_help": "If you create a split transaction, there must be a global description for all splits of the transaction.",
"none_in_select_list": "(Yok)",
"no_piggy_bank": "(no piggy bank)",
"description": "A\u00e7\u0131klama"
"description": "A\u00e7\u0131klama",
"split_transaction_title_help": "If you create a split transaction, there must be a global description for all splits of the transaction."
},
"form": {
"interest_date": "Faiz tarihi",

View File

@@ -28,7 +28,8 @@
"split_title_help": "\u5982\u679c\u60a8\u521b\u5efa\u4e00\u4e2a\u62c6\u5206\u4ea4\u6613\uff0c\u5fc5\u987b\u6709\u4e00\u4e2a\u5168\u5c40\u7684\u4ea4\u6613\u63cf\u8ff0\u3002",
"none_in_select_list": "\uff08\u7a7a\uff09",
"no_piggy_bank": "(no piggy bank)",
"description": "\u63cf\u8ff0"
"description": "\u63cf\u8ff0",
"split_transaction_title_help": "If you create a split transaction, there must be a global description for all splits of the transaction."
},
"form": {
"interest_date": "\u5229\u7387\u65e5\u671f",

View File

@@ -28,7 +28,8 @@
"split_title_help": "\u82e5\u60a8\u5efa\u7acb\u4e00\u7b46\u62c6\u5206\u4ea4\u6613\uff0c\u9808\u6709\u4e00\u500b\u6709\u95dc\u4ea4\u6613\u6240\u6709\u62c6\u5206\u7684\u6574\u9ad4\u63cf\u8ff0\u3002",
"none_in_select_list": "(\u7a7a)",
"no_piggy_bank": "(no piggy bank)",
"description": "\u63cf\u8ff0"
"description": "\u63cf\u8ff0",
"split_transaction_title_help": "If you create a split transaction, there must be a global description for all splits of the transaction."
},
"form": {
"interest_date": "\u5229\u7387\u65e5\u671f",

View File

@@ -715,7 +715,7 @@ return [
'deleted_ab' => 'The available budget amount has been deleted',
'deleted_bl' => 'The budgeted amount has been removed',
'alt_currency_ab_create' => 'Set the available budget in another currency',
'bl_create_btn' => 'Set budget in another currency',
'bl_create_btn' => 'Ustaw budżet w innej walucie',
'inactiveBudgets' => 'Nieaktywne budżety',
'without_budget_between' => 'Transakcje bez budżetu między :start i :end',
'delete_budget' => 'Usuń budżet ":name"',
@@ -1284,7 +1284,7 @@ return [
'send_test_triggered' => 'Test został uruchomiony. Sprawdź swoją skrzynkę odbiorczą i pliki dziennika.',
'split_transaction_title' => 'Opis podzielonej transakcji',
'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.',
'split_transaction_title_help' => 'Jeśli tworzysz podzieloną transakcję, musi ona posiadać globalny opis dla wszystkich podziałów w transakcji.',
'split_title_help' => 'Podzielone transakcje muszą posiadać globalny opis.',
'transaction_information' => 'Informacje o transakcji',
'you_create_transfer' => 'Tworzysz <strong>przelew</strong>.',

View File

@@ -1284,7 +1284,7 @@ return [
'send_test_triggered' => 'Тест был выполнен. Проверьте ваш почтовый ящик и log-файлы.',
'split_transaction_title' => 'Описание разделённой транзакции',
'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.',
'split_transaction_title_help' => 'Если вы создаёте разделённую транзакцию, то должны указать общее описание для всех её составляющих.',
'split_title_help' => 'Если вы создаёте разделённую транзакцию, то должны указать общее описание дле всех её составляющих.',
'transaction_information' => 'Информация о транзакции',
'you_create_transfer' => 'Вы создаёте <strong>перевод</strong>.',

View File

@@ -20,6 +20,7 @@
{{ ExpandedForm.text('name') }}
{% if account.accountType.type == 'Default account' or account.accountType.type == 'Asset account' or objectType == 'liabilities' %}
{{ CurrencyForm.currencyList('currency_id', null, {helpText:'account_default_currency'|_}) }}
{% endif %}
{% if objectType == 'liabilities' %}

View File

@@ -29,7 +29,7 @@
</div>
<div class="box-body">
{{ ExpandedForm.date('date', tag.date.format('Y-m-d')) }}
{{ ExpandedForm.textarea('description') }}
{{ ExpandedForm.textarea('description', tag.description) }}
{{ ExpandedForm.location('tag_position') }}
</div>
</div>

View File

@@ -556,6 +556,7 @@ Route::group(
Route::get('accounts', ['uses' => 'Json\AutoCompleteController@accounts', 'as' => 'autocomplete.accounts']);
Route::get('revenue-accounts', ['uses' => 'Json\AutoCompleteController@revenueAccounts', 'as' => 'autocomplete.revenue-accounts']);
Route::get('expense-accounts', ['uses' => 'Json\AutoCompleteController@expenseAccounts', 'as' => 'autocomplete.expense-accounts']);
Route::get('asset-accounts', ['uses' => 'Json\AutoCompleteController@assetAccounts', 'as' => 'autocomplete.asset-accounts']);
Route::get('budgets', ['uses' => 'Json\AutoCompleteController@budgets', 'as' => 'autocomplete.budgets']);
Route::get('categories', ['uses' => 'Json\AutoCompleteController@categories', 'as' => 'autocomplete.categories']);
Route::get('currencies', ['uses' => 'Json\AutoCompleteController@currencies', 'as' => 'autocomplete.currencies']);