mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-02-25 18:45:27 -06:00
Merge branch 'release/5.2.0-beta.1'
This commit is contained in:
commit
f98011cd0d
@ -59,7 +59,7 @@ APP_LOG_LEVEL=notice
|
||||
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
|
||||
# Use "mysql" for MySQL and MariaDB. Use "sqlite" for SQLite.
|
||||
DB_CONNECTION=pgsql
|
||||
DB_HOST=firefly_iii_db
|
||||
DB_HOST=fireflyiiidb
|
||||
DB_PORT=5432
|
||||
DB_DATABASE=firefly
|
||||
DB_USERNAME=firefly
|
||||
|
2
.github/ISSUE_TEMPLATE/Bug_report.md
vendored
2
.github/ISSUE_TEMPLATE/Bug_report.md
vendored
@ -19,7 +19,7 @@ I am running Firefly III version x.x.x, and my problem is:
|
||||
<!-- Earn bonus points by checking the boxes -->
|
||||
|
||||
- [ ] Nobody reported this bug before
|
||||
- [ ] I have added a stack trace from my log files.
|
||||
- [ ] I have added a stack trace from my log files <!-- (see https://bit.ly/FF3-get-debug-info) -->
|
||||
- [ ] I have added a screenshot.
|
||||
- [ ] I was able to replicate it on the demo site https://demo.firefly-iii.org/
|
||||
<!-- - [ ] I donated money (this is a joke :wink:)-->
|
||||
|
2
.github/ISSUE_TEMPLATE/Custom.md
vendored
2
.github/ISSUE_TEMPLATE/Custom.md
vendored
@ -18,6 +18,6 @@ I am running Firefly III version x.x.x.
|
||||
|
||||
- [ ] I have read the FAQ at https://bit.ly/FF3-FAQ
|
||||
- [ ] I added a screenshot
|
||||
- [ ] I added log files (see https://bit.ly/FF3-get-logs)
|
||||
- [ ] I added log files <!-- (see https://bit.ly/FF3-get-debug-info) -->
|
||||
- [ ] I was able to replicate the issue on the demo site.
|
||||
<!-- - [ ] I donated money (this is a joke :wink:)-->
|
||||
|
@ -47,7 +47,7 @@ class CreateLinkTypes extends Command
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return mixed
|
||||
* @return int
|
||||
*/
|
||||
public function handle(): int
|
||||
{
|
||||
|
@ -50,7 +50,8 @@ class DeleteEmptyGroups extends Command
|
||||
* Execute the console command.
|
||||
*
|
||||
* @throws Exception;
|
||||
* @return mixed
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function handle(): int
|
||||
{
|
||||
|
@ -52,7 +52,7 @@ class EnableCurrencies extends Command
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return mixed
|
||||
* @return int
|
||||
*/
|
||||
public function handle(): int
|
||||
{
|
||||
|
@ -54,7 +54,7 @@ class FixPiggies extends Command
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return mixed
|
||||
* @return int
|
||||
*/
|
||||
public function handle(): int
|
||||
{
|
||||
|
@ -48,7 +48,7 @@ class RemoveBills extends Command
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return mixed
|
||||
* @return int
|
||||
*/
|
||||
public function handle(): int
|
||||
{
|
||||
|
@ -30,6 +30,7 @@ use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Models\Preference;
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Contracts\Encryption\DecryptException;
|
||||
use JsonException;
|
||||
use Log;
|
||||
|
||||
/**
|
||||
@ -92,7 +93,11 @@ class DecryptDatabase extends Command
|
||||
// A separate routine for preferences:
|
||||
if ('preferences' === $table) {
|
||||
// try to json_decrypt the value.
|
||||
$value = json_decode($value, true, 512, JSON_THROW_ON_ERROR) ?? $value;
|
||||
try {
|
||||
$value = json_decode($value, true, 512, JSON_THROW_ON_ERROR) ?? $value;
|
||||
} catch(JsonException $e) {
|
||||
Log::error($e->getMessage());
|
||||
}
|
||||
Log::debug(sprintf('Decrypted field "%s" "%s" to "%s" in table "%s" (row #%d)', $field, $original, print_r($value, true), $table, $id));
|
||||
|
||||
/** @var Preference $object */
|
||||
|
@ -238,11 +238,12 @@ class ExportData extends Command
|
||||
|
||||
/**
|
||||
* @throws FireflyException
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function getExportDirectory(): string
|
||||
{
|
||||
$directory = $this->option('export_directory');
|
||||
$directory = (string) $this->option('export_directory');
|
||||
if (null === $directory) {
|
||||
$directory = './';
|
||||
}
|
||||
|
@ -50,6 +50,7 @@ class GracefulNotFoundHandler extends ExceptionHandler
|
||||
* @param Request $request
|
||||
* @param Exception $exception
|
||||
*
|
||||
* @throws Exception
|
||||
* @return mixed
|
||||
*/
|
||||
public function render($request, Exception $exception)
|
||||
@ -137,9 +138,10 @@ class GracefulNotFoundHandler extends ExceptionHandler
|
||||
* @param Request $request
|
||||
* @param Exception $exception
|
||||
*
|
||||
* @return \Illuminate\Http\Response|Response
|
||||
* @throws Exception
|
||||
* @return Redirector|Response
|
||||
*/
|
||||
private function handleAccount($request, Exception $exception)
|
||||
private function handleAccount(Request $request, Exception $exception)
|
||||
{
|
||||
Log::debug('404 page is probably a deleted account. Redirect to overview of account types.');
|
||||
/** @var User $user */
|
||||
@ -160,6 +162,13 @@ class GracefulNotFoundHandler extends ExceptionHandler
|
||||
return redirect(route('accounts.index', [$shortType]));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Exception $exception
|
||||
*
|
||||
* @throws Exception
|
||||
* @return RedirectResponse|Redirector|Response
|
||||
*/
|
||||
private function handleAttachment(Request $request, Exception $exception)
|
||||
{
|
||||
Log::debug('404 page is probably a deleted attachment. Redirect to parent object.');
|
||||
@ -199,12 +208,13 @@ class GracefulNotFoundHandler extends ExceptionHandler
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $request
|
||||
* @param Request $request
|
||||
* @param Exception $exception
|
||||
*
|
||||
* @throws Exception
|
||||
* @return RedirectResponse|\Illuminate\Http\Response|Redirector|Response
|
||||
*/
|
||||
private function handleGroup($request, Exception $exception)
|
||||
private function handleGroup(Request $request, Exception $exception)
|
||||
{
|
||||
Log::debug('404 page is probably a deleted group. Redirect to overview of group types.');
|
||||
/** @var User $user */
|
||||
|
@ -116,8 +116,8 @@ class Handler extends ExceptionHandler
|
||||
* @param Exception $exception
|
||||
*
|
||||
* @throws Exception
|
||||
* @return mixed|void
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function report(Exception $exception)
|
||||
{
|
||||
|
@ -275,6 +275,9 @@ class TransactionJournalFactory
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
// TODO typeOverrule: the account validator may have another opinion on the transaction type.
|
||||
|
||||
/** create or get source and destination accounts */
|
||||
$sourceInfo = [
|
||||
'id' => (int) $row['source_id'],
|
||||
@ -470,7 +473,7 @@ class TransactionJournalFactory
|
||||
// return user's default:
|
||||
return app('amount')->getDefaultCurrencyByUser($this->user);
|
||||
}
|
||||
$result = $preference ?? $currency;
|
||||
$result = ($preference ?? $currency) ?? app('amount')->getSystemCurrency();
|
||||
Log::debug(sprintf('Currency is now #%d (%s) because of account #%d (%s)', $result->id, $result->code, $account->id, $account->name));
|
||||
|
||||
return $result;
|
||||
@ -599,7 +602,7 @@ class TransactionJournalFactory
|
||||
// validate source account.
|
||||
$sourceId = isset($data['source_id']) ? (int) $data['source_id'] : null;
|
||||
$sourceName = $data['source_name'] ?? null;
|
||||
$validSource = $this->accountValidator->validateSource($sourceId, $sourceName);
|
||||
$validSource = $this->accountValidator->validateSource($sourceId, $sourceName, null);
|
||||
|
||||
// do something with result:
|
||||
if (false === $validSource) {
|
||||
@ -608,8 +611,8 @@ class TransactionJournalFactory
|
||||
Log::debug('Source seems valid.');
|
||||
// validate destination account
|
||||
$destinationId = isset($data['destination_id']) ? (int) $data['destination_id'] : null;
|
||||
$destinationName = $data['destination_name'] ?? null;
|
||||
$validDestination = $this->accountValidator->validateDestination($destinationId, $destinationName);
|
||||
$destinationName = (string)($data['destination_name'] ?? null);
|
||||
$validDestination = $this->accountValidator->validateDestination($destinationId, $destinationName, null);
|
||||
// do something with result:
|
||||
if (false === $validDestination) {
|
||||
throw new FireflyException(sprintf('Destination: %s', $this->accountValidator->destError)); // @codeCoverageIgnore
|
||||
|
@ -71,7 +71,7 @@ class DeleteController extends Controller
|
||||
*
|
||||
* @param Account $account
|
||||
*
|
||||
* @return Factory|View
|
||||
* @return Factory|RedirectResponse|Redirector|View
|
||||
*/
|
||||
public function delete(Account $account)
|
||||
{
|
||||
|
@ -81,8 +81,7 @@ class EditController extends Controller
|
||||
* @param Account $account
|
||||
* @param AccountRepositoryInterface $repository
|
||||
*
|
||||
* @return Factory|View
|
||||
*
|
||||
* @return Factory|RedirectResponse|Redirector|View
|
||||
*/
|
||||
public function edit(Request $request, Account $account, AccountRepositoryInterface $repository)
|
||||
{
|
||||
|
@ -216,7 +216,8 @@ class ReconcileController extends Controller
|
||||
* @param string $difference
|
||||
*
|
||||
* @throws DuplicateTransactionException
|
||||
* @return string
|
||||
*
|
||||
* @return RedirectResponse|Redirector|string
|
||||
*/
|
||||
private function createReconciliation(Account $account, Carbon $start, Carbon $end, string $difference)
|
||||
{
|
||||
|
@ -86,7 +86,8 @@ class ShowController extends Controller
|
||||
* @param Carbon|null $end
|
||||
*
|
||||
* @throws Exception
|
||||
* @return RedirectResponse|Redirector|View
|
||||
*
|
||||
* @return RedirectResponse|Redirector|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||
*/
|
||||
public function show(Request $request, Account $account, Carbon $start = null, Carbon $end = null)
|
||||
{
|
||||
@ -158,7 +159,8 @@ class ShowController extends Controller
|
||||
* @param Account $account
|
||||
*
|
||||
* @throws Exception
|
||||
* @return RedirectResponse|Redirector|View
|
||||
*
|
||||
* @return RedirectResponse|Redirector|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||
*/
|
||||
public function showAll(Request $request, Account $account)
|
||||
{
|
||||
|
@ -90,7 +90,7 @@ class LinkController extends Controller
|
||||
* @param Request $request
|
||||
* @param LinkType $linkType
|
||||
*
|
||||
* @return RedirectResponse|Redirector|View
|
||||
* @return Factory|RedirectResponse|Redirector|\Illuminate\View\View
|
||||
*/
|
||||
public function delete(Request $request, LinkType $linkType)
|
||||
{
|
||||
|
@ -55,7 +55,7 @@ class TelemetryController extends Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
|
||||
*/
|
||||
public function deleteSubmitted()
|
||||
{
|
||||
@ -67,7 +67,7 @@ class TelemetryController extends Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
|
||||
*/
|
||||
public function deleteAll()
|
||||
{
|
||||
|
@ -57,10 +57,9 @@ class ForgotPasswordController extends Controller
|
||||
* Send a reset link to the given user.
|
||||
*
|
||||
* @param Request $request
|
||||
*
|
||||
* @param UserRepositoryInterface $repository
|
||||
*
|
||||
* @return RedirectResponse|JsonResponse
|
||||
* @return Factory|RedirectResponse|View
|
||||
*/
|
||||
public function sendResetLinkEmail(Request $request, UserRepositoryInterface $repository)
|
||||
{
|
||||
|
@ -68,7 +68,8 @@ class ResetPasswordController extends Controller
|
||||
* @param Request $request
|
||||
*
|
||||
* @throws \Illuminate\Validation\ValidationException
|
||||
* @return RedirectResponse|JsonResponse
|
||||
*
|
||||
* @return Factory|JsonResponse|RedirectResponse|View
|
||||
*/
|
||||
public function reset(Request $request)
|
||||
{
|
||||
|
@ -236,6 +236,7 @@ class IndexController extends Controller
|
||||
$repository->setBudgetOrder($budget, $index + 1);
|
||||
}
|
||||
}
|
||||
app('preferences')->mark();
|
||||
|
||||
return response()->json(['OK']);
|
||||
}
|
||||
|
@ -75,7 +75,7 @@ class CurrencyController extends Controller
|
||||
*
|
||||
* @param Request $request
|
||||
*
|
||||
* @return RedirectResponse|Redirector|View
|
||||
* @return Factory|RedirectResponse|Redirector|\Illuminate\View\View
|
||||
*/
|
||||
public function create(Request $request)
|
||||
{
|
||||
@ -128,7 +128,7 @@ class CurrencyController extends Controller
|
||||
* @param Request $request
|
||||
* @param TransactionCurrency $currency
|
||||
*
|
||||
* @return RedirectResponse|Redirector|View
|
||||
* @return Factory|RedirectResponse|Redirector|\Illuminate\View\View
|
||||
*/
|
||||
public function delete(Request $request, TransactionCurrency $currency)
|
||||
{
|
||||
@ -266,7 +266,7 @@ class CurrencyController extends Controller
|
||||
* @param Request $request
|
||||
* @param TransactionCurrency $currency
|
||||
*
|
||||
* @return RedirectResponse|Redirector|View
|
||||
* @return Factory|RedirectResponse|Redirector|\Illuminate\View\View
|
||||
*/
|
||||
public function edit(Request $request, TransactionCurrency $currency)
|
||||
{
|
||||
|
@ -73,7 +73,7 @@ class PrerequisitesController extends Controller
|
||||
* @param string $importProvider
|
||||
* @param ImportJob $importJob
|
||||
*
|
||||
* @return Factory|View
|
||||
* @return Factory|RedirectResponse|Redirector|View
|
||||
*/
|
||||
public function index(string $importProvider, ImportJob $importJob = null)
|
||||
{
|
||||
|
@ -58,7 +58,7 @@ class NewUserController extends Controller
|
||||
/**
|
||||
* Form the user gets when he has no data in the system.
|
||||
*
|
||||
* @return RedirectResponse|Redirector|View
|
||||
* @return RedirectResponse|Redirector|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
|
@ -88,7 +88,7 @@ class ProfileController extends Controller
|
||||
*
|
||||
* @param Request $request
|
||||
*
|
||||
* @return Factory|View
|
||||
* @return Factory|RedirectResponse|Redirector|View
|
||||
*/
|
||||
public function changeEmail(Request $request)
|
||||
{
|
||||
@ -114,7 +114,7 @@ class ProfileController extends Controller
|
||||
*
|
||||
* @param Request $request
|
||||
*
|
||||
* @return Factory|View
|
||||
* @return Factory|RedirectResponse|Redirector|View
|
||||
*/
|
||||
public function changePassword(Request $request)
|
||||
{
|
||||
|
@ -115,7 +115,7 @@ class InstallController extends Controller
|
||||
/**
|
||||
* Show index.
|
||||
*
|
||||
* @return RedirectResponse|Redirector
|
||||
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
|
@ -68,7 +68,7 @@ class BulkController extends Controller
|
||||
*
|
||||
* TODO user wont be able to tell if journal is part of split.
|
||||
*
|
||||
* @param Collection $journals
|
||||
* @param array $journals
|
||||
*
|
||||
* @return Factory|View
|
||||
*/
|
||||
|
@ -87,7 +87,8 @@ class ConvertController extends Controller
|
||||
* @param TransactionGroup $group
|
||||
*
|
||||
* @throws Exception
|
||||
* @return RedirectResponse|Redirector|View
|
||||
*
|
||||
* @return RedirectResponse|Redirector|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||
*/
|
||||
public function index(TransactionType $destinationType, TransactionGroup $group)
|
||||
{
|
||||
@ -207,9 +208,9 @@ class ConvertController extends Controller
|
||||
$sourceId = '' === $sourceId || null === $sourceId ? null : (int) $sourceId;
|
||||
$sourceName = '' === $sourceName ? null : $sourceName;
|
||||
$destinationId = '' === $destinationId || null === $destinationId ? null : (int) $destinationId;
|
||||
$destinationName = '' === $destinationName ? null : $destinationName;
|
||||
$validSource = $validator->validateSource($sourceId, $sourceName);
|
||||
$validDestination = $validator->validateDestination($destinationId, $destinationName);
|
||||
$destinationName = (string)('' === $destinationName ? null : $destinationName);
|
||||
$validSource = $validator->validateSource($sourceId, $sourceName, null);
|
||||
$validDestination = $validator->validateDestination($destinationId, $destinationName, null);
|
||||
|
||||
if (false === $validSource) {
|
||||
throw new FireflyException(sprintf(trans('firefly.convert_invalid_source'), $journal->id));
|
||||
@ -218,6 +219,8 @@ class ConvertController extends Controller
|
||||
throw new FireflyException(sprintf(trans('firefly.convert_invalid_destination'), $journal->id));
|
||||
}
|
||||
|
||||
// TODO typeOverrule: the account validator may have another opinion on the transaction type.
|
||||
|
||||
$update = [
|
||||
'source_id' => $sourceId,
|
||||
'source_name' => $sourceName,
|
||||
|
@ -63,7 +63,7 @@ class EditController extends Controller
|
||||
/**
|
||||
* @param TransactionGroup $transactionGroup
|
||||
*
|
||||
* @return Factory|View
|
||||
* @return Factory|View|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
|
||||
*/
|
||||
public function edit(TransactionGroup $transactionGroup)
|
||||
{
|
||||
|
@ -246,6 +246,8 @@ class RecurrenceFormRequest extends Request
|
||||
$sourceId = null;
|
||||
$destinationId = null;
|
||||
|
||||
// TODO typeOverrule: the account validator may have another opinion on the transaction type.
|
||||
|
||||
switch ($this->string('transaction_type')) {
|
||||
default:
|
||||
throw new FireflyException(sprintf('Cannot handle transaction type "%s"', $this->string('transaction_type'))); // @codeCoverageIgnore
|
||||
@ -265,7 +267,7 @@ class RecurrenceFormRequest extends Request
|
||||
|
||||
|
||||
// validate source account.
|
||||
$validSource = $accountValidator->validateSource($sourceId, null);
|
||||
$validSource = $accountValidator->validateSource($sourceId, null, null);
|
||||
|
||||
// do something with result:
|
||||
if (false === $validSource) {
|
||||
@ -277,7 +279,7 @@ class RecurrenceFormRequest extends Request
|
||||
}
|
||||
|
||||
// validate destination account
|
||||
$validDestination = $accountValidator->validateDestination($destinationId, null);
|
||||
$validDestination = $accountValidator->validateDestination($destinationId, null, null);
|
||||
// do something with result:
|
||||
if (false === $validDestination) {
|
||||
$message = (string) trans('validation.generic_invalid_destination');
|
||||
|
@ -41,8 +41,7 @@ class BankDebitCredit implements ConverterInterface
|
||||
*
|
||||
* @param $value
|
||||
*
|
||||
* @return mixed
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function convert($value): int
|
||||
{
|
||||
|
@ -112,9 +112,10 @@ class IngDescription implements SpecificInterface
|
||||
protected function moveValutadatumDescription(): void
|
||||
{
|
||||
$matches = [];
|
||||
preg_match('/Valutadatum: ([0-9-]+)/', $this->row[8], $matches);
|
||||
$this->row[9] = date("Ymd", strtotime($matches[1]));
|
||||
$this->row[8] = preg_replace('/Valutadatum: [0-9-]+/', '', $this->row[8]);
|
||||
if (preg_match('/Valutadatum: ([0-9-]+)/', $this->row[8], $matches)) {
|
||||
$this->row[9] = date("Ymd", strtotime($matches[1]));
|
||||
$this->row[8] = preg_replace('/Valutadatum: [0-9-]+/', '', $this->row[8]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -140,11 +141,7 @@ class IngDescription implements SpecificInterface
|
||||
*/
|
||||
protected function removeNameIngDescription(): void
|
||||
{
|
||||
$matches = [];
|
||||
if (preg_match('/Valutadatum: ([0-9-]+)/', $this->row[8], $matches)) {
|
||||
$this->row[9] = date("Ymd", strtotime($matches[1]));
|
||||
$this->row[8] = preg_replace('/Valutadatum: [0-9-]+/', '', $this->row[8]);
|
||||
}
|
||||
$this->row[8] = preg_replace('/Naam:.*?([a-zA-Z\/]+:)/', '$1', $this->row[8]);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -153,16 +150,23 @@ class IngDescription implements SpecificInterface
|
||||
private function MoveSavingsAccount(): void
|
||||
{
|
||||
$matches = [];
|
||||
if ('' === (string) $this->row[3]) {
|
||||
if (preg_match('/(Naar|Van) (.*rekening) ([0-9]+)/', $this->row[8], $matches)) {
|
||||
$matches[3] = sprintf("%010d", $matches[3]);
|
||||
$this->row[1] = $matches[2]; // Savings account name
|
||||
$this->row[3] = $matches[3]; // Savings account number
|
||||
$this->row[8] = preg_replace('/(Naar|Van) (.*rekening) ([0-9]+)/', '', $this->row[8]); // Remove the savings account content from description
|
||||
} elseif (preg_match('/(Naar|Van) (.*rekening) ([0-9]+)/', $this->row[1], $matches)) {
|
||||
$matches[3] = sprintf("%010d", $matches[3]);
|
||||
$this->row[1] = $matches[2]; // Savings account name
|
||||
$this->row[3] = $matches[3]; // Savings account number
|
||||
|
||||
if (preg_match('/(Naar|Van) (.*rekening) ([A-Za-z0-9]+)/', $this->row[8], $matches)) { // Search for saving acount at 'Mededelingen' column
|
||||
$this->row[1] = $this->row[1] . ' ' . $matches[2] . ' ' . $matches[3]; // Current name + Saving acount name + Acount number
|
||||
if ('' === (string) $this->row[3]) { // if Saving account number does not yet exists
|
||||
$this->row[3] = $matches[3]; // Copy savings account number
|
||||
}
|
||||
$this->row[8] = preg_replace('/(Naar|Van) (.*rekening) ([A-Za-z0-9]+)/', '', $this->row[8]); // Remove the savings account content from description
|
||||
} elseif (preg_match('/(Naar|Van) (.*rekening) ([A-Za-z0-9]+)/', $this->row[1], $matches)) { // Search for saving acount at 'Naam / Omschrijving' column
|
||||
$this->row[1] = $matches[2] . ' ' . $matches[3]; // Saving acount name + Acount number
|
||||
if ('' === (string) $this->row[3]) { // if Saving account number does not yet exists
|
||||
$this->row[3] = $matches[3]; // Copy savings account number
|
||||
}
|
||||
}
|
||||
|
||||
if ('' !== (string)$this->row[3]) { // if Saving account number exists
|
||||
if (! preg_match('/[A-Za-z]/', $this->row[3])) { // if Saving account number has no characters
|
||||
$this->row[3] = sprintf("%010d", $this->row[3]); // Make the number 10 digits
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -85,6 +85,15 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
* @method static Builder|Account withTrashed()
|
||||
* @method static Builder|Account withoutTrashed()
|
||||
* @mixin Eloquent
|
||||
* @property-read int|null $account_meta_count
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection|Attachment[] $attachments
|
||||
* @property-read int|null $attachments_count
|
||||
* @property-read string $account_number
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection|Location[] $locations
|
||||
* @property-read int|null $locations_count
|
||||
* @property-read int|null $notes_count
|
||||
* @property-read int|null $piggy_banks_count
|
||||
* @property-read int|null $transactions_count
|
||||
*/
|
||||
class Account extends Model
|
||||
{
|
||||
|
@ -32,11 +32,11 @@ use Illuminate\Support\Carbon;
|
||||
/**
|
||||
* Class AccountType.
|
||||
*
|
||||
* @property string $type
|
||||
* @property string $type
|
||||
* @method whereType(string $type)
|
||||
* @property int $id
|
||||
* @property Carbon|null $created_at
|
||||
* @property Carbon|null $updated_at
|
||||
* @property int $id
|
||||
* @property Carbon|null $created_at
|
||||
* @property Carbon|null $updated_at
|
||||
* @property-read Collection|Account[] $accounts
|
||||
* @method static Builder|AccountType newModelQuery()
|
||||
* @method static Builder|AccountType newQuery()
|
||||
@ -45,6 +45,7 @@ use Illuminate\Support\Carbon;
|
||||
* @method static Builder|AccountType whereId($value)
|
||||
* @method static Builder|AccountType whereUpdatedAt($value)
|
||||
* @mixin Eloquent
|
||||
* @property-read int|null $accounts_count
|
||||
*/
|
||||
class AccountType extends Model
|
||||
{
|
||||
|
@ -78,6 +78,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
* @method static Builder|Attachment withTrashed()
|
||||
* @method static Builder|Attachment withoutTrashed()
|
||||
* @mixin Eloquent
|
||||
* @property-read int|null $notes_count
|
||||
*/
|
||||
class Attachment extends Model
|
||||
{
|
||||
|
@ -21,12 +21,45 @@
|
||||
|
||||
namespace FireflyIII\Models;
|
||||
|
||||
use Eloquent;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Illuminate\Database\Query\Builder;
|
||||
use Illuminate\Support\Carbon;
|
||||
|
||||
/**
|
||||
* Class AutoBudget
|
||||
*
|
||||
* @property int $id
|
||||
* @property Carbon|null $created_at
|
||||
* @property Carbon|null $updated_at
|
||||
* @property Carbon|null $deleted_at
|
||||
* @property int $budget_id
|
||||
* @property int $transaction_currency_id
|
||||
* @property int $auto_budget_type
|
||||
* @property float $amount
|
||||
* @property string $period
|
||||
* @property-read Budget $budget
|
||||
* @property-read TransactionCurrency $transactionCurrency
|
||||
* @method static bool|null forceDelete()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|AutoBudget newModelQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|AutoBudget newQuery()
|
||||
* @method static Builder|AutoBudget onlyTrashed()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|AutoBudget query()
|
||||
* @method static bool|null restore()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|AutoBudget whereAmount($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|AutoBudget whereAutoBudgetType($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|AutoBudget whereBudgetId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|AutoBudget whereCreatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|AutoBudget whereDeletedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|AutoBudget whereId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|AutoBudget wherePeriod($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|AutoBudget whereTransactionCurrencyId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|AutoBudget whereUpdatedAt($value)
|
||||
* @method static Builder|AutoBudget withTrashed()
|
||||
* @method static Builder|AutoBudget withoutTrashed()
|
||||
* @mixin Eloquent
|
||||
*/
|
||||
class AutoBudget extends Model
|
||||
{
|
||||
|
@ -86,6 +86,9 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
* @method static Builder|Bill withTrashed()
|
||||
* @method static Builder|Bill withoutTrashed()
|
||||
* @mixin Eloquent
|
||||
* @property-read int|null $attachments_count
|
||||
* @property-read int|null $notes_count
|
||||
* @property-read int|null $transaction_journals_count
|
||||
*/
|
||||
class Bill extends Model
|
||||
{
|
||||
|
@ -70,6 +70,13 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
* @method static Builder|Budget withTrashed()
|
||||
* @method static Builder|Budget withoutTrashed()
|
||||
* @mixin Eloquent
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection|Attachment[] $attachments
|
||||
* @property-read int|null $attachments_count
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection|AutoBudget[] $autoBudgets
|
||||
* @property-read int|null $auto_budgets_count
|
||||
* @property-read int|null $budgetlimits_count
|
||||
* @property-read int|null $transaction_journals_count
|
||||
* @property-read int|null $transactions_count
|
||||
*/
|
||||
class Budget extends Model
|
||||
{
|
||||
|
@ -66,6 +66,10 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
* @method static Builder|Category withTrashed()
|
||||
* @method static Builder|Category withoutTrashed()
|
||||
* @mixin Eloquent
|
||||
* @property-read Collection|Attachment[] $attachments
|
||||
* @property-read int|null $attachments_count
|
||||
* @property-read int|null $transaction_journals_count
|
||||
* @property-read int|null $transactions_count
|
||||
*/
|
||||
class Category extends Model
|
||||
{
|
||||
|
@ -37,12 +37,12 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @deprecated
|
||||
* @property array $transactions
|
||||
* @property array $configuration
|
||||
* @property User $user
|
||||
* @property int $user_id
|
||||
* @property string $status
|
||||
* @property string $stage
|
||||
* @property array $transactions
|
||||
* @property array $configuration
|
||||
* @property User $user
|
||||
* @property int $user_id
|
||||
* @property string $status
|
||||
* @property string $stage
|
||||
* @property string $key
|
||||
* @property string $provider
|
||||
* @property string $file_type
|
||||
@ -72,6 +72,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
* @method static Builder|ImportJob whereUpdatedAt($value)
|
||||
* @method static Builder|ImportJob whereUserId($value)
|
||||
* @mixin Eloquent
|
||||
* @property-read int|null $attachments_count
|
||||
*/
|
||||
class ImportJob extends Model
|
||||
{
|
||||
|
@ -62,6 +62,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
* @method static Builder|LinkType withTrashed()
|
||||
* @method static Builder|LinkType withoutTrashed()
|
||||
* @mixin Eloquent
|
||||
* @property-read int|null $transaction_journal_links_count
|
||||
*/
|
||||
class LinkType extends Model
|
||||
{
|
||||
|
@ -22,12 +22,42 @@
|
||||
namespace FireflyIII\Models;
|
||||
|
||||
|
||||
use Eloquent;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\Collection;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\MorphMany;
|
||||
use Illuminate\Database\Eloquent\Relations\MorphTo;
|
||||
use Illuminate\Support\Carbon;
|
||||
|
||||
/**
|
||||
* Class Location
|
||||
*
|
||||
* @property int $id
|
||||
* @property Carbon|null $created_at
|
||||
* @property Carbon|null $updated_at
|
||||
* @property Carbon|null $deleted_at
|
||||
* @property int $locatable_id
|
||||
* @property string $locatable_type
|
||||
* @property float|null $latitude
|
||||
* @property float|null $longitude
|
||||
* @property int|null $zoom_level
|
||||
* @property-read Collection|Account[] $accounts
|
||||
* @property-read int|null $accounts_count
|
||||
* @property-read Model|Eloquent $locatable
|
||||
* @method static Builder|Location newModelQuery()
|
||||
* @method static Builder|Location newQuery()
|
||||
* @method static Builder|Location query()
|
||||
* @method static Builder|Location whereCreatedAt($value)
|
||||
* @method static Builder|Location whereDeletedAt($value)
|
||||
* @method static Builder|Location whereId($value)
|
||||
* @method static Builder|Location whereLatitude($value)
|
||||
* @method static Builder|Location whereLocatableId($value)
|
||||
* @method static Builder|Location whereLocatableType($value)
|
||||
* @method static Builder|Location whereLongitude($value)
|
||||
* @method static Builder|Location whereUpdatedAt($value)
|
||||
* @method static Builder|Location whereZoomLevel($value)
|
||||
* @mixin Eloquent
|
||||
*/
|
||||
class Location extends Model
|
||||
{
|
||||
|
@ -73,6 +73,11 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
* @method static Builder|PiggyBank withTrashed()
|
||||
* @method static Builder|PiggyBank withoutTrashed()
|
||||
* @mixin Eloquent
|
||||
* @property-read Collection|Attachment[] $attachments
|
||||
* @property-read int|null $attachments_count
|
||||
* @property-read int|null $notes_count
|
||||
* @property-read int|null $piggy_bank_events_count
|
||||
* @property-read int|null $piggy_bank_repetitions_count
|
||||
*/
|
||||
class PiggyBank extends Model
|
||||
{
|
||||
|
@ -87,6 +87,10 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
* @method static Builder|Recurrence withTrashed()
|
||||
* @method static Builder|Recurrence withoutTrashed()
|
||||
* @mixin Eloquent
|
||||
* @property-read int|null $notes_count
|
||||
* @property-read int|null $recurrence_meta_count
|
||||
* @property-read int|null $recurrence_repetitions_count
|
||||
* @property-read int|null $recurrence_transactions_count
|
||||
*/
|
||||
class Recurrence extends Model
|
||||
{
|
||||
|
@ -75,6 +75,7 @@ use Illuminate\Support\Collection;
|
||||
* @method static Builder|RecurrenceTransaction withTrashed()
|
||||
* @method static Builder|RecurrenceTransaction withoutTrashed()
|
||||
* @mixin Eloquent
|
||||
* @property-read int|null $recurrence_transaction_meta_count
|
||||
*/
|
||||
class RecurrenceTransaction extends Model
|
||||
{
|
||||
|
@ -50,6 +50,7 @@ use Illuminate\Support\Carbon;
|
||||
* @method static Builder|Role whereName($value)
|
||||
* @method static Builder|Role whereUpdatedAt($value)
|
||||
* @mixin Eloquent
|
||||
* @property-read int|null $users_count
|
||||
*/
|
||||
class Role extends Model
|
||||
{
|
||||
|
@ -73,6 +73,8 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
* @method static Builder|Rule withTrashed()
|
||||
* @method static Builder|Rule withoutTrashed()
|
||||
* @mixin Eloquent
|
||||
* @property-read int|null $rule_actions_count
|
||||
* @property-read int|null $rule_triggers_count
|
||||
*/
|
||||
class Rule extends Model
|
||||
{
|
||||
|
@ -67,6 +67,8 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
* @method static Builder|RuleGroup withoutTrashed()
|
||||
* @property bool $stop_processing
|
||||
* @mixin Eloquent
|
||||
* @property-read int|null $rules_count
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|RuleGroup whereStopProcessing($value)
|
||||
*/
|
||||
class RuleGroup extends Model
|
||||
{
|
||||
|
@ -73,6 +73,11 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
* @method static Builder|Tag withTrashed()
|
||||
* @method static Builder|Tag withoutTrashed()
|
||||
* @mixin Eloquent
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection|Attachment[] $attachments
|
||||
* @property-read int|null $attachments_count
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection|Location[] $locations
|
||||
* @property-read int|null $locations_count
|
||||
* @property-read int|null $transaction_journals_count
|
||||
*/
|
||||
class Tag extends Model
|
||||
{
|
||||
|
@ -22,10 +22,36 @@
|
||||
namespace FireflyIII\Models;
|
||||
|
||||
|
||||
use Eloquent;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Carbon;
|
||||
|
||||
/**
|
||||
* Class Telemetry
|
||||
*
|
||||
* @property int $id
|
||||
* @property Carbon|null $created_at
|
||||
* @property Carbon|null $updated_at
|
||||
* @property Carbon|null $submitted
|
||||
* @property int|null $user_id
|
||||
* @property string $installation_id
|
||||
* @property string $type
|
||||
* @property string $key
|
||||
* @property array $value
|
||||
* @method static Builder|Telemetry newModelQuery()
|
||||
* @method static Builder|Telemetry newQuery()
|
||||
* @method static Builder|Telemetry query()
|
||||
* @method static Builder|Telemetry whereCreatedAt($value)
|
||||
* @method static Builder|Telemetry whereId($value)
|
||||
* @method static Builder|Telemetry whereInstallationId($value)
|
||||
* @method static Builder|Telemetry whereKey($value)
|
||||
* @method static Builder|Telemetry whereSubmitted($value)
|
||||
* @method static Builder|Telemetry whereType($value)
|
||||
* @method static Builder|Telemetry whereUpdatedAt($value)
|
||||
* @method static Builder|Telemetry whereUserId($value)
|
||||
* @method static Builder|Telemetry whereValue($value)
|
||||
* @mixin Eloquent
|
||||
*/
|
||||
class Telemetry extends Model
|
||||
{
|
||||
|
@ -130,6 +130,8 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
* @method static \Illuminate\Database\Query\Builder|Transaction withTrashed()
|
||||
* @method static \Illuminate\Database\Query\Builder|Transaction withoutTrashed()
|
||||
* @mixin Eloquent
|
||||
* @property-read int|null $budgets_count
|
||||
* @property-read int|null $categories_count
|
||||
*/
|
||||
class Transaction extends Model
|
||||
{
|
||||
|
@ -64,6 +64,9 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
* @method static Builder|TransactionCurrency withTrashed()
|
||||
* @method static Builder|TransactionCurrency withoutTrashed()
|
||||
* @mixin Eloquent
|
||||
* @property-read int|null $budget_limits_count
|
||||
* @property-read int|null $transaction_journals_count
|
||||
* @property-read int|null $transactions_count
|
||||
*/
|
||||
class TransactionCurrency extends Model
|
||||
{
|
||||
|
@ -60,11 +60,12 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
* @method static Builder|TransactionGroup withTrashed()
|
||||
* @method static Builder|TransactionGroup withoutTrashed()
|
||||
* @mixin Eloquent
|
||||
* @property string amount
|
||||
* @property string foreign_amount
|
||||
* @property int transaction_group_id
|
||||
* @property int transaction_journal_id
|
||||
* @property string transaction_group_title
|
||||
* @property string amount
|
||||
* @property string foreign_amount
|
||||
* @property int transaction_group_id
|
||||
* @property int transaction_journal_id
|
||||
* @property string transaction_group_title
|
||||
* @property-read int|null $transaction_journals_count
|
||||
*/
|
||||
class TransactionGroup extends Model
|
||||
{
|
||||
|
@ -109,6 +109,18 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
* @method static \Illuminate\Database\Query\Builder|TransactionJournal withTrashed()
|
||||
* @method static \Illuminate\Database\Query\Builder|TransactionJournal withoutTrashed()
|
||||
* @mixin Eloquent
|
||||
* @property-read int|null $attachments_count
|
||||
* @property-read int|null $budgets_count
|
||||
* @property-read int|null $categories_count
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection|TransactionJournalLink[] $destJournalLinks
|
||||
* @property-read int|null $dest_journal_links_count
|
||||
* @property-read int|null $notes_count
|
||||
* @property-read int|null $piggy_bank_events_count
|
||||
* @property-read int|null $source_journal_links_count
|
||||
* @property-read int|null $tags_count
|
||||
* @property-read int|null $transaction_journal_meta_count
|
||||
* @property-read int|null $transactions_count
|
||||
* @method static EloquentBuilder|TransactionJournal whereTransactionGroupId($value)
|
||||
*/
|
||||
class TransactionJournal extends Model
|
||||
{
|
||||
|
@ -56,6 +56,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
* @method static Builder|TransactionJournalLink whereSourceId($value)
|
||||
* @method static Builder|TransactionJournalLink whereUpdatedAt($value)
|
||||
* @mixin Eloquent
|
||||
* @property-read int|null $notes_count
|
||||
*/
|
||||
class TransactionJournalLink extends Model
|
||||
{
|
||||
|
@ -54,6 +54,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
* @method static Builder|TransactionType withTrashed()
|
||||
* @method static Builder|TransactionType withoutTrashed()
|
||||
* @mixin Eloquent
|
||||
* @property-read int|null $transaction_journals_count
|
||||
*/
|
||||
class TransactionType extends Model
|
||||
{
|
||||
|
@ -189,7 +189,7 @@ class BudgetRepository implements BudgetRepositoryInterface
|
||||
{
|
||||
/** @var Collection $set */
|
||||
$set = $this->user->budgets()->where('active', 1)
|
||||
->orderBy('order', 'ASC')
|
||||
->orderBy('order', 'DESC')
|
||||
->orderBy('name', 'ASC')
|
||||
->get();
|
||||
|
||||
|
@ -320,7 +320,7 @@ class CurrencyRepository implements CurrencyRepositoryInterface
|
||||
* @param int|null $currencyId
|
||||
* @param string|null $currencyCode
|
||||
*
|
||||
* @return TransactionCurrency|null
|
||||
* @return TransactionCurrency
|
||||
*/
|
||||
public function findCurrency(?int $currencyId, ?string $currencyCode): TransactionCurrency
|
||||
{
|
||||
|
@ -156,7 +156,7 @@ interface CurrencyRepositoryInterface
|
||||
* @param int|null $currencyId
|
||||
* @param string|null $currencyCode
|
||||
*
|
||||
* @return TransactionCurrency|null
|
||||
* @return TransactionCurrency
|
||||
*/
|
||||
public function findCurrency(?int $currencyId, ?string $currencyCode): TransactionCurrency;
|
||||
|
||||
|
@ -118,7 +118,7 @@ interface TagRepositoryInterface
|
||||
/**
|
||||
* @param int|null $year
|
||||
*
|
||||
* @return Collection
|
||||
* @return array
|
||||
*/
|
||||
public function getTagsInYear(?int $year): array;
|
||||
|
||||
|
@ -35,7 +35,7 @@ class IsTransferAccount implements Rule
|
||||
/**
|
||||
* Get the validation error message.
|
||||
*
|
||||
* @return string|array
|
||||
* @return string
|
||||
*/
|
||||
public function message(): string
|
||||
{
|
||||
@ -58,14 +58,14 @@ class IsTransferAccount implements Rule
|
||||
$validator->setTransactionType(TransactionType::TRANSFER);
|
||||
$validator->setUser(auth()->user());
|
||||
|
||||
$validAccount = $validator->validateSource(null, (string)$value);
|
||||
$validAccount = $validator->validateSource(null, (string)$value, null);
|
||||
if (true === $validAccount) {
|
||||
Log::debug('Found account based on name. Return true.');
|
||||
|
||||
// found by name, use repos to return.
|
||||
return true;
|
||||
}
|
||||
$validAccount = $validator->validateSource((int)$value, null);
|
||||
$validAccount = $validator->validateSource((int)$value, null, null);
|
||||
Log::debug(sprintf('Search by id (%d), result is %s.', (int)$value, var_export($validAccount, true)));
|
||||
|
||||
return !(false === $validAccount);
|
||||
|
@ -128,7 +128,7 @@ class FixerIOv2 implements ExchangeRateInterface
|
||||
/**
|
||||
* @param User $user
|
||||
*
|
||||
* @return mixed|void
|
||||
* @return void
|
||||
*/
|
||||
public function setUser(User $user)
|
||||
{
|
||||
|
@ -117,7 +117,7 @@ class RatesApiIOv1 implements ExchangeRateInterface
|
||||
/**
|
||||
* @param User $user
|
||||
*
|
||||
* @return mixed|void
|
||||
* @return void
|
||||
*/
|
||||
public function setUser(User $user)
|
||||
{
|
||||
|
@ -98,14 +98,16 @@ trait RecurringTransactionTrait
|
||||
$validator = app(AccountValidator::class);
|
||||
$validator->setUser($recurrence->user);
|
||||
$validator->setTransactionType($recurrence->transactionType->type);
|
||||
if (!$validator->validateSource($source->id, null)) {
|
||||
if (!$validator->validateSource($source->id, null, null)) {
|
||||
throw new FireflyException(sprintf('Source invalid: %s', $validator->sourceError)); // @codeCoverageIgnore
|
||||
}
|
||||
|
||||
if (!$validator->validateDestination($destination->id, null)) {
|
||||
if (!$validator->validateDestination($destination->id, null, null)) {
|
||||
throw new FireflyException(sprintf('Destination invalid: %s', $validator->destError)); // @codeCoverageIgnore
|
||||
}
|
||||
|
||||
// TODO typeOverrule: the account validator may have another opinion on the transaction type.
|
||||
|
||||
$transaction = new RecurrenceTransaction(
|
||||
[
|
||||
'recurrence_id' => $recurrence->id,
|
||||
|
@ -359,9 +359,11 @@ class JournalUpdateService
|
||||
$validator->source = $this->getValidSourceAccount();
|
||||
|
||||
|
||||
$result = $validator->validateDestination($destId, $destName);
|
||||
$result = $validator->validateDestination($destId, $destName, null);
|
||||
Log::debug(sprintf('hasValidDestinationAccount(%d, "%s") will return %s', $destId, $destName, var_export($result, true)));
|
||||
|
||||
// TODO typeOverrule: the account validator may have another opinion on the transaction type.
|
||||
|
||||
// validate submitted info:
|
||||
return $result;
|
||||
}
|
||||
@ -391,9 +393,11 @@ class JournalUpdateService
|
||||
$validator->setTransactionType($expectedType);
|
||||
$validator->setUser($this->transactionJournal->user);
|
||||
|
||||
$result = $validator->validateSource($sourceId, $sourceName);
|
||||
$result = $validator->validateSource($sourceId, $sourceName, null);
|
||||
Log::debug(sprintf('hasValidSourceAccount(%d, "%s") will return %s', $sourceId, $sourceName, var_export($result, true)));
|
||||
|
||||
// TODO typeOverrule: the account validator may have another opinion on the transaction type.
|
||||
|
||||
// validate submitted info:
|
||||
return $result;
|
||||
}
|
||||
|
@ -25,11 +25,9 @@ namespace FireflyIII\Support;
|
||||
use Crypt;
|
||||
use FireflyIII\Models\TransactionCurrency;
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Contracts\Auth\Authenticatable;
|
||||
use Illuminate\Contracts\Encryption\DecryptException;
|
||||
use Illuminate\Support\Collection;
|
||||
use Log;
|
||||
use Preferences as Prefs;
|
||||
|
||||
/**
|
||||
* Class Amount.
|
||||
@ -204,7 +202,7 @@ class Amount
|
||||
if ($cache->has()) {
|
||||
return $cache->get(); // @codeCoverageIgnore
|
||||
}
|
||||
$currencyPreference = Prefs::get('currencyPreference', config('firefly.default_currency', 'EUR'));
|
||||
$currencyPreference = app('preferences')->get('currencyPreference', config('firefly.default_currency', 'EUR'));
|
||||
|
||||
$currency = TransactionCurrency::where('code', $currencyPreference->data)->first();
|
||||
if ($currency) {
|
||||
@ -230,7 +228,7 @@ class Amount
|
||||
if ($cache->has()) {
|
||||
return $cache->get(); // @codeCoverageIgnore
|
||||
}
|
||||
$currencyPreference = Prefs::get('currencyPreference', config('firefly.default_currency', 'EUR'));
|
||||
$currencyPreference = app('preferences')->get('currencyPreference', config('firefly.default_currency', 'EUR'));
|
||||
$currency = TransactionCurrency::where('code', $currencyPreference->data)->first();
|
||||
|
||||
$cache->store($currency->symbol);
|
||||
@ -253,7 +251,19 @@ class Amount
|
||||
}
|
||||
|
||||
/**
|
||||
* @param User|Authenticatable $user
|
||||
* @return \FireflyIII\Models\TransactionCurrency
|
||||
*/
|
||||
public function getSystemCurrency(): TransactionCurrency
|
||||
{
|
||||
if ('testing' === config('app.env')) {
|
||||
Log::warning(sprintf('%s should NOT be called in the TEST environment!', __METHOD__));
|
||||
}
|
||||
|
||||
return TransactionCurrency::where('code', 'EUR')->first();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param User $user
|
||||
*
|
||||
* @return \FireflyIII\Models\TransactionCurrency
|
||||
*/
|
||||
@ -268,17 +278,18 @@ class Amount
|
||||
if ($cache->has()) {
|
||||
return $cache->get(); // @codeCoverageIgnore
|
||||
}
|
||||
$currencyPreference = Prefs::getForUser($user, 'currencyPreference', config('firefly.default_currency', 'EUR'));
|
||||
$currencyPreference = app('preferences')->getForUser($user, 'currencyPreference', config('firefly.default_currency', 'EUR'));
|
||||
$currencyPrefStr = $currencyPreference ? $currencyPreference->data : 'EUR';
|
||||
|
||||
// at this point the currency preference could be encrypted, if coming from an old version.
|
||||
Log::debug('Going to try to decrypt users currency preference.');
|
||||
$currencyCode = $this->tryDecrypt((string)$currencyPreference->data);
|
||||
$currencyCode = $this->tryDecrypt((string) $currencyPrefStr);
|
||||
|
||||
// could still be json encoded:
|
||||
if (strlen($currencyCode) > 3) {
|
||||
$currencyCode = json_decode($currencyCode, true) ?? 'EUR';
|
||||
$currencyCode = json_decode($currencyCode, true, 512, JSON_THROW_ON_ERROR) ?? 'EUR';
|
||||
}
|
||||
|
||||
/** @var TransactionCurrency $currency */
|
||||
$currency = TransactionCurrency::where('code', $currencyCode)->first();
|
||||
if (null === $currency) {
|
||||
// get EUR
|
||||
|
@ -96,7 +96,8 @@ class ImportProvider implements BinderInterface
|
||||
* @param string $value
|
||||
* @param Route $route
|
||||
*
|
||||
* @return Carbon
|
||||
* @return string
|
||||
*
|
||||
* @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
|
||||
*/
|
||||
public static function routeBinder(string $value, Route $route): string
|
||||
|
@ -36,7 +36,8 @@ class JournalList implements BinderInterface
|
||||
* @param string $value
|
||||
* @param Route $route
|
||||
*
|
||||
* @return mixed
|
||||
* @return array
|
||||
*
|
||||
* @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
|
||||
*/
|
||||
public static function routeBinder(string $value, Route $route): array
|
||||
|
@ -50,6 +50,7 @@ class CacheProperties
|
||||
|
||||
/**
|
||||
* @param $property
|
||||
* @param Collection|\Carbon\Carbon|\FireflyIII\Models\Category|array|int|string $property
|
||||
*/
|
||||
public function addProperty($property): void
|
||||
{
|
||||
@ -87,6 +88,7 @@ class CacheProperties
|
||||
|
||||
/**
|
||||
* @param $data
|
||||
* @param (array|mixed)[]|Collection|\Carbon\Carbon|string $data
|
||||
*/
|
||||
public function store($data): void
|
||||
{
|
||||
|
@ -136,7 +136,8 @@ class FireflyConfig
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
* @param $value
|
||||
* @param $value
|
||||
* @param int|string|true $value
|
||||
*
|
||||
* @return Configuration
|
||||
*/
|
||||
|
@ -159,7 +159,7 @@ trait FormSupport
|
||||
* @param $name
|
||||
* @param $options
|
||||
*
|
||||
* @return mixed
|
||||
* @return string
|
||||
*/
|
||||
protected function label(string $name, array $options = null): string
|
||||
{
|
||||
|
@ -70,8 +70,11 @@ trait ModelInformation
|
||||
}
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
* @return array
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @return string[]
|
||||
*
|
||||
* @psalm-return array<int|null, string>
|
||||
*/
|
||||
protected function getLiabilityTypes(): array
|
||||
{
|
||||
|
@ -172,7 +172,7 @@ trait TransactionCalculation
|
||||
* @param Carbon $start
|
||||
* @param Carbon $end
|
||||
*
|
||||
* @return Collection
|
||||
* @return array
|
||||
*/
|
||||
protected function getIncomeForTags(Collection $accounts, Collection $tags, Carbon $start, Carbon $end): array
|
||||
{
|
||||
|
@ -142,7 +142,7 @@ class Preferences
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \FireflyIII\User|Authenticatable $user
|
||||
* @param User $user
|
||||
* @param string $name
|
||||
* @param null|string $default
|
||||
*
|
||||
|
@ -206,7 +206,7 @@ class RuleEngine
|
||||
}
|
||||
|
||||
/**
|
||||
* @param User|Authenticatable $user
|
||||
* @param User $user
|
||||
*/
|
||||
public function setUser(User $user): void
|
||||
{
|
||||
|
@ -115,7 +115,7 @@ class TriggerFactory
|
||||
*
|
||||
* @param string $triggerType
|
||||
*
|
||||
* @return TriggerInterface|string
|
||||
* @return string
|
||||
*
|
||||
* @throws FireflyException
|
||||
*/
|
||||
|
24
app/User.php
24
app/User.php
@ -114,6 +114,30 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
* @method static Builder|User whereReset($value)
|
||||
* @method static Builder|User whereUpdatedAt($value)
|
||||
* @mixin Eloquent
|
||||
* @property string|null $objectguid
|
||||
* @property-read int|null $accounts_count
|
||||
* @property-read int|null $attachments_count
|
||||
* @property-read int|null $available_budgets_count
|
||||
* @property-read int|null $bills_count
|
||||
* @property-read int|null $budgets_count
|
||||
* @property-read int|null $categories_count
|
||||
* @property-read int|null $clients_count
|
||||
* @property-read int|null $currency_exchange_rates_count
|
||||
* @property-read int|null $import_jobs_count
|
||||
* @property-read int|null $notifications_count
|
||||
* @property-read int|null $piggy_banks_count
|
||||
* @property-read int|null $preferences_count
|
||||
* @property-read int|null $recurrences_count
|
||||
* @property-read int|null $roles_count
|
||||
* @property-read int|null $rule_groups_count
|
||||
* @property-read int|null $rules_count
|
||||
* @property-read int|null $tags_count
|
||||
* @property-read int|null $tokens_count
|
||||
* @property-read int|null $transaction_groups_count
|
||||
* @property-read int|null $transaction_journals_count
|
||||
* @property-read int|null $transactions_count
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|\FireflyIII\User whereMfaSecret($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|\FireflyIII\User whereObjectguid($value)
|
||||
*/
|
||||
class User extends Authenticatable
|
||||
{
|
||||
|
@ -80,14 +80,15 @@ class AccountValidator
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int|null $destinationId
|
||||
* @param $destinationName
|
||||
* @param int|null $accountId
|
||||
* @param string|null $accountName
|
||||
* @param string|null $accountIban
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function validateDestination(?int $destinationId, $destinationName): bool
|
||||
public function validateDestination(?int $accountId, ?string $accountName, ?string $accountIban): bool
|
||||
{
|
||||
Log::debug(sprintf('Now in AccountValidator::validateDestination(%d, "%s")', $destinationId, $destinationName));
|
||||
Log::debug(sprintf('Now in AccountValidator::validateDestination(%d, "%s", "%s")', $accountId, $accountName, $accountIban));
|
||||
if (null === $this->source) {
|
||||
Log::error('Source is NULL, always FALSE.');
|
||||
$this->destError = 'No source account validation has taken place yet. Please do this first or overrule the object.';
|
||||
@ -103,19 +104,19 @@ class AccountValidator
|
||||
break;
|
||||
|
||||
case TransactionType::WITHDRAWAL:
|
||||
$result = $this->validateWithdrawalDestination($destinationId, $destinationName);
|
||||
$result = $this->validateWithdrawalDestination($accountId, $accountName);
|
||||
break;
|
||||
case TransactionType::DEPOSIT:
|
||||
$result = $this->validateDepositDestination($destinationId, $destinationName);
|
||||
$result = $this->validateDepositDestination($accountId, $accountName);
|
||||
break;
|
||||
case TransactionType::TRANSFER:
|
||||
$result = $this->validateTransferDestination($destinationId, $destinationName);
|
||||
$result = $this->validateTransferDestination($accountId, $accountName);
|
||||
break;
|
||||
case TransactionType::OPENING_BALANCE:
|
||||
$result = $this->validateOBDestination($destinationId, $destinationName);
|
||||
$result = $this->validateOBDestination($accountId, $accountName);
|
||||
break;
|
||||
case TransactionType::RECONCILIATION:
|
||||
$result = $this->validateReconciliationDestination($destinationId);
|
||||
$result = $this->validateReconciliationDestination($accountId);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -125,12 +126,13 @@ class AccountValidator
|
||||
/**
|
||||
* @param int|null $accountId
|
||||
* @param string|null $accountName
|
||||
* @param string|null $accountIban
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function validateSource(?int $accountId, ?string $accountName): bool
|
||||
public function validateSource(?int $accountId, ?string $accountName, ?string $accountIban): bool
|
||||
{
|
||||
Log::debug(sprintf('Now in AccountValidator::validateSource(%d, "%s")', $accountId, $accountName));
|
||||
Log::debug(sprintf('Now in AccountValidator::validateSource(%d, "%s", "%s")', $accountId, $accountName, $accountIban));
|
||||
switch ($this->transactionType) {
|
||||
default:
|
||||
$result = false;
|
||||
@ -196,8 +198,8 @@ class AccountValidator
|
||||
|
||||
/**
|
||||
* @param array $validTypes
|
||||
* @param int|null $accountId
|
||||
* @param string|null $accountName
|
||||
* @param int $accountId
|
||||
* @param string $accountName
|
||||
*
|
||||
* @return Account|null
|
||||
*/
|
||||
|
@ -65,7 +65,7 @@ trait RecurrenceValidation
|
||||
// validate source account.
|
||||
$sourceId = isset($transaction['source_id']) ? (int)$transaction['source_id'] : null;
|
||||
$sourceName = $transaction['source_name'] ?? null;
|
||||
$validSource = $accountValidator->validateSource($sourceId, $sourceName);
|
||||
$validSource = $accountValidator->validateSource($sourceId, $sourceName, null);
|
||||
|
||||
// do something with result:
|
||||
if (false === $validSource) {
|
||||
@ -77,7 +77,7 @@ trait RecurrenceValidation
|
||||
// validate destination account
|
||||
$destinationId = isset($transaction['destination_id']) ? (int)$transaction['destination_id'] : null;
|
||||
$destinationName = $transaction['destination_name'] ?? null;
|
||||
$validDestination = $accountValidator->validateDestination($destinationId, $destinationName);
|
||||
$validDestination = $accountValidator->validateDestination($destinationId, $destinationName, null);
|
||||
// do something with result:
|
||||
if (false === $validDestination) {
|
||||
$validator->errors()->add(sprintf('transactions.%d.destination_id', $index), $accountValidator->destError);
|
||||
|
@ -72,9 +72,10 @@ trait TransactionValidation
|
||||
$accountValidator->setTransactionType($transactionType);
|
||||
|
||||
// validate source account.
|
||||
$sourceId = isset($transaction['source_id']) ? (int)$transaction['source_id'] : null;
|
||||
$sourceId = isset($transaction['source_id']) ? (int) $transaction['source_id'] : null;
|
||||
$sourceName = $transaction['source_name'] ?? null;
|
||||
$validSource = $accountValidator->validateSource($sourceId, $sourceName);
|
||||
$sourceIban = $transaction['source_iban'] ?? null;
|
||||
$validSource = $accountValidator->validateSource($sourceId, $sourceName, $sourceIban);
|
||||
|
||||
// do something with result:
|
||||
if (false === $validSource) {
|
||||
@ -84,9 +85,10 @@ trait TransactionValidation
|
||||
return;
|
||||
}
|
||||
// validate destination account
|
||||
$destinationId = isset($transaction['destination_id']) ? (int)$transaction['destination_id'] : null;
|
||||
$destinationId = isset($transaction['destination_id']) ? (int) $transaction['destination_id'] : null;
|
||||
$destinationName = $transaction['destination_name'] ?? null;
|
||||
$validDestination = $accountValidator->validateDestination($destinationId, $destinationName);
|
||||
$destinationIban = $transaction['destination_iban'] ?? null;
|
||||
$validDestination = $accountValidator->validateDestination($destinationId, $destinationName, $destinationIban);
|
||||
// do something with result:
|
||||
if (false === $validDestination) {
|
||||
$validator->errors()->add(sprintf('transactions.%d.destination_id', $index), $accountValidator->destError);
|
||||
@ -140,7 +142,7 @@ trait TransactionValidation
|
||||
// validate source account.
|
||||
$sourceId = isset($transaction['source_id']) ? (int)$transaction['source_id'] : $originalData['source_id'];
|
||||
$sourceName = $transaction['source_name'] ?? $originalData['source_name'];
|
||||
$validSource = $accountValidator->validateSource($sourceId, $sourceName);
|
||||
$validSource = $accountValidator->validateSource($sourceId, $sourceName, null);
|
||||
|
||||
// do something with result:
|
||||
if (false === $validSource) {
|
||||
@ -152,7 +154,7 @@ trait TransactionValidation
|
||||
// validate destination account
|
||||
$destinationId = isset($transaction['destination_id']) ? (int)$transaction['destination_id'] : $originalData['destination_id'];
|
||||
$destinationName = $transaction['destination_name'] ?? $originalData['destination_name'];
|
||||
$validDestination = $accountValidator->validateDestination($destinationId, $destinationName);
|
||||
$validDestination = $accountValidator->validateDestination($destinationId, $destinationName, null);
|
||||
// do something with result:
|
||||
if (false === $validDestination) {
|
||||
$validator->errors()->add(sprintf('transactions.%d.destination_id', $index), $accountValidator->destError);
|
||||
|
@ -8,6 +8,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
||||
This release was preceded by a number of test versions:
|
||||
|
||||
- 5.2.0-alpha.1 on 2020-03-24
|
||||
- 5.2.0-beta.1 on 2020-04-02
|
||||
|
||||
### Added
|
||||
- [Issue 2578](https://github.com/firefly-iii/firefly-iii/issues/2578) Allows users to create automatic budget configurations to rollover or set periodic limits.
|
||||
@ -16,6 +17,7 @@ This release was preceded by a number of test versions:
|
||||
- [Issue 2828](https://github.com/firefly-iii/firefly-iii/issues/2828) More objects now support attachments: accounts, bills, budgets, categories, piggy banks and tags.
|
||||
- [Issue 2938](https://github.com/firefly-iii/firefly-iii/issues/2938) Expense and revenue accounts show their balances better.
|
||||
- [Issue 2977](https://github.com/firefly-iii/firefly-iii/issues/2977) On the budget page, the bars and amounts auto update.
|
||||
- [Issue 3079](https://github.com/firefly-iii/firefly-iii/issues/3079) Version is now visible in the footer on mobile.
|
||||
- Support for Vietnamese 🇻🇳
|
||||
|
||||
### Changed
|
||||
@ -24,6 +26,7 @@ This release was preceded by a number of test versions:
|
||||
- [Issue 3048](https://github.com/firefly-iii/firefly-iii/issues/3048) Rules can now handle liabilities as source or destination.
|
||||
- [Issue 2999](https://github.com/firefly-iii/firefly-iii/issues/2999) The category chart on the frontpage now displays income.
|
||||
- [Issue 2997](https://github.com/firefly-iii/firefly-iii/issues/2997) The tag list has categories.
|
||||
- [Issue 3122](https://github.com/firefly-iii/firefly-iii/issues/3122) Buttons on the top of lists.
|
||||
- The Docker maximum file attachment size has been increased to 64M.
|
||||
|
||||
### Fixed
|
||||
@ -31,7 +34,9 @@ This release was preceded by a number of test versions:
|
||||
- [Issue 3193](https://github.com/firefly-iii/firefly-iii/issues/3193) Copying a reconciled transaction correctly removes the reconciliation status.
|
||||
- [Issue 3003](https://github.com/firefly-iii/firefly-iii/issues/3003) Tables will look less crowded on your phone.
|
||||
- [Issue 3202](https://github.com/firefly-iii/firefly-iii/issues/3202) A bug in the frontpage budget chart is fixed.
|
||||
- [Issue 3203](https://github.com/firefly-iii/firefly-iii/issues/3203) Firefly III won't complain when using a locale that uses comma's as decimal separators.
|
||||
- [Issue 3203](https://github.com/firefly-iii/firefly-iii/issues/3203) Firefly III won't complain when using a locale that uses comma's as decimal separators.
|
||||
- [Issue 3212](https://github.com/firefly-iii/firefly-iii/issues/3212) Issue with ING imports.
|
||||
- [Issue 3210](https://github.com/firefly-iii/firefly-iii/issues/3210) Could not create rule based on a transaction from a dropdown menu.
|
||||
|
||||
### API
|
||||
- [Issue 2828](https://github.com/firefly-iii/firefly-iii/issues/2828) Appropriate endpoints for new transaction possibilities.
|
||||
|
@ -112,7 +112,9 @@
|
||||
"johnkary/phpunit-speedtrap": "^3.1",
|
||||
"mockery/mockery": "1.*",
|
||||
"phpunit/phpunit": "8.*",
|
||||
"roave/security-advisories": "dev-master"
|
||||
"psalm/plugin-laravel": "^1.1",
|
||||
"roave/security-advisories": "dev-master",
|
||||
"vimeo/psalm": "^3.10"
|
||||
},
|
||||
"suggest": {
|
||||
},
|
||||
|
1521
composer.lock
generated
1521
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@ -138,7 +138,7 @@ return [
|
||||
],
|
||||
|
||||
'encryption' => null === env('USE_ENCRYPTION') || true === env('USE_ENCRYPTION'),
|
||||
'version' => '5.2.0-alpha.1',
|
||||
'version' => '5.2.0-beta.1',
|
||||
'api_version' => '1.1.0',
|
||||
'db_version' => 13,
|
||||
'maxUploadSize' => 15242880,
|
||||
|
2
public/v1/js/app_vue.js
vendored
2
public/v1/js/app_vue.js
vendored
File diff suppressed because one or more lines are too long
2
public/v1/js/create_transaction.js
vendored
2
public/v1/js/create_transaction.js
vendored
File diff suppressed because one or more lines are too long
2
public/v1/js/edit_transaction.js
vendored
2
public/v1/js/edit_transaction.js
vendored
File diff suppressed because one or more lines are too long
18
public/v1/js/ff/budgets/create.js
vendored
18
public/v1/js/ff/budgets/create.js
vendored
@ -21,4 +21,22 @@
|
||||
$(function () {
|
||||
"use strict";
|
||||
$(".content-wrapper form input:enabled:visible:first").first().focus().select();
|
||||
|
||||
$('#ffInput_auto_budget_type').change(updateAutoBudget);
|
||||
|
||||
function updateAutoBudget() {
|
||||
var value = parseInt($('#ffInput_auto_budget_type').val());
|
||||
if (0 === value) {
|
||||
$('#ffInput_auto_budget_currency_id').prop('disabled', true);
|
||||
$('#ffInput_auto_budget_amount').prop('disabled', true);
|
||||
$('#ffInput_auto_budget_period').prop('disabled', true);
|
||||
return;
|
||||
}
|
||||
$('#ffInput_auto_budget_currency_id').prop('disabled', false);
|
||||
$('#ffInput_auto_budget_amount').prop('disabled', false);
|
||||
$('#ffInput_auto_budget_period').prop('disabled', false);
|
||||
}
|
||||
|
||||
updateAutoBudget();
|
||||
|
||||
});
|
18
public/v1/js/ff/budgets/edit.js
vendored
18
public/v1/js/ff/budgets/edit.js
vendored
@ -21,4 +21,22 @@
|
||||
$(function () {
|
||||
"use strict";
|
||||
$(".content-wrapper form input[type='text']:enabled:visible:first").first().focus();
|
||||
|
||||
$('#ffInput_auto_budget_type').change(updateAutoBudget);
|
||||
|
||||
function updateAutoBudget() {
|
||||
var value = parseInt($('#ffInput_auto_budget_type').val());
|
||||
if (0 === value) {
|
||||
$('#ffInput_auto_budget_currency_id').prop('disabled', true);
|
||||
$('#ffInput_auto_budget_amount').prop('disabled', true);
|
||||
$('#ffInput_auto_budget_period').prop('disabled', true);
|
||||
return;
|
||||
}
|
||||
$('#ffInput_auto_budget_currency_id').prop('disabled', false);
|
||||
$('#ffInput_auto_budget_amount').prop('disabled', false);
|
||||
$('#ffInput_auto_budget_period').prop('disabled', false);
|
||||
}
|
||||
|
||||
updateAutoBudget();
|
||||
|
||||
});
|
@ -569,8 +569,8 @@
|
||||
|
||||
// parse amount if has exactly one comma:
|
||||
// solves issues with some locales.
|
||||
if (1 === (row.amount.match(/\,/g) || []).length) {
|
||||
row.amount = row.amount.replace(',', '.');
|
||||
if (1 === (String(row.amount).match(/\,/g) || []).length) {
|
||||
row.amount = String(row.amount).replace(',', '.');
|
||||
}
|
||||
|
||||
currentArray =
|
||||
|
@ -8,9 +8,9 @@
|
||||
"errors_submission": "Hubo algo malo con su env\u00edo. Por favor, revise los errores de abajo.",
|
||||
"split": "Separar",
|
||||
"transaction_journal_information": "Informaci\u00f3n de transacci\u00f3n",
|
||||
"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.",
|
||||
"no_budget_pointer": "Parece que a\u00fan no tiene presupuestos. Debe crear algunos en la p\u00e1gina <a href=\"\/budgets\">presupuestos<\/a>. Los presupuestos pueden ayudarle a realizar un seguimiento de los gastos.",
|
||||
"source_account": "Cuenta origen",
|
||||
"hidden_fields_preferences": "You can enable more transaction options in your <a href=\"\/preferences\">settings<\/a>.",
|
||||
"hidden_fields_preferences": "Puede habilitar m\u00e1s opciones de transacci\u00f3n en sus <a href=\"\/preferences\">ajustes <\/a>.",
|
||||
"destination_account": "Cuenta destino",
|
||||
"add_another_split": "A\u00f1adir otra divisi\u00f3n",
|
||||
"submission": "Env\u00edo",
|
||||
|
@ -10,7 +10,7 @@
|
||||
"transaction_journal_information": "Tapahtumatiedot",
|
||||
"no_budget_pointer": "Sinulla ei n\u00e4ytt\u00e4isi olevan viel\u00e4 yht\u00e4\u00e4n budjettia. Sinun kannattaisi luoda niit\u00e4 <a href=\"\/budgets\">budjetit<\/a>-sivulla. Budjetit voivat auttaa sinua pit\u00e4m\u00e4\u00e4n kirjaa kuluistasi.",
|
||||
"source_account": "L\u00e4hdetili",
|
||||
"hidden_fields_preferences": "You can enable more transaction options in your <a href=\"\/preferences\">settings<\/a>.",
|
||||
"hidden_fields_preferences": "Voit aktivoida lis\u00e4\u00e4 tapahtumavalintoja <a href=\"\/preferences\">asetuksissa<\/a>.",
|
||||
"destination_account": "Kohdetili",
|
||||
"add_another_split": "Lis\u00e4\u00e4 tapahtumaan uusi osa",
|
||||
"submission": "Vahvistus",
|
||||
|
@ -2,7 +2,7 @@
|
||||
"firefly": {
|
||||
"welcome_back": "Que se passe-t-il ?",
|
||||
"flash_error": "Erreur !",
|
||||
"flash_success": "Termin\u00e9 avec succ\u00e8s !",
|
||||
"flash_success": "Super !",
|
||||
"close": "Fermer",
|
||||
"split_transaction_title": "Description de l'op\u00e9ration ventil\u00e9e",
|
||||
"errors_submission": "Certaines informations ne sont pas correctes dans votre formulaire. Veuillez v\u00e9rifier les erreurs ci-dessous.",
|
||||
|
@ -10,12 +10,12 @@
|
||||
"transaction_journal_information": "Tranzakci\u00f3s inform\u00e1ci\u00f3k",
|
||||
"no_budget_pointer": "\u00dagy t\u0171nik, m\u00e9g nincsenek k\u00f6lts\u00e9gkeretek. K\u00f6lts\u00e9gkereteket a <a href=\"\/budgets\">k\u00f6lts\u00e9gkeretek<\/a> oldalon lehet l\u00e9trehozni. A k\u00f6lts\u00e9gkeretek seg\u00edtenek nyomon k\u00f6vetni a k\u00f6lts\u00e9geket.",
|
||||
"source_account": "Forr\u00e1s sz\u00e1mla",
|
||||
"hidden_fields_preferences": "You can enable more transaction options in your <a href=\"\/preferences\">settings<\/a>.",
|
||||
"hidden_fields_preferences": "A <a href=\"\/preferences\">be\u00e1ll\u00edt\u00e1sokban<\/a> t\u00f6bb tranzakci\u00f3s be\u00e1ll\u00edt\u00e1si lehet\u0151s\u00e9g is megadhat\u00f3.",
|
||||
"destination_account": "C\u00e9lsz\u00e1mla",
|
||||
"add_another_split": "M\u00e1sik feloszt\u00e1s hozz\u00e1ad\u00e1sa",
|
||||
"submission": "Submission",
|
||||
"create_another": "After storing, return here to create another one.",
|
||||
"reset_after": "Reset form after submission",
|
||||
"submission": "Feliratkoz\u00e1s",
|
||||
"create_another": "A t\u00e1rol\u00e1s ut\u00e1n t\u00e9rjen vissza ide \u00faj l\u00e9trehoz\u00e1s\u00e1hoz.",
|
||||
"reset_after": "\u0170rlap t\u00f6rl\u00e9se a bek\u00fcld\u00e9s ut\u00e1n",
|
||||
"submit": "Bek\u00fcld\u00e9s",
|
||||
"amount": "\u00d6sszeg",
|
||||
"date": "D\u00e1tum",
|
||||
@ -24,20 +24,20 @@
|
||||
"category": "Kateg\u00f3ria",
|
||||
"attachments": "Mell\u00e9kletek",
|
||||
"notes": "Megjegyz\u00e9sek",
|
||||
"update_transaction": "Update transaction",
|
||||
"after_update_create_another": "After updating, return here to continue editing.",
|
||||
"store_as_new": "Store as a new transaction instead of updating.",
|
||||
"update_transaction": "Tranzakci\u00f3 friss\u00edt\u00e9se",
|
||||
"after_update_create_another": "A friss\u00edt\u00e9s ut\u00e1n t\u00e9rjen vissza ide a szerkeszt\u00e9s folytat\u00e1s\u00e1hoz.",
|
||||
"store_as_new": "T\u00e1rol\u00e1s \u00faj tranzakci\u00f3k\u00e9nt friss\u00edt\u00e9s helyett.",
|
||||
"split_title_help": "Felosztott tranzakci\u00f3 l\u00e9trehoz\u00e1sakor meg kell adni egy glob\u00e1lis le\u00edr\u00e1st a tranzakci\u00f3 \u00f6sszes feloszt\u00e1sa r\u00e9sz\u00e9re.",
|
||||
"none_in_select_list": "(nincs)",
|
||||
"no_piggy_bank": "(nincs malacpersely)",
|
||||
"description": "Le\u00edr\u00e1s",
|
||||
"split_transaction_title_help": "If you create a split transaction, there must be a global description for all splits of the transaction.",
|
||||
"split_transaction_title_help": "Felosztott tranzakci\u00f3 l\u00e9trehoz\u00e1sakor meg kell adni egy glob\u00e1lis le\u00edr\u00e1st a tranzakci\u00f3 \u00f6sszes feloszt\u00e1sa r\u00e9sz\u00e9re.",
|
||||
"destination_account_reconciliation": "Nem lehet szerkeszteni egy egyeztetett tranzakci\u00f3 c\u00e9lsz\u00e1ml\u00e1j\u00e1t.",
|
||||
"source_account_reconciliation": "Nem lehet szerkeszteni egy egyeztetett tranzakci\u00f3 forr\u00e1ssz\u00e1ml\u00e1j\u00e1t.",
|
||||
"budget": "K\u00f6lts\u00e9gkeret",
|
||||
"you_create_withdrawal": "You're creating a withdrawal.",
|
||||
"you_create_transfer": "You're creating a transfer.",
|
||||
"you_create_deposit": "You're creating a deposit."
|
||||
"you_create_withdrawal": "Egy k\u00f6lts\u00e9g l\u00e9trehoz\u00e1sa.",
|
||||
"you_create_transfer": "Egy \u00e1tutal\u00e1s l\u00e9trehoz\u00e1sa.",
|
||||
"you_create_deposit": "Egy bev\u00e9tel l\u00e9trehoz\u00e1sa."
|
||||
},
|
||||
"form": {
|
||||
"interest_date": "Kamatfizet\u00e9si id\u0151pont",
|
||||
|
@ -57,6 +57,6 @@ return [
|
||||
'edit_tag' => 'Editar etiqueta ":tag"',
|
||||
'delete_tag' => 'Eliminar etiqueta ":tag"',
|
||||
'delete_journal_link' => 'Eliminar enlace entre transacciones',
|
||||
'telemetry_index' => 'Telemetry',
|
||||
'telemetry_view' => 'View telemetry',
|
||||
'telemetry_index' => 'Telemetría',
|
||||
'telemetry_view' => 'Ver telemetría',
|
||||
];
|
||||
|
@ -95,7 +95,7 @@ return [
|
||||
'two_factor_forgot' => 'Olvidé mi cosa de dos factores.',
|
||||
'two_factor_lost_header' => '¿Perdiste tu autentificación de dos factores?',
|
||||
'two_factor_lost_intro' => 'Si perdiste tus códigos de copia de seguridad también, tienes mala suerte. Esto no es algo que puedas arreglar desde la interfaz web. Tienes dos opciones.',
|
||||
'two_factor_lost_fix_self' => 'If you run your own instance of Firefly III, read <a href="https://docs.firefly-iii.org/faq/other#i-lost-my-two-factor-authentication-codes-and-backup-codes">this entry in the FAQ</a> for instructions.',
|
||||
'two_factor_lost_fix_self' => 'Si ejecuta su propia instancia de Firefly III, lea <a href="https://docs.firefly-iii.org/faq/other#i-lost-my-two-factor-authentication-codes-and-backup-codes">esta entrada en el FAQ</a> para obtener instrucciones.',
|
||||
'two_factor_lost_fix_owner' => 'De lo contrario, comuníquese por mail con el dueño del sitio, <a href="mailto::site_owner">:site_owner</a> y pídale que restablezca su autenticación de dos pasos.',
|
||||
'mfa_backup_code' => 'Has usado un código de respaldo para iniciar sesión en Firefly III. No se puede usar de nuevo, así que táchalo de tu lista.',
|
||||
'pref_two_factor_new_backup_codes' => 'Obtener nuevos códigos de copia de seguridad',
|
||||
@ -104,7 +104,7 @@ return [
|
||||
'warning_much_data' => ':days días de datos pueden tomar tiempo en cargarse.',
|
||||
'registered' => '¡Te has registrado con éxito!',
|
||||
'Default asset account' => 'Cuenta de ingresos por defecto',
|
||||
'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.',
|
||||
'no_budget_pointer' => 'Parece que aún no tiene presupuestos. Debe crear algunos en la página <a href="/budgets">presupuestos</a>. Los presupuestos pueden ayudarle a realizar un seguimiento de los gastos.',
|
||||
'Savings account' => 'Cuenta de ahorros',
|
||||
'Credit card' => 'Tarjeta de crédito',
|
||||
'source_accounts' => 'Cuenta(s) origen',
|
||||
@ -218,8 +218,8 @@ return [
|
||||
'unpaid_in_currency' => 'Impago en :currency',
|
||||
'is_alpha_warning' => 'Está ejecutando una versión ALPHA. Tenga cuidado con los errores y problemas.',
|
||||
'is_beta_warning' => 'Está ejecutando una versión BETA. Tenga cuidado con los errores y problemas.',
|
||||
'all_destination_accounts' => 'Destination accounts',
|
||||
'all_source_accounts' => 'Source accounts',
|
||||
'all_destination_accounts' => 'Cuentas destino',
|
||||
'all_source_accounts' => 'Cuentas origen',
|
||||
|
||||
// check for updates:
|
||||
'update_check_title' => 'Ver actualizaciones',
|
||||
@ -308,8 +308,8 @@ return [
|
||||
'updated_rule_group' => 'Grupo de reglas actualizado exitosamente ":title".',
|
||||
'edit_rule_group' => 'Editar grupo de reglas ":title"',
|
||||
'duplicate_rule' => 'Duplicate rule ":title"',
|
||||
'rule_copy_of' => 'Copy of ":title"',
|
||||
'duplicated_rule' => 'Duplicated rule ":title" into ":newTitle"',
|
||||
'rule_copy_of' => 'Copia de ":title"',
|
||||
'duplicated_rule' => 'Regla ":title" duplicada en ":newTitle"',
|
||||
'delete_rule_group' => 'Eliminar grupo de reglas ":title"',
|
||||
'deleted_rule_group' => 'Eliminar grupo de reglas ":title"',
|
||||
'update_rule_group' => 'Actualizar grupo de reglas',
|
||||
@ -788,18 +788,18 @@ return [
|
||||
'over_budget_warn' => '<i class="fa fa-money"></i> Generalmente usted presupone :amount por día. Esta vez es :over_amount por día. ¿Está seguro?',
|
||||
'transferred_in' => 'Transferido (dentro)',
|
||||
'transferred_away' => 'Transferido (fuera)',
|
||||
'auto_budget_none' => 'No auto-budget',
|
||||
'auto_budget_reset' => 'Set a fixed amount every period',
|
||||
'auto_budget_rollover' => 'Add an amount every period',
|
||||
'auto_budget_period_daily' => 'Daily',
|
||||
'auto_budget_period_weekly' => 'Weekly',
|
||||
'auto_budget_period_monthly' => 'Monthly',
|
||||
'auto_budget_period_quarterly' => 'Quarterly',
|
||||
'auto_budget_period_half_year' => 'Every half year',
|
||||
'auto_budget_period_yearly' => 'Yearly',
|
||||
'auto_budget_help' => 'You can read more about this feature in the help. Click the top-right (?) icon.',
|
||||
'auto_budget_reset_icon' => 'This budget will be set periodically',
|
||||
'auto_budget_rollover_icon' => 'The budget amount will increase periodically',
|
||||
'auto_budget_none' => 'Sin autopresupuesto',
|
||||
'auto_budget_reset' => 'Establecer una cantidad fija cada periodo',
|
||||
'auto_budget_rollover' => 'Añadir una cantidad cada período',
|
||||
'auto_budget_period_daily' => 'Diario',
|
||||
'auto_budget_period_weekly' => 'Semanal',
|
||||
'auto_budget_period_monthly' => 'Mensual',
|
||||
'auto_budget_period_quarterly' => 'Trimestral',
|
||||
'auto_budget_period_half_year' => 'Cada medio año',
|
||||
'auto_budget_period_yearly' => 'Anual',
|
||||
'auto_budget_help' => 'Puedes leer más sobre esta función en la ayuda. Haz clic en el icono de la parte superior derecha (?).',
|
||||
'auto_budget_reset_icon' => 'Este presupuesto se establecerá periódicamente',
|
||||
'auto_budget_rollover_icon' => 'La cantidad del presupuesto aumentará periódicamente',
|
||||
|
||||
// bills:
|
||||
'match_between_amounts' => 'La cuenta iguala transacciones entre :low y :high.',
|
||||
@ -829,7 +829,7 @@ return [
|
||||
'skips_over' => 'salta sobre',
|
||||
'bill_store_error' => 'Se ha producido un error inesperado mientras se almacenaba su nueva factura. Por favor, compruebe los archivos de registro',
|
||||
'list_inactive_rule' => 'regla inactiva',
|
||||
'bill_edit_rules' => 'Firefly III will attempt to edit the :count rule(s) related to this bill as well. If you\'ve edited these rule(s) yourself however, Firefly III won\'t change anything.',
|
||||
'bill_edit_rules' => 'Firefly III intentará editar también la(s) :count regla(s) relacionada(s) con esta cuenta. Sin embargo, si ha editado esta(s) regla(s) usted mismo, Firefly III no cambiará nada.',
|
||||
|
||||
// accounts:
|
||||
'inactive_account_link' => 'Tiene :count cuentas inactivas (archivadas), que puede ver en esta página separada.',
|
||||
@ -962,7 +962,7 @@ return [
|
||||
'deleted_withdrawal' => 'Eliminado exitosamente',
|
||||
'deleted_deposit' => 'Deposito eliminado exitosamente ":description"',
|
||||
'deleted_transfer' => 'Transferencia eliminada exitosamente ":description"',
|
||||
'deleted_reconciliation' => 'Successfully deleted reconciliation transaction ":description"',
|
||||
'deleted_reconciliation' => 'Transacción de conciliación eliminada con éxito "::description"',
|
||||
'stored_journal' => 'Nueva transacción creada exitosamente ":description"',
|
||||
'stored_journal_no_descr' => 'Se ha creado tu nueva transacción con éxito',
|
||||
'updated_journal_no_descr' => 'Se ha actualizado tu transacción con éxito',
|
||||
@ -988,7 +988,7 @@ return [
|
||||
'no_budget' => '(sin presupuesto)',
|
||||
'account_per_budget' => 'Cuenta por presupuesto',
|
||||
'account_per_category' => 'Cuenta por categoría',
|
||||
'create_new_object' => 'Create',
|
||||
'create_new_object' => 'Crear',
|
||||
'empty' => '(vacío)',
|
||||
'all_other_budgets' => '(todos los demás presupuestos)',
|
||||
'all_other_accounts' => '(todas las demás cuentas)',
|
||||
@ -1123,8 +1123,8 @@ return [
|
||||
'errors' => 'Errores',
|
||||
'debt_start_date' => 'Fecha de inicio de deuda',
|
||||
'debt_start_amount' => 'Cantidad inicial de la deuda',
|
||||
'debt_start_amount_help' => 'It\'s always best to set this value to a negative amount. Read the help pages (top right (?)-icon) for more information.',
|
||||
'interest_period_help' => 'This field is purely cosmetic and won\'t be calculated for you. As it turns out banks are very sneaky so Firefly III never gets it right.',
|
||||
'debt_start_amount_help' => 'Siempre es mejor establecer este valor a una cantidad negativa. Lea las páginas de ayuda (arriba a la derecha (icono-?)) para más información.',
|
||||
'interest_period_help' => 'Este campo es meramente cosmético y no se calculará para usted. Como resulta que los bancos son muy estrepitosos, por lo que Firefly III nunca lo hace bien.',
|
||||
'store_new_liabilities_account' => 'Crear nuevo pasivo',
|
||||
'edit_liabilities_account' => 'Editar pasivo ":name"',
|
||||
|
||||
@ -1216,7 +1216,7 @@ return [
|
||||
'sum_of_period' => 'Suma de período',
|
||||
'average_in_period' => 'Promedio en el período',
|
||||
'account_role_defaultAsset' => 'Cuentas de ingresos por defecto',
|
||||
'account_role_sharedAsset' => 'Compartir cuenta de ingresos',
|
||||
'account_role_sharedAsset' => 'Cuenta de ingresos compartida',
|
||||
'account_role_savingAsset' => 'Cuentas de ahorros',
|
||||
'account_role_ccAsset' => 'Tarjeta de Crédito',
|
||||
'account_role_cashWalletAsset' => 'Billetera de efectivo',
|
||||
@ -1327,7 +1327,7 @@ return [
|
||||
'store_configuration' => 'Guardar configuración',
|
||||
'single_user_administration' => 'Administración de usuarios para :email',
|
||||
'edit_user' => 'Editar usuario :email',
|
||||
'hidden_fields_preferences' => 'You can enable more transaction options in your <a href="/preferences">settings</a>.',
|
||||
'hidden_fields_preferences' => 'Puede habilitar más opciones de transacción en sus <a href="/preferences">ajustes </a>.',
|
||||
'user_data_information' => 'Datos del usuario',
|
||||
'user_information' => 'Información del usuario',
|
||||
'total_size' => 'tamaño total',
|
||||
@ -1351,7 +1351,7 @@ return [
|
||||
'send_test_email_text' => 'Para ver si su instalación es capaz de enviar correos electrónicos, presione este botón. Usted no verá ningún error aquí (si los hubiera)<strong> los archivos de registro mostrarán cualquier error</strong>. Usted puede presionar este botón tantas veces como lo desee. No hay control de spam. El mensaje será enviado a <code>:email</code>y debería llegar en breve.',
|
||||
'send_message' => 'Enviar mensaje',
|
||||
'send_test_triggered' => 'La prueba fue disparada. Chequee su bandeja de entrada y archivos de registro.',
|
||||
'give_admin_careful' => 'Users who are given admin rights can take away yours. Be careful.',
|
||||
'give_admin_careful' => 'Los usuarios a los que se les conceden derechos de administrador pueden quitarte el tuyo. Ten cuidado.',
|
||||
|
||||
'split_transaction_title' => 'Descripción de la transacción dividida',
|
||||
'split_transaction_title_help' => 'Si crea una transacción dividida, debe existir una descripción global para todas las divisiones de la transacción.',
|
||||
@ -1451,7 +1451,7 @@ return [
|
||||
'tools_index_intro' => 'Existen varias herramientas para importar datos en Firefly III. Reviselas a continuación. Para más información, consulte <a href="https://docs.firefly-iii.org/importing-data/introduction">esta página</a>.',
|
||||
'firefly_iii_csv_importer_name' => 'Importador CSV de Firefly III',
|
||||
'firefly_iii_bunq_importer_name' => 'Importador de Firefly III bunq',
|
||||
'ludo_revolut_importer_name' => 'Ludo444\'s Revolut importer',
|
||||
'ludo_revolut_importer_name' => 'Importador Ludo444\'s Revolut',
|
||||
//
|
||||
// sandstorm.io errors and messages:
|
||||
'sandstorm_not_available' => 'Esta función no esta disponible cuando usted esta utilizando Firefly III dentro de un ambiente Sandstorm.io.',
|
||||
@ -1588,26 +1588,26 @@ return [
|
||||
'box_spend_per_day' => 'Disponible para gasto diario: :amount',
|
||||
|
||||
// telemetry
|
||||
'telemetry_admin_index' => 'Telemetry',
|
||||
'telemetry_intro' => 'Firefly III supports the collection and sending of usage telemetry. This means that Firefly III will try to collect info on how you use Firefly III, and send it to the developer of Firefly III. This is always opt-in, and is disabled by default. Firefly III will never collect or send financial information. Firefly III will also never collect or send financial meta-information, like sums or calculations. The collected data will never be made publicly accessible.',
|
||||
'telemetry_what_collected' => 'What Firefly III collects and sends exactly is different for each version. You are running version :version. What Firefly III collects in version :version is something you can read in the help pages. Click the (?)-icon in the top-right corner <a href="https://docs.firefly-iii.org/support/telemetry">or visit the documentation page</a>.',
|
||||
'telemetry_is_enabled_yes_no' => 'Is Firefly III telemetry enabled?',
|
||||
'telemetry_disabled_no' => 'Telemetry is NOT enabled',
|
||||
'telemetry_disabled_yes' => 'Telemetry is enabled',
|
||||
'telemetry_enabled_now_what' => 'You can disable telemetry the same way you enabled it: in your .env file or in your Docker configuration.',
|
||||
'telemetry_disabled_now_what' => 'If you want to, you can enable telemetry in your .env file or in your Docker configuration.',
|
||||
'telemetry_collected_info' => 'Collected information',
|
||||
'no_telemetry_present' => 'Firefly III has collected zero telemetry records.',
|
||||
'records_telemetry_present' => 'Firefly III has collected :count telemetry record(s).',
|
||||
'telemetry_button_view' => 'View telemetry',
|
||||
'telemetry_button_delete' => 'Delete all telemetry',
|
||||
'telemetry_admin_overview' => 'Telemetry overview',
|
||||
'telemetry_back_to_index' => 'Back to telemetry index',
|
||||
'not_yet_submitted' => 'Not yet submitted',
|
||||
'telemetry_admin_index' => 'Telemetría',
|
||||
'telemetry_intro' => 'Firefly III soporta la recolección y envío de telemetría de uso. Esto significa que Firefly III intentará recopilar información sobre cómo usar Firefly III, y enviarla al desarrollador de Firefly III. Esto es siempre opcional, y está deshabilitado por defecto. Firefly III nunca recogerá ni enviará información financiera. Firefly III nunca recogerá ni enviará meta-información, como sumas o cálculos. Los datos recogidos nunca serán accesibles públicamente.',
|
||||
'telemetry_what_collected' => 'Lo que Firefly III recopila y envía exactamente es diferente para cada versión. Está ejecutando la versión :version. Lo que Firefly III recoge en la versión :version es algo que puede leer en las páginas de ayuda. Haga clic en el icono (?) en la esquina superior derecha <a href="https://docs.firefly-iii.org/support/telemetry">o visite la página de documentación</a>.',
|
||||
'telemetry_is_enabled_yes_no' => '¿Está habilitada la telemetría Firefly III?',
|
||||
'telemetry_disabled_no' => 'La telemetría no está habilitada',
|
||||
'telemetry_disabled_yes' => 'La telemetría está habilitada',
|
||||
'telemetry_enabled_now_what' => 'Puede desactivar la telemetría del mismo modo que la habilitó: en su archivo .env o en la configuración de Docker.',
|
||||
'telemetry_disabled_now_what' => 'Si lo desea, puede activar la telemetría en su archivo .env o en la configuración de Docker.',
|
||||
'telemetry_collected_info' => 'Información recopilada',
|
||||
'no_telemetry_present' => 'Firefly III ha recopilado cero registros de telemetría.',
|
||||
'records_telemetry_present' => 'Firefly III ha recopilado :count registro(s) de telemetría.',
|
||||
'telemetry_button_view' => 'Ver telemetría',
|
||||
'telemetry_button_delete' => 'Borrar toda la telemetría',
|
||||
'telemetry_admin_overview' => 'Resumen de telemetría',
|
||||
'telemetry_back_to_index' => 'Volver al índice de telemetría',
|
||||
'not_yet_submitted' => 'No enviada',
|
||||
'telemetry_type_feature' => 'Feature flag',
|
||||
'telemetry_submit_all' => 'Submit records',
|
||||
'telemetry_delete_submitted_records' => 'Delete submitted records',
|
||||
'telemetry_submission_executed' => 'Records have been submitted. Check your log files for more info.',
|
||||
'telemetry_all_deleted' => 'All telemetry records have been deleted.',
|
||||
'telemetry_submitted_deleted' => 'All submitted telemetry records have been deleted.'
|
||||
'telemetry_submit_all' => 'Enviar registros',
|
||||
'telemetry_delete_submitted_records' => 'Eliminar los registros enviados',
|
||||
'telemetry_submission_executed' => 'Los registros han sido enviados. Revise sus archivos de registro para más información.',
|
||||
'telemetry_all_deleted' => 'Se han eliminado todos los registros de telemetría.',
|
||||
'telemetry_submitted_deleted' => 'Se han eliminado todos los registros de telemetría enviados.'
|
||||
];
|
||||
|
@ -43,7 +43,7 @@ return [
|
||||
'journal_currency_id' => 'Divisa',
|
||||
'currency_id' => 'Divisa',
|
||||
'transaction_currency_id' => 'Moneda',
|
||||
'auto_budget_currency_id' => 'Currency',
|
||||
'auto_budget_currency_id' => 'Moneda',
|
||||
'external_ip' => 'IP externa de su servidor',
|
||||
'attachments' => 'Adjuntos',
|
||||
'journal_amount' => 'Importe',
|
||||
@ -194,7 +194,7 @@ return [
|
||||
'blocked' => '¿Está bloqueado?',
|
||||
'blocked_code' => 'Razón del bloqueo',
|
||||
'login_name' => 'Iniciar sesión',
|
||||
'is_owner' => 'Is admin?',
|
||||
'is_owner' => '¿Es el administrador?',
|
||||
|
||||
// import
|
||||
'apply_rules' => 'Aplicar reglas',
|
||||
@ -262,14 +262,14 @@ return [
|
||||
'expected_on' => 'Esperado para',
|
||||
'paid' => 'Pagado',
|
||||
|
||||
'auto_budget_type' => 'Auto-budget',
|
||||
'auto_budget_amount' => 'Auto-budget amount',
|
||||
'auto_budget_period' => 'Auto-budget period',
|
||||
'auto_budget_type' => 'Autopresupuesto',
|
||||
'auto_budget_amount' => 'Monto del autopresupuesto',
|
||||
'auto_budget_period' => 'Período del autopresupuesto',
|
||||
|
||||
'collected' => 'Collected',
|
||||
'submitted' => 'Submitted',
|
||||
'submitted' => 'Enviado',
|
||||
'key' => 'Key',
|
||||
'value' => 'Content of record'
|
||||
'value' => 'Contenido del registro'
|
||||
|
||||
|
||||
];
|
||||
|
@ -202,7 +202,7 @@ return [
|
||||
'gte.string' => ':attribute debe tener :value caracteres o más.',
|
||||
'gte.array' => ':attribute debe tener :value objetos o más.',
|
||||
|
||||
'amount_required_for_auto_budget' => 'The amount is required.',
|
||||
'auto_budget_amount_positive' => 'The amount must be more than zero.',
|
||||
'auto_budget_period_mandatory' => 'The auto budget period is a mandatory field.',
|
||||
'amount_required_for_auto_budget' => 'Se requiere la cantidad.',
|
||||
'auto_budget_amount_positive' => 'La cantidad debe ser mayor a cero.',
|
||||
'auto_budget_period_mandatory' => 'El período del autopresupuesto es un campo obligatorio.',
|
||||
];
|
||||
|
@ -57,6 +57,6 @@ return [
|
||||
'edit_tag' => 'Muokkaa tägiä ":tag"',
|
||||
'delete_tag' => 'Poista tägi ":tag"',
|
||||
'delete_journal_link' => 'Poista linkki tapahtumien väliltä',
|
||||
'telemetry_index' => 'Telemetry',
|
||||
'telemetry_view' => 'View telemetry',
|
||||
'telemetry_index' => 'Käyttötiedot',
|
||||
'telemetry_view' => 'Tarkastele käyttötietoja',
|
||||
];
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user