mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-17 01:42:19 +00:00
Merge branch 'release/4.4.3'
This commit is contained in:
@@ -26,7 +26,7 @@ REDIS_HOST=127.0.0.1
|
||||
REDIS_PASSWORD=null
|
||||
REDIS_PORT=6379
|
||||
|
||||
MAIL_DRIVER=smtp
|
||||
MAIL_DRIVER=log
|
||||
MAIL_HOST=mailtrap.io
|
||||
MAIL_PORT=2525
|
||||
MAIL_FROM=changeme@example.com
|
||||
|
@@ -20,10 +20,10 @@ install:
|
||||
- mkdir -p build/logs
|
||||
|
||||
script:
|
||||
- phpunit -c phpunit.coverage.xml
|
||||
- phpunit -c phpunit.xml
|
||||
|
||||
after_success:
|
||||
- travis_retry php vendor/bin/coveralls -x storage/build/clover.xml
|
||||
#after_success:
|
||||
# - travis_retry php vendor/bin/coveralls -x storage/build/clover.xml
|
||||
|
||||
# safelist
|
||||
branches:
|
||||
|
17
CHANGELOG.md
17
CHANGELOG.md
@@ -2,9 +2,24 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
This project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
## [4.4.3] - 2017-05-03
|
||||
### Added
|
||||
- Added support for Slovenian
|
||||
- Removed support for Spanish. No translations whatsoever by the guy who requested it.
|
||||
- Removed support for Russian. Same thing.
|
||||
- Removed support for Croatian. Same thing.
|
||||
- Removed support for Chinese Traditional, Hong Kong. Same thing.
|
||||
|
||||
### Changed
|
||||
- The journal collector, an internal piece of code to collect transactions, now uses a slightly different method of collecting journals. This may cause problems.
|
||||
|
||||
### Fixed
|
||||
- Issue #638 as reported by [worldworm](https://github.com/worldworm).
|
||||
- Possible fix for #624
|
||||
|
||||
## [4.4.2] - 2017-04-27
|
||||
### Fixed
|
||||
Fixed a bug where the opening balance could not be stored.
|
||||
- Fixed a bug where the opening balance could not be stored.
|
||||
|
||||
## [4.4.1] - 2017-04-27
|
||||
|
||||
|
@@ -12,6 +12,10 @@
|
||||
|
||||
[](https://heroku.com/deploy?template=https://github.com/firefly-iii/firefly-iii/tree/master)
|
||||
|
||||
Firefly III can be run on Heroku. Register for a free Heroku account and instantly run Firefly III on your very own cloud instance.
|
||||
|
||||
There is also a [demo site](https://firefly-iii.nder.be) with an example financial administration already present.
|
||||
|
||||
## Installation
|
||||
|
||||
To install Firefly III, you'll need a web server (preferrably on Linux) and access to the command line. Then, please read the [installation guide](https://firefly-iii.github.io/using-installing.html).
|
||||
|
@@ -26,7 +26,9 @@ class StoredTransactionJournal extends Event
|
||||
|
||||
use SerializesModels;
|
||||
|
||||
/** @var TransactionJournal */
|
||||
public $journal;
|
||||
/** @var int */
|
||||
public $piggyBankId;
|
||||
|
||||
/**
|
||||
|
@@ -26,6 +26,7 @@ class UpdatedTransactionJournal extends Event
|
||||
|
||||
use SerializesModels;
|
||||
|
||||
/** @var TransactionJournal */
|
||||
public $journal;
|
||||
|
||||
/**
|
||||
|
@@ -18,6 +18,9 @@ use Carbon\Carbon;
|
||||
use FireflyIII\Generator\Report\ReportGeneratorInterface;
|
||||
use FireflyIII\Generator\Report\Support;
|
||||
use FireflyIII\Helpers\Collector\JournalCollectorInterface;
|
||||
use FireflyIII\Helpers\Filter\OpposingAccountFilter;
|
||||
use FireflyIII\Helpers\Filter\PositiveAmountFilter;
|
||||
use FireflyIII\Helpers\Filter\TransferFilter;
|
||||
use FireflyIII\Models\Transaction;
|
||||
use FireflyIII\Models\TransactionType;
|
||||
use Illuminate\Support\Collection;
|
||||
@@ -156,11 +159,13 @@ class MonthReportGenerator extends Support implements ReportGeneratorInterface
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setAccounts($this->accounts)->setRange($this->start, $this->end)
|
||||
->setTypes([TransactionType::WITHDRAWAL])
|
||||
->setBudgets($this->budgets)->withOpposingAccount()->disableFilter();
|
||||
->setBudgets($this->budgets)->withOpposingAccount();
|
||||
$collector->removeFilter(TransferFilter::class);
|
||||
|
||||
$collector->addFilter(OpposingAccountFilter::class);
|
||||
$collector->addFilter(PositiveAmountFilter::class);
|
||||
|
||||
$accountIds = $this->accounts->pluck('id')->toArray();
|
||||
$transactions = $collector->getJournals();
|
||||
$transactions = self::filterExpenses($transactions, $accountIds);
|
||||
$this->expenses = $transactions;
|
||||
|
||||
return $transactions;
|
||||
|
@@ -18,6 +18,10 @@ use Carbon\Carbon;
|
||||
use FireflyIII\Generator\Report\ReportGeneratorInterface;
|
||||
use FireflyIII\Generator\Report\Support;
|
||||
use FireflyIII\Helpers\Collector\JournalCollectorInterface;
|
||||
use FireflyIII\Helpers\Filter\NegativeAmountFilter;
|
||||
use FireflyIII\Helpers\Filter\OpposingAccountFilter;
|
||||
use FireflyIII\Helpers\Filter\PositiveAmountFilter;
|
||||
use FireflyIII\Helpers\Filter\TransferFilter;
|
||||
use FireflyIII\Models\Transaction;
|
||||
use FireflyIII\Models\TransactionType;
|
||||
use Illuminate\Support\Collection;
|
||||
@@ -166,11 +170,13 @@ class MonthReportGenerator extends Support implements ReportGeneratorInterface
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setAccounts($this->accounts)->setRange($this->start, $this->end)
|
||||
->setTypes([TransactionType::WITHDRAWAL, TransactionType::TRANSFER])
|
||||
->setCategories($this->categories)->withOpposingAccount()->disableFilter();
|
||||
->setCategories($this->categories)->withOpposingAccount();
|
||||
$collector->removeFilter(TransferFilter::class);
|
||||
|
||||
$collector->addFilter(OpposingAccountFilter::class);
|
||||
$collector->addFilter(PositiveAmountFilter::class);
|
||||
|
||||
$accountIds = $this->accounts->pluck('id')->toArray();
|
||||
$transactions = $collector->getJournals();
|
||||
$transactions = self::filterExpenses($transactions, $accountIds);
|
||||
$this->expenses = $transactions;
|
||||
|
||||
return $transactions;
|
||||
@@ -190,9 +196,11 @@ class MonthReportGenerator extends Support implements ReportGeneratorInterface
|
||||
$collector->setAccounts($this->accounts)->setRange($this->start, $this->end)
|
||||
->setTypes([TransactionType::DEPOSIT, TransactionType::TRANSFER])
|
||||
->setCategories($this->categories)->withOpposingAccount();
|
||||
$accountIds = $this->accounts->pluck('id')->toArray();
|
||||
|
||||
$collector->addFilter(OpposingAccountFilter::class);
|
||||
$collector->addFilter(NegativeAmountFilter::class);
|
||||
|
||||
$transactions = $collector->getJournals();
|
||||
$transactions = self::filterIncome($transactions, $accountIds);
|
||||
$this->income = $transactions;
|
||||
|
||||
return $transactions;
|
||||
|
@@ -25,61 +25,6 @@ use Log;
|
||||
*/
|
||||
class Support
|
||||
{
|
||||
|
||||
/**
|
||||
* @param Collection $collection
|
||||
* @param array $accounts
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public static function filterExpenses(Collection $collection, array $accounts): Collection
|
||||
{
|
||||
return self::filterTransactions($collection, $accounts, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Collection $collection
|
||||
* @param array $accounts
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public static function filterIncome(Collection $collection, array $accounts): Collection
|
||||
{
|
||||
return self::filterTransactions($collection, $accounts, -1);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Collection $collection
|
||||
* @param array $accounts
|
||||
* @param int $modifier
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public static function filterTransactions(Collection $collection, array $accounts, int $modifier): Collection
|
||||
{
|
||||
$result = $collection->filter(
|
||||
function (Transaction $transaction) use ($accounts, $modifier) {
|
||||
$opposing = $transaction->opposing_account_id;
|
||||
// remove internal transfer
|
||||
if (in_array($opposing, $accounts)) {
|
||||
Log::debug(sprintf('Filtered #%d because its opposite is in accounts.', $transaction->id));
|
||||
|
||||
return null;
|
||||
}
|
||||
// remove positive amount
|
||||
if (bccomp($transaction->transaction_amount, '0') === $modifier) {
|
||||
Log::debug(sprintf('Filtered #%d because amount is %f.', $transaction->id, $transaction->transaction_amount));
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
return $transaction;
|
||||
}
|
||||
);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Collection
|
||||
*/
|
||||
|
@@ -14,8 +14,11 @@ namespace FireflyIII\Generator\Report\Tag;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use FireflyIII\Generator\Report\ReportGeneratorInterface;
|
||||
use FireflyIII\Generator\Report\Support;
|
||||
use FireflyIII\Helpers\Collector\JournalCollectorInterface;
|
||||
use FireflyIII\Helpers\Filter\NegativeAmountFilter;
|
||||
use FireflyIII\Helpers\Filter\OpposingAccountFilter;
|
||||
use FireflyIII\Helpers\Filter\PositiveAmountFilter;
|
||||
use FireflyIII\Helpers\Filter\TransferFilter;
|
||||
use FireflyIII\Models\Tag;
|
||||
use FireflyIII\Models\Transaction;
|
||||
use FireflyIII\Models\TransactionType;
|
||||
@@ -27,7 +30,7 @@ use Log;
|
||||
*
|
||||
* @package FireflyIII\Generator\Report\Tag
|
||||
*/
|
||||
class MonthReportGenerator extends Support implements ReportGeneratorInterface
|
||||
class MonthReportGenerator implements ReportGeneratorInterface
|
||||
{
|
||||
|
||||
/** @var Collection */
|
||||
@@ -162,11 +165,14 @@ class MonthReportGenerator extends Support implements ReportGeneratorInterface
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setAccounts($this->accounts)->setRange($this->start, $this->end)
|
||||
->setTypes([TransactionType::WITHDRAWAL, TransactionType::TRANSFER])
|
||||
->setTags($this->tags)->withOpposingAccount()->disableFilter();
|
||||
->setTags($this->tags)->withOpposingAccount();
|
||||
$collector->removeFilter(TransferFilter::class);
|
||||
|
||||
$collector->addFilter(OpposingAccountFilter::class);
|
||||
$collector->addFilter(PositiveAmountFilter::class);
|
||||
|
||||
$transactions = $collector->getJournals();
|
||||
|
||||
$accountIds = $this->accounts->pluck('id')->toArray();
|
||||
$transactions = $collector->getJournals();
|
||||
$transactions = self::filterExpenses($transactions, $accountIds);
|
||||
$this->expenses = $transactions;
|
||||
|
||||
return $transactions;
|
||||
@@ -186,9 +192,11 @@ class MonthReportGenerator extends Support implements ReportGeneratorInterface
|
||||
$collector->setAccounts($this->accounts)->setRange($this->start, $this->end)
|
||||
->setTypes([TransactionType::DEPOSIT, TransactionType::TRANSFER])
|
||||
->setTags($this->tags)->withOpposingAccount();
|
||||
$accountIds = $this->accounts->pluck('id')->toArray();
|
||||
|
||||
$collector->addFilter(OpposingAccountFilter::class);
|
||||
$collector->addFilter(NegativeAmountFilter::class);
|
||||
|
||||
$transactions = $collector->getJournals();
|
||||
$transactions = self::filterIncome($transactions, $accountIds);
|
||||
$this->income = $transactions;
|
||||
|
||||
return $transactions;
|
||||
|
@@ -14,76 +14,91 @@ declare(strict_types=1);
|
||||
namespace FireflyIII\Handlers\Events;
|
||||
|
||||
use FireflyIII\Events\StoredTransactionJournal;
|
||||
use FireflyIII\Models\PiggyBank;
|
||||
use FireflyIII\Models\PiggyBankEvent;
|
||||
use FireflyIII\Models\PiggyBankRepetition;
|
||||
use FireflyIII\Models\Rule;
|
||||
use FireflyIII\Models\RuleGroup;
|
||||
use FireflyIII\Models\TransactionJournal;
|
||||
use FireflyIII\Models\TransactionType;
|
||||
use FireflyIII\Repositories\Journal\JournalRepositoryInterface as JRI;
|
||||
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface as PRI;
|
||||
use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface as RGRI;
|
||||
use FireflyIII\Rules\Processor;
|
||||
use FireflyIII\Support\Events\BillScanner;
|
||||
use Log;
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* Class StoredJournalEventHandler
|
||||
*
|
||||
* @package FireflyIII\Handlers\Events
|
||||
*/
|
||||
class StoredJournalEventHandler
|
||||
{
|
||||
/** @var JRI */
|
||||
public $journalRepository;
|
||||
/** @var PRI */
|
||||
public $repository;
|
||||
|
||||
/** @var RGRI */
|
||||
public $ruleGroupRepository;
|
||||
|
||||
/**
|
||||
* StoredJournalEventHandler constructor.
|
||||
*/
|
||||
public function __construct(PRI $repository, JRI $journalRepository, RGRI $ruleGroupRepository)
|
||||
{
|
||||
$this->repository = $repository;
|
||||
$this->journalRepository = $journalRepository;
|
||||
$this->ruleGroupRepository = $ruleGroupRepository;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method connects a new transfer to a piggy bank.
|
||||
*
|
||||
*
|
||||
*
|
||||
* @param StoredTransactionJournal $event
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function connectToPiggyBank(StoredTransactionJournal $event): bool
|
||||
{
|
||||
/** @var TransactionJournal $journal */
|
||||
$journal = $event->journal;
|
||||
$piggyBankId = $event->piggyBankId;
|
||||
Log::debug(sprintf('Trying to connect journal %d to piggy bank %d.', $journal->id, $piggyBankId));
|
||||
$piggyBank = $this->repository->find($piggyBankId);
|
||||
|
||||
/*
|
||||
* Will only continue when journal is a transfer.
|
||||
*/
|
||||
Log::debug(sprintf('Journal transaction type is %s', $journal->transactionType->type));
|
||||
if ($journal->transactionType->type !== TransactionType::TRANSFER) {
|
||||
// is a transfer?
|
||||
if (!$this->journalRepository->isTransfer($journal)) {
|
||||
Log::info(sprintf('Will not connect %s #%d to a piggy bank.', $journal->transactionType->type, $journal->id));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Verify existence of piggy bank:
|
||||
*/
|
||||
if (!$this->verifyExistence($event)) {
|
||||
Log::error(sprintf('No such piggy bank or no repetition on %s', $journal->date->format('Y-m-d')));
|
||||
// piggy exists?
|
||||
if (is_null($piggyBank->id)) {
|
||||
Log::error(sprintf('There is no piggy bank with ID #%d', $piggyBankId));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get relevant data:
|
||||
*/
|
||||
$piggyBank = $journal->user->piggyBanks()->where('piggy_banks.id', $piggyBankId)->first(['piggy_banks.*']);
|
||||
$repetition = $piggyBank->piggyBankRepetitions()->relevantOnDate($journal->date)->first();
|
||||
$amount = $this->getExactAmount($journal, $piggyBank, $repetition);
|
||||
// repetition exists?
|
||||
$repetition = $this->repository->getRepetition($piggyBank, $journal->date);
|
||||
if (is_null($repetition->id)) {
|
||||
Log::error(sprintf('No piggy bank repetition on %s!', $journal->date->format('Y-m-d')));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// get the amount
|
||||
$amount = $this->repository->getExactAmount($piggyBank, $repetition, $journal);
|
||||
if (bccomp($amount, '0') === 0) {
|
||||
Log::debug('Amount is zero, will not create event.');
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
$repetition->currentamount = bcadd($repetition->currentamount, $amount);
|
||||
$repetition->save();
|
||||
// update amount
|
||||
$this->repository->addAmountToRepetition($repetition, $amount);
|
||||
$event = $this->repository->createEventWithJournal($piggyBank, $amount, $journal);
|
||||
|
||||
/** @var PiggyBankEvent $event */
|
||||
$event = PiggyBankEvent::create(
|
||||
['piggy_bank_id' => $piggyBank->id, 'transaction_journal_id' => $journal->id, 'date' => $journal->date, 'amount' => $amount]
|
||||
);
|
||||
Log::debug(sprintf('Created piggy bank event #%d', $event->id));
|
||||
|
||||
return true;
|
||||
@@ -100,16 +115,11 @@ class StoredJournalEventHandler
|
||||
{
|
||||
// get all the user's rule groups, with the rules, order by 'order'.
|
||||
$journal = $storedJournalEvent->journal;
|
||||
$groups = $journal->user->ruleGroups()->where('rule_groups.active', 1)->orderBy('order', 'ASC')->get();
|
||||
//
|
||||
$groups = $this->ruleGroupRepository->getActiveGroups($journal->user);
|
||||
|
||||
/** @var RuleGroup $group */
|
||||
foreach ($groups as $group) {
|
||||
$rules = $group->rules()
|
||||
->leftJoin('rule_triggers', 'rules.id', '=', 'rule_triggers.rule_id')
|
||||
->where('rule_triggers.trigger_type', 'user_action')
|
||||
->where('rule_triggers.trigger_value', 'store-journal')
|
||||
->where('rules.active', 1)
|
||||
->get(['rules.*']);
|
||||
$rules = $this->ruleGroupRepository->getActiveStoreRules($group);
|
||||
/** @var Rule $rule */
|
||||
foreach ($rules as $rule) {
|
||||
|
||||
@@ -117,9 +127,8 @@ class StoredJournalEventHandler
|
||||
$processor->handleTransactionJournal($journal);
|
||||
|
||||
if ($rule->stop_processing) {
|
||||
return true;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -140,81 +149,4 @@ class StoredJournalEventHandler
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @SuppressWarnings(PHPMD.CyclomaticComplexity) // it's 6 but I can live with it.
|
||||
* @param TransactionJournal $journal
|
||||
* @param PiggyBank $piggyBank
|
||||
* @param PiggyBankRepetition $repetition
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function getExactAmount(TransactionJournal $journal, PiggyBank $piggyBank, PiggyBankRepetition $repetition): string
|
||||
{
|
||||
$amount = $journal->amountPositive();
|
||||
$sources = $journal->sourceAccountList()->pluck('id')->toArray();
|
||||
$room = bcsub(strval($piggyBank->targetamount), strval($repetition->currentamount));
|
||||
$compare = bcmul($repetition->currentamount, '-1');
|
||||
|
||||
Log::debug(sprintf('Will add/remove %f to piggy bank #%d ("%s")', $amount, $piggyBank->id, $piggyBank->name));
|
||||
|
||||
// if piggy account matches source account, the amount is positive
|
||||
if (in_array($piggyBank->account_id, $sources)) {
|
||||
$amount = bcmul($amount, '-1');
|
||||
Log::debug(sprintf('Account #%d is the source, so will remove amount from piggy bank.', $piggyBank->account_id));
|
||||
}
|
||||
|
||||
|
||||
// if the amount is positive, make sure it fits in piggy bank:
|
||||
if (bccomp($amount, '0') === 1 && bccomp($room, $amount) === -1) {
|
||||
// amount is positive and $room is smaller than $amount
|
||||
Log::debug(sprintf('Room in piggy bank for extra money is %f', $room));
|
||||
Log::debug(sprintf('There is NO room to add %f to piggy bank #%d ("%s")', $amount, $piggyBank->id, $piggyBank->name));
|
||||
Log::debug(sprintf('New amount is %f', $room));
|
||||
|
||||
return $room;
|
||||
}
|
||||
|
||||
// amount is negative and $currentamount is smaller than $amount
|
||||
if (bccomp($amount, '0') === -1 && bccomp($compare, $amount) === 1) {
|
||||
Log::debug(sprintf('Max amount to remove is %f', $repetition->currentamount));
|
||||
Log::debug(sprintf('Cannot remove %f from piggy bank #%d ("%s")', $amount, $piggyBank->id, $piggyBank->name));
|
||||
Log::debug(sprintf('New amount is %f', $compare));
|
||||
|
||||
return $compare;
|
||||
}
|
||||
|
||||
return $amount;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param StoredTransactionJournal $event
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function verifyExistence(StoredTransactionJournal $event): bool
|
||||
{
|
||||
/** @var TransactionJournal $journal */
|
||||
$journal = $event->journal;
|
||||
$piggyBankId = $event->piggyBankId;
|
||||
|
||||
/** @var PiggyBank $piggyBank */
|
||||
$piggyBank = $journal->user->piggyBanks()->where('piggy_banks.id', $piggyBankId)->first(['piggy_banks.*']);
|
||||
|
||||
if (is_null($piggyBank)) {
|
||||
Log::error('No such piggy bank!');
|
||||
|
||||
return false;
|
||||
}
|
||||
Log::debug(sprintf('Found piggy bank #%d: "%s"', $piggyBank->id, $piggyBank->name));
|
||||
// update piggy bank rep for date of transaction journal.
|
||||
$repetition = $piggyBank->piggyBankRepetitions()->relevantOnDate($journal->date)->first();
|
||||
if (is_null($repetition)) {
|
||||
Log::error(sprintf('No piggy bank repetition on %s!', $journal->date->format('Y-m-d')));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@@ -17,16 +17,29 @@ namespace FireflyIII\Handlers\Events;
|
||||
use FireflyIII\Events\UpdatedTransactionJournal;
|
||||
use FireflyIII\Models\Rule;
|
||||
use FireflyIII\Models\RuleGroup;
|
||||
use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface;
|
||||
use FireflyIII\Rules\Processor;
|
||||
use FireflyIII\Support\Events\BillScanner;
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* Class UpdatedJournalEventHandler
|
||||
*
|
||||
* @package FireflyIII\Handlers\Events
|
||||
*/
|
||||
class UpdatedJournalEventHandler
|
||||
{
|
||||
/** @var RuleGroupRepositoryInterface */
|
||||
public $repository;
|
||||
|
||||
/**
|
||||
* StoredJournalEventHandler constructor.
|
||||
*/
|
||||
public function __construct(RuleGroupRepositoryInterface $ruleGroupRepository)
|
||||
{
|
||||
$this->repository = $ruleGroupRepository;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method will check all the rules when a journal is updated.
|
||||
@@ -39,16 +52,11 @@ class UpdatedJournalEventHandler
|
||||
{
|
||||
// get all the user's rule groups, with the rules, order by 'order'.
|
||||
$journal = $updatedJournalEvent->journal;
|
||||
$groups = $journal->user->ruleGroups()->where('rule_groups.active', 1)->orderBy('order', 'ASC')->get();
|
||||
//
|
||||
$groups = $this->repository->getActiveGroups($journal->user);
|
||||
|
||||
/** @var RuleGroup $group */
|
||||
foreach ($groups as $group) {
|
||||
$rules = $group->rules()
|
||||
->leftJoin('rule_triggers', 'rules.id', '=', 'rule_triggers.rule_id')
|
||||
->where('rule_triggers.trigger_type', 'user_action')
|
||||
->where('rule_triggers.trigger_value', 'update-journal')
|
||||
->where('rules.active', 1)
|
||||
->get(['rules.*']);
|
||||
$rules = $this->repository->getActiveUpdateRules($group);
|
||||
/** @var Rule $rule */
|
||||
foreach ($rules as $rule) {
|
||||
$processor = Processor::make($rule);
|
||||
|
@@ -15,8 +15,9 @@ namespace FireflyIII\Handlers\Events;
|
||||
|
||||
use FireflyIII\Events\RegisteredUser;
|
||||
use FireflyIII\Events\RequestedNewPassword;
|
||||
use FireflyIII\Mail\RegisteredUser as RegisteredUserMail;
|
||||
use FireflyIII\Mail\RequestedNewPassword as RequestedNewPasswordMail;
|
||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
||||
use Illuminate\Mail\Message;
|
||||
use Log;
|
||||
use Mail;
|
||||
use Swift_TransportException;
|
||||
@@ -68,14 +69,12 @@ class UserEventHandler
|
||||
|
||||
// send email.
|
||||
try {
|
||||
Mail::send(
|
||||
['emails.password-html', 'emails.password-text'], ['url' => $url, 'ip' => $ipAddress], function (Message $message) use ($email) {
|
||||
$message->to($email, $email)->subject('Your password reset request');
|
||||
}
|
||||
);
|
||||
Mail::to($email)->send(new RequestedNewPasswordMail($url, $ipAddress));
|
||||
// @codeCoverageIgnoreStart
|
||||
} catch (Swift_TransportException $e) {
|
||||
Log::error($e->getMessage());
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -93,22 +92,21 @@ class UserEventHandler
|
||||
|
||||
$sendMail = env('SEND_REGISTRATION_MAIL', true);
|
||||
if (!$sendMail) {
|
||||
return true;
|
||||
return true; // @codeCoverageIgnore
|
||||
}
|
||||
// get the email address
|
||||
$email = $event->user->email;
|
||||
$address = route('index');
|
||||
$ipAddress = $event->ipAddress;
|
||||
|
||||
// send email.
|
||||
try {
|
||||
Mail::send(
|
||||
['emails.registered-html', 'emails.registered-text'], ['address' => $address, 'ip' => $ipAddress], function (Message $message) use ($email) {
|
||||
$message->to($email, $email)->subject('Welcome to Firefly III!');
|
||||
}
|
||||
);
|
||||
Mail::to($email)->send(new RegisteredUserMail($address, $ipAddress));
|
||||
// @codeCoverageIgnoreStart
|
||||
} catch (Swift_TransportException $e) {
|
||||
Log::error($e->getMessage());
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@@ -16,10 +16,11 @@ namespace FireflyIII\Helpers\Attachments;
|
||||
use Crypt;
|
||||
use FireflyIII\Models\Attachment;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\MessageBag;
|
||||
use Storage;
|
||||
use Symfony\Component\HttpFoundation\File\UploadedFile;
|
||||
|
||||
use Log;
|
||||
/**
|
||||
* Class AttachmentHelper
|
||||
*
|
||||
@@ -28,6 +29,8 @@ use Symfony\Component\HttpFoundation\File\UploadedFile;
|
||||
class AttachmentHelper implements AttachmentHelperInterface
|
||||
{
|
||||
|
||||
/** @var Collection */
|
||||
public $attachments;
|
||||
/** @var MessageBag */
|
||||
public $errors;
|
||||
/** @var MessageBag */
|
||||
@@ -49,6 +52,7 @@ class AttachmentHelper implements AttachmentHelperInterface
|
||||
$this->allowedMimes = (array)config('firefly.allowedMimes');
|
||||
$this->errors = new MessageBag;
|
||||
$this->messages = new MessageBag;
|
||||
$this->attachments = new Collection;
|
||||
$this->uploadDisk = Storage::disk('upload');
|
||||
}
|
||||
|
||||
@@ -64,6 +68,14 @@ class AttachmentHelper implements AttachmentHelperInterface
|
||||
return $path;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Collection
|
||||
*/
|
||||
public function getAttachments(): Collection
|
||||
{
|
||||
return $this->attachments;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return MessageBag
|
||||
*/
|
||||
@@ -110,7 +122,7 @@ class AttachmentHelper implements AttachmentHelperInterface
|
||||
$md5 = md5_file($file->getRealPath());
|
||||
$name = $file->getClientOriginalName();
|
||||
$class = get_class($model);
|
||||
$count = auth()->user()->attachments()->where('md5', $md5)->where('attachable_id', $model->id)->where('attachable_type', $class)->count();
|
||||
$count = $model->user->attachments()->where('md5', $md5)->where('attachable_id', $model->id)->where('attachable_type', $class)->count();
|
||||
|
||||
if ($count > 0) {
|
||||
$msg = (string)trans('validation.file_already_attached', ['name' => $name]);
|
||||
@@ -137,7 +149,7 @@ class AttachmentHelper implements AttachmentHelperInterface
|
||||
}
|
||||
|
||||
$attachment = new Attachment; // create Attachment object.
|
||||
$attachment->user()->associate(auth()->user());
|
||||
$attachment->user()->associate($model->user);
|
||||
$attachment->attachable()->associate($model);
|
||||
$attachment->md5 = md5_file($file->getRealPath());
|
||||
$attachment->filename = $file->getClientOriginalName();
|
||||
@@ -156,6 +168,7 @@ class AttachmentHelper implements AttachmentHelperInterface
|
||||
|
||||
$attachment->uploaded = 1; // update attachment
|
||||
$attachment->save();
|
||||
$this->attachments->push($attachment);
|
||||
|
||||
$name = e($file->getClientOriginalName()); // add message:
|
||||
$msg = (string)trans('validation.file_attached', ['name' => $name]);
|
||||
@@ -188,6 +201,7 @@ class AttachmentHelper implements AttachmentHelperInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @param UploadedFile $file
|
||||
*
|
||||
* @return bool
|
||||
@@ -218,7 +232,7 @@ class AttachmentHelper implements AttachmentHelperInterface
|
||||
return false;
|
||||
}
|
||||
if (!$this->validSize($file)) {
|
||||
return false;
|
||||
return false; // @codeCoverageIgnore
|
||||
}
|
||||
if ($this->hasFile($file, $model)) {
|
||||
return false;
|
||||
|
@@ -15,6 +15,7 @@ namespace FireflyIII\Helpers\Attachments;
|
||||
|
||||
use FireflyIII\Models\Attachment;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\MessageBag;
|
||||
|
||||
/**
|
||||
@@ -32,6 +33,11 @@ interface AttachmentHelperInterface
|
||||
*/
|
||||
public function getAttachmentLocation(Attachment $attachment): string;
|
||||
|
||||
/**
|
||||
* @return Collection
|
||||
*/
|
||||
public function getAttachments(): Collection;
|
||||
|
||||
/**
|
||||
* @return MessageBag
|
||||
*/
|
||||
|
@@ -12,8 +12,11 @@ declare(strict_types=1);
|
||||
namespace FireflyIII\Helpers\Chart;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use FireflyIII\Generator\Report\Support;
|
||||
use FireflyIII\Helpers\Collector\JournalCollectorInterface;
|
||||
use FireflyIII\Helpers\Filter\NegativeAmountFilter;
|
||||
use FireflyIII\Helpers\Filter\OpposingAccountFilter;
|
||||
use FireflyIII\Helpers\Filter\PositiveAmountFilter;
|
||||
use FireflyIII\Helpers\Filter\TransferFilter;
|
||||
use FireflyIII\Models\Tag;
|
||||
use FireflyIII\Models\Transaction;
|
||||
use FireflyIII\Models\TransactionType;
|
||||
@@ -91,6 +94,7 @@ class MetaPieChart implements MetaPieChartInterface
|
||||
if ($this->collectOtherObjects && $direction === 'expense') {
|
||||
/** @var JournalCollectorInterface $collector */
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setUser($this->user);
|
||||
$collector->setAccounts($this->accounts)->setRange($this->start, $this->end)->setTypes([TransactionType::WITHDRAWAL]);
|
||||
$journals = $collector->getJournals();
|
||||
$sum = strval($journals->sum('transaction_amount'));
|
||||
@@ -102,6 +106,7 @@ class MetaPieChart implements MetaPieChartInterface
|
||||
if ($this->collectOtherObjects && $direction === 'income') {
|
||||
/** @var JournalCollectorInterface $collector */
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setUser($this->user);
|
||||
$collector->setAccounts($this->accounts)->setRange($this->start, $this->end)->setTypes([TransactionType::DEPOSIT]);
|
||||
$journals = $collector->getJournals();
|
||||
$sum = strval($journals->sum('transaction_amount'));
|
||||
@@ -114,6 +119,8 @@ class MetaPieChart implements MetaPieChartInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param Collection $accounts
|
||||
*
|
||||
* @return MetaPieChartInterface
|
||||
@@ -126,6 +133,8 @@ class MetaPieChart implements MetaPieChartInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param Collection $budgets
|
||||
*
|
||||
* @return MetaPieChartInterface
|
||||
@@ -138,6 +147,8 @@ class MetaPieChart implements MetaPieChartInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param Collection $categories
|
||||
*
|
||||
* @return MetaPieChartInterface
|
||||
@@ -150,6 +161,8 @@ class MetaPieChart implements MetaPieChartInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param bool $collectOtherObjects
|
||||
*
|
||||
* @return MetaPieChartInterface
|
||||
@@ -162,6 +175,8 @@ class MetaPieChart implements MetaPieChartInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param Carbon $end
|
||||
*
|
||||
* @return MetaPieChartInterface
|
||||
@@ -174,6 +189,8 @@ class MetaPieChart implements MetaPieChartInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param Carbon $start
|
||||
*
|
||||
* @return MetaPieChartInterface
|
||||
@@ -186,6 +203,8 @@ class MetaPieChart implements MetaPieChartInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param Collection $tags
|
||||
*
|
||||
* @return MetaPieChartInterface
|
||||
@@ -198,6 +217,8 @@ class MetaPieChart implements MetaPieChartInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param User $user
|
||||
*
|
||||
* @return MetaPieChartInterface
|
||||
@@ -209,23 +230,32 @@ class MetaPieChart implements MetaPieChartInterface
|
||||
return $this;
|
||||
}
|
||||
|
||||
protected function getTransactions(string $direction)
|
||||
/**
|
||||
* @param string $direction
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
protected function getTransactions(string $direction): Collection
|
||||
{
|
||||
$types = [TransactionType::DEPOSIT, TransactionType::TRANSFER];
|
||||
$modifier = -1;
|
||||
if ($direction === 'expense') {
|
||||
$types = [TransactionType::WITHDRAWAL, TransactionType::TRANSFER];
|
||||
$modifier = 1;
|
||||
}
|
||||
/** @var JournalCollectorInterface $collector */
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$types = [TransactionType::DEPOSIT, TransactionType::TRANSFER];
|
||||
$collector->addFilter(NegativeAmountFilter::class);
|
||||
if ($direction === 'expense') {
|
||||
$types = [TransactionType::WITHDRAWAL, TransactionType::TRANSFER];
|
||||
$collector->addFilter(PositiveAmountFilter::class);
|
||||
$collector->removeFilter(NegativeAmountFilter::class);
|
||||
}
|
||||
|
||||
$collector->setUser($this->user);
|
||||
$collector->setAccounts($this->accounts);
|
||||
$collector->setRange($this->start, $this->end);
|
||||
$collector->setTypes($types);
|
||||
$collector->withOpposingAccount();
|
||||
$collector->addFilter(OpposingAccountFilter::class);
|
||||
|
||||
if ($direction === 'income') {
|
||||
$collector->disableFilter();
|
||||
$collector->removeFilter(TransferFilter::class);
|
||||
}
|
||||
|
||||
if ($this->budgets->count() > 0) {
|
||||
@@ -240,11 +270,7 @@ class MetaPieChart implements MetaPieChartInterface
|
||||
$collector->withBudgetInformation();
|
||||
}
|
||||
|
||||
$accountIds = $this->accounts->pluck('id')->toArray();
|
||||
$transactions = $collector->getJournals();
|
||||
$set = Support::filterTransactions($transactions, $accountIds, $modifier);
|
||||
|
||||
return $set;
|
||||
return $collector->getJournals();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -286,6 +312,7 @@ class MetaPieChart implements MetaPieChartInterface
|
||||
$chartData = [];
|
||||
$names = [];
|
||||
$repository = app($this->repositories[$type]);
|
||||
$repository->setUser($this->user);
|
||||
foreach ($array as $objectId => $amount) {
|
||||
if (!isset($names[$objectId])) {
|
||||
$object = $repository->find(intval($objectId));
|
||||
@@ -300,6 +327,11 @@ class MetaPieChart implements MetaPieChartInterface
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Collection $set
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function groupByTag(Collection $set): array
|
||||
{
|
||||
$grouped = [];
|
||||
|
@@ -18,12 +18,17 @@ use Carbon\Carbon;
|
||||
use Crypt;
|
||||
use DB;
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Helpers\Filter\FilterInterface;
|
||||
use FireflyIII\Helpers\Filter\InternalTransferFilter;
|
||||
use FireflyIII\Helpers\Filter\NegativeAmountFilter;
|
||||
use FireflyIII\Helpers\Filter\OpposingAccountFilter;
|
||||
use FireflyIII\Helpers\Filter\PositiveAmountFilter;
|
||||
use FireflyIII\Helpers\Filter\TransferFilter;
|
||||
use FireflyIII\Models\AccountType;
|
||||
use FireflyIII\Models\Budget;
|
||||
use FireflyIII\Models\Category;
|
||||
use FireflyIII\Models\Tag;
|
||||
use FireflyIII\Models\Transaction;
|
||||
use FireflyIII\Models\TransactionType;
|
||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Contracts\Encryption\DecryptException;
|
||||
@@ -74,6 +79,9 @@ class JournalCollector implements JournalCollectorInterface
|
||||
private $filterInternalTransfers;
|
||||
/** @var bool */
|
||||
private $filterTransfers = false;
|
||||
/** @var array */
|
||||
private $filters = [InternalTransferFilter::class];
|
||||
|
||||
/** @var bool */
|
||||
private $joinedBudget = false;
|
||||
/** @var bool */
|
||||
@@ -95,6 +103,22 @@ class JournalCollector implements JournalCollectorInterface
|
||||
/** @var User */
|
||||
private $user;
|
||||
|
||||
/**
|
||||
* @param string $filter
|
||||
*
|
||||
* @return JournalCollectorInterface
|
||||
*/
|
||||
public function addFilter(string $filter): JournalCollectorInterface
|
||||
{
|
||||
$interfaces = class_implements($filter);
|
||||
if (in_array(FilterInterface::class, $interfaces)) {
|
||||
Log::debug(sprintf('Enabled filter %s', $filter));
|
||||
$this->filters[] = $filter;
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
* @throws FireflyException
|
||||
@@ -119,36 +143,6 @@ class JournalCollector implements JournalCollectorInterface
|
||||
return $this->count;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return JournalCollectorInterface
|
||||
*/
|
||||
public function disableFilter(): JournalCollectorInterface
|
||||
{
|
||||
$this->filterTransfers = false;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return JournalCollectorInterface
|
||||
*/
|
||||
public function disableInternalFilter(): JournalCollectorInterface
|
||||
{
|
||||
$this->filterInternalTransfers = false;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return JournalCollectorInterface
|
||||
*/
|
||||
public function enableInternalFilter(): JournalCollectorInterface
|
||||
{
|
||||
$this->filterInternalTransfers = true;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Collection
|
||||
*/
|
||||
@@ -157,14 +151,9 @@ class JournalCollector implements JournalCollectorInterface
|
||||
$this->run = true;
|
||||
/** @var Collection $set */
|
||||
$set = $this->query->get(array_values($this->fields));
|
||||
Log::debug(sprintf('Count of set is %d', $set->count()));
|
||||
$set = $this->filterTransfers($set);
|
||||
Log::debug(sprintf('Count of set after filterTransfers() is %d', $set->count()));
|
||||
|
||||
// possibly filter "internal" transfers:
|
||||
$set = $this->filterInternalTransfers($set);
|
||||
Log::debug(sprintf('Count of set after filterInternalTransfers() is %d', $set->count()));
|
||||
|
||||
// run all filters:
|
||||
$set = $this->filter($set);
|
||||
|
||||
// loop for decryption.
|
||||
$set->each(
|
||||
@@ -204,6 +193,22 @@ class JournalCollector implements JournalCollectorInterface
|
||||
return $journals;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $filter
|
||||
*
|
||||
* @return JournalCollectorInterface
|
||||
*/
|
||||
public function removeFilter(string $filter): JournalCollectorInterface
|
||||
{
|
||||
$key = array_search($filter, $this->filters, true);
|
||||
if (!($key === false)) {
|
||||
Log::debug(sprintf('Removed filter %s', $filter));
|
||||
unset($this->filters[$key]);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Collection $accounts
|
||||
*
|
||||
@@ -219,6 +224,7 @@ class JournalCollector implements JournalCollectorInterface
|
||||
}
|
||||
|
||||
if ($accounts->count() > 1) {
|
||||
$this->addFilter(TransferFilter::class);
|
||||
$this->filterTransfers = true;
|
||||
}
|
||||
|
||||
@@ -242,6 +248,7 @@ class JournalCollector implements JournalCollectorInterface
|
||||
}
|
||||
|
||||
if ($accounts->count() > 1) {
|
||||
$this->addFilter(TransferFilter::class);
|
||||
$this->filterTransfers = true;
|
||||
}
|
||||
|
||||
@@ -464,7 +471,9 @@ class JournalCollector implements JournalCollectorInterface
|
||||
*/
|
||||
public function setUser(User $user)
|
||||
{
|
||||
Log::debug(sprintf('Journal collector now collecting for user #%d', $user->id));
|
||||
$this->user = $user;
|
||||
$this->startQuery();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -472,6 +481,7 @@ class JournalCollector implements JournalCollectorInterface
|
||||
*/
|
||||
public function startQuery()
|
||||
{
|
||||
Log::debug('journalCollector::startQuery');
|
||||
/** @var EloquentBuilder $query */
|
||||
$query = Transaction::leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
|
||||
->leftJoin('transaction_currencies', 'transaction_currencies.id', 'transaction_journals.transaction_currency_id')
|
||||
@@ -560,79 +570,23 @@ class JournalCollector implements JournalCollectorInterface
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
private function filterInternalTransfers(Collection $set): Collection
|
||||
private function filter(Collection $set): Collection
|
||||
{
|
||||
if ($this->filterInternalTransfers === false) {
|
||||
Log::debug('Did NO filtering for internal transfers on given set.');
|
||||
|
||||
return $set;
|
||||
}
|
||||
if ($this->joinedOpposing === false) {
|
||||
Log::info('Cannot filter internal transfers because no opposing information is present.');
|
||||
|
||||
return $set;
|
||||
}
|
||||
|
||||
$accountIds = $this->accountIds;
|
||||
$set = $set->filter(
|
||||
function (Transaction $transaction) use ($accountIds) {
|
||||
// both id's in $accountids?
|
||||
if (in_array($transaction->account_id, $accountIds) && in_array($transaction->opposing_account_id, $accountIds)) {
|
||||
Log::debug(
|
||||
sprintf(
|
||||
'Transaction #%d has #%d and #%d in set, so removed',
|
||||
$transaction->id, $transaction->account_id, $transaction->opposing_account_id
|
||||
), $accountIds
|
||||
);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return $transaction;
|
||||
|
||||
// create all possible filters:
|
||||
$filters = [
|
||||
InternalTransferFilter::class => new InternalTransferFilter($this->accountIds),
|
||||
OpposingAccountFilter::class => new OpposingAccountFilter($this->accountIds),
|
||||
TransferFilter::class => new TransferFilter,
|
||||
PositiveAmountFilter::class => new PositiveAmountFilter,
|
||||
NegativeAmountFilter::class => new NegativeAmountFilter,
|
||||
];
|
||||
Log::debug(sprintf('Will run %d filters on the set.', count($this->filters)));
|
||||
foreach ($this->filters as $enabled) {
|
||||
if (isset($filters[$enabled])) {
|
||||
Log::debug(sprintf('Before filter %s: %d', $enabled, $set->count()));
|
||||
$set = $filters[$enabled]->filter($set);
|
||||
Log::debug(sprintf('After filter %s: %d', $enabled, $set->count()));
|
||||
}
|
||||
);
|
||||
|
||||
return $set;
|
||||
}
|
||||
|
||||
/**
|
||||
* If the set of accounts used by the collector includes more than one asset
|
||||
* account, chances are the set include double entries: transfers get selected
|
||||
* on both the source, and then again on the destination account.
|
||||
*
|
||||
* This method filters them out by removing transfers that have been selected twice.
|
||||
*
|
||||
* @param Collection $set
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
private function filterTransfers(Collection $set): Collection
|
||||
{
|
||||
if ($this->filterTransfers) {
|
||||
$count = [];
|
||||
$new = new Collection;
|
||||
/** @var Transaction $transaction */
|
||||
foreach ($set as $transaction) {
|
||||
if ($transaction->transaction_type_type !== TransactionType::TRANSFER) {
|
||||
$new->push($transaction);
|
||||
continue;
|
||||
}
|
||||
// make property string:
|
||||
$journalId = $transaction->transaction_journal_id;
|
||||
$amount = Steam::positive($transaction->transaction_amount);
|
||||
$accountIds = [intval($transaction->account_id), intval($transaction->opposing_account_id)];
|
||||
sort($accountIds);
|
||||
$key = $journalId . '-' . join(',', $accountIds) . '-' . $amount;
|
||||
Log::debug(sprintf('Key is %s', $key));
|
||||
if (!isset($count[$key])) {
|
||||
// not yet counted? add to new set and count it:
|
||||
$new->push($transaction);
|
||||
$count[$key] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
return $new;
|
||||
}
|
||||
|
||||
return $set;
|
||||
|
@@ -28,26 +28,18 @@ use Illuminate\Support\Collection;
|
||||
*/
|
||||
interface JournalCollectorInterface
|
||||
{
|
||||
/**
|
||||
* @param string $filter
|
||||
*
|
||||
* @return JournalCollectorInterface
|
||||
*/
|
||||
public function addFilter(string $filter): JournalCollectorInterface;
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function count(): int;
|
||||
|
||||
/**
|
||||
* @return JournalCollectorInterface
|
||||
*/
|
||||
public function disableFilter(): JournalCollectorInterface;
|
||||
|
||||
/**
|
||||
* @return JournalCollectorInterface
|
||||
*/
|
||||
public function disableInternalFilter(): JournalCollectorInterface;
|
||||
|
||||
/**
|
||||
* @return JournalCollectorInterface
|
||||
*/
|
||||
public function enableInternalFilter(): JournalCollectorInterface;
|
||||
|
||||
/**
|
||||
* @return Collection
|
||||
*/
|
||||
@@ -58,6 +50,13 @@ interface JournalCollectorInterface
|
||||
*/
|
||||
public function getPaginatedJournals(): LengthAwarePaginator;
|
||||
|
||||
/**
|
||||
* @param string $filter
|
||||
*
|
||||
* @return JournalCollectorInterface
|
||||
*/
|
||||
public function removeFilter(string $filter): JournalCollectorInterface;
|
||||
|
||||
/**
|
||||
* @param Collection $accounts
|
||||
*
|
||||
|
56
app/Helpers/Filter/AmountFilter.php
Normal file
56
app/Helpers/Filter/AmountFilter.php
Normal file
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
/**
|
||||
* AmountFilter.php
|
||||
* Copyright (c) 2017 thegrumpydictator@gmail.com
|
||||
* This software may be modified and distributed under the terms of the Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Helpers\Filter;
|
||||
|
||||
use FireflyIII\Models\Transaction;
|
||||
use Illuminate\Support\Collection;
|
||||
use Log;
|
||||
|
||||
/**
|
||||
* Class AmountFilter
|
||||
*
|
||||
* This filter removes transactions with either a positive amount ($parameters = 1) or a negative amount
|
||||
* ($parameter = -1). This is helpful when a Collection has you with both transactions in a journal.
|
||||
*
|
||||
* @package FireflyIII\Helpers\Filter
|
||||
*/
|
||||
class AmountFilter implements FilterInterface
|
||||
{
|
||||
/** @var int */
|
||||
private $modifier = 0;
|
||||
|
||||
public function __construct(int $modifier)
|
||||
{
|
||||
$this->modifier = $modifier;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Collection $set
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function filter(Collection $set): Collection
|
||||
{
|
||||
return $set->filter(
|
||||
function (Transaction $transaction) {
|
||||
// remove by amount
|
||||
if (bccomp($transaction->transaction_amount, '0') === $this->modifier) {
|
||||
Log::debug(sprintf('Filtered #%d because amount is %f.', $transaction->id, $transaction->transaction_amount));
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
return $transaction;
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
34
app/Helpers/Filter/EmptyFilter.php
Normal file
34
app/Helpers/Filter/EmptyFilter.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
/**
|
||||
* EmptyFilter.php
|
||||
* Copyright (c) 2017 thegrumpydictator@gmail.com
|
||||
* This software may be modified and distributed under the terms of the Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Helpers\Filter;
|
||||
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
/**
|
||||
* Class EmptyFilter
|
||||
*
|
||||
* @package FireflyIII\Helpers\Filter
|
||||
*/
|
||||
class EmptyFilter implements FilterInterface
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* @param Collection $set
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function filter(Collection $set): Collection
|
||||
{
|
||||
return $set;
|
||||
}
|
||||
}
|
26
app/Helpers/Filter/FilterInterface.php
Normal file
26
app/Helpers/Filter/FilterInterface.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* FilterInterface.php
|
||||
* Copyright (c) 2017 thegrumpydictator@gmail.com
|
||||
* This software may be modified and distributed under the terms of the Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Helpers\Filter;
|
||||
|
||||
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
interface FilterInterface
|
||||
{
|
||||
/**
|
||||
* @param Collection $set
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function filter(Collection $set): Collection;
|
||||
|
||||
}
|
73
app/Helpers/Filter/InternalTransferFilter.php
Normal file
73
app/Helpers/Filter/InternalTransferFilter.php
Normal file
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
/**
|
||||
* InternalTransferFilter.php
|
||||
* Copyright (c) 2017 thegrumpydictator@gmail.com
|
||||
* This software may be modified and distributed under the terms of the Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Helpers\Filter;
|
||||
|
||||
use FireflyIII\Models\Transaction;
|
||||
use Illuminate\Support\Collection;
|
||||
use Log;
|
||||
|
||||
/**
|
||||
* Class InternalTransferFilter
|
||||
*
|
||||
* This filter removes any filters that are from A to B or from B to A given a set of
|
||||
* account id's (in $parameters) where A and B are mentioned. So transfers between the mentioned
|
||||
* accounts will be removed.
|
||||
*
|
||||
* @package FireflyIII\Helpers\Filter
|
||||
*/
|
||||
class InternalTransferFilter implements FilterInterface
|
||||
{
|
||||
/** @var array */
|
||||
private $accounts = [];
|
||||
|
||||
/**
|
||||
* InternalTransferFilter constructor.
|
||||
*
|
||||
* @param array $accounts
|
||||
*/
|
||||
public function __construct(array $accounts)
|
||||
{
|
||||
$this->accounts = $accounts;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Collection $set
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function filter(Collection $set): Collection
|
||||
{
|
||||
return $set->filter(
|
||||
function (Transaction $transaction) {
|
||||
if (is_null($transaction->opposing_account_id)) {
|
||||
return $transaction;
|
||||
}
|
||||
// both id's in $parameters?
|
||||
if (in_array($transaction->account_id, $this->accounts) && in_array($transaction->opposing_account_id, $this->accounts)) {
|
||||
Log::debug(
|
||||
sprintf(
|
||||
'Transaction #%d has #%d and #%d in set, so removed',
|
||||
$transaction->id, $transaction->account_id, $transaction->opposing_account_id
|
||||
), $this->accounts
|
||||
);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return $transaction;
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
}
|
||||
}
|
47
app/Helpers/Filter/NegativeAmountFilter.php
Normal file
47
app/Helpers/Filter/NegativeAmountFilter.php
Normal file
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
/**
|
||||
* NegativeAmountFilter.php
|
||||
* Copyright (c) 2017 thegrumpydictator@gmail.com
|
||||
* This software may be modified and distributed under the terms of the Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Helpers\Filter;
|
||||
|
||||
use FireflyIII\Models\Transaction;
|
||||
use Illuminate\Support\Collection;
|
||||
use Log;
|
||||
|
||||
/**
|
||||
* Class NegativeAmountFilter
|
||||
*
|
||||
* This filter removes entries with a negative amount (the original modifier is -1).
|
||||
*
|
||||
* @package FireflyIII\Helpers\Filter
|
||||
*/
|
||||
class NegativeAmountFilter implements FilterInterface
|
||||
{
|
||||
/**
|
||||
* @param Collection $set
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function filter(Collection $set): Collection
|
||||
{
|
||||
return $set->filter(
|
||||
function (Transaction $transaction) {
|
||||
// remove by amount
|
||||
if (bccomp($transaction->transaction_amount, '0') === -1) {
|
||||
Log::debug(sprintf('Filtered #%d because amount is %f.', $transaction->id, $transaction->transaction_amount));
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
return $transaction;
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
63
app/Helpers/Filter/OpposingAccountFilter.php
Normal file
63
app/Helpers/Filter/OpposingAccountFilter.php
Normal file
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
/**
|
||||
* OpposingAccountFilter.php
|
||||
* Copyright (c) 2017 thegrumpydictator@gmail.com
|
||||
* This software may be modified and distributed under the terms of the Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Helpers\Filter;
|
||||
|
||||
|
||||
use FireflyIII\Models\Transaction;
|
||||
use Illuminate\Support\Collection;
|
||||
use Log;
|
||||
|
||||
/**
|
||||
* Class OpposingAccountFilter
|
||||
*
|
||||
* This filter is similar to the internal transfer filter but only removes transactions when the opposing account is
|
||||
* amongst $parameters (list of account ID's).
|
||||
*
|
||||
* @package FireflyIII\Helpers\Filter
|
||||
*/
|
||||
class OpposingAccountFilter implements FilterInterface
|
||||
{
|
||||
/** @var array */
|
||||
private $accounts = [];
|
||||
|
||||
/**
|
||||
* InternalTransferFilter constructor.
|
||||
*
|
||||
* @param array $accounts
|
||||
*/
|
||||
public function __construct(array $accounts)
|
||||
{
|
||||
$this->accounts = $accounts;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Collection $set
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function filter(Collection $set): Collection
|
||||
{
|
||||
return $set->filter(
|
||||
function (Transaction $transaction) {
|
||||
$opposing = $transaction->opposing_account_id;
|
||||
// remove internal transfer
|
||||
if (in_array($opposing, $this->accounts)) {
|
||||
Log::debug(sprintf('Filtered #%d because its opposite is in accounts.', $transaction->id), $this->accounts);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
return $transaction;
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
50
app/Helpers/Filter/PositiveAmountFilter.php
Normal file
50
app/Helpers/Filter/PositiveAmountFilter.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
/**
|
||||
* PositiveAmountFilter.php
|
||||
* Copyright (c) 2017 thegrumpydictator@gmail.com
|
||||
* This software may be modified and distributed under the terms of the Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Helpers\Filter;
|
||||
|
||||
use FireflyIII\Models\Transaction;
|
||||
use Illuminate\Support\Collection;
|
||||
use Log;
|
||||
|
||||
/**
|
||||
* Class PositiveAmountFilter
|
||||
*
|
||||
* This filter removes entries with a negative amount (the original modifier is -1).
|
||||
*
|
||||
* This filter removes transactions with either a positive amount ($parameters = 1) or a negative amount
|
||||
* ($parameter = -1). This is helpful when a Collection has you with both transactions in a journal.
|
||||
*
|
||||
* @package FireflyIII\Helpers\Filter
|
||||
*/
|
||||
class PositiveAmountFilter implements FilterInterface
|
||||
{
|
||||
/**
|
||||
* @param Collection $set
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function filter(Collection $set): Collection
|
||||
{
|
||||
return $set->filter(
|
||||
function (Transaction $transaction) {
|
||||
// remove by amount
|
||||
if (bccomp($transaction->transaction_amount, '0') === 1) {
|
||||
Log::debug(sprintf('Filtered #%d because amount is %f.', $transaction->id, $transaction->transaction_amount));
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
return $transaction;
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
58
app/Helpers/Filter/TransferFilter.php
Normal file
58
app/Helpers/Filter/TransferFilter.php
Normal file
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
/**
|
||||
* TransferFilter.php
|
||||
* Copyright (c) 2017 thegrumpydictator@gmail.com
|
||||
* This software may be modified and distributed under the terms of the Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Helpers\Filter;
|
||||
|
||||
use FireflyIII\Models\Transaction;
|
||||
use FireflyIII\Models\TransactionType;
|
||||
use Illuminate\Support\Collection;
|
||||
use Steam;
|
||||
|
||||
/**
|
||||
* Class TransferFilter
|
||||
*
|
||||
* This filter removes any transfers that are in the collection twice (from A to B and from B to A).
|
||||
*
|
||||
* @package FireflyIII\Helpers\Filter
|
||||
*/
|
||||
class TransferFilter implements FilterInterface
|
||||
{
|
||||
/**
|
||||
* @param Collection $set
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function filter(Collection $set): Collection
|
||||
{
|
||||
$count = [];
|
||||
$new = new Collection;
|
||||
/** @var Transaction $transaction */
|
||||
foreach ($set as $transaction) {
|
||||
if ($transaction->transaction_type_type !== TransactionType::TRANSFER) {
|
||||
$new->push($transaction);
|
||||
continue;
|
||||
}
|
||||
// make property string:
|
||||
$journalId = $transaction->transaction_journal_id;
|
||||
$amount = Steam::positive($transaction->transaction_amount);
|
||||
$accountIds = [intval($transaction->account_id), intval($transaction->opposing_account_id)];
|
||||
sort($accountIds);
|
||||
$key = $journalId . '-' . join(',', $accountIds) . '-' . $amount;
|
||||
if (!isset($count[$key])) {
|
||||
// not yet counted? add to new set and count it:
|
||||
$new->push($transaction);
|
||||
$count[$key] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
return $new;
|
||||
}
|
||||
}
|
@@ -15,6 +15,7 @@ namespace FireflyIII\Http\Controllers;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use FireflyIII\Helpers\Collector\JournalCollectorInterface;
|
||||
use FireflyIII\Helpers\Filter\InternalTransferFilter;
|
||||
use FireflyIII\Http\Requests\CategoryFormRequest;
|
||||
use FireflyIII\Models\AccountType;
|
||||
use FireflyIII\Models\Category;
|
||||
@@ -211,7 +212,7 @@ class CategoryController extends Controller
|
||||
/** @var JournalCollectorInterface $collector */
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setAllAssetAccounts()->setRange($start, $end)->setLimit($pageSize)->setPage($page)->withoutCategory()->withOpposingAccount();
|
||||
$collector->disableInternalFilter();
|
||||
$collector->removeFilter(InternalTransferFilter::class);
|
||||
$journals = $collector->getPaginatedJournals();
|
||||
$journals->setPath('/categories/list/no-category');
|
||||
$count = $journals->getCollection()->count();
|
||||
@@ -294,7 +295,8 @@ class CategoryController extends Controller
|
||||
/** @var JournalCollectorInterface $collector */
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setAllAssetAccounts()->setRange($start, $end)->setLimit($pageSize)->setPage($page)->withOpposingAccount()
|
||||
->setCategory($category)->withBudgetInformation()->withCategoryInformation()->disableInternalFilter();
|
||||
->setCategory($category)->withBudgetInformation()->withCategoryInformation();
|
||||
$collector->removeFilter(InternalTransferFilter::class);
|
||||
$journals = $collector->getPaginatedJournals();
|
||||
$journals->setPath('categories/show/' . $category->id);
|
||||
$count = $journals->getCollection()->count();
|
||||
@@ -402,14 +404,17 @@ class CategoryController extends Controller
|
||||
// count journals without budget in this period:
|
||||
/** @var JournalCollectorInterface $collector */
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setAllAssetAccounts()->setRange($end, $currentEnd)->withoutCategory()->withOpposingAccount()->disableInternalFilter();
|
||||
$collector->setAllAssetAccounts()->setRange($end, $currentEnd)->withoutCategory()
|
||||
->withOpposingAccount();
|
||||
$collector->removeFilter(InternalTransferFilter::class);
|
||||
$count = $collector->getJournals()->count();
|
||||
|
||||
// amount transferred
|
||||
/** @var JournalCollectorInterface $collector */
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setAllAssetAccounts()->setRange($end, $currentEnd)->withoutCategory()
|
||||
->withOpposingAccount()->setTypes([TransactionType::TRANSFER])->disableInternalFilter();
|
||||
->withOpposingAccount()->setTypes([TransactionType::TRANSFER]);
|
||||
$collector->removeFilter(InternalTransferFilter::class);
|
||||
$transferred = Steam::positive($collector->getJournals()->sum('transaction_amount'));
|
||||
|
||||
// amount spent
|
||||
@@ -488,7 +493,8 @@ class CategoryController extends Controller
|
||||
/** @var JournalCollectorInterface $collector */
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setAllAssetAccounts()->setRange($end, $currentEnd)->setCategory($category)
|
||||
->withOpposingAccount()->setTypes([TransactionType::TRANSFER])->disableInternalFilter();
|
||||
->withOpposingAccount()->setTypes([TransactionType::TRANSFER]);
|
||||
$collector->removeFilter(InternalTransferFilter::class);
|
||||
$transferred = Steam::positive($collector->getJournals()->sum('transaction_amount'));
|
||||
|
||||
$entries->push(
|
||||
|
@@ -16,9 +16,11 @@ namespace FireflyIII\Http\Controllers\Chart;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use FireflyIII\Generator\Chart\Basic\GeneratorInterface;
|
||||
use FireflyIII\Generator\Report\Support;
|
||||
use FireflyIII\Helpers\Chart\MetaPieChartInterface;
|
||||
use FireflyIII\Helpers\Collector\JournalCollectorInterface;
|
||||
use FireflyIII\Helpers\Filter\OpposingAccountFilter;
|
||||
use FireflyIII\Helpers\Filter\PositiveAmountFilter;
|
||||
use FireflyIII\Helpers\Filter\TransferFilter;
|
||||
use FireflyIII\Http\Controllers\Controller;
|
||||
use FireflyIII\Models\Budget;
|
||||
use FireflyIII\Models\BudgetLimit;
|
||||
@@ -234,12 +236,15 @@ class BudgetReportController extends Controller
|
||||
/** @var JournalCollectorInterface $collector */
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setAccounts($accounts)->setRange($start, $end)->setTypes([TransactionType::WITHDRAWAL, TransactionType::TRANSFER])
|
||||
->setBudgets($budgets)->withOpposingAccount()->disableFilter();
|
||||
$accountIds = $accounts->pluck('id')->toArray();
|
||||
$transactions = $collector->getJournals();
|
||||
$set = Support::filterExpenses($transactions, $accountIds);
|
||||
->setBudgets($budgets)->withOpposingAccount();
|
||||
$collector->removeFilter(TransferFilter::class);
|
||||
|
||||
return $set;
|
||||
$collector->addFilter(OpposingAccountFilter::class);
|
||||
$collector->addFilter(PositiveAmountFilter::class);
|
||||
|
||||
$transactions = $collector->getJournals();
|
||||
|
||||
return $transactions;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -19,6 +19,10 @@ use FireflyIII\Generator\Chart\Basic\GeneratorInterface;
|
||||
use FireflyIII\Generator\Report\Category\MonthReportGenerator;
|
||||
use FireflyIII\Helpers\Chart\MetaPieChartInterface;
|
||||
use FireflyIII\Helpers\Collector\JournalCollectorInterface;
|
||||
use FireflyIII\Helpers\Filter\NegativeAmountFilter;
|
||||
use FireflyIII\Helpers\Filter\OpposingAccountFilter;
|
||||
use FireflyIII\Helpers\Filter\PositiveAmountFilter;
|
||||
use FireflyIII\Helpers\Filter\TransferFilter;
|
||||
use FireflyIII\Http\Controllers\Controller;
|
||||
use FireflyIII\Models\Category;
|
||||
use FireflyIII\Models\Transaction;
|
||||
@@ -271,12 +275,15 @@ class CategoryReportController extends Controller
|
||||
/** @var JournalCollectorInterface $collector */
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setAccounts($accounts)->setRange($start, $end)->setTypes([TransactionType::WITHDRAWAL, TransactionType::TRANSFER])
|
||||
->setCategories($categories)->withOpposingAccount()->disableFilter();
|
||||
$accountIds = $accounts->pluck('id')->toArray();
|
||||
$transactions = $collector->getJournals();
|
||||
$set = MonthReportGenerator::filterExpenses($transactions, $accountIds);
|
||||
->setCategories($categories)->withOpposingAccount();
|
||||
$collector->removeFilter(TransferFilter::class);
|
||||
|
||||
return $set;
|
||||
$collector->addFilter(OpposingAccountFilter::class);
|
||||
$collector->addFilter(PositiveAmountFilter::class);
|
||||
|
||||
$transactions = $collector->getJournals();
|
||||
|
||||
return $transactions;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -293,11 +300,13 @@ class CategoryReportController extends Controller
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setAccounts($accounts)->setRange($start, $end)->setTypes([TransactionType::DEPOSIT, TransactionType::TRANSFER])
|
||||
->setCategories($categories)->withOpposingAccount();
|
||||
$accountIds = $accounts->pluck('id')->toArray();
|
||||
$transactions = $collector->getJournals();
|
||||
$set = MonthReportGenerator::filterIncome($transactions, $accountIds);
|
||||
|
||||
return $set;
|
||||
$collector->addFilter(OpposingAccountFilter::class);
|
||||
$collector->addFilter(NegativeAmountFilter::class);
|
||||
|
||||
$transactions = $collector->getJournals();
|
||||
|
||||
return $transactions;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -14,9 +14,12 @@ namespace FireflyIII\Http\Controllers\Chart;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use FireflyIII\Generator\Chart\Basic\GeneratorInterface;
|
||||
use FireflyIII\Generator\Report\Tag\MonthReportGenerator;
|
||||
use FireflyIII\Helpers\Chart\MetaPieChartInterface;
|
||||
use FireflyIII\Helpers\Collector\JournalCollectorInterface;
|
||||
use FireflyIII\Helpers\Filter\NegativeAmountFilter;
|
||||
use FireflyIII\Helpers\Filter\OpposingAccountFilter;
|
||||
use FireflyIII\Helpers\Filter\PositiveAmountFilter;
|
||||
use FireflyIII\Helpers\Filter\TransferFilter;
|
||||
use FireflyIII\Http\Controllers\Controller;
|
||||
use FireflyIII\Models\Tag;
|
||||
use FireflyIII\Models\Transaction;
|
||||
@@ -303,12 +306,15 @@ class TagReportController extends Controller
|
||||
/** @var JournalCollectorInterface $collector */
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setAccounts($accounts)->setRange($start, $end)->setTypes([TransactionType::WITHDRAWAL, TransactionType::TRANSFER])
|
||||
->setTags($tags)->withOpposingAccount()->disableFilter();
|
||||
$accountIds = $accounts->pluck('id')->toArray();
|
||||
$transactions = $collector->getJournals();
|
||||
$set = MonthReportGenerator::filterExpenses($transactions, $accountIds);
|
||||
->setTags($tags)->withOpposingAccount();
|
||||
$collector->removeFilter(TransferFilter::class);
|
||||
|
||||
return $set;
|
||||
$collector->addFilter(OpposingAccountFilter::class);
|
||||
$collector->addFilter(PositiveAmountFilter::class);
|
||||
|
||||
$transactions = $collector->getJournals();
|
||||
|
||||
return $transactions;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -325,11 +331,13 @@ class TagReportController extends Controller
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setAccounts($accounts)->setRange($start, $end)->setTypes([TransactionType::DEPOSIT, TransactionType::TRANSFER])
|
||||
->setTags($tags)->withOpposingAccount();
|
||||
$accountIds = $accounts->pluck('id')->toArray();
|
||||
$transactions = $collector->getJournals();
|
||||
$set = MonthReportGenerator::filterIncome($transactions, $accountIds);
|
||||
|
||||
return $set;
|
||||
$collector->addFilter(OpposingAccountFilter::class);
|
||||
$collector->addFilter(NegativeAmountFilter::class);
|
||||
|
||||
$transactions = $collector->getJournals();
|
||||
|
||||
return $transactions;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -56,12 +56,8 @@ class PreferencesController extends Controller
|
||||
*/
|
||||
public function code(Google2FA $google2fa)
|
||||
{
|
||||
$domain = $this->getDomain();
|
||||
$secretKey = 'FIREFLYIII';
|
||||
$secretKey = str_pad($secretKey, intval(pow(2, ceil(log(strlen($secretKey), 2)))), 'X');
|
||||
|
||||
/** @noinspection PhpMethodParametersCountMismatchInspection */
|
||||
$secret = $google2fa->generateSecretKey(16, $secretKey);
|
||||
$domain = $this->getDomain();
|
||||
$secret = $google2fa->generateSecretKey(16);
|
||||
Session::flash('two-factor-secret', $secret);
|
||||
$image = $google2fa->getQRCodeInline('Firefly III at ' . $domain, auth()->user()->email, $secret, 150);
|
||||
|
||||
|
@@ -16,6 +16,7 @@ namespace FireflyIII\Http\Controllers;
|
||||
use Carbon\Carbon;
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Helpers\Collector\JournalCollectorInterface;
|
||||
use FireflyIII\Helpers\Filter\InternalTransferFilter;
|
||||
use FireflyIII\Models\TransactionJournal;
|
||||
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
|
||||
@@ -115,8 +116,8 @@ class TransactionController extends Controller
|
||||
Log::info('Count is zero, search for journals.');
|
||||
/** @var JournalCollectorInterface $collector */
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setAllAssetAccounts()->setRange($start, $end)->setTypes($types)->setLimit($pageSize)->setPage($page)->withOpposingAccount()
|
||||
->disableInternalFilter();
|
||||
$collector->setAllAssetAccounts()->setRange($start, $end)->setTypes($types)->setLimit($pageSize)->setPage($page)->withOpposingAccount();
|
||||
$collector->removeFilter(InternalTransferFilter::class);
|
||||
$journals = $collector->getPaginatedJournals();
|
||||
$journals->setPath('/budgets/list/no-budget');
|
||||
$count = $journals->getCollection()->count();
|
||||
@@ -234,7 +235,8 @@ class TransactionController extends Controller
|
||||
// count journals without budget in this period:
|
||||
/** @var JournalCollectorInterface $collector */
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setAllAssetAccounts()->setRange($end, $currentEnd)->withOpposingAccount()->setTypes($types)->disableInternalFilter();
|
||||
$collector->setAllAssetAccounts()->setRange($end, $currentEnd)->withOpposingAccount()->setTypes($types);
|
||||
$collector->removeFilter(InternalTransferFilter::class);
|
||||
$set = $collector->getJournals();
|
||||
$sum = $set->sum('transaction_amount');
|
||||
$journals = $set->count();
|
||||
|
37
app/Mail/RegisteredUser.php
Normal file
37
app/Mail/RegisteredUser.php
Normal file
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace FireflyIII\Mail;
|
||||
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Mail\Mailable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class RegisteredUser extends Mailable
|
||||
{
|
||||
use Queueable, SerializesModels;
|
||||
/** @var string */
|
||||
public $address;
|
||||
/** @var string */
|
||||
public $ip;
|
||||
|
||||
/**
|
||||
* Create a new message instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(string $address, string $ip)
|
||||
{
|
||||
$this->address = $address;
|
||||
$this->ip = $ip;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the message.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function build()
|
||||
{
|
||||
return $this->view('emails.registered-html')->text('emails.registered-text')->subject('Welcome to Firefly III!');
|
||||
}
|
||||
}
|
38
app/Mail/RequestedNewPassword.php
Normal file
38
app/Mail/RequestedNewPassword.php
Normal file
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
namespace FireflyIII\Mail;
|
||||
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Mail\Mailable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class RequestedNewPassword extends Mailable
|
||||
{
|
||||
use Queueable, SerializesModels;
|
||||
/** @var string */
|
||||
public $ip;
|
||||
/** @var string */
|
||||
public $url;
|
||||
|
||||
/**
|
||||
* RequestedNewPassword constructor.
|
||||
*
|
||||
* @param string $url
|
||||
* @param string $ip
|
||||
*/
|
||||
public function __construct(string $url, string $ip)
|
||||
{
|
||||
$this->url = $url;
|
||||
$this->ip = $ip;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the message.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function build()
|
||||
{
|
||||
return $this->view('emails.password-html')->text('emails.password-text')->subject('Your password reset request');
|
||||
}
|
||||
}
|
@@ -55,6 +55,7 @@ use Illuminate\Support\ServiceProvider;
|
||||
use Twig;
|
||||
use TwigBridge\Extension\Loader\Functions;
|
||||
use Validator;
|
||||
use Illuminate\Foundation\Application;
|
||||
|
||||
/**
|
||||
* Class FireflyServiceProvider
|
||||
@@ -123,7 +124,18 @@ class FireflyServiceProvider extends ServiceProvider
|
||||
$this->app->bind(GeneratorInterface::class, ChartJsGenerator::class);
|
||||
|
||||
// chart builder
|
||||
$this->app->bind(MetaPieChartInterface::class, MetaPieChart::class);
|
||||
$this->app->bind(
|
||||
MetaPieChartInterface::class,
|
||||
function (Application $app) {
|
||||
/** @var MetaPieChart $chart */
|
||||
$chart = app(MetaPieChart::class);
|
||||
if ($app->auth->check()) {
|
||||
$chart->setUser(auth()->user());
|
||||
}
|
||||
|
||||
return $chart;
|
||||
}
|
||||
);
|
||||
|
||||
// other generators
|
||||
$this->app->bind(ProcessorInterface::class, Processor::class);
|
||||
|
@@ -62,7 +62,7 @@ class JournalServiceProvider extends ServiceProvider
|
||||
if ($app->auth->check()) {
|
||||
$collector->setUser(auth()->user());
|
||||
}
|
||||
$collector->startQuery();
|
||||
|
||||
|
||||
return $collector;
|
||||
}
|
||||
|
@@ -106,8 +106,7 @@ class AccountTasker implements AccountTaskerInterface
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setAccounts($accounts)->setRange($start, $end);
|
||||
$collector->setTypes([TransactionType::WITHDRAWAL, TransactionType::TRANSFER])
|
||||
->withOpposingAccount()
|
||||
->enableInternalFilter();
|
||||
->withOpposingAccount();
|
||||
$transactions = $collector->getJournals();
|
||||
$transactions = $transactions->filter(
|
||||
function (Transaction $transaction) {
|
||||
@@ -149,8 +148,7 @@ class AccountTasker implements AccountTaskerInterface
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setAccounts($accounts)->setRange($start, $end);
|
||||
$collector->setTypes([TransactionType::DEPOSIT, TransactionType::TRANSFER])
|
||||
->withOpposingAccount()
|
||||
->enableInternalFilter();
|
||||
->withOpposingAccount();
|
||||
$transactions = $collector->getJournals();
|
||||
$transactions = $transactions->filter(
|
||||
function (Transaction $transaction) {
|
||||
|
@@ -228,8 +228,7 @@ class CategoryRepository implements CategoryRepositoryInterface
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setAccounts($accounts)->setRange($start, $end);
|
||||
$collector->setCategories($categories)->setTypes([TransactionType::WITHDRAWAL, TransactionType::TRANSFER])
|
||||
->withOpposingAccount()
|
||||
->enableInternalFilter();
|
||||
->withOpposingAccount();
|
||||
$transactions = $collector->getJournals();
|
||||
|
||||
// loop transactions:
|
||||
@@ -260,7 +259,7 @@ class CategoryRepository implements CategoryRepositoryInterface
|
||||
/** @var JournalCollectorInterface $collector */
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setAccounts($accounts)->setRange($start, $end)->withOpposingAccount();
|
||||
$collector->setTypes([TransactionType::WITHDRAWAL, TransactionType::TRANSFER])->enableInternalFilter();
|
||||
$collector->setTypes([TransactionType::WITHDRAWAL, TransactionType::TRANSFER]);
|
||||
$collector->withoutCategory();
|
||||
$transactions = $collector->getJournals();
|
||||
$result = [
|
||||
@@ -312,8 +311,7 @@ class CategoryRepository implements CategoryRepositoryInterface
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setAccounts($accounts)->setRange($start, $end);
|
||||
$collector->setCategories($categories)->setTypes([TransactionType::DEPOSIT, TransactionType::TRANSFER])
|
||||
->withOpposingAccount()
|
||||
->enableInternalFilter();
|
||||
->withOpposingAccount();
|
||||
$transactions = $collector->getJournals();
|
||||
|
||||
// loop transactions:
|
||||
@@ -345,7 +343,7 @@ class CategoryRepository implements CategoryRepositoryInterface
|
||||
/** @var JournalCollectorInterface $collector */
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setAccounts($accounts)->setRange($start, $end)->withOpposingAccount();
|
||||
$collector->setTypes([TransactionType::DEPOSIT, TransactionType::TRANSFER])->enableInternalFilter();
|
||||
$collector->setTypes([TransactionType::DEPOSIT, TransactionType::TRANSFER]);
|
||||
$collector->withoutCategory();
|
||||
$transactions = $collector->getJournals();
|
||||
$result = [
|
||||
|
@@ -138,6 +138,16 @@ class JournalRepository implements JournalRepositoryInterface
|
||||
return TransactionType::orderBy('type', 'ASC')->get();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param TransactionJournal $journal
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isTransfer(TransactionJournal $journal): bool
|
||||
{
|
||||
return $journal->transactionType->type === TransactionType::TRANSFER;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param TransactionJournal $journal
|
||||
* @param int $order
|
||||
|
@@ -27,6 +27,7 @@ use Illuminate\Support\MessageBag;
|
||||
*/
|
||||
interface JournalRepositoryInterface
|
||||
{
|
||||
|
||||
/**
|
||||
* @param TransactionJournal $journal
|
||||
* @param TransactionType $type
|
||||
@@ -67,6 +68,13 @@ interface JournalRepositoryInterface
|
||||
*/
|
||||
public function getTransactionTypes(): Collection;
|
||||
|
||||
/**
|
||||
* @param TransactionJournal $journal
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isTransfer(TransactionJournal $journal): bool;
|
||||
|
||||
/**
|
||||
* @param TransactionJournal $journal
|
||||
* @param int $order
|
||||
|
@@ -18,8 +18,11 @@ use Carbon\Carbon;
|
||||
use FireflyIII\Models\Note;
|
||||
use FireflyIII\Models\PiggyBank;
|
||||
use FireflyIII\Models\PiggyBankEvent;
|
||||
use FireflyIII\Models\PiggyBankRepetition;
|
||||
use FireflyIII\Models\TransactionJournal;
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Support\Collection;
|
||||
use Log;
|
||||
|
||||
/**
|
||||
* Class PiggyBankRepository
|
||||
@@ -51,6 +54,21 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param PiggyBankRepetition $repetition
|
||||
* @param string $amount
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function addAmountToRepetition(PiggyBankRepetition $repetition, string $amount): string
|
||||
{
|
||||
$newAmount = bcadd($repetition->currentamount, $amount);
|
||||
$repetition->currentamount = $newAmount;
|
||||
$repetition->save();
|
||||
|
||||
return $newAmount;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param PiggyBank $piggyBank
|
||||
* @param string $amount
|
||||
@@ -94,6 +112,23 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface
|
||||
return $event;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param PiggyBank $piggyBank
|
||||
* @param string $amount
|
||||
* @param TransactionJournal $journal
|
||||
*
|
||||
* @return PiggyBankEvent
|
||||
*/
|
||||
public function createEventWithJournal(PiggyBank $piggyBank, string $amount, TransactionJournal $journal): PiggyBankEvent
|
||||
{
|
||||
/** @var PiggyBankEvent $event */
|
||||
$event = PiggyBankEvent::create(
|
||||
['piggy_bank_id' => $piggyBank->id, 'transaction_journal_id' => $journal->id, 'date' => $journal->date, 'amount' => $amount]
|
||||
);
|
||||
|
||||
return $event;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param PiggyBank $piggyBank
|
||||
*
|
||||
@@ -132,6 +167,53 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface
|
||||
return $piggyBank->piggyBankEvents()->orderBy('date', 'DESC')->orderBy('id', 'DESC')->get();
|
||||
}
|
||||
|
||||
/**
|
||||
* Used for connecting to a piggy bank.
|
||||
*
|
||||
* @param PiggyBank $piggyBank
|
||||
* @param PiggyBankRepetition $repetition
|
||||
* @param TransactionJournal $journal
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getExactAmount(PiggyBank $piggyBank, PiggyBankRepetition $repetition, TransactionJournal $journal): string
|
||||
{
|
||||
$amount = $journal->amountPositive();
|
||||
$sources = $journal->sourceAccountList()->pluck('id')->toArray();
|
||||
$room = bcsub(strval($piggyBank->targetamount), strval($repetition->currentamount));
|
||||
$compare = bcmul($repetition->currentamount, '-1');
|
||||
|
||||
Log::debug(sprintf('Will add/remove %f to piggy bank #%d ("%s")', $amount, $piggyBank->id, $piggyBank->name));
|
||||
|
||||
// if piggy account matches source account, the amount is positive
|
||||
if (in_array($piggyBank->account_id, $sources)) {
|
||||
$amount = bcmul($amount, '-1');
|
||||
Log::debug(sprintf('Account #%d is the source, so will remove amount from piggy bank.', $piggyBank->account_id));
|
||||
}
|
||||
|
||||
|
||||
// if the amount is positive, make sure it fits in piggy bank:
|
||||
if (bccomp($amount, '0') === 1 && bccomp($room, $amount) === -1) {
|
||||
// amount is positive and $room is smaller than $amount
|
||||
Log::debug(sprintf('Room in piggy bank for extra money is %f', $room));
|
||||
Log::debug(sprintf('There is NO room to add %f to piggy bank #%d ("%s")', $amount, $piggyBank->id, $piggyBank->name));
|
||||
Log::debug(sprintf('New amount is %f', $room));
|
||||
|
||||
return $room;
|
||||
}
|
||||
|
||||
// amount is negative and $currentamount is smaller than $amount
|
||||
if (bccomp($amount, '0') === -1 && bccomp($compare, $amount) === 1) {
|
||||
Log::debug(sprintf('Max amount to remove is %f', $repetition->currentamount));
|
||||
Log::debug(sprintf('Cannot remove %f from piggy bank #%d ("%s")', $amount, $piggyBank->id, $piggyBank->name));
|
||||
Log::debug(sprintf('New amount is %f', $compare));
|
||||
|
||||
return $compare;
|
||||
}
|
||||
|
||||
return $amount;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
@@ -167,6 +249,22 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface
|
||||
return $set;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param PiggyBank $piggyBank
|
||||
* @param Carbon $date
|
||||
*
|
||||
* @return PiggyBankRepetition
|
||||
*/
|
||||
public function getRepetition(PiggyBank $piggyBank, Carbon $date): PiggyBankRepetition
|
||||
{
|
||||
$repetition = $piggyBank->piggyBankRepetitions()->relevantOnDate($date)->first();
|
||||
if (is_null($repetition)) {
|
||||
return new PiggyBankRepetition;
|
||||
}
|
||||
|
||||
return $repetition;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param PiggyBank $piggyBank
|
||||
* @param string $amount
|
||||
|
@@ -13,8 +13,11 @@ declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Repositories\PiggyBank;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use FireflyIII\Models\PiggyBank;
|
||||
use FireflyIII\Models\PiggyBankEvent;
|
||||
use FireflyIII\Models\PiggyBankRepetition;
|
||||
use FireflyIII\Models\TransactionJournal;
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
@@ -25,7 +28,6 @@ use Illuminate\Support\Collection;
|
||||
*/
|
||||
interface PiggyBankRepositoryInterface
|
||||
{
|
||||
|
||||
/**
|
||||
* @param PiggyBank $piggyBank
|
||||
* @param string $amount
|
||||
@@ -34,6 +36,14 @@ interface PiggyBankRepositoryInterface
|
||||
*/
|
||||
public function addAmount(PiggyBank $piggyBank, string $amount): bool;
|
||||
|
||||
/**
|
||||
* @param PiggyBankRepetition $repetition
|
||||
* @param string $amount
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function addAmountToRepetition(PiggyBankRepetition $repetition, string $amount): string;
|
||||
|
||||
/**
|
||||
* @param PiggyBank $piggyBank
|
||||
* @param string $amount
|
||||
@@ -60,6 +70,15 @@ interface PiggyBankRepositoryInterface
|
||||
*/
|
||||
public function createEvent(PiggyBank $piggyBank, string $amount): PiggyBankEvent;
|
||||
|
||||
/**
|
||||
* @param PiggyBank $piggyBank
|
||||
* @param string $amount
|
||||
* @param TransactionJournal $journal
|
||||
*
|
||||
* @return PiggyBankEvent
|
||||
*/
|
||||
public function createEventWithJournal(PiggyBank $piggyBank, string $amount, TransactionJournal $journal): PiggyBankEvent;
|
||||
|
||||
/**
|
||||
* Destroy piggy bank.
|
||||
*
|
||||
@@ -85,6 +104,17 @@ interface PiggyBankRepositoryInterface
|
||||
*/
|
||||
public function getEvents(PiggyBank $piggyBank): Collection;
|
||||
|
||||
/**
|
||||
* Used for connecting to a piggy bank.
|
||||
*
|
||||
* @param PiggyBank $piggyBank
|
||||
* @param PiggyBankRepetition $repetition
|
||||
* @param TransactionJournal $journal
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getExactAmount(PiggyBank $piggyBank, PiggyBankRepetition $repetition, TransactionJournal $journal): string;
|
||||
|
||||
/**
|
||||
* Highest order of all piggy banks.
|
||||
*
|
||||
@@ -106,6 +136,14 @@ interface PiggyBankRepositoryInterface
|
||||
*/
|
||||
public function getPiggyBanksWithAmount(): Collection;
|
||||
|
||||
/**
|
||||
* @param PiggyBank $piggyBank
|
||||
* @param Carbon $date
|
||||
*
|
||||
* @return PiggyBankRepetition
|
||||
*/
|
||||
public function getRepetition(PiggyBank $piggyBank, Carbon $date): PiggyBankRepetition;
|
||||
|
||||
/**
|
||||
* @param PiggyBank $piggyBank
|
||||
* @param string $amount
|
||||
|
@@ -92,6 +92,46 @@ class RuleGroupRepository implements RuleGroupRepositoryInterface
|
||||
return $this->user->ruleGroups()->orderBy('order', 'ASC')->get();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param User $user
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function getActiveGroups(User $user): Collection
|
||||
{
|
||||
return $user->ruleGroups()->where('rule_groups.active', 1)->orderBy('order', 'ASC')->get(['rule_groups.*']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param RuleGroup $group
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function getActiveStoreRules(RuleGroup $group): Collection
|
||||
{
|
||||
return $group->rules()
|
||||
->leftJoin('rule_triggers', 'rules.id', '=', 'rule_triggers.rule_id')
|
||||
->where('rule_triggers.trigger_type', 'user_action')
|
||||
->where('rule_triggers.trigger_value', 'store-journal')
|
||||
->where('rules.active', 1)
|
||||
->get(['rules.*']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param RuleGroup $group
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function getActiveUpdateRules(RuleGroup $group): Collection
|
||||
{
|
||||
return $group->rules()
|
||||
->leftJoin('rule_triggers', 'rules.id', '=', 'rule_triggers.rule_id')
|
||||
->where('rule_triggers.trigger_type', 'user_action')
|
||||
->where('rule_triggers.trigger_value', 'update-journal')
|
||||
->where('rules.active', 1)
|
||||
->get(['rules.*']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
|
@@ -53,6 +53,27 @@ interface RuleGroupRepositoryInterface
|
||||
*/
|
||||
public function get(): Collection;
|
||||
|
||||
/**
|
||||
* @param User $user
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function getActiveGroups(User $user): Collection;
|
||||
|
||||
/**
|
||||
* @param RuleGroup $group
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function getActiveStoreRules(RuleGroup $group): Collection;
|
||||
|
||||
/**
|
||||
* @param RuleGroup $group
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function getActiveUpdateRules(RuleGroup $group): Collection;
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
|
@@ -16,6 +16,7 @@ namespace FireflyIII\Support\Search;
|
||||
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Helpers\Collector\JournalCollectorInterface;
|
||||
use FireflyIII\Helpers\Filter\InternalTransferFilter;
|
||||
use FireflyIII\Models\Account;
|
||||
use FireflyIII\Models\AccountType;
|
||||
use FireflyIII\Models\Budget;
|
||||
@@ -207,7 +208,7 @@ class Search implements SearchInterface
|
||||
if ($this->hasModifiers()) {
|
||||
$collector->withOpposingAccount()->withCategoryInformation()->withBudgetInformation();
|
||||
}
|
||||
$collector->disableInternalFilter();
|
||||
$collector->removeFilter(InternalTransferFilter::class);
|
||||
$set = $collector->getPaginatedJournals()->getCollection();
|
||||
$words = $this->words;
|
||||
|
||||
|
172
composer.lock
generated
172
composer.lock
generated
@@ -665,16 +665,16 @@
|
||||
},
|
||||
{
|
||||
"name": "laravel/framework",
|
||||
"version": "v5.4.19",
|
||||
"version": "v5.4.21",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/framework.git",
|
||||
"reference": "02444b7450350db17a7607c8a52f7268ebdb0dad"
|
||||
"reference": "2ed668f96d1a6ca42f50d5c87ee9ceecfc0a6eee"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/framework/zipball/02444b7450350db17a7607c8a52f7268ebdb0dad",
|
||||
"reference": "02444b7450350db17a7607c8a52f7268ebdb0dad",
|
||||
"url": "https://api.github.com/repos/laravel/framework/zipball/2ed668f96d1a6ca42f50d5c87ee9ceecfc0a6eee",
|
||||
"reference": "2ed668f96d1a6ca42f50d5c87ee9ceecfc0a6eee",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -790,7 +790,7 @@
|
||||
"framework",
|
||||
"laravel"
|
||||
],
|
||||
"time": "2017-04-16T13:33:34+00:00"
|
||||
"time": "2017-04-28T15:40:01+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravelcollective/html",
|
||||
@@ -974,16 +974,16 @@
|
||||
},
|
||||
{
|
||||
"name": "league/flysystem",
|
||||
"version": "1.0.38",
|
||||
"version": "1.0.40",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/flysystem.git",
|
||||
"reference": "4ba6e13f5116204b21c3afdf400ecf2b9eb1c482"
|
||||
"reference": "3828f0b24e2c1918bb362d57a53205d6dc8fde61"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/4ba6e13f5116204b21c3afdf400ecf2b9eb1c482",
|
||||
"reference": "4ba6e13f5116204b21c3afdf400ecf2b9eb1c482",
|
||||
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/3828f0b24e2c1918bb362d57a53205d6dc8fde61",
|
||||
"reference": "3828f0b24e2c1918bb362d57a53205d6dc8fde61",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1053,7 +1053,7 @@
|
||||
"sftp",
|
||||
"storage"
|
||||
],
|
||||
"time": "2017-04-22T18:59:19+00:00"
|
||||
"time": "2017-04-28T10:15:08+00:00"
|
||||
},
|
||||
{
|
||||
"name": "monolog/monolog",
|
||||
@@ -1637,16 +1637,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/console",
|
||||
"version": "v3.2.7",
|
||||
"version": "v3.2.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/console.git",
|
||||
"reference": "c30243cc51f726812be3551316b109a2f5deaf8d"
|
||||
"reference": "a7a17e0c6c3c4d70a211f80782e4b90ddadeaa38"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/c30243cc51f726812be3551316b109a2f5deaf8d",
|
||||
"reference": "c30243cc51f726812be3551316b109a2f5deaf8d",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/a7a17e0c6c3c4d70a211f80782e4b90ddadeaa38",
|
||||
"reference": "a7a17e0c6c3c4d70a211f80782e4b90ddadeaa38",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1696,7 +1696,7 @@
|
||||
],
|
||||
"description": "Symfony Console Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2017-04-04T14:33:42+00:00"
|
||||
"time": "2017-04-26T01:39:17+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/css-selector",
|
||||
@@ -1753,16 +1753,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/debug",
|
||||
"version": "v3.2.7",
|
||||
"version": "v3.2.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/debug.git",
|
||||
"reference": "56f613406446a4a0a031475cfd0a01751de22659"
|
||||
"reference": "fd6eeee656a5a7b384d56f1072243fe1c0e81686"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/debug/zipball/56f613406446a4a0a031475cfd0a01751de22659",
|
||||
"reference": "56f613406446a4a0a031475cfd0a01751de22659",
|
||||
"url": "https://api.github.com/repos/symfony/debug/zipball/fd6eeee656a5a7b384d56f1072243fe1c0e81686",
|
||||
"reference": "fd6eeee656a5a7b384d56f1072243fe1c0e81686",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1806,20 +1806,20 @@
|
||||
],
|
||||
"description": "Symfony Debug Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2017-03-28T21:38:24+00:00"
|
||||
"time": "2017-04-19T20:17:50+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/event-dispatcher",
|
||||
"version": "v2.8.19",
|
||||
"version": "v2.8.20",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/event-dispatcher.git",
|
||||
"reference": "88b65f0ac25355090e524aba4ceb066025df8bd2"
|
||||
"reference": "7fc8e2b4118ff316550596357325dfd92a51f531"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/88b65f0ac25355090e524aba4ceb066025df8bd2",
|
||||
"reference": "88b65f0ac25355090e524aba4ceb066025df8bd2",
|
||||
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/7fc8e2b4118ff316550596357325dfd92a51f531",
|
||||
"reference": "7fc8e2b4118ff316550596357325dfd92a51f531",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1866,20 +1866,20 @@
|
||||
],
|
||||
"description": "Symfony EventDispatcher Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2017-04-03T20:37:06+00:00"
|
||||
"time": "2017-04-26T16:56:54+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/finder",
|
||||
"version": "v3.2.7",
|
||||
"version": "v3.2.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/finder.git",
|
||||
"reference": "b20900ce5ea164cd9314af52725b0bb5a758217a"
|
||||
"reference": "9cf076f8f492f4b1ffac40aae9c2d287b4ca6930"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/finder/zipball/b20900ce5ea164cd9314af52725b0bb5a758217a",
|
||||
"reference": "b20900ce5ea164cd9314af52725b0bb5a758217a",
|
||||
"url": "https://api.github.com/repos/symfony/finder/zipball/9cf076f8f492f4b1ffac40aae9c2d287b4ca6930",
|
||||
"reference": "9cf076f8f492f4b1ffac40aae9c2d287b4ca6930",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1915,20 +1915,20 @@
|
||||
],
|
||||
"description": "Symfony Finder Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2017-03-20T09:32:19+00:00"
|
||||
"time": "2017-04-12T14:13:17+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/http-foundation",
|
||||
"version": "v3.2.7",
|
||||
"version": "v3.2.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/http-foundation.git",
|
||||
"reference": "cb0b6418f588952c9290b3df4ca650f1b7ab570a"
|
||||
"reference": "9de6add7f731e5af7f5b2e9c0da365e43383ebef"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/cb0b6418f588952c9290b3df4ca650f1b7ab570a",
|
||||
"reference": "cb0b6418f588952c9290b3df4ca650f1b7ab570a",
|
||||
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/9de6add7f731e5af7f5b2e9c0da365e43383ebef",
|
||||
"reference": "9de6add7f731e5af7f5b2e9c0da365e43383ebef",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1968,20 +1968,20 @@
|
||||
],
|
||||
"description": "Symfony HttpFoundation Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2017-04-04T15:30:56+00:00"
|
||||
"time": "2017-05-01T14:55:58+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/http-kernel",
|
||||
"version": "v3.2.7",
|
||||
"version": "v3.2.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/http-kernel.git",
|
||||
"reference": "8285ab5faf1306b1a5ebcf287fe91c231a6de88e"
|
||||
"reference": "46e8b209abab55c072c47d72d5cd1d62c0585e05"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/8285ab5faf1306b1a5ebcf287fe91c231a6de88e",
|
||||
"reference": "8285ab5faf1306b1a5ebcf287fe91c231a6de88e",
|
||||
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/46e8b209abab55c072c47d72d5cd1d62c0585e05",
|
||||
"reference": "46e8b209abab55c072c47d72d5cd1d62c0585e05",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2050,7 +2050,7 @@
|
||||
],
|
||||
"description": "Symfony HttpKernel Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2017-04-05T12:52:03+00:00"
|
||||
"time": "2017-05-01T17:46:48+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-mbstring",
|
||||
@@ -2221,16 +2221,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/process",
|
||||
"version": "v3.2.7",
|
||||
"version": "v3.2.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/process.git",
|
||||
"reference": "57fdaa55827ae14d617550ebe71a820f0a5e2282"
|
||||
"reference": "999c2cf5061e627e6cd551dc9ebf90dd1d11d9f0"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/process/zipball/57fdaa55827ae14d617550ebe71a820f0a5e2282",
|
||||
"reference": "57fdaa55827ae14d617550ebe71a820f0a5e2282",
|
||||
"url": "https://api.github.com/repos/symfony/process/zipball/999c2cf5061e627e6cd551dc9ebf90dd1d11d9f0",
|
||||
"reference": "999c2cf5061e627e6cd551dc9ebf90dd1d11d9f0",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2266,20 +2266,20 @@
|
||||
],
|
||||
"description": "Symfony Process Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2017-03-27T18:07:02+00:00"
|
||||
"time": "2017-04-12T14:13:17+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/routing",
|
||||
"version": "v3.2.7",
|
||||
"version": "v3.2.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/routing.git",
|
||||
"reference": "d6605f9a5767bc5bc4895e1c762ba93964608aee"
|
||||
"reference": "5029745d6d463585e8b487dbc83d6333f408853a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/routing/zipball/d6605f9a5767bc5bc4895e1c762ba93964608aee",
|
||||
"reference": "d6605f9a5767bc5bc4895e1c762ba93964608aee",
|
||||
"url": "https://api.github.com/repos/symfony/routing/zipball/5029745d6d463585e8b487dbc83d6333f408853a",
|
||||
"reference": "5029745d6d463585e8b487dbc83d6333f408853a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2341,20 +2341,20 @@
|
||||
"uri",
|
||||
"url"
|
||||
],
|
||||
"time": "2017-03-02T15:58:09+00:00"
|
||||
"time": "2017-04-12T14:13:17+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/translation",
|
||||
"version": "v3.2.7",
|
||||
"version": "v3.2.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/translation.git",
|
||||
"reference": "c740eee70783d2af4d3d6b70d5146f209e6b4d13"
|
||||
"reference": "f4a04d2df710f81515df576b2de06bdeee518b83"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/translation/zipball/c740eee70783d2af4d3d6b70d5146f209e6b4d13",
|
||||
"reference": "c740eee70783d2af4d3d6b70d5146f209e6b4d13",
|
||||
"url": "https://api.github.com/repos/symfony/translation/zipball/f4a04d2df710f81515df576b2de06bdeee518b83",
|
||||
"reference": "f4a04d2df710f81515df576b2de06bdeee518b83",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2405,20 +2405,20 @@
|
||||
],
|
||||
"description": "Symfony Translation Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2017-03-21T21:44:32+00:00"
|
||||
"time": "2017-04-12T14:13:17+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/var-dumper",
|
||||
"version": "v3.2.7",
|
||||
"version": "v3.2.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/var-dumper.git",
|
||||
"reference": "81dce20f69a8b40427e1f4e6462178df87cafc03"
|
||||
"reference": "fa47963ac7979ddbd42b2d646d1b056bddbf7bb8"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/81dce20f69a8b40427e1f4e6462178df87cafc03",
|
||||
"reference": "81dce20f69a8b40427e1f4e6462178df87cafc03",
|
||||
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/fa47963ac7979ddbd42b2d646d1b056bddbf7bb8",
|
||||
"reference": "fa47963ac7979ddbd42b2d646d1b056bddbf7bb8",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2429,9 +2429,11 @@
|
||||
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"ext-iconv": "*",
|
||||
"twig/twig": "~1.20|~2.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
|
||||
"ext-symfony_debug": ""
|
||||
},
|
||||
"type": "library",
|
||||
@@ -2471,7 +2473,7 @@
|
||||
"debug",
|
||||
"dump"
|
||||
],
|
||||
"time": "2017-03-12T16:07:05+00:00"
|
||||
"time": "2017-05-01T14:55:58+00:00"
|
||||
},
|
||||
{
|
||||
"name": "tijsverkoyen/css-to-inline-styles",
|
||||
@@ -4435,16 +4437,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/class-loader",
|
||||
"version": "v3.2.7",
|
||||
"version": "v3.2.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/class-loader.git",
|
||||
"reference": "c29a5bc6ca14cfff1f5e3d7781ed74b6e898d2b9"
|
||||
"reference": "fc4c04bfd17130a9dccfded9578353f311967da7"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/class-loader/zipball/c29a5bc6ca14cfff1f5e3d7781ed74b6e898d2b9",
|
||||
"reference": "c29a5bc6ca14cfff1f5e3d7781ed74b6e898d2b9",
|
||||
"url": "https://api.github.com/repos/symfony/class-loader/zipball/fc4c04bfd17130a9dccfded9578353f311967da7",
|
||||
"reference": "fc4c04bfd17130a9dccfded9578353f311967da7",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -4487,20 +4489,20 @@
|
||||
],
|
||||
"description": "Symfony ClassLoader Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2017-02-18T17:28:00+00:00"
|
||||
"time": "2017-04-12T14:13:17+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/config",
|
||||
"version": "v3.2.7",
|
||||
"version": "v3.2.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/config.git",
|
||||
"reference": "8444bde28e3c2a33e571e6f180c2d78bfdc4480d"
|
||||
"reference": "e5533fcc0b3dd377626153b2852707878f363728"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/config/zipball/8444bde28e3c2a33e571e6f180c2d78bfdc4480d",
|
||||
"reference": "8444bde28e3c2a33e571e6f180c2d78bfdc4480d",
|
||||
"url": "https://api.github.com/repos/symfony/config/zipball/e5533fcc0b3dd377626153b2852707878f363728",
|
||||
"reference": "e5533fcc0b3dd377626153b2852707878f363728",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -4543,7 +4545,7 @@
|
||||
],
|
||||
"description": "Symfony Config Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2017-04-04T15:30:56+00:00"
|
||||
"time": "2017-04-12T14:13:17+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/dom-crawler",
|
||||
@@ -4603,16 +4605,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/filesystem",
|
||||
"version": "v3.2.7",
|
||||
"version": "v3.2.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/filesystem.git",
|
||||
"reference": "64421e6479c4a8e60d790fb666bd520992861b66"
|
||||
"reference": "040651db13cf061827a460cc10f6e36a445c45b4"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/filesystem/zipball/64421e6479c4a8e60d790fb666bd520992861b66",
|
||||
"reference": "64421e6479c4a8e60d790fb666bd520992861b66",
|
||||
"url": "https://api.github.com/repos/symfony/filesystem/zipball/040651db13cf061827a460cc10f6e36a445c45b4",
|
||||
"reference": "040651db13cf061827a460cc10f6e36a445c45b4",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -4648,20 +4650,20 @@
|
||||
],
|
||||
"description": "Symfony Filesystem Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2017-03-26T15:47:15+00:00"
|
||||
"time": "2017-04-12T14:13:17+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/stopwatch",
|
||||
"version": "v3.2.7",
|
||||
"version": "v3.2.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/stopwatch.git",
|
||||
"reference": "c5ee0f8650c84b4d36a5f76b3b504233feaabf75"
|
||||
"reference": "5a0105afb670dbd38f521105c444de1b8e10cfe3"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/stopwatch/zipball/c5ee0f8650c84b4d36a5f76b3b504233feaabf75",
|
||||
"reference": "c5ee0f8650c84b4d36a5f76b3b504233feaabf75",
|
||||
"url": "https://api.github.com/repos/symfony/stopwatch/zipball/5a0105afb670dbd38f521105c444de1b8e10cfe3",
|
||||
"reference": "5a0105afb670dbd38f521105c444de1b8e10cfe3",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -4697,20 +4699,20 @@
|
||||
],
|
||||
"description": "Symfony Stopwatch Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2017-02-18T17:28:00+00:00"
|
||||
"time": "2017-04-12T14:13:17+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/yaml",
|
||||
"version": "v3.2.7",
|
||||
"version": "v3.2.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/yaml.git",
|
||||
"reference": "62b4cdb99d52cb1ff253c465eb1532a80cebb621"
|
||||
"reference": "acec26fcf7f3031e094e910b94b002fa53d4e4d6"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/yaml/zipball/62b4cdb99d52cb1ff253c465eb1532a80cebb621",
|
||||
"reference": "62b4cdb99d52cb1ff253c465eb1532a80cebb621",
|
||||
"url": "https://api.github.com/repos/symfony/yaml/zipball/acec26fcf7f3031e094e910b94b002fa53d4e4d6",
|
||||
"reference": "acec26fcf7f3031e094e910b94b002fa53d4e4d6",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -4752,7 +4754,7 @@
|
||||
],
|
||||
"description": "Symfony Yaml Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2017-03-20T09:45:15+00:00"
|
||||
"time": "2017-05-01T14:55:58+00:00"
|
||||
},
|
||||
{
|
||||
"name": "webmozart/assert",
|
||||
|
@@ -23,7 +23,7 @@ return [
|
||||
'is_demo_site' => false,
|
||||
],
|
||||
'encryption' => (is_null(env('USE_ENCRYPTION')) || env('USE_ENCRYPTION') === true),
|
||||
'version' => '4.4.2',
|
||||
'version' => '4.4.3',
|
||||
'maxUploadSize' => 5242880,
|
||||
'allowedMimes' => ['image/png', 'image/jpeg', 'application/pdf'],
|
||||
'list_length' => 10,
|
||||
@@ -99,14 +99,11 @@ return [
|
||||
'languages' => [
|
||||
'de_DE' => ['name_locale' => 'Deutsch', 'name_english' => 'German', 'complete' => true],
|
||||
'en_US' => ['name_locale' => 'English', 'name_english' => 'English', 'complete' => true],
|
||||
'es_ES' => ['name_locale' => 'Español', 'name_english' => 'Spanish', 'complete' => false],
|
||||
'fr_FR' => ['name_locale' => 'Français', 'name_english' => 'French', 'complete' => false],
|
||||
'hr_HR' => ['name_locale' => 'hrvatski', 'name_english' => 'Croatian', 'complete' => false],
|
||||
'nl_NL' => ['name_locale' => 'Nederlands', 'name_english' => 'Dutch', 'complete' => true],
|
||||
'pl_PL' => ['name_locale' => 'Polski', 'name_english' => 'Polish ', 'complete' => false],
|
||||
'pt_BR' => ['name_locale' => 'Português do Brasil', 'name_english' => 'Portuguese (Brazil)', 'complete' => true],
|
||||
'ru-RU' => ['name_locale' => 'Russian', 'name_english' => 'Russian', 'complete' => false],
|
||||
'zh-HK' => ['name_locale' => '繁體中文(香港)', 'name_english' => 'Chinese Traditional, Hong Kong', 'complete' => false],
|
||||
'sl-SI' => ['name_locale' => 'Slovenščina', 'name_english' => 'Slovenian', 'complete' => false],
|
||||
'zh-TW' => ['name_locale' => '正體中文', 'name_english' => 'Chinese Traditional', 'complete' => false],
|
||||
],
|
||||
'transactionTypesByWhat' => [
|
||||
@@ -176,7 +173,7 @@ return [
|
||||
'category_is' => 'FireflyIII\Rules\Triggers\CategoryIs',
|
||||
'budget_is' => 'FireflyIII\Rules\Triggers\BudgetIs',
|
||||
'tag_is' => 'FireflyIII\Rules\Triggers\TagIs',
|
||||
'has_attachments' => 'FireflyIII\Rules\Triggers\HasAttachment',
|
||||
'has_attachments' => 'FireflyIII\Rules\Triggers\HasAttachment',
|
||||
],
|
||||
'rule-actions' => [
|
||||
'set_category' => 'FireflyIII\Rules\Actions\SetCategory',
|
||||
|
@@ -85,7 +85,7 @@ $factory->define(
|
||||
$factory->define(
|
||||
FireflyIII\Models\TransactionJournal::class, function (Faker\Generator $faker) {
|
||||
return [
|
||||
'id' => $faker->numberBetween(1, 10),
|
||||
'id' => $faker->unique()->numberBetween(1000, 10000),
|
||||
'user_id' => 1,
|
||||
'transaction_type_id' => 1,
|
||||
'bill_id' => null,
|
||||
@@ -122,6 +122,18 @@ $factory->define(
|
||||
}
|
||||
);
|
||||
|
||||
$factory->define(
|
||||
FireflyIII\Models\PiggyBankRepetition::class, function (Faker\Generator $faker) {
|
||||
return [
|
||||
'id' => $faker->unique()->numberBetween(100, 10000),
|
||||
'piggy_bank_id' => $faker->numberBetween(1, 10),
|
||||
'startdate' => '2017-01-01',
|
||||
'targetdate' => '2020-01-01',
|
||||
'currentamount' => 10,
|
||||
];
|
||||
}
|
||||
);
|
||||
|
||||
$factory->define(
|
||||
FireflyIII\Models\PiggyBank::class, function (Faker\Generator $faker) {
|
||||
return [
|
||||
@@ -194,8 +206,9 @@ $factory->define(
|
||||
$factory->define(
|
||||
FireflyIII\Models\Account::class, function (Faker\Generator $faker) {
|
||||
return [
|
||||
'id' => $faker->numberBetween(1, 10),
|
||||
'name' => $faker->words(3, true),
|
||||
'id' => $faker->unique()->numberBetween(1000, 10000),
|
||||
'name' => $faker->words(3, true),
|
||||
'account_type_id' => 1,
|
||||
];
|
||||
}
|
||||
);
|
||||
|
@@ -1,41 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* breadcrumbs.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
'home' => 'Home',
|
||||
'edit_currency' => 'Edit currency ":name"',
|
||||
'delete_currency' => 'Delete currency ":name"',
|
||||
'newPiggyBank' => 'Create a new piggy bank',
|
||||
'edit_piggyBank' => 'Edit piggy bank ":name"',
|
||||
'preferences' => 'Preferences',
|
||||
'profile' => 'Profile',
|
||||
'changePassword' => 'Change your password',
|
||||
'bills' => 'Bills',
|
||||
'newBill' => 'New bill',
|
||||
'edit_bill' => 'Edit bill ":name"',
|
||||
'delete_bill' => 'Delete bill ":name"',
|
||||
'reports' => 'Reports',
|
||||
'searchResult' => 'Search for ":query"',
|
||||
'withdrawal_list' => 'Expenses',
|
||||
'deposit_list' => 'Revenue, income and deposits',
|
||||
'transfer_list' => 'Transfers',
|
||||
'transfers_list' => 'Transfers',
|
||||
'create_withdrawal' => 'Create new withdrawal',
|
||||
'create_deposit' => 'Create new deposit',
|
||||
'create_transfer' => 'Create new transfer',
|
||||
'edit_journal' => 'Edit transaction ":description"',
|
||||
'delete_journal' => 'Delete transaction ":description"',
|
||||
'tags' => 'Tags',
|
||||
'createTag' => 'Create new tag',
|
||||
'edit_tag' => 'Edit tag ":tag"',
|
||||
'delete_tag' => 'Delete tag ":tag"',
|
||||
];
|
@@ -1,80 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* csv.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
|
||||
'import_configure_title' => 'Configure your import',
|
||||
'import_configure_intro' => 'There are some options for your CSV import. Please indicate if your CSV file contains headers on the first column, and what the date format of your date-fields is. That might require some experimentation. The field delimiter is usually a ",", but could also be a ";". Check this carefully.',
|
||||
'import_configure_form' => 'Basic CSV import options',
|
||||
'header_help' => 'Check this if the first row of your CSV file are the column titles',
|
||||
'date_help' => 'Date time format in your CSV. Follow the format like <a href="https://secure.php.net/manual/en/datetime.createfromformat.php#refsect1-datetime.createfromformat-parameters">this page</a> indicates. The default value will parse dates that look like this: :dateExample.',
|
||||
'delimiter_help' => 'Choose the field delimiter that is used in your input file. If not sure, comma is the safest option.',
|
||||
'import_account_help' => 'If your CSV file does NOT contain information about your asset account(s), use this dropdown to select to which account the transactions in the CSV belong to.',
|
||||
'upload_not_writeable' => 'The grey box contains a file path. It should be writeable. Please make sure it is.',
|
||||
|
||||
// roles
|
||||
'column_roles_title' => 'Define column roles',
|
||||
'column_roles_table' => 'Table',
|
||||
'column_name' => 'Name of column',
|
||||
'column_example' => 'Column example data',
|
||||
'column_role' => 'Column data meaning',
|
||||
'do_map_value' => 'Map these values',
|
||||
'column' => 'Column',
|
||||
'no_example_data' => 'No example data available',
|
||||
'store_column_roles' => 'Continue import',
|
||||
'do_not_map' => '(do not map)',
|
||||
'map_title' => 'Connect import data to Firefly III data',
|
||||
'map_text' => 'In the following tables, the left value shows you information found in your uploaded CSV file. It is your task to map this value, if possible, to a value already present in your database. Firefly will stick to this mapping. If there is no value to map to, or you do not wish to map the specific value, select nothing.',
|
||||
|
||||
'field_value' => 'Field value',
|
||||
'field_mapped_to' => 'Mapped to',
|
||||
'store_column_mapping' => 'Store mapping',
|
||||
|
||||
// map things.
|
||||
|
||||
|
||||
'column__ignore' => '(ignore this column)',
|
||||
'column_account-iban' => 'Asset account (IBAN)',
|
||||
'column_account-id' => 'Asset account ID (matching Firefly)',
|
||||
'column_account-name' => 'Asset account (name)',
|
||||
'column_amount' => 'Amount',
|
||||
'column_amount-comma-separated' => 'Amount (comma as decimal separator)',
|
||||
'column_bill-id' => 'Bill ID (matching Firefly)',
|
||||
'column_bill-name' => 'Bill name',
|
||||
'column_budget-id' => 'Budget ID (matching Firefly)',
|
||||
'column_budget-name' => 'Budget name',
|
||||
'column_category-id' => 'Category ID (matching Firefly)',
|
||||
'column_category-name' => 'Category name',
|
||||
'column_currency-code' => 'Currency code (ISO 4217)',
|
||||
'column_currency-id' => 'Currency ID (matching Firefly)',
|
||||
'column_currency-name' => 'Currency name (matching Firefly)',
|
||||
'column_currency-symbol' => 'Currency symbol (matching Firefly)',
|
||||
'column_date-interest' => 'Interest calculation date',
|
||||
'column_date-book' => 'Transaction booking date',
|
||||
'column_date-process' => 'Transaction process date',
|
||||
'column_date-transaction' => 'Date',
|
||||
'column_description' => 'Description',
|
||||
'column_opposing-iban' => 'Opposing account (IBAN)',
|
||||
'column_opposing-id' => 'Opposing account ID (matching Firefly)',
|
||||
'column_external-id' => 'External ID',
|
||||
'column_opposing-name' => 'Opposing account (name)',
|
||||
'column_rabo-debet-credit' => 'Rabobank specific debet/credit indicator',
|
||||
'column_ing-debet-credit' => 'ING specific debet/credit indicator',
|
||||
'column_sepa-ct-id' => 'SEPA Credit Transfer end-to-end ID',
|
||||
'column_sepa-ct-op' => 'SEPA Credit Transfer opposing account',
|
||||
'column_sepa-db' => 'SEPA Direct Debet',
|
||||
'column_tags-comma' => 'Tags (comma separated)',
|
||||
'column_tags-space' => 'Tags (space separated)',
|
||||
'column_account-number' => 'Asset account (account number)',
|
||||
'column_opposing-number' => 'Opposing account (account number)',
|
||||
];
|
@@ -1,19 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* passwords.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
'password' => 'Passwords must be at least six characters and match the confirmation.',
|
||||
'user' => 'We can\'t find a user with that e-mail address.',
|
||||
'token' => 'This password reset token is invalid.',
|
||||
'sent' => 'We have e-mailed your password reset link!',
|
||||
'reset' => 'Your password has been reset!',
|
||||
'blocked' => 'Nice try though.',
|
||||
];
|
@@ -1,91 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* validation.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
'iban' => 'This is not a valid IBAN.',
|
||||
'unique_account_number_for_user' => 'It looks like this account number is already in use.',
|
||||
'deleted_user' => 'Due to security constraints, you cannot register using this email address.',
|
||||
'rule_trigger_value' => 'This value is invalid for the selected trigger.',
|
||||
'rule_action_value' => 'This value is invalid for the selected action.',
|
||||
'invalid_domain' => 'Due to security constraints, you cannot register from this domain.',
|
||||
'file_already_attached' => 'Uploaded file ":name" is already attached to this object.',
|
||||
'file_attached' => 'Succesfully uploaded file ":name".',
|
||||
'file_invalid_mime' => 'File ":name" is of type ":mime" which is not accepted as a new upload.',
|
||||
'file_too_large' => 'File ":name" is too large.',
|
||||
'belongs_to_user' => 'The value of :attribute is unknown',
|
||||
'accepted' => 'The :attribute must be accepted.',
|
||||
'bic' => 'This is not a valid BIC.',
|
||||
'more' => ':attribute must be larger than zero.',
|
||||
'active_url' => 'The :attribute is not a valid URL.',
|
||||
'after' => 'The :attribute must be a date after :date.',
|
||||
'alpha' => 'The :attribute may only contain letters.',
|
||||
'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.',
|
||||
'alpha_num' => 'The :attribute may only contain letters and numbers.',
|
||||
'array' => 'The :attribute must be an array.',
|
||||
'unique_for_user' => 'There already is an entry with this :attribute.',
|
||||
'before' => 'The :attribute must be a date before :date.',
|
||||
'unique_object_for_user' => 'This name is already in use',
|
||||
'unique_account_for_user' => 'This account name is already in use',
|
||||
'between.numeric' => 'The :attribute must be between :min and :max.',
|
||||
'between.file' => 'The :attribute must be between :min and :max kilobytes.',
|
||||
'between.string' => 'The :attribute must be between :min and :max characters.',
|
||||
'between.array' => 'The :attribute must have between :min and :max items.',
|
||||
'boolean' => 'The :attribute field must be true or false.',
|
||||
'confirmed' => 'The :attribute confirmation does not match.',
|
||||
'date' => 'The :attribute is not a valid date.',
|
||||
'date_format' => 'The :attribute does not match the format :format.',
|
||||
'different' => 'The :attribute and :other must be different.',
|
||||
'digits' => 'The :attribute must be :digits digits.',
|
||||
'digits_between' => 'The :attribute must be between :min and :max digits.',
|
||||
'email' => 'The :attribute must be a valid email address.',
|
||||
'filled' => 'The :attribute field is required.',
|
||||
'exists' => 'The selected :attribute is invalid.',
|
||||
'image' => 'The :attribute must be an image.',
|
||||
'in' => 'The selected :attribute is invalid.',
|
||||
'integer' => 'The :attribute must be an integer.',
|
||||
'ip' => 'The :attribute must be a valid IP address.',
|
||||
'json' => 'The :attribute must be a valid JSON string.',
|
||||
'max.numeric' => 'The :attribute may not be greater than :max.',
|
||||
'max.file' => 'The :attribute may not be greater than :max kilobytes.',
|
||||
'max.string' => 'The :attribute may not be greater than :max characters.',
|
||||
'max.array' => 'The :attribute may not have more than :max items.',
|
||||
'mimes' => 'The :attribute must be a file of type: :values.',
|
||||
'min.numeric' => 'The :attribute must be at least :min.',
|
||||
'min.file' => 'The :attribute must be at least :min kilobytes.',
|
||||
'min.string' => 'The :attribute must be at least :min characters.',
|
||||
'min.array' => 'The :attribute must have at least :min items.',
|
||||
'not_in' => 'The selected :attribute is invalid.',
|
||||
'numeric' => 'The :attribute must be a number.',
|
||||
'regex' => 'The :attribute format is invalid.',
|
||||
'required' => 'The :attribute field is required.',
|
||||
'required_if' => 'The :attribute field is required when :other is :value.',
|
||||
'required_unless' => 'The :attribute field is required unless :other is in :values.',
|
||||
'required_with' => 'The :attribute field is required when :values is present.',
|
||||
'required_with_all' => 'The :attribute field is required when :values is present.',
|
||||
'required_without' => 'The :attribute field is required when :values is not present.',
|
||||
'required_without_all' => 'The :attribute field is required when none of :values are present.',
|
||||
'same' => 'The :attribute and :other must match.',
|
||||
'size.numeric' => 'The :attribute must be :size.',
|
||||
'size.file' => 'The :attribute must be :size kilobytes.',
|
||||
'size.string' => 'The :attribute must be :size characters.',
|
||||
'size.array' => 'The :attribute must contain :size items.',
|
||||
'unique' => 'The :attribute has already been taken.',
|
||||
'string' => 'The :attribute must be a string.',
|
||||
'url' => 'The :attribute format is invalid.',
|
||||
'timezone' => 'The :attribute must be a valid zone.',
|
||||
'2fa_code' => 'The :attribute field is invalid.',
|
||||
'dimensions' => 'The :attribute has invalid image dimensions.',
|
||||
'distinct' => 'The :attribute field has a duplicate value.',
|
||||
'file' => 'The :attribute must be a file.',
|
||||
'in_array' => 'The :attribute field does not exist in :other.',
|
||||
'present' => 'The :attribute field must be present.',
|
||||
'amount_zero' => 'The total amount cannot be zero',
|
||||
];
|
@@ -1,28 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* auth.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used during authentication for various
|
||||
| messages that we need to display to the user. You are free to modify
|
||||
| these language lines according to your application's requirements.
|
||||
|
|
||||
*/
|
||||
|
||||
'failed' => 'These credentials do not match our records.',
|
||||
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
|
||||
|
||||
];
|
@@ -1,41 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* breadcrumbs.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
'home' => 'Početna',
|
||||
'edit_currency' => 'Uredi valutu ":name"',
|
||||
'delete_currency' => 'Obriši valutu ":name"',
|
||||
'newPiggyBank' => 'Kreiraj novu kasicu prasicu',
|
||||
'edit_piggyBank' => 'Uredi kasicu prasicu ":name"',
|
||||
'preferences' => 'Postavke',
|
||||
'profile' => 'Profil',
|
||||
'changePassword' => 'Promijeni lozinku',
|
||||
'bills' => 'Bills',
|
||||
'newBill' => 'New bill',
|
||||
'edit_bill' => 'Edit bill ":name"',
|
||||
'delete_bill' => 'Delete bill ":name"',
|
||||
'reports' => 'Izvještaji',
|
||||
'searchResult' => 'Pretraživanje za ":query"',
|
||||
'withdrawal_list' => 'Troškovi',
|
||||
'deposit_list' => 'Revenue, income and deposits',
|
||||
'transfer_list' => 'Transfers',
|
||||
'transfers_list' => 'Transfers',
|
||||
'create_withdrawal' => 'Create new withdrawal',
|
||||
'create_deposit' => 'Create new deposit',
|
||||
'create_transfer' => 'Create new transfer',
|
||||
'edit_journal' => 'Uredi transakciju ":description"',
|
||||
'delete_journal' => 'Obriši transakciju ":description"',
|
||||
'tags' => 'Oznake',
|
||||
'createTag' => 'Kreiraj novu oznaku',
|
||||
'edit_tag' => 'Uredi oznaku ":tag"',
|
||||
'delete_tag' => 'Obriši oznaku ":tag"',
|
||||
];
|
@@ -1,23 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* config.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
'locale' => 'hr, Croatian, hr_HR, hr_HR.utf8, hr_HR.UTF-8',
|
||||
'month' => '%B %Y',
|
||||
'month_and_day' => '%e %B %Y',
|
||||
'date_time' => '%e %B %Y, @ %T',
|
||||
'specific_day' => '%e %B %Y',
|
||||
'week_in_year' => 'Tjedan %W, %Y',
|
||||
'quarter_of_year' => '%B %Y',
|
||||
'year' => '%Y',
|
||||
'half_year' => '%B %Y',
|
||||
|
||||
];
|
@@ -1,80 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* csv.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
|
||||
'import_configure_title' => 'Configure your import',
|
||||
'import_configure_intro' => 'There are some options for your CSV import. Please indicate if your CSV file contains headers on the first column, and what the date format of your date-fields is. That might require some experimentation. The field delimiter is usually a ",", but could also be a ";". Check this carefully.',
|
||||
'import_configure_form' => 'Basic CSV import options',
|
||||
'header_help' => 'Check this if the first row of your CSV file are the column titles',
|
||||
'date_help' => 'Date time format in your CSV. Follow the format like <a href="https://secure.php.net/manual/en/datetime.createfromformat.php#refsect1-datetime.createfromformat-parameters">this page</a> indicates. The default value will parse dates that look like this: :dateExample.',
|
||||
'delimiter_help' => 'Choose the field delimiter that is used in your input file. If not sure, comma is the safest option.',
|
||||
'import_account_help' => 'If your CSV file does NOT contain information about your asset account(s), use this dropdown to select to which account the transactions in the CSV belong to.',
|
||||
'upload_not_writeable' => 'The grey box contains a file path. It should be writeable. Please make sure it is.',
|
||||
|
||||
// roles
|
||||
'column_roles_title' => 'Define column roles',
|
||||
'column_roles_table' => 'Table',
|
||||
'column_name' => 'Name of column',
|
||||
'column_example' => 'Column example data',
|
||||
'column_role' => 'Column data meaning',
|
||||
'do_map_value' => 'Map these values',
|
||||
'column' => 'Column',
|
||||
'no_example_data' => 'No example data available',
|
||||
'store_column_roles' => 'Continue import',
|
||||
'do_not_map' => '(do not map)',
|
||||
'map_title' => 'Connect import data to Firefly III data',
|
||||
'map_text' => 'In the following tables, the left value shows you information found in your uploaded CSV file. It is your task to map this value, if possible, to a value already present in your database. Firefly will stick to this mapping. If there is no value to map to, or you do not wish to map the specific value, select nothing.',
|
||||
|
||||
'field_value' => 'Field value',
|
||||
'field_mapped_to' => 'Mapped to',
|
||||
'store_column_mapping' => 'Store mapping',
|
||||
|
||||
// map things.
|
||||
|
||||
|
||||
'column__ignore' => '(ignore this column)',
|
||||
'column_account-iban' => 'Asset account (IBAN)',
|
||||
'column_account-id' => 'Asset account ID (matching Firefly)',
|
||||
'column_account-name' => 'Asset account (name)',
|
||||
'column_amount' => 'Amount',
|
||||
'column_amount-comma-separated' => 'Amount (comma as decimal separator)',
|
||||
'column_bill-id' => 'Bill ID (matching Firefly)',
|
||||
'column_bill-name' => 'Bill name',
|
||||
'column_budget-id' => 'Budget ID (matching Firefly)',
|
||||
'column_budget-name' => 'Budget name',
|
||||
'column_category-id' => 'Category ID (matching Firefly)',
|
||||
'column_category-name' => 'Category name',
|
||||
'column_currency-code' => 'Currency code (ISO 4217)',
|
||||
'column_currency-id' => 'Currency ID (matching Firefly)',
|
||||
'column_currency-name' => 'Currency name (matching Firefly)',
|
||||
'column_currency-symbol' => 'Currency symbol (matching Firefly)',
|
||||
'column_date-interest' => 'Interest calculation date',
|
||||
'column_date-book' => 'Transaction booking date',
|
||||
'column_date-process' => 'Transaction process date',
|
||||
'column_date-transaction' => 'Date',
|
||||
'column_description' => 'Description',
|
||||
'column_opposing-iban' => 'Opposing account (IBAN)',
|
||||
'column_opposing-id' => 'Opposing account ID (matching Firefly)',
|
||||
'column_external-id' => 'External ID',
|
||||
'column_opposing-name' => 'Opposing account (name)',
|
||||
'column_rabo-debet-credit' => 'Rabobank specific debet/credit indicator',
|
||||
'column_ing-debet-credit' => 'ING specific debet/credit indicator',
|
||||
'column_sepa-ct-id' => 'SEPA Credit Transfer end-to-end ID',
|
||||
'column_sepa-ct-op' => 'SEPA Credit Transfer opposing account',
|
||||
'column_sepa-db' => 'SEPA Direct Debet',
|
||||
'column_tags-comma' => 'Tags (comma separated)',
|
||||
'column_tags-space' => 'Tags (space separated)',
|
||||
'column_account-number' => 'Asset account (account number)',
|
||||
'column_opposing-number' => 'Opposing account (account number)',
|
||||
];
|
@@ -1,24 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* demo.php
|
||||
* Copyright (c) 2016 thegrumpydictator@gmail.com
|
||||
* This software may be modified and distributed under the terms of the Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
'no_demo_text' => 'Sorry, there is no extra demo-explanation text for <abbr title=":route">this page</abbr>.',
|
||||
'see_help_icon' => 'However, the <i class="fa fa-question-circle"></i>-icon in the top right corner may tell you more.',
|
||||
'index' => 'Welcome to <strong>Firefly III</strong>! On this page you get a quick overview of your finances. For more information, check out Accounts → <a href=":asset">Asset Accounts</a> and of course the <a href=":budgets">Budgets</a> and <a href=":reports">Reports</a> pages. Or just take a look around and see where you end up.',
|
||||
'accounts-index' => 'Asset accounts are your personal bank accounts. Expense accounts are the accounts you spend money at, such as stores and friends. Revenue accounts are accounts you receive money from, such as your job, the government or other sources of income. On this page you can edit or remove them.',
|
||||
'budgets-index' => 'This page shows you an overview of your budgets. The top bar shows the amount that is available to be budgeted. This can be customized for any period by clicking the amount on the right. The amount you\'ve actually spent is shown in the bar below. Below that are the expenses per budget and what you\'ve budgeted for them.',
|
||||
'reports-index-start' => 'Firefly III supports four types of reports. Read about them by clicking on the <i class="fa fa-question-circle"></i>-icon in the top right corner.',
|
||||
'reports-index-examples' => 'Be sure to check out these examples: <a href=":one">a monthly financial overview</a>, <a href=":two">a yearly financial overview</a> and <a href=":three">a budget overview</a>.',
|
||||
'currencies-index' => 'Firefly III supports multiple currencies. Although it defaults to the Euro it can be set to the US Dollar and many other currencies. As you can see a small selection of currencies has been included but you can add your own if you wish to. Changing the default currency will not change the currency of existing transactions however: Firefly III supports the use of multiple currencies at the same time.',
|
||||
'transactions-index' => 'These expenses, deposits and transfers are not particularly imaginative. They have been generated automatically.',
|
||||
'piggy-banks-index' => 'As you can see, there are three piggy banks. Use the plus and minus buttons to influence the amount of money in each piggy bank. Click the name of the piggy bank to see the administration for each piggy bank.',
|
||||
'import-index' => 'Of course, any CSV file can be imported into Firefly III ',
|
||||
'import-configure-security' => 'Because of security concerns, your upload has been replaced with a local file.',
|
||||
'import-configure-configuration' => 'The configuration you see below is correct for the local file.',
|
||||
];
|
File diff suppressed because it is too large
Load Diff
@@ -1,189 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* form.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
// new user:
|
||||
'bank_name' => 'Bank name',
|
||||
'bank_balance' => 'Balance',
|
||||
'savings_balance' => 'Savings balance',
|
||||
'credit_card_limit' => 'Credit card limit',
|
||||
'automatch' => 'Match automatically',
|
||||
'skip' => 'Skip',
|
||||
'name' => 'Name',
|
||||
'active' => 'Active',
|
||||
'amount_min' => 'Minimum amount',
|
||||
'amount_max' => 'Maximum amount',
|
||||
'match' => 'Matches on',
|
||||
'repeat_freq' => 'Repeats',
|
||||
'journal_currency_id' => 'Currency',
|
||||
'currency_id' => 'Currency',
|
||||
'attachments' => 'Attachments',
|
||||
'journal_amount' => 'Amount',
|
||||
'journal_asset_source_account' => 'Asset account (source)',
|
||||
'journal_source_account_name' => 'Revenue account (source)',
|
||||
'journal_source_account_id' => 'Asset account (source)',
|
||||
'BIC' => 'BIC',
|
||||
'account_from_id' => 'From account',
|
||||
'account_to_id' => 'To account',
|
||||
'source_account' => 'Source account',
|
||||
'destination_account' => 'Destination account',
|
||||
'journal_destination_account_id' => 'Asset account (destination)',
|
||||
'asset_destination_account' => 'Asset account (destination)',
|
||||
'asset_source_account' => 'Asset account (source)',
|
||||
'journal_description' => 'Description',
|
||||
'note' => 'Notes',
|
||||
'split_journal' => 'Split this transaction',
|
||||
'split_journal_explanation' => 'Split this transaction in multiple parts',
|
||||
'currency' => 'Currency',
|
||||
'account_id' => 'Asset account',
|
||||
'budget_id' => 'Budget',
|
||||
'openingBalance' => 'Opening balance',
|
||||
'tagMode' => 'Tag mode',
|
||||
'tagPosition' => 'Tag location',
|
||||
'virtualBalance' => 'Virtual balance',
|
||||
'longitude_latitude' => 'Location',
|
||||
'targetamount' => 'Target amount',
|
||||
'accountRole' => 'Account role',
|
||||
'openingBalanceDate' => 'Opening balance date',
|
||||
'ccType' => 'Credit card payment plan',
|
||||
'ccMonthlyPaymentDate' => 'Credit card monthly payment date',
|
||||
'piggy_bank_id' => 'Piggy bank',
|
||||
'returnHere' => 'Return here',
|
||||
'returnHereExplanation' => 'After storing, return here to create another one.',
|
||||
'returnHereUpdateExplanation' => 'After updating, return here.',
|
||||
'description' => 'Description',
|
||||
'expense_account' => 'Expense account',
|
||||
'revenue_account' => 'Revenue account',
|
||||
'decimal_places' => 'Decimal places',
|
||||
'exchange_rate_instruction' => 'Foreign currencies',
|
||||
'exchanged_amount' => 'Exchanged amount',
|
||||
'source_amount' => 'Amount (source)',
|
||||
'destination_amount' => 'Amount (destination)',
|
||||
'native_amount' => 'Native amount',
|
||||
|
||||
'revenue_account_source' => 'Revenue account (source)',
|
||||
'source_account_asset' => 'Source account (asset account)',
|
||||
'destination_account_expense' => 'Destination account (expense account)',
|
||||
'destination_account_asset' => 'Destination account (asset account)',
|
||||
'source_account_revenue' => 'Source account (revenue account)',
|
||||
'type' => 'Type',
|
||||
'convert_Withdrawal' => 'Convert withdrawal',
|
||||
'convert_Deposit' => 'Convert deposit',
|
||||
'convert_Transfer' => 'Convert transfer',
|
||||
|
||||
|
||||
'amount' => 'Amount',
|
||||
'date' => 'Date',
|
||||
'interest_date' => 'Interest date',
|
||||
'book_date' => 'Book date',
|
||||
'process_date' => 'Processing date',
|
||||
'category' => 'Category',
|
||||
'tags' => 'Tags',
|
||||
'deletePermanently' => 'Delete permanently',
|
||||
'cancel' => 'Cancel',
|
||||
'targetdate' => 'Target date',
|
||||
'tag' => 'Tag',
|
||||
'under' => 'Under',
|
||||
'symbol' => 'Symbol',
|
||||
'code' => 'Code',
|
||||
'iban' => 'IBAN',
|
||||
'accountNumber' => 'Account number',
|
||||
'has_headers' => 'Headers',
|
||||
'date_format' => 'Date format',
|
||||
'specifix' => 'Bank- or file specific fixes',
|
||||
'attachments[]' => 'Attachments',
|
||||
'store_new_withdrawal' => 'Store new withdrawal',
|
||||
'store_new_deposit' => 'Store new deposit',
|
||||
'store_new_transfer' => 'Store new transfer',
|
||||
'add_new_withdrawal' => 'Add a new withdrawal',
|
||||
'add_new_deposit' => 'Add a new deposit',
|
||||
'add_new_transfer' => 'Add a new transfer',
|
||||
'noPiggybank' => '(no piggy bank)',
|
||||
'title' => 'Title',
|
||||
'notes' => 'Notes',
|
||||
'filename' => 'File name',
|
||||
'mime' => 'Mime type',
|
||||
'size' => 'Size',
|
||||
'trigger' => 'Trigger',
|
||||
'stop_processing' => 'Stop processing',
|
||||
'start_date' => 'Start of range',
|
||||
'end_date' => 'End of range',
|
||||
'export_start_range' => 'Start of export range',
|
||||
'export_end_range' => 'End of export range',
|
||||
'export_format' => 'File format',
|
||||
'include_attachments' => 'Include uploaded attachments',
|
||||
'include_old_uploads' => 'Include imported data',
|
||||
'accounts' => 'Export transactions from these accounts',
|
||||
'delete_account' => 'Delete account ":name"',
|
||||
'delete_bill' => 'Delete bill ":name"',
|
||||
'delete_budget' => 'Delete budget ":name"',
|
||||
'delete_category' => 'Delete category ":name"',
|
||||
'delete_currency' => 'Delete currency ":name"',
|
||||
'delete_journal' => 'Delete transaction with description ":description"',
|
||||
'delete_attachment' => 'Delete attachment ":name"',
|
||||
'delete_rule' => 'Delete rule ":title"',
|
||||
'delete_rule_group' => 'Delete rule group ":title"',
|
||||
'attachment_areYouSure' => 'Are you sure you want to delete the attachment named ":name"?',
|
||||
'account_areYouSure' => 'Are you sure you want to delete the account named ":name"?',
|
||||
'bill_areYouSure' => 'Are you sure you want to delete the bill named ":name"?',
|
||||
'rule_areYouSure' => 'Are you sure you want to delete the rule titled ":title"?',
|
||||
'ruleGroup_areYouSure' => 'Are you sure you want to delete the rule group titled ":title"?',
|
||||
'budget_areYouSure' => 'Are you sure you want to delete the budget named ":name"?',
|
||||
'category_areYouSure' => 'Are you sure you want to delete the category named ":name"?',
|
||||
'currency_areYouSure' => 'Are you sure you want to delete the currency named ":name"?',
|
||||
'piggyBank_areYouSure' => 'Are you sure you want to delete the piggy bank named ":name"?',
|
||||
'journal_areYouSure' => 'Are you sure you want to delete the transaction described ":description"?',
|
||||
'mass_journal_are_you_sure' => 'Are you sure you want to delete these transactions?',
|
||||
'tag_areYouSure' => 'Are you sure you want to delete the tag ":tag"?',
|
||||
'permDeleteWarning' => 'Deleting stuff from Firely is permanent and cannot be undone.',
|
||||
'mass_make_selection' => 'You can still prevent items from being deleted by removing the checkbox.',
|
||||
'delete_all_permanently' => 'Delete selected permanently',
|
||||
'update_all_journals' => 'Update these transactions',
|
||||
'also_delete_transactions' => 'The only transaction connected to this account will be deleted as well.|All :count transactions connected to this account will be deleted as well.',
|
||||
'also_delete_rules' => 'The only rule connected to this rule group will be deleted as well.|All :count rules connected to this rule group will be deleted as well.',
|
||||
'also_delete_piggyBanks' => 'The only piggy bank connected to this account will be deleted as well.|All :count piggy bank connected to this account will be deleted as well.',
|
||||
'bill_keep_transactions' => 'The only transaction connected to this bill will not be deleted.|All :count transactions connected to this bill will spared deletion.',
|
||||
'budget_keep_transactions' => 'The only transaction connected to this budget will not be deleted.|All :count transactions connected to this budget will spared deletion.',
|
||||
'category_keep_transactions' => 'The only transaction connected to this category will not be deleted.|All :count transactions connected to this category will spared deletion.',
|
||||
'tag_keep_transactions' => 'The only transaction connected to this tag will not be deleted.|All :count transactions connected to this tag will spared deletion.',
|
||||
|
||||
'email' => 'Email address',
|
||||
'password' => 'Password',
|
||||
'password_confirmation' => 'Password (again)',
|
||||
'blocked' => 'Is blocked?',
|
||||
'blocked_code' => 'Reason for block',
|
||||
|
||||
|
||||
// admin
|
||||
'domain' => 'Domain',
|
||||
'single_user_mode' => 'Single user mode',
|
||||
'must_confirm_account' => 'New users must activate account',
|
||||
'is_demo_site' => 'Is demo site',
|
||||
|
||||
|
||||
// import
|
||||
'import_file' => 'Import file',
|
||||
'configuration_file' => 'Configuration file',
|
||||
'import_file_type' => 'Import file type',
|
||||
'csv_comma' => 'A comma (,)',
|
||||
'csv_semicolon' => 'A semicolon (;)',
|
||||
'csv_tab' => 'A tab (invisible)',
|
||||
'csv_delimiter' => 'CSV field delimiter',
|
||||
'csv_import_account' => 'Default import account',
|
||||
'csv_config' => 'CSV import configuration',
|
||||
|
||||
|
||||
'due_date' => 'Due date',
|
||||
'payment_date' => 'Payment date',
|
||||
'invoice_date' => 'Invoice date',
|
||||
'internal_reference' => 'Internal reference',
|
||||
];
|
@@ -1,33 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* help.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
// tour!
|
||||
'main-content-title' => 'Welcome to Firefly III',
|
||||
'main-content-text' => 'Do yourself a favor and follow this short guide to make sure you know your way around.',
|
||||
'sidebar-toggle-title' => 'Sidebar to create stuff',
|
||||
'sidebar-toggle-text' => 'Hidden under the plus icon are all the buttons to create new stuff. Accounts, transactions, everything!',
|
||||
'account-menu-title' => 'All your accounts',
|
||||
'account-menu-text' => 'Here you can find all the accounts you\'ve made.',
|
||||
'budget-menu-title' => 'Budgets',
|
||||
'budget-menu-text' => 'Use this page to organise your finances and limit spending.',
|
||||
'report-menu-title' => 'Reports',
|
||||
'report-menu-text' => 'Check this out when you want a solid overview of your finances.',
|
||||
'transaction-menu-title' => 'Transactions',
|
||||
'transaction-menu-text' => 'All transactions you\'ve created can be found here.',
|
||||
'option-menu-title' => 'Options',
|
||||
'option-menu-text' => 'This is pretty self-explanatory.',
|
||||
'main-content-end-title' => 'The end!',
|
||||
'main-content-end-text' => 'Remember that every page has a small question mark at the right top. Click it to get help about the page you\'re on.',
|
||||
'index' => 'index',
|
||||
'home' => 'home',
|
||||
];
|
@@ -1,89 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* list.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
'buttons' => 'Buttons',
|
||||
'icon' => 'Icon',
|
||||
'id' => 'ID',
|
||||
'create_date' => 'Created at',
|
||||
'update_date' => 'Updated at',
|
||||
'balance_before' => 'Balance before',
|
||||
'balance_after' => 'Balance after',
|
||||
'name' => 'Name',
|
||||
'role' => 'Role',
|
||||
'currentBalance' => 'Current balance',
|
||||
'active' => 'Is active?',
|
||||
'lastActivity' => 'Last activity',
|
||||
'balanceDiff' => 'Balance difference between :start and :end',
|
||||
'matchedOn' => 'Matched on',
|
||||
'matchesOn' => 'Matched on',
|
||||
'account_type' => 'Account type',
|
||||
'created_at' => 'Created at',
|
||||
'new_balance' => 'New balance',
|
||||
'account' => 'Account',
|
||||
'matchingAmount' => 'Amount',
|
||||
'lastMatch' => 'Last match',
|
||||
'split_number' => 'Split #',
|
||||
'destination' => 'Destination',
|
||||
'source' => 'Source',
|
||||
'next_expected_match' => 'Next expected match',
|
||||
'automatch' => 'Auto match?',
|
||||
'repeat_freq' => 'Repeats',
|
||||
'description' => 'Description',
|
||||
'amount' => 'Amount',
|
||||
'internal_reference' => 'Internal reference',
|
||||
'date' => 'Date',
|
||||
'interest_date' => 'Interest date',
|
||||
'book_date' => 'Book date',
|
||||
'process_date' => 'Processing date',
|
||||
'due_date' => 'Due date',
|
||||
'payment_date' => 'Payment date',
|
||||
'invoice_date' => 'Invoice date',
|
||||
'interal_reference' => 'Internal reference',
|
||||
'notes' => 'Notes',
|
||||
'from' => 'From',
|
||||
'piggy_bank' => 'Piggy bank',
|
||||
'to' => 'To',
|
||||
'budget' => 'Budget',
|
||||
'category' => 'Category',
|
||||
'bill' => 'Bill',
|
||||
'withdrawal' => 'Withdrawal',
|
||||
'deposit' => 'Deposit',
|
||||
'transfer' => 'Transfer',
|
||||
'type' => 'Type',
|
||||
'completed' => 'Completed',
|
||||
'iban' => 'IBAN',
|
||||
'paid_current_period' => 'Paid this period',
|
||||
'email' => 'Email',
|
||||
'registered_at' => 'Registered at',
|
||||
'is_activated' => 'Is activated',
|
||||
'is_blocked' => 'Is blocked',
|
||||
'is_admin' => 'Is admin',
|
||||
'has_two_factor' => 'Has 2FA',
|
||||
'confirmed_from' => 'Confirmed from',
|
||||
'registered_from' => 'Registered from',
|
||||
'blocked_code' => 'Block code',
|
||||
'domain' => 'Domain',
|
||||
'registration_attempts' => 'Registration attempts',
|
||||
'source_account' => 'Source account',
|
||||
'destination_account' => 'Destination account',
|
||||
|
||||
'accounts_count' => 'Number of accounts',
|
||||
'journals_count' => 'Number of transactions',
|
||||
'attachments_count' => 'Number of attachments',
|
||||
'bills_count' => 'Number of bills',
|
||||
'categories_count' => 'Number of categories',
|
||||
'export_jobs_count' => 'Number of export jobs',
|
||||
'import_jobs_count' => 'Number of import jobs',
|
||||
'budget_count' => 'Number of budgets',
|
||||
'rule_and_groups_count' => 'Number of rules and rule groups',
|
||||
'tags_count' => 'Number of tags',
|
||||
];
|
@@ -1,17 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* pagination.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
'previous' => '« Prethodna',
|
||||
'next' => 'Sljedeća »',
|
||||
|
||||
];
|
@@ -1,19 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* passwords.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
'password' => 'Passwords must be at least six characters and match the confirmation.',
|
||||
'user' => 'Ne možemo naći korisnika s tom e-mail adresom.',
|
||||
'token' => 'Token za promjenu lozinke je nevažeći.',
|
||||
'sent' => 'Na e-mail smo ti poslali poveznicu za promjenu lozinke!',
|
||||
'reset' => 'Tvoja lozinka je promijenjena!',
|
||||
'blocked' => 'Lijep pokušaj.',
|
||||
];
|
@@ -1,28 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* auth.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used during authentication for various
|
||||
| messages that we need to display to the user. You are free to modify
|
||||
| these language lines according to your application's requirements.
|
||||
|
|
||||
*/
|
||||
|
||||
'failed' => 'Неправильный адрес электронной почты или пароль.',
|
||||
'throttle' => 'Слишком много попыток логина. Пожалуйста, попробуйте снова через :seconds секунд.',
|
||||
|
||||
];
|
@@ -1,41 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* breadcrumbs.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
'home' => 'Главная',
|
||||
'edit_currency' => 'Edit currency ":name"',
|
||||
'delete_currency' => 'Delete currency ":name"',
|
||||
'newPiggyBank' => 'Создать новую копилку',
|
||||
'edit_piggyBank' => 'Редактировать копилку ":name"',
|
||||
'preferences' => 'Параметры',
|
||||
'profile' => 'Профиль',
|
||||
'changePassword' => 'Сменить пароль',
|
||||
'bills' => 'Счета',
|
||||
'newBill' => 'Новый счет',
|
||||
'edit_bill' => 'Редактировать счет ":name"',
|
||||
'delete_bill' => 'Удалить счет ":name"',
|
||||
'reports' => 'Отчёты',
|
||||
'searchResult' => 'Поиск ":query"',
|
||||
'withdrawal_list' => 'Расходы',
|
||||
'deposit_list' => 'Доходы и депозиты',
|
||||
'transfer_list' => 'Переводы',
|
||||
'transfers_list' => 'Переводы',
|
||||
'create_withdrawal' => 'Создать новый вывод средств',
|
||||
'create_deposit' => 'Создать новый депозит',
|
||||
'create_transfer' => 'Создать новый перевод',
|
||||
'edit_journal' => 'Редактировать транзакцию ":description"',
|
||||
'delete_journal' => 'Удалить транзакцию ":description"',
|
||||
'tags' => 'Теги',
|
||||
'createTag' => 'Создать новый тег',
|
||||
'edit_tag' => 'Редактировать тег ":tag"',
|
||||
'delete_tag' => 'Удалить тег ":tag"',
|
||||
];
|
@@ -1,23 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* config.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
'locale' => 'ru, Russian, ru_RU, ru_RU.utf8, ru_RU.UTF-8',
|
||||
'month' => '%B %Y',
|
||||
'month_and_day' => '%B %e, %Y',
|
||||
'date_time' => '%B %e, %Y, @ %T',
|
||||
'specific_day' => '%e %B %Y',
|
||||
'week_in_year' => 'Неделя %W, %Y',
|
||||
'quarter_of_year' => '%B %Y',
|
||||
'year' => '%Y',
|
||||
'half_year' => '%B %Y',
|
||||
|
||||
];
|
@@ -1,80 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* csv.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
|
||||
'import_configure_title' => 'Настройки импорта',
|
||||
'import_configure_intro' => 'Есть несколько вариантов для импорта CSV. Пожалуйста, укажите, содержит ли CSV-файл заголовки в первом столбце, и каков формат даты в вашем поле даты. Возможно, придется немного поэкспериментировать. Разделитель полей обычно «,», но также может быть «;». Внимательно проверьте это.',
|
||||
'import_configure_form' => 'Основные параметры импорта CSV',
|
||||
'header_help' => 'Проверьте, если первая строка CSV файла - это заголовки столбцов',
|
||||
'date_help' => 'Формат даты и времени в CSV файле. Следуйте формату, как показывает <a href="https://secure.php.net/manual/en/datetime.createfromformat.php#refsect1-datetime.createfromformat-parameters"> на этой </a> странице. По умолчанию будет анализироваться даты, которые выглядят следующим образом: :dateExample.',
|
||||
'delimiter_help' => 'Выберите разделитель полей, который используется в вашем файле. Если не уверены, запятая - самый безопасный вариант.',
|
||||
'import_account_help' => 'If your CSV file does NOT contain information about your asset account(s), use this dropdown to select to which account the transactions in the CSV belong to.',
|
||||
'upload_not_writeable' => 'The grey box contains a file path. It should be writeable. Please make sure it is.',
|
||||
|
||||
// roles
|
||||
'column_roles_title' => 'Define column roles',
|
||||
'column_roles_table' => 'Table',
|
||||
'column_name' => 'Name of column',
|
||||
'column_example' => 'Column example data',
|
||||
'column_role' => 'Column data meaning',
|
||||
'do_map_value' => 'Map these values',
|
||||
'column' => 'Column',
|
||||
'no_example_data' => 'No example data available',
|
||||
'store_column_roles' => 'Continue import',
|
||||
'do_not_map' => '(do not map)',
|
||||
'map_title' => 'Connect import data to Firefly III data',
|
||||
'map_text' => 'In the following tables, the left value shows you information found in your uploaded CSV file. It is your task to map this value, if possible, to a value already present in your database. Firefly will stick to this mapping. If there is no value to map to, or you do not wish to map the specific value, select nothing.',
|
||||
|
||||
'field_value' => 'Field value',
|
||||
'field_mapped_to' => 'Mapped to',
|
||||
'store_column_mapping' => 'Store mapping',
|
||||
|
||||
// map things.
|
||||
|
||||
|
||||
'column__ignore' => '(ignore this column)',
|
||||
'column_account-iban' => 'Asset account (IBAN)',
|
||||
'column_account-id' => 'Asset account ID (matching Firefly)',
|
||||
'column_account-name' => 'Asset account (name)',
|
||||
'column_amount' => 'Amount',
|
||||
'column_amount-comma-separated' => 'Amount (comma as decimal separator)',
|
||||
'column_bill-id' => 'Bill ID (matching Firefly)',
|
||||
'column_bill-name' => 'Bill name',
|
||||
'column_budget-id' => 'Budget ID (matching Firefly)',
|
||||
'column_budget-name' => 'Budget name',
|
||||
'column_category-id' => 'Category ID (matching Firefly)',
|
||||
'column_category-name' => 'Category name',
|
||||
'column_currency-code' => 'Currency code (ISO 4217)',
|
||||
'column_currency-id' => 'Currency ID (matching Firefly)',
|
||||
'column_currency-name' => 'Currency name (matching Firefly)',
|
||||
'column_currency-symbol' => 'Currency symbol (matching Firefly)',
|
||||
'column_date-interest' => 'Interest calculation date',
|
||||
'column_date-book' => 'Transaction booking date',
|
||||
'column_date-process' => 'Transaction process date',
|
||||
'column_date-transaction' => 'Date',
|
||||
'column_description' => 'Description',
|
||||
'column_opposing-iban' => 'Opposing account (IBAN)',
|
||||
'column_opposing-id' => 'Opposing account ID (matching Firefly)',
|
||||
'column_external-id' => 'External ID',
|
||||
'column_opposing-name' => 'Opposing account (name)',
|
||||
'column_rabo-debet-credit' => 'Rabobank specific debet/credit indicator',
|
||||
'column_ing-debet-credit' => 'ING specific debet/credit indicator',
|
||||
'column_sepa-ct-id' => 'SEPA Credit Transfer end-to-end ID',
|
||||
'column_sepa-ct-op' => 'SEPA Credit Transfer opposing account',
|
||||
'column_sepa-db' => 'SEPA Direct Debet',
|
||||
'column_tags-comma' => 'Tags (comma separated)',
|
||||
'column_tags-space' => 'Tags (space separated)',
|
||||
'column_account-number' => 'Asset account (account number)',
|
||||
'column_opposing-number' => 'Opposing account (account number)',
|
||||
];
|
@@ -1,24 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* demo.php
|
||||
* Copyright (c) 2016 thegrumpydictator@gmail.com
|
||||
* This software may be modified and distributed under the terms of the Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
'no_demo_text' => 'Sorry, there is no extra demo-explanation text for <abbr title=":route">this page</abbr>.',
|
||||
'see_help_icon' => 'However, the <i class="fa fa-question-circle"></i>-icon in the top right corner may tell you more.',
|
||||
'index' => 'Welcome to <strong>Firefly III</strong>! On this page you get a quick overview of your finances. For more information, check out Accounts → <a href=":asset">Asset Accounts</a> and of course the <a href=":budgets">Budgets</a> and <a href=":reports">Reports</a> pages. Or just take a look around and see where you end up.',
|
||||
'accounts-index' => 'Asset accounts are your personal bank accounts. Expense accounts are the accounts you spend money at, such as stores and friends. Revenue accounts are accounts you receive money from, such as your job, the government or other sources of income. On this page you can edit or remove them.',
|
||||
'budgets-index' => 'This page shows you an overview of your budgets. The top bar shows the amount that is available to be budgeted. This can be customized for any period by clicking the amount on the right. The amount you\'ve actually spent is shown in the bar below. Below that are the expenses per budget and what you\'ve budgeted for them.',
|
||||
'reports-index-start' => 'Firefly III supports four types of reports. Read about them by clicking on the <i class="fa fa-question-circle"></i>-icon in the top right corner.',
|
||||
'reports-index-examples' => 'Be sure to check out these examples: <a href=":one">a monthly financial overview</a>, <a href=":two">a yearly financial overview</a> and <a href=":three">a budget overview</a>.',
|
||||
'currencies-index' => 'Firefly III supports multiple currencies. Although it defaults to the Euro it can be set to the US Dollar and many other currencies. As you can see a small selection of currencies has been included but you can add your own if you wish to. Changing the default currency will not change the currency of existing transactions however: Firefly III supports the use of multiple currencies at the same time.',
|
||||
'transactions-index' => 'These expenses, deposits and transfers are not particularly imaginative. They have been generated automatically.',
|
||||
'piggy-banks-index' => 'As you can see, there are three piggy banks. Use the plus and minus buttons to influence the amount of money in each piggy bank. Click the name of the piggy bank to see the administration for each piggy bank.',
|
||||
'import-index' => 'Of course, any CSV file can be imported into Firefly III ',
|
||||
'import-configure-security' => 'Because of security concerns, your upload has been replaced with a local file.',
|
||||
'import-configure-configuration' => 'The configuration you see below is correct for the local file.',
|
||||
];
|
File diff suppressed because it is too large
Load Diff
@@ -1,189 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* form.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
// new user:
|
||||
'bank_name' => 'Bank name',
|
||||
'bank_balance' => 'Balance',
|
||||
'savings_balance' => 'Savings balance',
|
||||
'credit_card_limit' => 'Credit card limit',
|
||||
'automatch' => 'Match automatically',
|
||||
'skip' => 'Skip',
|
||||
'name' => 'Name',
|
||||
'active' => 'Active',
|
||||
'amount_min' => 'Minimum amount',
|
||||
'amount_max' => 'Maximum amount',
|
||||
'match' => 'Matches on',
|
||||
'repeat_freq' => 'Repeats',
|
||||
'journal_currency_id' => 'Currency',
|
||||
'currency_id' => 'Currency',
|
||||
'attachments' => 'Attachments',
|
||||
'journal_amount' => 'Amount',
|
||||
'journal_asset_source_account' => 'Asset account (source)',
|
||||
'journal_source_account_name' => 'Revenue account (source)',
|
||||
'journal_source_account_id' => 'Asset account (source)',
|
||||
'BIC' => 'BIC',
|
||||
'account_from_id' => 'From account',
|
||||
'account_to_id' => 'To account',
|
||||
'source_account' => 'Source account',
|
||||
'destination_account' => 'Destination account',
|
||||
'journal_destination_account_id' => 'Asset account (destination)',
|
||||
'asset_destination_account' => 'Asset account (destination)',
|
||||
'asset_source_account' => 'Asset account (source)',
|
||||
'journal_description' => 'Description',
|
||||
'note' => 'Notes',
|
||||
'split_journal' => 'Split this transaction',
|
||||
'split_journal_explanation' => 'Split this transaction in multiple parts',
|
||||
'currency' => 'Currency',
|
||||
'account_id' => 'Asset account',
|
||||
'budget_id' => 'Budget',
|
||||
'openingBalance' => 'Opening balance',
|
||||
'tagMode' => 'Tag mode',
|
||||
'tagPosition' => 'Tag location',
|
||||
'virtualBalance' => 'Virtual balance',
|
||||
'longitude_latitude' => 'Location',
|
||||
'targetamount' => 'Target amount',
|
||||
'accountRole' => 'Account role',
|
||||
'openingBalanceDate' => 'Opening balance date',
|
||||
'ccType' => 'Credit card payment plan',
|
||||
'ccMonthlyPaymentDate' => 'Credit card monthly payment date',
|
||||
'piggy_bank_id' => 'Piggy bank',
|
||||
'returnHere' => 'Return here',
|
||||
'returnHereExplanation' => 'After storing, return here to create another one.',
|
||||
'returnHereUpdateExplanation' => 'After updating, return here.',
|
||||
'description' => 'Description',
|
||||
'expense_account' => 'Expense account',
|
||||
'revenue_account' => 'Revenue account',
|
||||
'decimal_places' => 'Decimal places',
|
||||
'exchange_rate_instruction' => 'Foreign currencies',
|
||||
'exchanged_amount' => 'Exchanged amount',
|
||||
'source_amount' => 'Amount (source)',
|
||||
'destination_amount' => 'Amount (destination)',
|
||||
'native_amount' => 'Native amount',
|
||||
|
||||
'revenue_account_source' => 'Revenue account (source)',
|
||||
'source_account_asset' => 'Source account (asset account)',
|
||||
'destination_account_expense' => 'Destination account (expense account)',
|
||||
'destination_account_asset' => 'Destination account (asset account)',
|
||||
'source_account_revenue' => 'Source account (revenue account)',
|
||||
'type' => 'Type',
|
||||
'convert_Withdrawal' => 'Convert withdrawal',
|
||||
'convert_Deposit' => 'Convert deposit',
|
||||
'convert_Transfer' => 'Convert transfer',
|
||||
|
||||
|
||||
'amount' => 'Amount',
|
||||
'date' => 'Date',
|
||||
'interest_date' => 'Interest date',
|
||||
'book_date' => 'Book date',
|
||||
'process_date' => 'Processing date',
|
||||
'category' => 'Category',
|
||||
'tags' => 'Tags',
|
||||
'deletePermanently' => 'Delete permanently',
|
||||
'cancel' => 'Cancel',
|
||||
'targetdate' => 'Target date',
|
||||
'tag' => 'Tag',
|
||||
'under' => 'Under',
|
||||
'symbol' => 'Symbol',
|
||||
'code' => 'Code',
|
||||
'iban' => 'IBAN',
|
||||
'accountNumber' => 'Account number',
|
||||
'has_headers' => 'Headers',
|
||||
'date_format' => 'Date format',
|
||||
'specifix' => 'Bank- or file specific fixes',
|
||||
'attachments[]' => 'Attachments',
|
||||
'store_new_withdrawal' => 'Store new withdrawal',
|
||||
'store_new_deposit' => 'Store new deposit',
|
||||
'store_new_transfer' => 'Store new transfer',
|
||||
'add_new_withdrawal' => 'Add a new withdrawal',
|
||||
'add_new_deposit' => 'Add a new deposit',
|
||||
'add_new_transfer' => 'Add a new transfer',
|
||||
'noPiggybank' => '(no piggy bank)',
|
||||
'title' => 'Title',
|
||||
'notes' => 'Notes',
|
||||
'filename' => 'File name',
|
||||
'mime' => 'Mime type',
|
||||
'size' => 'Size',
|
||||
'trigger' => 'Trigger',
|
||||
'stop_processing' => 'Stop processing',
|
||||
'start_date' => 'Start of range',
|
||||
'end_date' => 'End of range',
|
||||
'export_start_range' => 'Start of export range',
|
||||
'export_end_range' => 'End of export range',
|
||||
'export_format' => 'File format',
|
||||
'include_attachments' => 'Include uploaded attachments',
|
||||
'include_old_uploads' => 'Include imported data',
|
||||
'accounts' => 'Export transactions from these accounts',
|
||||
'delete_account' => 'Delete account ":name"',
|
||||
'delete_bill' => 'Delete bill ":name"',
|
||||
'delete_budget' => 'Delete budget ":name"',
|
||||
'delete_category' => 'Delete category ":name"',
|
||||
'delete_currency' => 'Delete currency ":name"',
|
||||
'delete_journal' => 'Delete transaction with description ":description"',
|
||||
'delete_attachment' => 'Delete attachment ":name"',
|
||||
'delete_rule' => 'Delete rule ":title"',
|
||||
'delete_rule_group' => 'Delete rule group ":title"',
|
||||
'attachment_areYouSure' => 'Are you sure you want to delete the attachment named ":name"?',
|
||||
'account_areYouSure' => 'Are you sure you want to delete the account named ":name"?',
|
||||
'bill_areYouSure' => 'Are you sure you want to delete the bill named ":name"?',
|
||||
'rule_areYouSure' => 'Are you sure you want to delete the rule titled ":title"?',
|
||||
'ruleGroup_areYouSure' => 'Are you sure you want to delete the rule group titled ":title"?',
|
||||
'budget_areYouSure' => 'Are you sure you want to delete the budget named ":name"?',
|
||||
'category_areYouSure' => 'Are you sure you want to delete the category named ":name"?',
|
||||
'currency_areYouSure' => 'Are you sure you want to delete the currency named ":name"?',
|
||||
'piggyBank_areYouSure' => 'Are you sure you want to delete the piggy bank named ":name"?',
|
||||
'journal_areYouSure' => 'Are you sure you want to delete the transaction described ":description"?',
|
||||
'mass_journal_are_you_sure' => 'Are you sure you want to delete these transactions?',
|
||||
'tag_areYouSure' => 'Are you sure you want to delete the tag ":tag"?',
|
||||
'permDeleteWarning' => 'Deleting stuff from Firely is permanent and cannot be undone.',
|
||||
'mass_make_selection' => 'You can still prevent items from being deleted by removing the checkbox.',
|
||||
'delete_all_permanently' => 'Delete selected permanently',
|
||||
'update_all_journals' => 'Update these transactions',
|
||||
'also_delete_transactions' => 'The only transaction connected to this account will be deleted as well.|All :count transactions connected to this account will be deleted as well.',
|
||||
'also_delete_rules' => 'The only rule connected to this rule group will be deleted as well.|All :count rules connected to this rule group will be deleted as well.',
|
||||
'also_delete_piggyBanks' => 'The only piggy bank connected to this account will be deleted as well.|All :count piggy bank connected to this account will be deleted as well.',
|
||||
'bill_keep_transactions' => 'The only transaction connected to this bill will not be deleted.|All :count transactions connected to this bill will spared deletion.',
|
||||
'budget_keep_transactions' => 'The only transaction connected to this budget will not be deleted.|All :count transactions connected to this budget will spared deletion.',
|
||||
'category_keep_transactions' => 'The only transaction connected to this category will not be deleted.|All :count transactions connected to this category will spared deletion.',
|
||||
'tag_keep_transactions' => 'The only transaction connected to this tag will not be deleted.|All :count transactions connected to this tag will spared deletion.',
|
||||
|
||||
'email' => 'Email address',
|
||||
'password' => 'Password',
|
||||
'password_confirmation' => 'Password (again)',
|
||||
'blocked' => 'Is blocked?',
|
||||
'blocked_code' => 'Reason for block',
|
||||
|
||||
|
||||
// admin
|
||||
'domain' => 'Domain',
|
||||
'single_user_mode' => 'Single user mode',
|
||||
'must_confirm_account' => 'New users must activate account',
|
||||
'is_demo_site' => 'Is demo site',
|
||||
|
||||
|
||||
// import
|
||||
'import_file' => 'Import file',
|
||||
'configuration_file' => 'Configuration file',
|
||||
'import_file_type' => 'Import file type',
|
||||
'csv_comma' => 'A comma (,)',
|
||||
'csv_semicolon' => 'A semicolon (;)',
|
||||
'csv_tab' => 'A tab (invisible)',
|
||||
'csv_delimiter' => 'CSV field delimiter',
|
||||
'csv_import_account' => 'Default import account',
|
||||
'csv_config' => 'CSV import configuration',
|
||||
|
||||
|
||||
'due_date' => 'Due date',
|
||||
'payment_date' => 'Payment date',
|
||||
'invoice_date' => 'Invoice date',
|
||||
'internal_reference' => 'Internal reference',
|
||||
];
|
@@ -1,33 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* help.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
// tour!
|
||||
'main-content-title' => 'Welcome to Firefly III',
|
||||
'main-content-text' => 'Do yourself a favor and follow this short guide to make sure you know your way around.',
|
||||
'sidebar-toggle-title' => 'Sidebar to create stuff',
|
||||
'sidebar-toggle-text' => 'Hidden under the plus icon are all the buttons to create new stuff. Accounts, transactions, everything!',
|
||||
'account-menu-title' => 'All your accounts',
|
||||
'account-menu-text' => 'Here you can find all the accounts you\'ve made.',
|
||||
'budget-menu-title' => 'Budgets',
|
||||
'budget-menu-text' => 'Use this page to organise your finances and limit spending.',
|
||||
'report-menu-title' => 'Reports',
|
||||
'report-menu-text' => 'Check this out when you want a solid overview of your finances.',
|
||||
'transaction-menu-title' => 'Transactions',
|
||||
'transaction-menu-text' => 'All transactions you\'ve created can be found here.',
|
||||
'option-menu-title' => 'Options',
|
||||
'option-menu-text' => 'This is pretty self-explanatory.',
|
||||
'main-content-end-title' => 'The end!',
|
||||
'main-content-end-text' => 'Remember that every page has a small question mark at the right top. Click it to get help about the page you\'re on.',
|
||||
'index' => 'index',
|
||||
'home' => 'home',
|
||||
];
|
@@ -1,89 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* list.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
'buttons' => 'Buttons',
|
||||
'icon' => 'Icon',
|
||||
'id' => 'ID',
|
||||
'create_date' => 'Created at',
|
||||
'update_date' => 'Updated at',
|
||||
'balance_before' => 'Balance before',
|
||||
'balance_after' => 'Balance after',
|
||||
'name' => 'Name',
|
||||
'role' => 'Role',
|
||||
'currentBalance' => 'Current balance',
|
||||
'active' => 'Is active?',
|
||||
'lastActivity' => 'Last activity',
|
||||
'balanceDiff' => 'Balance difference between :start and :end',
|
||||
'matchedOn' => 'Matched on',
|
||||
'matchesOn' => 'Matched on',
|
||||
'account_type' => 'Account type',
|
||||
'created_at' => 'Created at',
|
||||
'new_balance' => 'New balance',
|
||||
'account' => 'Account',
|
||||
'matchingAmount' => 'Amount',
|
||||
'lastMatch' => 'Last match',
|
||||
'split_number' => 'Split #',
|
||||
'destination' => 'Destination',
|
||||
'source' => 'Source',
|
||||
'next_expected_match' => 'Next expected match',
|
||||
'automatch' => 'Auto match?',
|
||||
'repeat_freq' => 'Repeats',
|
||||
'description' => 'Description',
|
||||
'amount' => 'Amount',
|
||||
'internal_reference' => 'Internal reference',
|
||||
'date' => 'Date',
|
||||
'interest_date' => 'Interest date',
|
||||
'book_date' => 'Book date',
|
||||
'process_date' => 'Processing date',
|
||||
'due_date' => 'Due date',
|
||||
'payment_date' => 'Payment date',
|
||||
'invoice_date' => 'Invoice date',
|
||||
'interal_reference' => 'Internal reference',
|
||||
'notes' => 'Notes',
|
||||
'from' => 'From',
|
||||
'piggy_bank' => 'Piggy bank',
|
||||
'to' => 'To',
|
||||
'budget' => 'Budget',
|
||||
'category' => 'Category',
|
||||
'bill' => 'Bill',
|
||||
'withdrawal' => 'Withdrawal',
|
||||
'deposit' => 'Deposit',
|
||||
'transfer' => 'Transfer',
|
||||
'type' => 'Type',
|
||||
'completed' => 'Completed',
|
||||
'iban' => 'IBAN',
|
||||
'paid_current_period' => 'Paid this period',
|
||||
'email' => 'Email',
|
||||
'registered_at' => 'Registered at',
|
||||
'is_activated' => 'Is activated',
|
||||
'is_blocked' => 'Is blocked',
|
||||
'is_admin' => 'Is admin',
|
||||
'has_two_factor' => 'Has 2FA',
|
||||
'confirmed_from' => 'Confirmed from',
|
||||
'registered_from' => 'Registered from',
|
||||
'blocked_code' => 'Block code',
|
||||
'domain' => 'Domain',
|
||||
'registration_attempts' => 'Registration attempts',
|
||||
'source_account' => 'Source account',
|
||||
'destination_account' => 'Destination account',
|
||||
|
||||
'accounts_count' => 'Number of accounts',
|
||||
'journals_count' => 'Number of transactions',
|
||||
'attachments_count' => 'Number of attachments',
|
||||
'bills_count' => 'Number of bills',
|
||||
'categories_count' => 'Number of categories',
|
||||
'export_jobs_count' => 'Number of export jobs',
|
||||
'import_jobs_count' => 'Number of import jobs',
|
||||
'budget_count' => 'Number of budgets',
|
||||
'rule_and_groups_count' => 'Number of rules and rule groups',
|
||||
'tags_count' => 'Number of tags',
|
||||
];
|
@@ -1,17 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* pagination.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
'previous' => '« Previous',
|
||||
'next' => 'Next »',
|
||||
|
||||
];
|
@@ -1,19 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* passwords.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
'password' => 'Passwords must be at least six characters and match the confirmation.',
|
||||
'user' => 'We can\'t find a user with that e-mail address.',
|
||||
'token' => 'This password reset token is invalid.',
|
||||
'sent' => 'We have e-mailed your password reset link!',
|
||||
'reset' => 'Your password has been reset!',
|
||||
'blocked' => 'Nice try though.',
|
||||
];
|
@@ -1,91 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* validation.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
'iban' => 'This is not a valid IBAN.',
|
||||
'unique_account_number_for_user' => 'It looks like this account number is already in use.',
|
||||
'deleted_user' => 'Due to security constraints, you cannot register using this email address.',
|
||||
'rule_trigger_value' => 'This value is invalid for the selected trigger.',
|
||||
'rule_action_value' => 'This value is invalid for the selected action.',
|
||||
'invalid_domain' => 'Due to security constraints, you cannot register from this domain.',
|
||||
'file_already_attached' => 'Uploaded file ":name" is already attached to this object.',
|
||||
'file_attached' => 'Succesfully uploaded file ":name".',
|
||||
'file_invalid_mime' => 'File ":name" is of type ":mime" which is not accepted as a new upload.',
|
||||
'file_too_large' => 'File ":name" is too large.',
|
||||
'belongs_to_user' => 'The value of :attribute is unknown',
|
||||
'accepted' => 'The :attribute must be accepted.',
|
||||
'bic' => 'This is not a valid BIC.',
|
||||
'more' => ':attribute must be larger than zero.',
|
||||
'active_url' => 'The :attribute is not a valid URL.',
|
||||
'after' => 'The :attribute must be a date after :date.',
|
||||
'alpha' => 'The :attribute may only contain letters.',
|
||||
'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.',
|
||||
'alpha_num' => 'The :attribute may only contain letters and numbers.',
|
||||
'array' => 'The :attribute must be an array.',
|
||||
'unique_for_user' => 'There already is an entry with this :attribute.',
|
||||
'before' => 'The :attribute must be a date before :date.',
|
||||
'unique_object_for_user' => 'This name is already in use',
|
||||
'unique_account_for_user' => 'This account name is already in use',
|
||||
'between.numeric' => 'The :attribute must be between :min and :max.',
|
||||
'between.file' => 'The :attribute must be between :min and :max kilobytes.',
|
||||
'between.string' => 'The :attribute must be between :min and :max characters.',
|
||||
'between.array' => 'The :attribute must have between :min and :max items.',
|
||||
'boolean' => 'The :attribute field must be true or false.',
|
||||
'confirmed' => 'The :attribute confirmation does not match.',
|
||||
'date' => 'The :attribute is not a valid date.',
|
||||
'date_format' => 'The :attribute does not match the format :format.',
|
||||
'different' => 'The :attribute and :other must be different.',
|
||||
'digits' => 'The :attribute must be :digits digits.',
|
||||
'digits_between' => 'The :attribute must be between :min and :max digits.',
|
||||
'email' => 'The :attribute must be a valid email address.',
|
||||
'filled' => 'The :attribute field is required.',
|
||||
'exists' => 'The selected :attribute is invalid.',
|
||||
'image' => 'The :attribute must be an image.',
|
||||
'in' => 'The selected :attribute is invalid.',
|
||||
'integer' => 'The :attribute must be an integer.',
|
||||
'ip' => 'The :attribute must be a valid IP address.',
|
||||
'json' => 'The :attribute must be a valid JSON string.',
|
||||
'max.numeric' => 'The :attribute may not be greater than :max.',
|
||||
'max.file' => 'The :attribute may not be greater than :max kilobytes.',
|
||||
'max.string' => 'The :attribute may not be greater than :max characters.',
|
||||
'max.array' => 'The :attribute may not have more than :max items.',
|
||||
'mimes' => 'The :attribute must be a file of type: :values.',
|
||||
'min.numeric' => 'The :attribute must be at least :min.',
|
||||
'min.file' => 'The :attribute must be at least :min kilobytes.',
|
||||
'min.string' => 'The :attribute must be at least :min characters.',
|
||||
'min.array' => 'The :attribute must have at least :min items.',
|
||||
'not_in' => 'The selected :attribute is invalid.',
|
||||
'numeric' => 'The :attribute must be a number.',
|
||||
'regex' => 'The :attribute format is invalid.',
|
||||
'required' => 'The :attribute field is required.',
|
||||
'required_if' => 'The :attribute field is required when :other is :value.',
|
||||
'required_unless' => 'The :attribute field is required unless :other is in :values.',
|
||||
'required_with' => 'The :attribute field is required when :values is present.',
|
||||
'required_with_all' => 'The :attribute field is required when :values is present.',
|
||||
'required_without' => 'The :attribute field is required when :values is not present.',
|
||||
'required_without_all' => 'The :attribute field is required when none of :values are present.',
|
||||
'same' => 'The :attribute and :other must match.',
|
||||
'size.numeric' => 'The :attribute must be :size.',
|
||||
'size.file' => 'The :attribute must be :size kilobytes.',
|
||||
'size.string' => 'The :attribute must be :size characters.',
|
||||
'size.array' => 'The :attribute must contain :size items.',
|
||||
'unique' => 'The :attribute has already been taken.',
|
||||
'string' => 'The :attribute must be a string.',
|
||||
'url' => 'The :attribute format is invalid.',
|
||||
'timezone' => 'The :attribute must be a valid zone.',
|
||||
'2fa_code' => 'The :attribute field is invalid.',
|
||||
'dimensions' => 'The :attribute has invalid image dimensions.',
|
||||
'distinct' => 'The :attribute field has a duplicate value.',
|
||||
'file' => 'The :attribute must be a file.',
|
||||
'in_array' => 'The :attribute field does not exist in :other.',
|
||||
'present' => 'The :attribute field must be present.',
|
||||
'amount_zero' => 'The total amount cannot be zero',
|
||||
];
|
@@ -22,7 +22,7 @@ return [
|
||||
|
|
||||
*/
|
||||
|
||||
'failed' => 'These credentials do not match our records.',
|
||||
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
|
||||
'failed' => 'Podatki se ne ujemajo s podatki v naši bazi.',
|
||||
'throttle' => 'Prevečkrat ste se poskusili prijaviti. Poskusite ponovno čez :seconds sekunde.',
|
||||
|
||||
];
|
41
resources/lang/sl_SI/breadcrumbs.php
Normal file
41
resources/lang/sl_SI/breadcrumbs.php
Normal file
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* breadcrumbs.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
'home' => 'Domov',
|
||||
'edit_currency' => 'uredi valuto ":name"',
|
||||
'delete_currency' => 'izbriši valuto ":name"',
|
||||
'newPiggyBank' => 'ustvari novega pujska',
|
||||
'edit_piggyBank' => 'uredi pujska za ":name"',
|
||||
'preferences' => 'nastavitve',
|
||||
'profile' => 'profil',
|
||||
'changePassword' => 'spremeni geslo',
|
||||
'bills' => 'Bills',
|
||||
'newBill' => 'New bill',
|
||||
'edit_bill' => 'Edit bill ":name"',
|
||||
'delete_bill' => 'Delete bill ":name"',
|
||||
'reports' => 'Poročila',
|
||||
'searchResult' => 'rezultati iskanja za ":query"',
|
||||
'withdrawal_list' => 'stroški',
|
||||
'deposit_list' => 'prihodki',
|
||||
'transfer_list' => 'prenosi',
|
||||
'transfers_list' => 'prenosi',
|
||||
'create_withdrawal' => 'ustvari nov odhodek',
|
||||
'create_deposit' => 'ustvari nov prihodek',
|
||||
'create_transfer' => 'ustvari nov prenos',
|
||||
'edit_journal' => 'uredi transakcijo ":description"',
|
||||
'delete_journal' => 'izbriši transakcijo ":description"',
|
||||
'tags' => 'značke',
|
||||
'createTag' => 'ustvari novo značko',
|
||||
'edit_tag' => 'uredi značko ":tag"',
|
||||
'delete_tag' => 'izbriši značko ":tag"',
|
||||
];
|
@@ -10,12 +10,12 @@
|
||||
*/
|
||||
|
||||
return [
|
||||
'locale' => 'es, Spanish, es_ES, es_ES.utf8, es_ES.UTF-8',
|
||||
'locale' => 'sl, Slovenian, sl_SI, sl_SI.utf8, sl_SI.UTF-8',
|
||||
'month' => '%B %Y',
|
||||
'month_and_day' => '%B %e, %Y',
|
||||
'date_time' => '%B %e, %Y, @ %T',
|
||||
'specific_day' => '%e %B %Y',
|
||||
'week_in_year' => 'Week %W, %Y',
|
||||
'week_in_year' => 'teden %W, %Y',
|
||||
'quarter_of_year' => '%B %Y',
|
||||
'year' => '%Y',
|
||||
'half_year' => '%B %Y',
|
80
resources/lang/sl_SI/csv.php
Normal file
80
resources/lang/sl_SI/csv.php
Normal file
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
/**
|
||||
* csv.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
|
||||
'import_configure_title' => 'Nastavitve uvoza',
|
||||
'import_configure_intro' => 'Tu je nekaj nastavitev za uvoz CSV datoteke. Prosim, označite, če vaša CSV datoteka vsebuje prvo vrstico z naslovi stolpcev in v kakšnem formatu so izpisani datumi. Morda bo to zahtevalo nekaj poizkušanja. Ločilo v CSV datoteki je ponavadi ",", lahko pa je tudi ";". Pozorno preverite.',
|
||||
'import_configure_form' => 'Osnovne možnosti za uvoz CSV datoteke.',
|
||||
'header_help' => 'Preverite ali prva vrstica v CSV datoteki vsebuje naslove stolpcev.',
|
||||
'date_help' => 'Formatiranje datuma in časa v vaši CSV datoteki. Uporabite obliko zapisa kot je navedena<a href="https://secure.php.net/manual/en/datetime.createfromformat.php#refsect1-datetime.createfromformat-parameters"> na tej strani</a>. Privzeta vrednost bo prepoznala datume, ki so videti takole:: dateExample.',
|
||||
'delimiter_help' => 'Izberi ločilo, ki je uporabljeno za ločevanje med posameznimi stolpci v vaši datoteki. Če niste prepričani, je vejica najbolj pogosta izbira.',
|
||||
'import_account_help' => 'Če vaša CSV datoteka ne vsebuje informacij o vaših premoženjskih računih, uporabite ta seznam, da izberete kateremu računu pripadajo transakcije v CSV datoteki.',
|
||||
'upload_not_writeable' => 'The grey box contains a file path. It should be writeable. Please make sure it is.',
|
||||
|
||||
// roles
|
||||
'column_roles_title' => 'doličite pomen stolpcev',
|
||||
'column_roles_table' => 'tabela',
|
||||
'column_name' => 'Ime stolpca',
|
||||
'column_example' => 'primeri podatkov',
|
||||
'column_role' => 'pomen podatkov v stolpcu',
|
||||
'do_map_value' => 'poveži te vrednosti',
|
||||
'column' => 'stolpec',
|
||||
'no_example_data' => 'primeri podatkov niso na voljo',
|
||||
'store_column_roles' => 'nadaljuj z uvozom',
|
||||
'do_not_map' => '(ne poveži)',
|
||||
'map_title' => 'poveži podatke za uvoz s podatki iz Firefly III',
|
||||
'map_text' => 'In the following tables, the left value shows you information found in your uploaded CSV file. It is your task to map this value, if possible, to a value already present in your database. Firefly will stick to this mapping. If there is no value to map to, or you do not wish to map the specific value, select nothing.',
|
||||
|
||||
'field_value' => 'Field value',
|
||||
'field_mapped_to' => 'Mapped to',
|
||||
'store_column_mapping' => 'shrani nastavitve',
|
||||
|
||||
// map things.
|
||||
|
||||
|
||||
'column__ignore' => '(ignoriraj ta stolpec)',
|
||||
'column_account-iban' => 'premoženjski račun (IBAN)',
|
||||
'column_account-id' => 'ID premoženjskega računa (Firefly)',
|
||||
'column_account-name' => 'premoženjski račun (ime)',
|
||||
'column_amount' => 'znesek',
|
||||
'column_amount-comma-separated' => 'znesek (z decimalno vejico)',
|
||||
'column_bill-id' => 'Bill ID (matching Firefly)',
|
||||
'column_bill-name' => 'Bill name',
|
||||
'column_budget-id' => 'ID bugžeta (Firefly)',
|
||||
'column_budget-name' => 'ime budžeta',
|
||||
'column_category-id' => 'ID Kategorije (Firefly)',
|
||||
'column_category-name' => 'ime kategorije',
|
||||
'column_currency-code' => 'koda valute (ISO 4217)',
|
||||
'column_currency-id' => 'ID valute (Firefly)',
|
||||
'column_currency-name' => 'ime valute (Firefly)',
|
||||
'column_currency-symbol' => 'simbol valute (Firefly)',
|
||||
'column_date-interest' => 'Interest calculation date',
|
||||
'column_date-book' => 'datum knjiženja transakcije',
|
||||
'column_date-process' => 'datum izvedbe transakcije',
|
||||
'column_date-transaction' => 'datum',
|
||||
'column_description' => 'opis',
|
||||
'column_opposing-iban' => 'ciljni račun (IBAN)',
|
||||
'column_opposing-id' => 'protiračun (firefly)',
|
||||
'column_external-id' => 'zunanja ID številka',
|
||||
'column_opposing-name' => 'ime ciljnega računa',
|
||||
'column_rabo-debet-credit' => 'Rabobank specific debet/credit indicator',
|
||||
'column_ing-debet-credit' => 'ING specific debet/credit indicator',
|
||||
'column_sepa-ct-id' => 'SEPA Credit Transfer end-to-end ID',
|
||||
'column_sepa-ct-op' => 'SEPA Credit Transfer opposing account',
|
||||
'column_sepa-db' => 'SEPA Direct Debet',
|
||||
'column_tags-comma' => 'značke (ločene z vejicami)',
|
||||
'column_tags-space' => 'značke (ločene s presledki)',
|
||||
'column_account-number' => 'premoženjski račun (številka računa)',
|
||||
'column_opposing-number' => 'protiračun (številka računa)',
|
||||
];
|
@@ -10,9 +10,10 @@
|
||||
return [
|
||||
'no_demo_text' => 'Sorry, there is no extra demo-explanation text for <abbr title=":route">this page</abbr>.',
|
||||
'see_help_icon' => 'However, the <i class="fa fa-question-circle"></i>-icon in the top right corner may tell you more.',
|
||||
'index' => 'Welcome to <strong>Firefly III</strong>! On this page you get a quick overview of your finances. For more information, check out Accounts → <a href=":asset">Asset Accounts</a> and of course the <a href=":budgets">Budgets</a> and <a href=":reports">Reports</a> pages. Or just take a look around and see where you end up.',
|
||||
'accounts-index' => 'Asset accounts are your personal bank accounts. Expense accounts are the accounts you spend money at, such as stores and friends. Revenue accounts are accounts you receive money from, such as your job, the government or other sources of income. On this page you can edit or remove them.',
|
||||
'budgets-index' => 'This page shows you an overview of your budgets. The top bar shows the amount that is available to be budgeted. This can be customized for any period by clicking the amount on the right. The amount you\'ve actually spent is shown in the bar below. Below that are the expenses per budget and what you\'ve budgeted for them.',
|
||||
'index' => 'Dobrodošli v <strong>Firefly III</strong>! Na tej strani boste dobili hiter pregled nad vašimi financami. Za več informacij preverite račune → <a href=":asset">premoženjski računi</a> in seveda <a href=":budgets">budžet</a> in <a href=":reports">poročila</a>. Ali pa se samo malo razglejte naokoli in videli boste, kje boste končali.',
|
||||
'accounts-index' => 'Premoženjski računi so vaši osebni bančni računi. Konti stroškov so računi na katere zapravljate vaš denar, kot npr. trgovine in prijatelji.
|
||||
Konti prihodkov so računi iz katerih dobivate denar, kot npr. vaš delodajalec, država in drugi viri vaših prihodkov. Na tej strani lahko račune urejate ali jih odstranite.',
|
||||
'budgets-index' => 'Na tej strani najdete pregled nad vašimi budžeti. Zgornji kazalec prikazuje vsoto ki je na razpolago za ta budžet. To lahko nastavljate za katerokoli obdobje, tako da kliknete na vsoto na desni. Vsota, ki ste jo dejansko porabili je prikazana na spodnjem kazalcu. Spodaj so prikazani vaši stroški razporejeni po budžetih.',
|
||||
'reports-index-start' => 'Firefly III supports four types of reports. Read about them by clicking on the <i class="fa fa-question-circle"></i>-icon in the top right corner.',
|
||||
'reports-index-examples' => 'Be sure to check out these examples: <a href=":one">a monthly financial overview</a>, <a href=":two">a yearly financial overview</a> and <a href=":three">a budget overview</a>.',
|
||||
'currencies-index' => 'Firefly III supports multiple currencies. Although it defaults to the Euro it can be set to the US Dollar and many other currencies. As you can see a small selection of currencies has been included but you can add your own if you wish to. Changing the default currency will not change the currency of existing transactions however: Firefly III supports the use of multiple currencies at the same time.',
|
@@ -34,14 +34,14 @@ return [
|
||||
'expired_error' => 'Your account has expired, and can no longer be used.',
|
||||
'removed_amount' => 'Removed :amount',
|
||||
'added_amount' => 'Added :amount',
|
||||
'asset_account_role_help' => 'Any extra options resulting from your choice can be set later.',
|
||||
'asset_account_role_help' => 'Dodatne možnosti se lahko nastavljajo tudi kasneje.',
|
||||
'Opening balance' => 'Opening balance',
|
||||
'create_new_stuff' => 'Create new stuff',
|
||||
'new_withdrawal' => 'New withdrawal',
|
||||
'new_deposit' => 'New deposit',
|
||||
'new_transfer' => 'New transfer',
|
||||
'new_asset_account' => 'New asset account',
|
||||
'new_expense_account' => 'New expense account',
|
||||
'new_asset_account' => 'nov premoženjski račun',
|
||||
'new_expense_account' => 'nov konto za stroške',
|
||||
'new_revenue_account' => 'New revenue account',
|
||||
'new_budget' => 'New budget',
|
||||
'new_bill' => 'New bill',
|
||||
@@ -78,8 +78,8 @@ return [
|
||||
'tagbalancingAct' => 'Balancing act',
|
||||
'tagadvancePayment' => 'Advance payment',
|
||||
'tagnothing' => '',
|
||||
'Default asset account' => 'Default asset account',
|
||||
'no_budget_pointer' => 'You seem to have no budgets yet. You should create some on the <a href="/budgets">budgets</a>-page. Budgets can help you keep track of expenses.',
|
||||
'Default asset account' => 'privzeti premoženjski račun',
|
||||
'no_budget_pointer' => 'Kot kaže niste definirali še nobenega budžeta. Budžete lahko ustvarite na strani <a href="/budgets">budžeti></a>. Budžeti vam pomagajo držati pregled nad vašimi stroški.',
|
||||
'Savings account' => 'Savings account',
|
||||
'Credit card' => 'Credit card',
|
||||
'source_accounts' => 'Source account(s)',
|
||||
@@ -89,13 +89,13 @@ return [
|
||||
'need_more_help' => 'If you need more help using Firefly III, please <a href="https://github.com/firefly-iii/firefly-iii/issues">open a ticket on Github</a>.',
|
||||
'nothing_to_display' => 'There are no transactions to show you',
|
||||
'show_all_no_filter' => 'Show all transactions without grouping them by date.',
|
||||
'expenses_by_category' => 'Expenses by category',
|
||||
'expenses_by_budget' => 'Expenses by budget',
|
||||
'expenses_by_category' => 'stroški po kategorijah',
|
||||
'expenses_by_budget' => 'stroški po budžetih',
|
||||
'income_by_category' => 'Income by category',
|
||||
'expenses_by_asset_account' => 'Expenses by asset account',
|
||||
'expenses_by_expense_account' => 'Expenses by expense account',
|
||||
'expenses_by_asset_account' => 'stroški po premoženjskih računih',
|
||||
'expenses_by_expense_account' => 'stroški po stroškovnih kontih',
|
||||
'cannot_redirect_to_account' => 'Firefly III cannot redirect you to the correct page. Apologies.',
|
||||
'sum_of_expenses' => 'Sum of expenses',
|
||||
'sum_of_expenses' => 'vsota stroškov',
|
||||
'sum_of_income' => 'Sum of income',
|
||||
'total_sum' => 'Total sum',
|
||||
'spent_in_specific_budget' => 'Spent in budget ":budget"',
|
||||
@@ -131,9 +131,9 @@ return [
|
||||
'chart_all_journals_for_account' => 'Chart of all transactions for account :name',
|
||||
'journals_in_period_for_account' => 'All transactions for account :name between :start and :end',
|
||||
'transferred' => 'Transferred',
|
||||
'all_withdrawal' => 'All expenses',
|
||||
'all_withdrawal' => 'vsi stroški',
|
||||
'all_transactions' => 'All transactions',
|
||||
'title_withdrawal_between' => 'All expenses between :start and :end',
|
||||
'title_withdrawal_between' => 'vsi stroški med :start in :end',
|
||||
'all_deposit' => 'All revenue',
|
||||
'title_deposit_between' => 'All revenue between :start and :end',
|
||||
'all_transfers' => 'All transfers',
|
||||
@@ -147,8 +147,8 @@ return [
|
||||
'journals_in_period_for_category' => 'All transactions for category :name between :start and :end',
|
||||
'journals_in_period_for_tag' => 'All transactions for tag :tag between :start and :end',
|
||||
'not_available_demo_user' => 'The feature you try to access is not available to demo users.',
|
||||
'exchange_rate_instructions' => 'Asset account "@name" only accepts transactions in @native_currency. If you wish to use @foreign_currency instead, make sure that the amount in @native_currency is known as well:',
|
||||
'transfer_exchange_rate_instructions' => 'Source asset account "@source_name" only accepts transactions in @source_currency. Destination asset account "@dest_name" only accepts transactions in @dest_currency. You must provide the transferred amount correctly in both currencies.',
|
||||
'exchange_rate_instructions' => 'Premoženjski račun "@name" sprejema samo transakcije v @native_currency. Če želite namesto tega uporabiti @foreign_currency, morate podati tudi znesek v @native_currency:',
|
||||
'transfer_exchange_rate_instructions' => 'Izvorni premoženjski račun "@source_name" sprejema samo transakcije v @source_currency. Ciljni premoženjski račun "@dest_name" sprejema samo transakcije v @dest_currency. Podati morate znesek v obeh valutah.',
|
||||
|
||||
// repeat frequencies:
|
||||
'repeat_freq_yearly' => 'yearly',
|
||||
@@ -236,7 +236,7 @@ return [
|
||||
'default_rule_trigger_description' => 'The Man Who Sold the World',
|
||||
'default_rule_trigger_from_account' => 'David Bowie',
|
||||
'default_rule_action_prepend' => 'Bought the world from ',
|
||||
'default_rule_action_set_category' => 'Large expenses',
|
||||
'default_rule_action_set_category' => 'veliki izdatki',
|
||||
'trigger' => 'Trigger',
|
||||
'trigger_value' => 'Trigger on value',
|
||||
'stop_processing_other_triggers' => 'Stop processing other triggers',
|
||||
@@ -369,7 +369,7 @@ return [
|
||||
'preferences_security' => 'Security',
|
||||
'preferences_layout' => 'Layout',
|
||||
'pref_home_show_deposits' => 'Show deposits on the home screen',
|
||||
'pref_home_show_deposits_info' => 'The home screen already shows your expense accounts. Should it also show your revenue accounts?',
|
||||
'pref_home_show_deposits_info' => 'Prva stran že prikazuje vaše stroškovne konte. Ali naj tudi prikazuje prihodkovne konte?',
|
||||
'pref_home_do_show_deposits' => 'Yes, show them',
|
||||
'successful_count' => 'of which :count successful',
|
||||
'transaction_page_size_title' => 'Page size',
|
||||
@@ -431,8 +431,8 @@ return [
|
||||
'pause' => 'Pause',
|
||||
|
||||
// transaction index
|
||||
'title_expenses' => 'Expenses',
|
||||
'title_withdrawal' => 'Expenses',
|
||||
'title_expenses' => 'stroški',
|
||||
'title_withdrawal' => 'stroški',
|
||||
'title_revenue' => 'Revenue / income',
|
||||
'title_deposit' => 'Revenue / income',
|
||||
'title_transfer' => 'Transfers',
|
||||
@@ -459,13 +459,13 @@ return [
|
||||
'convert_Transfer_to_deposit' => 'Convert this transfer to a deposit',
|
||||
'convert_Transfer_to_withdrawal' => 'Convert this transfer to a withdrawal',
|
||||
'convert_please_set_revenue_source' => 'Please pick the revenue account where the money will come from.',
|
||||
'convert_please_set_asset_destination' => 'Please pick the asset account where the money will go to.',
|
||||
'convert_please_set_expense_destination' => 'Please pick the expense account where the money will go to.',
|
||||
'convert_please_set_asset_source' => 'Please pick the asset account where the money will come from.',
|
||||
'convert_please_set_asset_destination' => 'Izberite premoženjski račun na katerega boste prenesli denar.',
|
||||
'convert_please_set_expense_destination' => 'Izberite na kateri stroškovni konto bo denar šel.',
|
||||
'convert_please_set_asset_source' => 'Izberite premoženjski račun iz katerega boste prenesli denar.',
|
||||
'convert_explanation_withdrawal_deposit' => 'If you convert this withdrawal into a deposit, :amount will be deposited into <a href=":sourceRoute">:sourceName</a> instead of taken from it.',
|
||||
'convert_explanation_withdrawal_transfer' => 'If you convert this withdrawal into a transfer, :amount will be transferred from <a href=":sourceRoute">:sourceName</a> to a new asset account, instead of being paid to <a href=":destinationRoute">:destinationName</a>.',
|
||||
'convert_explanation_withdrawal_transfer' => 'Če pretvorite ta izdatek v prenos, bo znesek v vrednosti :amount prenesen iz <a href=":sourceRoute">:sourceName</a> na drug premoženjski račun, namesto da bi bil plačan na <a href=":destinationRoute">:destinationName</a>.',
|
||||
'convert_explanation_deposit_withdrawal' => 'If you convert this deposit into a withdrawal, :amount will be removed from <a href=":destinationRoute">:destinationName</a> instead of added to it.',
|
||||
'convert_explanation_deposit_transfer' => 'If you convert this deposit into a transfer, :amount will be transferred from an asset account of your choice into <a href=":destinationRoute">:destinationName</a>.',
|
||||
'convert_explanation_deposit_transfer' => 'Če pretvorite ta prihodek v prenos, bo znesek v vrednosti :amount prenesen iz izbranega premoženjskega računa na račun <a href=":destinationRoute">:destinationName</a>.',
|
||||
'convert_explanation_transfer_withdrawal' => 'If you convert this transfer into a withdrawal, :amount will go from <a href=":sourceRoute">:sourceName</a> to a new destination as an expense, instead of to <a href=":destinationRoute">:destinationName</a> as a transfer.',
|
||||
'convert_explanation_transfer_deposit' => 'If you convert this transfer into a deposit, :amount will be deposited into account <a href=":destinationRoute">:destinationName</a> instead of being transferred there.',
|
||||
'converted_to_Withdrawal' => 'The transaction has been converted to a withdrawal',
|
||||
@@ -477,8 +477,8 @@ return [
|
||||
'create_new_withdrawal' => 'Create new withdrawal',
|
||||
'create_new_deposit' => 'Create new deposit',
|
||||
'create_new_transfer' => 'Create new transfer',
|
||||
'create_new_asset' => 'Create new asset account',
|
||||
'create_new_expense' => 'Create new expense account',
|
||||
'create_new_asset' => 'ustvari nov premoženjski račun',
|
||||
'create_new_expense' => 'ustvari nov konto za stroške',
|
||||
'create_new_revenue' => 'Create new revenue account',
|
||||
'create_new_piggy_bank' => 'Create new piggy bank',
|
||||
'create_new_bill' => 'Create new bill',
|
||||
@@ -555,30 +555,30 @@ return [
|
||||
'not_or_not_yet' => 'Not (yet)',
|
||||
'not_expected_period' => 'Not expected this period',
|
||||
// accounts:
|
||||
'details_for_asset' => 'Details for asset account ":name"',
|
||||
'details_for_expense' => 'Details for expense account ":name"',
|
||||
'details_for_asset' => 'podrobnosti za premoženjski račun ":name"',
|
||||
'details_for_expense' => 'podrobnosti stroškovnega konta ":name"',
|
||||
'details_for_revenue' => 'Details for revenue account ":name"',
|
||||
'details_for_cash' => 'Details for cash account ":name"',
|
||||
'store_new_asset_account' => 'Store new asset account',
|
||||
'store_new_expense_account' => 'Store new expense account',
|
||||
'store_new_asset_account' => 'shrani nov premoženjski račun',
|
||||
'store_new_expense_account' => 'shrani nov konto za stroške',
|
||||
'store_new_revenue_account' => 'Store new revenue account',
|
||||
'edit_asset_account' => 'Edit asset account ":name"',
|
||||
'edit_expense_account' => 'Edit expense account ":name"',
|
||||
'edit_asset_account' => 'uredi premoženjski račun ":name"',
|
||||
'edit_expense_account' => 'uredi stroškovni konto ":name"',
|
||||
'edit_revenue_account' => 'Edit revenue account ":name"',
|
||||
'delete_asset_account' => 'Delete asset account ":name"',
|
||||
'delete_expense_account' => 'Delete expense account ":name"',
|
||||
'delete_asset_account' => 'izbriši premoženjski račun ":name"',
|
||||
'delete_expense_account' => 'izbriši stroškovni konto ":name"',
|
||||
'delete_revenue_account' => 'Delete revenue account ":name"',
|
||||
'asset_deleted' => 'Successfully deleted asset account ":name"',
|
||||
'expense_deleted' => 'Successfully deleted expense account ":name"',
|
||||
'asset_deleted' => 'Premoženjski račun ":name" je bil uspešno izbrisan.',
|
||||
'expense_deleted' => 'stroškovni konto ":name" je bil uspešno izbrisan',
|
||||
'revenue_deleted' => 'Successfully deleted revenue account ":name"',
|
||||
'update_asset_account' => 'Update asset account',
|
||||
'update_expense_account' => 'Update expense account',
|
||||
'update_asset_account' => 'posodobi premoženjski račun',
|
||||
'update_expense_account' => 'posodobi stroškovni konto',
|
||||
'update_revenue_account' => 'Update revenue account',
|
||||
'make_new_asset_account' => 'Create a new asset account',
|
||||
'make_new_expense_account' => 'Create a new expense account',
|
||||
'make_new_asset_account' => 'ustvari nov premoženjski račun',
|
||||
'make_new_expense_account' => 'ustvari nov konto za stroške',
|
||||
'make_new_revenue_account' => 'Create a new revenue account',
|
||||
'asset_accounts' => 'Asset accounts',
|
||||
'expense_accounts' => 'Expense accounts',
|
||||
'asset_accounts' => 'premoženjski računi',
|
||||
'expense_accounts' => 'konti za stroške',
|
||||
'revenue_accounts' => 'Revenue accounts',
|
||||
'cash_accounts' => 'Cash accounts',
|
||||
'Cash account' => 'Cash account',
|
||||
@@ -587,7 +587,7 @@ return [
|
||||
'stored_new_account' => 'New account ":name" stored!',
|
||||
'updated_account' => 'Updated account ":name"',
|
||||
'credit_card_options' => 'Credit card options',
|
||||
'no_transactions_account' => 'There are no transactions (in this period) for asset account ":name".',
|
||||
'no_transactions_account' => 'Ni transakcij (za to obdobje) za premoženjski račun ":name".',
|
||||
'no_data_for_chart' => 'There is not enough information (yet) to generate this chart.',
|
||||
'select_more_than_one_account' => 'Please select more than one account',
|
||||
'select_more_than_one_category' => 'Please select more than one category',
|
||||
@@ -646,7 +646,7 @@ return [
|
||||
'yourAccounts' => 'Your accounts',
|
||||
'budgetsAndSpending' => 'Budgets and spending',
|
||||
'savings' => 'Savings',
|
||||
'markAsSavingsToContinue' => 'Mark your asset accounts as "Savings account" to fill this panel',
|
||||
'markAsSavingsToContinue' => 'Označite ta premoženjski račun kot "varčevalni račun" da zapolnite ta okvir',
|
||||
'createPiggyToContinue' => 'Create piggy banks to fill this panel.',
|
||||
'newWithdrawal' => 'New expense',
|
||||
'newDeposit' => 'New deposit',
|
||||
@@ -666,16 +666,16 @@ return [
|
||||
'dashboard' => 'Dashboard',
|
||||
'currencies' => 'Currencies',
|
||||
'accounts' => 'Accounts',
|
||||
'Asset account' => 'Asset account',
|
||||
'Default account' => 'Asset account',
|
||||
'Expense account' => 'Expense account',
|
||||
'Asset account' => 'premoženjski računi',
|
||||
'Default account' => 'premoženjski račun',
|
||||
'Expense account' => 'konto stroškov',
|
||||
'Revenue account' => 'Revenue account',
|
||||
'Initial balance account' => 'Initial balance account',
|
||||
'budgets' => 'Budgets',
|
||||
'tags' => 'Tags',
|
||||
'reports' => 'Reports',
|
||||
'transactions' => 'Transactions',
|
||||
'expenses' => 'Expenses',
|
||||
'expenses' => 'stroški',
|
||||
'income' => 'Revenue / income',
|
||||
'transfers' => 'Transfers',
|
||||
'moneyManagement' => 'Money management',
|
||||
@@ -714,7 +714,7 @@ return [
|
||||
'report_this_fiscal_year_quick' => 'Current fiscal year, all accounts',
|
||||
'report_all_time_quick' => 'All-time, all accounts',
|
||||
'reports_can_bookmark' => 'Remember that reports can be bookmarked.',
|
||||
'incomeVsExpenses' => 'Income vs. expenses',
|
||||
'incomeVsExpenses' => 'prihodki napram odhodkom',
|
||||
'accountBalances' => 'Account balances',
|
||||
'balanceStartOfYear' => 'Balance at start of year',
|
||||
'balanceEndOfYear' => 'Balance at end of year',
|
||||
@@ -762,7 +762,7 @@ return [
|
||||
'shared' => 'Shared',
|
||||
'fiscal_year' => 'Fiscal year',
|
||||
'income_entry' => 'Income from account ":name" between :start and :end',
|
||||
'expense_entry' => 'Expenses to account ":name" between :start and :end',
|
||||
'expense_entry' => 'stroški na kontu ":name" med :start in :end',
|
||||
'category_entry' => 'Expenses in category ":name" between :start and :end',
|
||||
'budget_spent_amount' => 'Expenses in budget ":budget" between :start and :end',
|
||||
'balance_amount' => 'Expenses in budget ":budget" paid from account ":account" between :start and :end',
|
||||
@@ -776,11 +776,11 @@ return [
|
||||
'select_budget' => 'Select budget(s).',
|
||||
'select_tag' => 'Select tag(s).',
|
||||
'income_per_category' => 'Income per category',
|
||||
'expense_per_category' => 'Expense per category',
|
||||
'expense_per_budget' => 'Expense per budget',
|
||||
'expense_per_category' => 'stroški po kategorijah',
|
||||
'expense_per_budget' => 'stroški po budžetih',
|
||||
'income_per_account' => 'Income per account',
|
||||
'expense_per_account' => 'Expense per account',
|
||||
'expense_per_tag' => 'Expense per tag',
|
||||
'expense_per_account' => 'stroški po kontih',
|
||||
'expense_per_tag' => 'stroški po značkah',
|
||||
'income_per_tag' => 'Income per tag',
|
||||
'include_expense_not_in_budget' => 'Included expenses not in the selected budget(s)',
|
||||
'include_expense_not_in_account' => 'Included expenses not in the selected account(s)',
|
||||
@@ -790,7 +790,7 @@ return [
|
||||
'include_income_not_in_tags' => 'Included income not in the selected tag(s)',
|
||||
'include_expense_not_in_tags' => 'Included expenses not in the selected tag(s)',
|
||||
'everything_else' => 'Everything else',
|
||||
'income_and_expenses' => 'Income and expenses',
|
||||
'income_and_expenses' => 'prihodki in odhodki',
|
||||
'spent_average' => 'Spent (average)',
|
||||
'income_average' => 'Income (average)',
|
||||
'transaction_count' => 'Transaction count',
|
||||
@@ -800,10 +800,10 @@ return [
|
||||
'description' => 'Description',
|
||||
'sum_of_period' => 'Sum of period',
|
||||
'average_in_period' => 'Average in period',
|
||||
'account_role_defaultAsset' => 'Default asset account',
|
||||
'account_role_sharedAsset' => 'Shared asset account',
|
||||
'account_role_savingAsset' => 'Savings account',
|
||||
'account_role_ccAsset' => 'Credit card',
|
||||
'account_role_defaultAsset' => 'privzeti premoženjski račun',
|
||||
'account_role_sharedAsset' => 'deljen premoženjski račun',
|
||||
'account_role_savingAsset' => 'varčevalni račun',
|
||||
'account_role_ccAsset' => 'kreditna kartica',
|
||||
|
||||
// charts:
|
||||
'chart' => 'Chart',
|
||||
@@ -1000,7 +1000,7 @@ return [
|
||||
'import_share_configuration' => 'Please consider downloading your configuration and sharing it at the <strong><a href="https://github.com/firefly-iii/import-configurations/wiki">import configuration center</a></strong>. This will allow other users of Firefly III to import their files more easily.',
|
||||
'import_finished_report' => 'The import has finished. Please note any errors in the block above this line. All transactions imported during this particular session have been tagged, and you can check them out below. ',
|
||||
'import_finished_link' => 'The transactions imported can be found in tag <a href=":link" class="label label-success" style="font-size:100%;font-weight:normal;">:tag</a>.',
|
||||
'need_at_least_one_account' => 'You need at least one asset account to be able to create piggy banks',
|
||||
'need_at_least_one_account' => 'Imeti morate vsaj en premoženjski račun, da lahko ustvarite pujska.',
|
||||
'see_help_top_right' => 'For more information, please check out the help pages using the icon in the top right corner of the page.',
|
||||
'bread_crumb_import_complete' => 'Import ":key" complete',
|
||||
'bread_crumb_configure_import' => 'Configure import ":key"',
|
||||
@@ -1014,14 +1014,14 @@ return [
|
||||
|
||||
// empty lists? no objects? instructions:
|
||||
'no_transactions_in_period' => 'There are no transactions in this period.',
|
||||
'no_accounts_title_asset' => 'Let\'s create an asset account!',
|
||||
'no_accounts_intro_asset' => 'You have no asset accounts yet. Asset accounts are your main accounts: your checking account, savings account, shared account or even your credit card.',
|
||||
'no_accounts_imperative_asset' => 'To start using Firefly III you must create at least one asset account. Let\'s do so now:',
|
||||
'no_accounts_create_asset' => 'Create an asset account',
|
||||
'no_accounts_title_expense' => 'Let\'s create an expense account!',
|
||||
'no_accounts_intro_expense' => 'You have no expense accounts yet. Expense accounts are the places where you spend money, such as shops and supermarkets.',
|
||||
'no_accounts_imperative_expense' => 'Expense accounts are created automatically when you create transactions, but you can create one manually too, if you want. Let\'s create one now:',
|
||||
'no_accounts_create_expense' => 'Create an expense account',
|
||||
'no_accounts_title_asset' => 'Ustvarite premoženjski račun!',
|
||||
'no_accounts_intro_asset' => 'Še nobenega premoženjskega računa nimate. Premoženjski računi so vaši glavni računi sredstev: tekoči računi, skupni računi, varčevalni računi in celo računi kreditnih kartic.',
|
||||
'no_accounts_imperative_asset' => 'Da začnete uporabljati Firefly III, morate ustvariti vsaj en premoženjski račun:',
|
||||
'no_accounts_create_asset' => 'ustvarite premoženjski račun',
|
||||
'no_accounts_title_expense' => 'Ustvarite nov konto za stroške!',
|
||||
'no_accounts_intro_expense' => 'Nimate še nobenega konta za stroške. Stroškovni konti so konti kamor knjižite denar, ki ste ga zapravili kot npr. trgovine in supermarketi.',
|
||||
'no_accounts_imperative_expense' => 'Stroškovni konti se ustvarijo avtomatično ko ustvarite transakcije, lahko pa jih ustvarite tudi na roke, če želite:',
|
||||
'no_accounts_create_expense' => 'ustvari konto za stroške',
|
||||
'no_accounts_title_revenue' => 'Let\'s create a revenue account!',
|
||||
'no_accounts_intro_revenue' => 'You have no revenue accounts yet. Revenue accounts are the places where you receive money from, such as your employer.',
|
||||
'no_accounts_imperative_revenue' => 'Expense accounts are created automatically when you create transactions, but you can create one manually too, if you want. Let\'s create one now:',
|
||||
@@ -1047,7 +1047,7 @@ return [
|
||||
'no_transactions_imperative_deposit' => 'Have you received some money? Then you should write it down:',
|
||||
'no_transactions_create_deposit' => 'Create a deposit',
|
||||
'no_transactions_title_transfers' => 'Let\'s create a transfer!',
|
||||
'no_transactions_intro_transfers' => 'You have no transfers yet. When you move money between asset accounts, it is recorded as a transfer.',
|
||||
'no_transactions_intro_transfers' => 'Nimate še nobenih prenosov. Če prenašate denar med svojimi premoženjskimi računi, se to zabeleži kot prenos.',
|
||||
'no_transactions_imperative_transfers' => 'Have you moved some money around? Then you should write it down:',
|
||||
'no_transactions_create_transfers' => 'Create a transfer',
|
||||
'no_piggies_title_default' => 'Let\'s create a piggy bank!',
|
@@ -28,23 +28,23 @@ return [
|
||||
'currency_id' => 'Currency',
|
||||
'attachments' => 'Attachments',
|
||||
'journal_amount' => 'Amount',
|
||||
'journal_asset_source_account' => 'Asset account (source)',
|
||||
'journal_asset_source_account' => 'premoženjski račun (vir)',
|
||||
'journal_source_account_name' => 'Revenue account (source)',
|
||||
'journal_source_account_id' => 'Asset account (source)',
|
||||
'journal_source_account_id' => 'premoženjski račun (vir)',
|
||||
'BIC' => 'BIC',
|
||||
'account_from_id' => 'From account',
|
||||
'account_to_id' => 'To account',
|
||||
'source_account' => 'Source account',
|
||||
'destination_account' => 'Destination account',
|
||||
'journal_destination_account_id' => 'Asset account (destination)',
|
||||
'asset_destination_account' => 'Asset account (destination)',
|
||||
'asset_source_account' => 'Asset account (source)',
|
||||
'journal_destination_account_id' => 'premoženjski račun (cilj)',
|
||||
'asset_destination_account' => 'premoženjski račun (cilj)',
|
||||
'asset_source_account' => 'premoženjski račun (vir)',
|
||||
'journal_description' => 'Description',
|
||||
'note' => 'Notes',
|
||||
'split_journal' => 'Split this transaction',
|
||||
'split_journal_explanation' => 'Split this transaction in multiple parts',
|
||||
'currency' => 'Currency',
|
||||
'account_id' => 'Asset account',
|
||||
'account_id' => 'premoženjski račun',
|
||||
'budget_id' => 'Budget',
|
||||
'openingBalance' => 'Opening balance',
|
||||
'tagMode' => 'Tag mode',
|
||||
@@ -61,7 +61,7 @@ return [
|
||||
'returnHereExplanation' => 'After storing, return here to create another one.',
|
||||
'returnHereUpdateExplanation' => 'After updating, return here.',
|
||||
'description' => 'Description',
|
||||
'expense_account' => 'Expense account',
|
||||
'expense_account' => 'konto stroškov',
|
||||
'revenue_account' => 'Revenue account',
|
||||
'decimal_places' => 'Decimal places',
|
||||
'exchange_rate_instruction' => 'Foreign currencies',
|
||||
@@ -71,9 +71,9 @@ return [
|
||||
'native_amount' => 'Native amount',
|
||||
|
||||
'revenue_account_source' => 'Revenue account (source)',
|
||||
'source_account_asset' => 'Source account (asset account)',
|
||||
'destination_account_expense' => 'Destination account (expense account)',
|
||||
'destination_account_asset' => 'Destination account (asset account)',
|
||||
'source_account_asset' => 'vir (premoženjski račun)',
|
||||
'destination_account_expense' => 'ciljni konto (stroški)',
|
||||
'destination_account_asset' => 'ciljni račun (premoženjski račun)',
|
||||
'source_account_revenue' => 'Source account (revenue account)',
|
||||
'type' => 'Type',
|
||||
'convert_Withdrawal' => 'Convert withdrawal',
|
19
resources/lang/sl_SI/passwords.php
Normal file
19
resources/lang/sl_SI/passwords.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
/**
|
||||
* passwords.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
'password' => 'Geslo mora biti dolgo vsaj šest znakov in mora biti enako v obeh poljih.',
|
||||
'user' => 'Uporabnika s takim e-poštnim naslovom v naši bazi nismo našli.',
|
||||
'token' => 'Žeton za ponastavitev gesla ni veljaven.',
|
||||
'sent' => 'Poslali smo vam povezavo za ponastavitev gesla!',
|
||||
'reset' => 'Vaše geslo je bilo ponastavljeno!',
|
||||
'blocked' => 'Dober poskus...',
|
||||
];
|
@@ -10,8 +10,8 @@
|
||||
*/
|
||||
|
||||
return [
|
||||
'iban' => 'This is not a valid IBAN.',
|
||||
'unique_account_number_for_user' => 'It looks like this account number is already in use.',
|
||||
'iban' => 'To ni veljaven IBAN.',
|
||||
'unique_account_number_for_user' => 'Kaže, da je ta številka računa že v uporabi.',
|
||||
'deleted_user' => 'Due to security constraints, you cannot register using this email address.',
|
||||
'rule_trigger_value' => 'This value is invalid for the selected trigger.',
|
||||
'rule_action_value' => 'This value is invalid for the selected action.',
|
@@ -1,28 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* auth.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used during authentication for various
|
||||
| messages that we need to display to the user. You are free to modify
|
||||
| these language lines according to your application's requirements.
|
||||
|
|
||||
*/
|
||||
|
||||
'failed' => 'These credentials do not match our records.',
|
||||
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
|
||||
|
||||
];
|
@@ -1,41 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* breadcrumbs.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
'home' => 'Home',
|
||||
'edit_currency' => 'Edit currency ":name"',
|
||||
'delete_currency' => 'Delete currency ":name"',
|
||||
'newPiggyBank' => 'Create a new piggy bank',
|
||||
'edit_piggyBank' => 'Edit piggy bank ":name"',
|
||||
'preferences' => 'Preferences',
|
||||
'profile' => 'Profile',
|
||||
'changePassword' => 'Change your password',
|
||||
'bills' => 'Bills',
|
||||
'newBill' => 'New bill',
|
||||
'edit_bill' => 'Edit bill ":name"',
|
||||
'delete_bill' => 'Delete bill ":name"',
|
||||
'reports' => 'Reports',
|
||||
'searchResult' => 'Search for ":query"',
|
||||
'withdrawal_list' => 'Expenses',
|
||||
'deposit_list' => 'Revenue, income and deposits',
|
||||
'transfer_list' => 'Transfers',
|
||||
'transfers_list' => 'Transfers',
|
||||
'create_withdrawal' => 'Create new withdrawal',
|
||||
'create_deposit' => 'Create new deposit',
|
||||
'create_transfer' => 'Create new transfer',
|
||||
'edit_journal' => 'Edit transaction ":description"',
|
||||
'delete_journal' => 'Delete transaction ":description"',
|
||||
'tags' => 'Tags',
|
||||
'createTag' => 'Create new tag',
|
||||
'edit_tag' => 'Edit tag ":tag"',
|
||||
'delete_tag' => 'Delete tag ":tag"',
|
||||
];
|
@@ -1,23 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* config.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
'locale' => 'en, English, en_US, en_US.utf8, en_US.UTF-8',
|
||||
'month' => '%B %Y',
|
||||
'month_and_day' => '%B %e, %Y',
|
||||
'date_time' => '%B %e, %Y, @ %T',
|
||||
'specific_day' => '%e %B %Y',
|
||||
'week_in_year' => 'Week %W, %Y',
|
||||
'quarter_of_year' => '%B %Y',
|
||||
'year' => '%Y',
|
||||
'half_year' => '%B %Y',
|
||||
|
||||
];
|
@@ -1,80 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* csv.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
|
||||
'import_configure_title' => 'Configure your import',
|
||||
'import_configure_intro' => 'There are some options for your CSV import. Please indicate if your CSV file contains headers on the first column, and what the date format of your date-fields is. That might require some experimentation. The field delimiter is usually a ",", but could also be a ";". Check this carefully.',
|
||||
'import_configure_form' => 'Basic CSV import options',
|
||||
'header_help' => 'Check this if the first row of your CSV file are the column titles',
|
||||
'date_help' => 'Date time format in your CSV. Follow the format like <a href="https://secure.php.net/manual/en/datetime.createfromformat.php#refsect1-datetime.createfromformat-parameters">this page</a> indicates. The default value will parse dates that look like this: :dateExample.',
|
||||
'delimiter_help' => 'Choose the field delimiter that is used in your input file. If not sure, comma is the safest option.',
|
||||
'import_account_help' => 'If your CSV file does NOT contain information about your asset account(s), use this dropdown to select to which account the transactions in the CSV belong to.',
|
||||
'upload_not_writeable' => 'The grey box contains a file path. It should be writeable. Please make sure it is.',
|
||||
|
||||
// roles
|
||||
'column_roles_title' => 'Define column roles',
|
||||
'column_roles_table' => 'Table',
|
||||
'column_name' => 'Name of column',
|
||||
'column_example' => 'Column example data',
|
||||
'column_role' => 'Column data meaning',
|
||||
'do_map_value' => 'Map these values',
|
||||
'column' => 'Column',
|
||||
'no_example_data' => 'No example data available',
|
||||
'store_column_roles' => 'Continue import',
|
||||
'do_not_map' => '(do not map)',
|
||||
'map_title' => 'Connect import data to Firefly III data',
|
||||
'map_text' => 'In the following tables, the left value shows you information found in your uploaded CSV file. It is your task to map this value, if possible, to a value already present in your database. Firefly will stick to this mapping. If there is no value to map to, or you do not wish to map the specific value, select nothing.',
|
||||
|
||||
'field_value' => 'Field value',
|
||||
'field_mapped_to' => 'Mapped to',
|
||||
'store_column_mapping' => 'Store mapping',
|
||||
|
||||
// map things.
|
||||
|
||||
|
||||
'column__ignore' => '(ignore this column)',
|
||||
'column_account-iban' => 'Asset account (IBAN)',
|
||||
'column_account-id' => 'Asset account ID (matching Firefly)',
|
||||
'column_account-name' => 'Asset account (name)',
|
||||
'column_amount' => 'Amount',
|
||||
'column_amount-comma-separated' => 'Amount (comma as decimal separator)',
|
||||
'column_bill-id' => 'Bill ID (matching Firefly)',
|
||||
'column_bill-name' => 'Bill name',
|
||||
'column_budget-id' => 'Budget ID (matching Firefly)',
|
||||
'column_budget-name' => 'Budget name',
|
||||
'column_category-id' => 'Category ID (matching Firefly)',
|
||||
'column_category-name' => 'Category name',
|
||||
'column_currency-code' => 'Currency code (ISO 4217)',
|
||||
'column_currency-id' => 'Currency ID (matching Firefly)',
|
||||
'column_currency-name' => 'Currency name (matching Firefly)',
|
||||
'column_currency-symbol' => 'Currency symbol (matching Firefly)',
|
||||
'column_date-interest' => 'Interest calculation date',
|
||||
'column_date-book' => 'Transaction booking date',
|
||||
'column_date-process' => 'Transaction process date',
|
||||
'column_date-transaction' => 'Date',
|
||||
'column_description' => 'Description',
|
||||
'column_opposing-iban' => 'Opposing account (IBAN)',
|
||||
'column_opposing-id' => 'Opposing account ID (matching Firefly)',
|
||||
'column_external-id' => 'External ID',
|
||||
'column_opposing-name' => 'Opposing account (name)',
|
||||
'column_rabo-debet-credit' => 'Rabobank specific debet/credit indicator',
|
||||
'column_ing-debet-credit' => 'ING specific debet/credit indicator',
|
||||
'column_sepa-ct-id' => 'SEPA Credit Transfer end-to-end ID',
|
||||
'column_sepa-ct-op' => 'SEPA Credit Transfer opposing account',
|
||||
'column_sepa-db' => 'SEPA Direct Debet',
|
||||
'column_tags-comma' => 'Tags (comma separated)',
|
||||
'column_tags-space' => 'Tags (space separated)',
|
||||
'column_account-number' => 'Asset account (account number)',
|
||||
'column_opposing-number' => 'Opposing account (account number)',
|
||||
];
|
@@ -1,24 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* demo.php
|
||||
* Copyright (c) 2016 thegrumpydictator@gmail.com
|
||||
* This software may be modified and distributed under the terms of the Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
'no_demo_text' => 'Sorry, there is no extra demo-explanation text for <abbr title=":route">this page</abbr>.',
|
||||
'see_help_icon' => 'However, the <i class="fa fa-question-circle"></i>-icon in the top right corner may tell you more.',
|
||||
'index' => 'Welcome to <strong>Firefly III</strong>! On this page you get a quick overview of your finances. For more information, check out Accounts → <a href=":asset">Asset Accounts</a> and of course the <a href=":budgets">Budgets</a> and <a href=":reports">Reports</a> pages. Or just take a look around and see where you end up.',
|
||||
'accounts-index' => 'Asset accounts are your personal bank accounts. Expense accounts are the accounts you spend money at, such as stores and friends. Revenue accounts are accounts you receive money from, such as your job, the government or other sources of income. On this page you can edit or remove them.',
|
||||
'budgets-index' => 'This page shows you an overview of your budgets. The top bar shows the amount that is available to be budgeted. This can be customized for any period by clicking the amount on the right. The amount you\'ve actually spent is shown in the bar below. Below that are the expenses per budget and what you\'ve budgeted for them.',
|
||||
'reports-index-start' => 'Firefly III supports four types of reports. Read about them by clicking on the <i class="fa fa-question-circle"></i>-icon in the top right corner.',
|
||||
'reports-index-examples' => 'Be sure to check out these examples: <a href=":one">a monthly financial overview</a>, <a href=":two">a yearly financial overview</a> and <a href=":three">a budget overview</a>.',
|
||||
'currencies-index' => 'Firefly III supports multiple currencies. Although it defaults to the Euro it can be set to the US Dollar and many other currencies. As you can see a small selection of currencies has been included but you can add your own if you wish to. Changing the default currency will not change the currency of existing transactions however: Firefly III supports the use of multiple currencies at the same time.',
|
||||
'transactions-index' => 'These expenses, deposits and transfers are not particularly imaginative. They have been generated automatically.',
|
||||
'piggy-banks-index' => 'As you can see, there are three piggy banks. Use the plus and minus buttons to influence the amount of money in each piggy bank. Click the name of the piggy bank to see the administration for each piggy bank.',
|
||||
'import-index' => 'Of course, any CSV file can be imported into Firefly III ',
|
||||
'import-configure-security' => 'Because of security concerns, your upload has been replaced with a local file.',
|
||||
'import-configure-configuration' => 'The configuration you see below is correct for the local file.',
|
||||
];
|
File diff suppressed because it is too large
Load Diff
@@ -1,189 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* form.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
// new user:
|
||||
'bank_name' => 'Bank name',
|
||||
'bank_balance' => 'Balance',
|
||||
'savings_balance' => 'Savings balance',
|
||||
'credit_card_limit' => 'Credit card limit',
|
||||
'automatch' => 'Match automatically',
|
||||
'skip' => 'Skip',
|
||||
'name' => 'Name',
|
||||
'active' => 'Active',
|
||||
'amount_min' => 'Minimum amount',
|
||||
'amount_max' => 'Maximum amount',
|
||||
'match' => 'Matches on',
|
||||
'repeat_freq' => 'Repeats',
|
||||
'journal_currency_id' => 'Currency',
|
||||
'currency_id' => 'Currency',
|
||||
'attachments' => 'Attachments',
|
||||
'journal_amount' => 'Amount',
|
||||
'journal_asset_source_account' => 'Asset account (source)',
|
||||
'journal_source_account_name' => 'Revenue account (source)',
|
||||
'journal_source_account_id' => 'Asset account (source)',
|
||||
'BIC' => 'BIC',
|
||||
'account_from_id' => 'From account',
|
||||
'account_to_id' => 'To account',
|
||||
'source_account' => 'Source account',
|
||||
'destination_account' => 'Destination account',
|
||||
'journal_destination_account_id' => 'Asset account (destination)',
|
||||
'asset_destination_account' => 'Asset account (destination)',
|
||||
'asset_source_account' => 'Asset account (source)',
|
||||
'journal_description' => 'Description',
|
||||
'note' => 'Notes',
|
||||
'split_journal' => 'Split this transaction',
|
||||
'split_journal_explanation' => 'Split this transaction in multiple parts',
|
||||
'currency' => 'Currency',
|
||||
'account_id' => 'Asset account',
|
||||
'budget_id' => 'Budget',
|
||||
'openingBalance' => 'Opening balance',
|
||||
'tagMode' => 'Tag mode',
|
||||
'tagPosition' => 'Tag location',
|
||||
'virtualBalance' => 'Virtual balance',
|
||||
'longitude_latitude' => 'Location',
|
||||
'targetamount' => 'Target amount',
|
||||
'accountRole' => 'Account role',
|
||||
'openingBalanceDate' => 'Opening balance date',
|
||||
'ccType' => 'Credit card payment plan',
|
||||
'ccMonthlyPaymentDate' => 'Credit card monthly payment date',
|
||||
'piggy_bank_id' => 'Piggy bank',
|
||||
'returnHere' => 'Return here',
|
||||
'returnHereExplanation' => 'After storing, return here to create another one.',
|
||||
'returnHereUpdateExplanation' => 'After updating, return here.',
|
||||
'description' => 'Description',
|
||||
'expense_account' => 'Expense account',
|
||||
'revenue_account' => 'Revenue account',
|
||||
'decimal_places' => 'Decimal places',
|
||||
'exchange_rate_instruction' => 'Foreign currencies',
|
||||
'exchanged_amount' => 'Exchanged amount',
|
||||
'source_amount' => 'Amount (source)',
|
||||
'destination_amount' => 'Amount (destination)',
|
||||
'native_amount' => 'Native amount',
|
||||
|
||||
'revenue_account_source' => 'Revenue account (source)',
|
||||
'source_account_asset' => 'Source account (asset account)',
|
||||
'destination_account_expense' => 'Destination account (expense account)',
|
||||
'destination_account_asset' => 'Destination account (asset account)',
|
||||
'source_account_revenue' => 'Source account (revenue account)',
|
||||
'type' => 'Type',
|
||||
'convert_Withdrawal' => 'Convert withdrawal',
|
||||
'convert_Deposit' => 'Convert deposit',
|
||||
'convert_Transfer' => 'Convert transfer',
|
||||
|
||||
|
||||
'amount' => 'Amount',
|
||||
'date' => 'Date',
|
||||
'interest_date' => 'Interest date',
|
||||
'book_date' => 'Book date',
|
||||
'process_date' => 'Processing date',
|
||||
'category' => 'Category',
|
||||
'tags' => 'Tags',
|
||||
'deletePermanently' => 'Delete permanently',
|
||||
'cancel' => 'Cancel',
|
||||
'targetdate' => 'Target date',
|
||||
'tag' => 'Tag',
|
||||
'under' => 'Under',
|
||||
'symbol' => 'Symbol',
|
||||
'code' => 'Code',
|
||||
'iban' => 'IBAN',
|
||||
'accountNumber' => 'Account number',
|
||||
'has_headers' => 'Headers',
|
||||
'date_format' => 'Date format',
|
||||
'specifix' => 'Bank- or file specific fixes',
|
||||
'attachments[]' => 'Attachments',
|
||||
'store_new_withdrawal' => 'Store new withdrawal',
|
||||
'store_new_deposit' => 'Store new deposit',
|
||||
'store_new_transfer' => 'Store new transfer',
|
||||
'add_new_withdrawal' => 'Add a new withdrawal',
|
||||
'add_new_deposit' => 'Add a new deposit',
|
||||
'add_new_transfer' => 'Add a new transfer',
|
||||
'noPiggybank' => '(no piggy bank)',
|
||||
'title' => 'Title',
|
||||
'notes' => 'Notes',
|
||||
'filename' => 'File name',
|
||||
'mime' => 'Mime type',
|
||||
'size' => 'Size',
|
||||
'trigger' => 'Trigger',
|
||||
'stop_processing' => 'Stop processing',
|
||||
'start_date' => 'Start of range',
|
||||
'end_date' => 'End of range',
|
||||
'export_start_range' => 'Start of export range',
|
||||
'export_end_range' => 'End of export range',
|
||||
'export_format' => 'File format',
|
||||
'include_attachments' => 'Include uploaded attachments',
|
||||
'include_old_uploads' => 'Include imported data',
|
||||
'accounts' => 'Export transactions from these accounts',
|
||||
'delete_account' => 'Delete account ":name"',
|
||||
'delete_bill' => 'Delete bill ":name"',
|
||||
'delete_budget' => 'Delete budget ":name"',
|
||||
'delete_category' => 'Delete category ":name"',
|
||||
'delete_currency' => 'Delete currency ":name"',
|
||||
'delete_journal' => 'Delete transaction with description ":description"',
|
||||
'delete_attachment' => 'Delete attachment ":name"',
|
||||
'delete_rule' => 'Delete rule ":title"',
|
||||
'delete_rule_group' => 'Delete rule group ":title"',
|
||||
'attachment_areYouSure' => 'Are you sure you want to delete the attachment named ":name"?',
|
||||
'account_areYouSure' => 'Are you sure you want to delete the account named ":name"?',
|
||||
'bill_areYouSure' => 'Are you sure you want to delete the bill named ":name"?',
|
||||
'rule_areYouSure' => 'Are you sure you want to delete the rule titled ":title"?',
|
||||
'ruleGroup_areYouSure' => 'Are you sure you want to delete the rule group titled ":title"?',
|
||||
'budget_areYouSure' => 'Are you sure you want to delete the budget named ":name"?',
|
||||
'category_areYouSure' => 'Are you sure you want to delete the category named ":name"?',
|
||||
'currency_areYouSure' => 'Are you sure you want to delete the currency named ":name"?',
|
||||
'piggyBank_areYouSure' => 'Are you sure you want to delete the piggy bank named ":name"?',
|
||||
'journal_areYouSure' => 'Are you sure you want to delete the transaction described ":description"?',
|
||||
'mass_journal_are_you_sure' => 'Are you sure you want to delete these transactions?',
|
||||
'tag_areYouSure' => 'Are you sure you want to delete the tag ":tag"?',
|
||||
'permDeleteWarning' => 'Deleting stuff from Firely is permanent and cannot be undone.',
|
||||
'mass_make_selection' => 'You can still prevent items from being deleted by removing the checkbox.',
|
||||
'delete_all_permanently' => 'Delete selected permanently',
|
||||
'update_all_journals' => 'Update these transactions',
|
||||
'also_delete_transactions' => 'The only transaction connected to this account will be deleted as well.|All :count transactions connected to this account will be deleted as well.',
|
||||
'also_delete_rules' => 'The only rule connected to this rule group will be deleted as well.|All :count rules connected to this rule group will be deleted as well.',
|
||||
'also_delete_piggyBanks' => 'The only piggy bank connected to this account will be deleted as well.|All :count piggy bank connected to this account will be deleted as well.',
|
||||
'bill_keep_transactions' => 'The only transaction connected to this bill will not be deleted.|All :count transactions connected to this bill will spared deletion.',
|
||||
'budget_keep_transactions' => 'The only transaction connected to this budget will not be deleted.|All :count transactions connected to this budget will spared deletion.',
|
||||
'category_keep_transactions' => 'The only transaction connected to this category will not be deleted.|All :count transactions connected to this category will spared deletion.',
|
||||
'tag_keep_transactions' => 'The only transaction connected to this tag will not be deleted.|All :count transactions connected to this tag will spared deletion.',
|
||||
|
||||
'email' => 'Email address',
|
||||
'password' => 'Password',
|
||||
'password_confirmation' => 'Password (again)',
|
||||
'blocked' => 'Is blocked?',
|
||||
'blocked_code' => 'Reason for block',
|
||||
|
||||
|
||||
// admin
|
||||
'domain' => 'Domain',
|
||||
'single_user_mode' => 'Single user mode',
|
||||
'must_confirm_account' => 'New users must activate account',
|
||||
'is_demo_site' => 'Is demo site',
|
||||
|
||||
|
||||
// import
|
||||
'import_file' => 'Import file',
|
||||
'configuration_file' => 'Configuration file',
|
||||
'import_file_type' => 'Import file type',
|
||||
'csv_comma' => 'A comma (,)',
|
||||
'csv_semicolon' => 'A semicolon (;)',
|
||||
'csv_tab' => 'A tab (invisible)',
|
||||
'csv_delimiter' => 'CSV field delimiter',
|
||||
'csv_import_account' => 'Default import account',
|
||||
'csv_config' => 'CSV import configuration',
|
||||
|
||||
|
||||
'due_date' => 'Due date',
|
||||
'payment_date' => 'Payment date',
|
||||
'invoice_date' => 'Invoice date',
|
||||
'internal_reference' => 'Internal reference',
|
||||
];
|
@@ -1,33 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* help.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
// tour!
|
||||
'main-content-title' => 'Welcome to Firefly III',
|
||||
'main-content-text' => 'Do yourself a favor and follow this short guide to make sure you know your way around.',
|
||||
'sidebar-toggle-title' => 'Sidebar to create stuff',
|
||||
'sidebar-toggle-text' => 'Hidden under the plus icon are all the buttons to create new stuff. Accounts, transactions, everything!',
|
||||
'account-menu-title' => 'All your accounts',
|
||||
'account-menu-text' => 'Here you can find all the accounts you\'ve made.',
|
||||
'budget-menu-title' => 'Budgets',
|
||||
'budget-menu-text' => 'Use this page to organise your finances and limit spending.',
|
||||
'report-menu-title' => 'Reports',
|
||||
'report-menu-text' => 'Check this out when you want a solid overview of your finances.',
|
||||
'transaction-menu-title' => 'Transactions',
|
||||
'transaction-menu-text' => 'All transactions you\'ve created can be found here.',
|
||||
'option-menu-title' => 'Options',
|
||||
'option-menu-text' => 'This is pretty self-explanatory.',
|
||||
'main-content-end-title' => 'The end!',
|
||||
'main-content-end-text' => 'Remember that every page has a small question mark at the right top. Click it to get help about the page you\'re on.',
|
||||
'index' => 'index',
|
||||
'home' => 'home',
|
||||
];
|
@@ -1,89 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* list.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
'buttons' => 'Buttons',
|
||||
'icon' => 'Icon',
|
||||
'id' => 'ID',
|
||||
'create_date' => 'Created at',
|
||||
'update_date' => 'Updated at',
|
||||
'balance_before' => 'Balance before',
|
||||
'balance_after' => 'Balance after',
|
||||
'name' => 'Name',
|
||||
'role' => 'Role',
|
||||
'currentBalance' => 'Current balance',
|
||||
'active' => 'Is active?',
|
||||
'lastActivity' => 'Last activity',
|
||||
'balanceDiff' => 'Balance difference between :start and :end',
|
||||
'matchedOn' => 'Matched on',
|
||||
'matchesOn' => 'Matched on',
|
||||
'account_type' => 'Account type',
|
||||
'created_at' => 'Created at',
|
||||
'new_balance' => 'New balance',
|
||||
'account' => 'Account',
|
||||
'matchingAmount' => 'Amount',
|
||||
'lastMatch' => 'Last match',
|
||||
'split_number' => 'Split #',
|
||||
'destination' => 'Destination',
|
||||
'source' => 'Source',
|
||||
'next_expected_match' => 'Next expected match',
|
||||
'automatch' => 'Auto match?',
|
||||
'repeat_freq' => 'Repeats',
|
||||
'description' => 'Description',
|
||||
'amount' => 'Amount',
|
||||
'internal_reference' => 'Internal reference',
|
||||
'date' => 'Date',
|
||||
'interest_date' => 'Interest date',
|
||||
'book_date' => 'Book date',
|
||||
'process_date' => 'Processing date',
|
||||
'due_date' => 'Due date',
|
||||
'payment_date' => 'Payment date',
|
||||
'invoice_date' => 'Invoice date',
|
||||
'interal_reference' => 'Internal reference',
|
||||
'notes' => 'Notes',
|
||||
'from' => 'From',
|
||||
'piggy_bank' => 'Piggy bank',
|
||||
'to' => 'To',
|
||||
'budget' => 'Budget',
|
||||
'category' => 'Category',
|
||||
'bill' => 'Bill',
|
||||
'withdrawal' => 'Withdrawal',
|
||||
'deposit' => 'Deposit',
|
||||
'transfer' => 'Transfer',
|
||||
'type' => 'Type',
|
||||
'completed' => 'Completed',
|
||||
'iban' => 'IBAN',
|
||||
'paid_current_period' => 'Paid this period',
|
||||
'email' => 'Email',
|
||||
'registered_at' => 'Registered at',
|
||||
'is_activated' => 'Is activated',
|
||||
'is_blocked' => 'Is blocked',
|
||||
'is_admin' => 'Is admin',
|
||||
'has_two_factor' => 'Has 2FA',
|
||||
'confirmed_from' => 'Confirmed from',
|
||||
'registered_from' => 'Registered from',
|
||||
'blocked_code' => 'Block code',
|
||||
'domain' => 'Domain',
|
||||
'registration_attempts' => 'Registration attempts',
|
||||
'source_account' => 'Source account',
|
||||
'destination_account' => 'Destination account',
|
||||
|
||||
'accounts_count' => 'Number of accounts',
|
||||
'journals_count' => 'Number of transactions',
|
||||
'attachments_count' => 'Number of attachments',
|
||||
'bills_count' => 'Number of bills',
|
||||
'categories_count' => 'Number of categories',
|
||||
'export_jobs_count' => 'Number of export jobs',
|
||||
'import_jobs_count' => 'Number of import jobs',
|
||||
'budget_count' => 'Number of budgets',
|
||||
'rule_and_groups_count' => 'Number of rules and rule groups',
|
||||
'tags_count' => 'Number of tags',
|
||||
];
|
@@ -1,17 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* pagination.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
'previous' => '« Previous',
|
||||
'next' => 'Next »',
|
||||
|
||||
];
|
@@ -1,19 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* passwords.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
'password' => 'Passwords must be at least six characters and match the confirmation.',
|
||||
'user' => 'We can\'t find a user with that e-mail address.',
|
||||
'token' => 'This password reset token is invalid.',
|
||||
'sent' => 'We have e-mailed your password reset link!',
|
||||
'reset' => 'Your password has been reset!',
|
||||
'blocked' => 'Nice try though.',
|
||||
];
|
@@ -1,91 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* validation.php
|
||||
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This software may be modified and distributed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||
*
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
return [
|
||||
'iban' => 'This is not a valid IBAN.',
|
||||
'unique_account_number_for_user' => 'It looks like this account number is already in use.',
|
||||
'deleted_user' => 'Due to security constraints, you cannot register using this email address.',
|
||||
'rule_trigger_value' => 'This value is invalid for the selected trigger.',
|
||||
'rule_action_value' => 'This value is invalid for the selected action.',
|
||||
'invalid_domain' => 'Due to security constraints, you cannot register from this domain.',
|
||||
'file_already_attached' => 'Uploaded file ":name" is already attached to this object.',
|
||||
'file_attached' => 'Succesfully uploaded file ":name".',
|
||||
'file_invalid_mime' => 'File ":name" is of type ":mime" which is not accepted as a new upload.',
|
||||
'file_too_large' => 'File ":name" is too large.',
|
||||
'belongs_to_user' => 'The value of :attribute is unknown',
|
||||
'accepted' => 'The :attribute must be accepted.',
|
||||
'bic' => 'This is not a valid BIC.',
|
||||
'more' => ':attribute must be larger than zero.',
|
||||
'active_url' => 'The :attribute is not a valid URL.',
|
||||
'after' => 'The :attribute must be a date after :date.',
|
||||
'alpha' => 'The :attribute may only contain letters.',
|
||||
'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.',
|
||||
'alpha_num' => 'The :attribute may only contain letters and numbers.',
|
||||
'array' => 'The :attribute must be an array.',
|
||||
'unique_for_user' => 'There already is an entry with this :attribute.',
|
||||
'before' => 'The :attribute must be a date before :date.',
|
||||
'unique_object_for_user' => 'This name is already in use',
|
||||
'unique_account_for_user' => 'This account name is already in use',
|
||||
'between.numeric' => 'The :attribute must be between :min and :max.',
|
||||
'between.file' => 'The :attribute must be between :min and :max kilobytes.',
|
||||
'between.string' => 'The :attribute must be between :min and :max characters.',
|
||||
'between.array' => 'The :attribute must have between :min and :max items.',
|
||||
'boolean' => 'The :attribute field must be true or false.',
|
||||
'confirmed' => 'The :attribute confirmation does not match.',
|
||||
'date' => 'The :attribute is not a valid date.',
|
||||
'date_format' => 'The :attribute does not match the format :format.',
|
||||
'different' => 'The :attribute and :other must be different.',
|
||||
'digits' => 'The :attribute must be :digits digits.',
|
||||
'digits_between' => 'The :attribute must be between :min and :max digits.',
|
||||
'email' => 'The :attribute must be a valid email address.',
|
||||
'filled' => 'The :attribute field is required.',
|
||||
'exists' => 'The selected :attribute is invalid.',
|
||||
'image' => 'The :attribute must be an image.',
|
||||
'in' => 'The selected :attribute is invalid.',
|
||||
'integer' => 'The :attribute must be an integer.',
|
||||
'ip' => 'The :attribute must be a valid IP address.',
|
||||
'json' => 'The :attribute must be a valid JSON string.',
|
||||
'max.numeric' => 'The :attribute may not be greater than :max.',
|
||||
'max.file' => 'The :attribute may not be greater than :max kilobytes.',
|
||||
'max.string' => 'The :attribute may not be greater than :max characters.',
|
||||
'max.array' => 'The :attribute may not have more than :max items.',
|
||||
'mimes' => 'The :attribute must be a file of type: :values.',
|
||||
'min.numeric' => 'The :attribute must be at least :min.',
|
||||
'min.file' => 'The :attribute must be at least :min kilobytes.',
|
||||
'min.string' => 'The :attribute must be at least :min characters.',
|
||||
'min.array' => 'The :attribute must have at least :min items.',
|
||||
'not_in' => 'The selected :attribute is invalid.',
|
||||
'numeric' => 'The :attribute must be a number.',
|
||||
'regex' => 'The :attribute format is invalid.',
|
||||
'required' => 'The :attribute field is required.',
|
||||
'required_if' => 'The :attribute field is required when :other is :value.',
|
||||
'required_unless' => 'The :attribute field is required unless :other is in :values.',
|
||||
'required_with' => 'The :attribute field is required when :values is present.',
|
||||
'required_with_all' => 'The :attribute field is required when :values is present.',
|
||||
'required_without' => 'The :attribute field is required when :values is not present.',
|
||||
'required_without_all' => 'The :attribute field is required when none of :values are present.',
|
||||
'same' => 'The :attribute and :other must match.',
|
||||
'size.numeric' => 'The :attribute must be :size.',
|
||||
'size.file' => 'The :attribute must be :size kilobytes.',
|
||||
'size.string' => 'The :attribute must be :size characters.',
|
||||
'size.array' => 'The :attribute must contain :size items.',
|
||||
'unique' => 'The :attribute has already been taken.',
|
||||
'string' => 'The :attribute must be a string.',
|
||||
'url' => 'The :attribute format is invalid.',
|
||||
'timezone' => 'The :attribute must be a valid zone.',
|
||||
'2fa_code' => 'The :attribute field is invalid.',
|
||||
'dimensions' => 'The :attribute has invalid image dimensions.',
|
||||
'distinct' => 'The :attribute field has a duplicate value.',
|
||||
'file' => 'The :attribute must be a file.',
|
||||
'in_array' => 'The :attribute field does not exist in :other.',
|
||||
'present' => 'The :attribute field must be present.',
|
||||
'amount_zero' => 'The total amount cannot be zero',
|
||||
];
|
@@ -28,7 +28,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-body">
|
||||
<canvas id="overview-chart" style="width:100%;" height="400"></canvas>
|
||||
<canvas id="overview-chart" style="width:100%;height:400px;" height="400" width="100%"></canvas>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -40,8 +40,8 @@
|
||||
<h3 class="box-title">{{ 'expenses_by_category'|_ }}</h3>
|
||||
</div>
|
||||
<div class="box-body">
|
||||
<div style="width:60%;margin:0 auto;">
|
||||
<canvas id="account-cat-out" style="margin:0 auto;"></canvas>
|
||||
<div style="width:100%;margin:0 auto;">
|
||||
<canvas id="account-cat-out" style="width:100%;height:250px;" height="250"></canvas>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -52,8 +52,8 @@
|
||||
<h3 class="box-title">{{ 'expenses_by_budget'|_ }}</h3>
|
||||
</div>
|
||||
<div class="box-body">
|
||||
<div style="width:60%;margin:0 auto;">
|
||||
<canvas id="account-budget-out" style="margin:0 auto;"></canvas>
|
||||
<div style="width:100%;margin:0 auto;">
|
||||
<canvas id="account-budget-out" style="width:100%;height:250px;" height="250"></canvas>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -64,8 +64,8 @@
|
||||
<h3 class="box-title">{{ 'income_by_category'|_ }}</h3>
|
||||
</div>
|
||||
<div class="box-body">
|
||||
<div style="width:60%;margin:0 auto;">
|
||||
<canvas id="account-cat-in" style="margin:0 auto;"></canvas>
|
||||
<div style="width:100%;margin:0 auto;">
|
||||
<canvas id="account-cat-in" style="width:100%;height:250px;" height="250"></canvas>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -149,13 +149,13 @@
|
||||
// uri's for charts:
|
||||
var chartUri = '{{ chartUri }}';
|
||||
{% if start and end %}
|
||||
var incomeCategoryUri = '{{ route('chart.account.income-category', [account.id, start.format('Ymd'), end.format('Ymd')]) }}';
|
||||
var expenseCategoryUri = '{{ route('chart.account.expense-category', [account.id, start.format('Ymd'), end.format('Ymd')]) }}';
|
||||
var expenseBudgetUri = '{{ route('chart.account.expense-budget', [account.id, start.format('Ymd'), end.format('Ymd')]) }}';
|
||||
var incomeCategoryUri = '{{ route('chart.account.income-category', [account.id, start.format('Ymd'), end.format('Ymd')]) }}';
|
||||
var expenseCategoryUri = '{{ route('chart.account.expense-category', [account.id, start.format('Ymd'), end.format('Ymd')]) }}';
|
||||
var expenseBudgetUri = '{{ route('chart.account.expense-budget', [account.id, start.format('Ymd'), end.format('Ymd')]) }}';
|
||||
{% else %}
|
||||
var incomeCategoryUri = '{{ route('chart.account.income-category', [account.id, 'all', 'all']) }}';
|
||||
var expenseCategoryUri = '{{ route('chart.account.expense-category', [account.id, 'all', 'all']) }}';
|
||||
var expenseBudgetUri = '{{ route('chart.account.expense-budget', [account.id, 'all', 'all']) }}';
|
||||
var incomeCategoryUri = '{{ route('chart.account.income-category', [account.id, 'all', 'all']) }}';
|
||||
var expenseCategoryUri = '{{ route('chart.account.expense-category', [account.id, 'all', 'all']) }}';
|
||||
var expenseBudgetUri = '{{ route('chart.account.expense-budget', [account.id, 'all', 'all']) }}';
|
||||
{% endif %}
|
||||
|
||||
</script>
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user