mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-02-25 18:45:27 -06:00
Merge branch 'release/v6.0.19'
This commit is contained in:
commit
c6e3fa2cc6
@ -29,8 +29,9 @@ use FireflyIII\Api\V2\Controllers\Controller;
|
||||
use FireflyIII\Api\V2\Request\Generic\DateRequest;
|
||||
use FireflyIII\Models\Account;
|
||||
use FireflyIII\Models\AccountType;
|
||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||
use FireflyIII\Repositories\Administration\Account\AccountRepositoryInterface;
|
||||
use FireflyIII\Support\Http\Api\ConvertsExchangeRates;
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Psr\Container\ContainerExceptionInterface;
|
||||
use Psr\Container\NotFoundExceptionInterface;
|
||||
@ -63,6 +64,8 @@ class AccountController extends Controller
|
||||
* This endpoint is documented at
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v2)#/charts/getChartAccountOverview
|
||||
*
|
||||
* The native currency is the preferred currency on the page /currencies.
|
||||
*
|
||||
* @param DateRequest $request
|
||||
*
|
||||
* @return JsonResponse
|
||||
@ -77,6 +80,12 @@ class AccountController extends Controller
|
||||
$start = $dates['start'];
|
||||
/** @var Carbon $end */
|
||||
$end = $dates['end'];
|
||||
/** @var User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
// group ID
|
||||
$administrationId = $user->getAdministrationId();
|
||||
$this->repository->setAdministrationId($administrationId);
|
||||
|
||||
// user's preferences
|
||||
$defaultSet = $this->repository->getAccountsByType([AccountType::ASSET, AccountType::DEFAULT])->pluck('id')->toArray();
|
||||
@ -96,35 +105,41 @@ class AccountController extends Controller
|
||||
if (null === $currency) {
|
||||
$currency = $default;
|
||||
}
|
||||
$currentSet = [
|
||||
$currentSet = [
|
||||
'label' => $account->name,
|
||||
// the currency that belongs to the account.
|
||||
'currency_id' => (string)$currency->id,
|
||||
'currency_code' => $currency->code,
|
||||
'currency_symbol' => $currency->symbol,
|
||||
'currency_decimal_places' => $currency->decimal_places,
|
||||
'native_id' => null,
|
||||
'native_code' => null,
|
||||
'native_symbol' => null,
|
||||
'native_decimal_places' => null,
|
||||
|
||||
// the default currency of the user (may be the same!)
|
||||
'native_id' => $default->id,
|
||||
'native_code' => $default->code,
|
||||
'native_symbol' => $default->symbol,
|
||||
'native_decimal_places' => $default->decimal_places,
|
||||
'start_date' => $start->toAtomString(),
|
||||
'end_date' => $end->toAtomString(),
|
||||
'type' => 'line', // line, area or bar
|
||||
'yAxisID' => 0, // 0, 1, 2
|
||||
'entries' => [],
|
||||
'converted_entries' => [],
|
||||
];
|
||||
$currentStart = clone $start;
|
||||
$range = app('steam')->balanceInRange($account, $start, clone $end);
|
||||
$currentStart = clone $start;
|
||||
$range = app('steam')->balanceInRange($account, $start, clone $end, $currency);
|
||||
$rangeConverted = app('steam')->balanceInRangeConverted($account, $start, clone $end, $default);
|
||||
|
||||
// 2022-10-11: this method no longer converts to floats
|
||||
|
||||
$previous = array_values($range)[0];
|
||||
$previous = array_values($range)[0];
|
||||
$previousConverted = array_values($rangeConverted)[0];
|
||||
while ($currentStart <= $end) {
|
||||
$format = $currentStart->format('Y-m-d');
|
||||
$label = $currentStart->toAtomString();
|
||||
$balance = array_key_exists($format, $range) ? $range[$format] : $previous;
|
||||
$previous = $balance;
|
||||
$format = $currentStart->format('Y-m-d');
|
||||
$label = $currentStart->toAtomString();
|
||||
$balance = array_key_exists($format, $range) ? $range[$format] : $previous;
|
||||
$balanceConverted = array_key_exists($format, $rangeConverted) ? $rangeConverted[$format] : $previousConverted;
|
||||
$previous = $balance;
|
||||
$previousConverted = $balanceConverted;
|
||||
|
||||
$currentStart->addDay();
|
||||
$currentSet['entries'][$label] = $balance;
|
||||
$currentSet['entries'][$label] = $balance;
|
||||
$currentSet['converted_entries'][$label] = $balanceConverted;
|
||||
}
|
||||
$currentSet = $this->cerChartSet($currentSet);
|
||||
$chartData[] = $currentSet;
|
||||
|
52
app/Console/Commands/System/OutputVersion.php
Normal file
52
app/Console/Commands/System/OutputVersion.php
Normal file
@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
/*
|
||||
* OutputVersion.php
|
||||
* Copyright (c) 2023 james@firefly-iii.org
|
||||
*
|
||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
namespace FireflyIII\Console\Commands\System;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
|
||||
class OutputVersion extends Command
|
||||
{
|
||||
/**
|
||||
* The name and signature of the console command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'firefly-iii:output-version';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Outputs the Firefly III version';
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*/
|
||||
public function handle(): int
|
||||
{
|
||||
echo config('firefly.version');
|
||||
return 0;
|
||||
}
|
||||
}
|
@ -78,9 +78,9 @@ class Cron extends Command
|
||||
$force = (bool)$this->option('force');
|
||||
|
||||
/*
|
||||
* Fire recurring transaction cron job.
|
||||
* Fire exchange rates cron job.
|
||||
*/
|
||||
if (true === config('cer.enabled')) {
|
||||
if (true === config('cer.download_enabled')) {
|
||||
try {
|
||||
$this->exchangeRatesCronJob($force, $date);
|
||||
} catch (FireflyException $e) {
|
||||
|
@ -64,8 +64,8 @@ trait MetaCollection
|
||||
// join bill table
|
||||
$this->query->leftJoin('bills', 'bills.id', '=', 'transaction_journals.bill_id');
|
||||
// add fields
|
||||
$this->fields[] = 'bills.id as bill_id';
|
||||
$this->fields[] = 'bills.name as bill_name';
|
||||
$this->fields[] = 'bills.id as bill_id';
|
||||
$this->fields[] = 'bills.name as bill_name';
|
||||
$this->hasBillInformation = true;
|
||||
}
|
||||
|
||||
@ -104,8 +104,8 @@ trait MetaCollection
|
||||
// join cat table
|
||||
$this->query->leftJoin('budgets', 'budget_transaction_journal.budget_id', '=', 'budgets.id');
|
||||
// add fields
|
||||
$this->fields[] = 'budgets.id as budget_id';
|
||||
$this->fields[] = 'budgets.name as budget_name';
|
||||
$this->fields[] = 'budgets.id as budget_id';
|
||||
$this->fields[] = 'budgets.name as budget_name';
|
||||
$this->hasBudgetInformation = true;
|
||||
}
|
||||
|
||||
@ -157,8 +157,8 @@ trait MetaCollection
|
||||
// join cat table
|
||||
$this->query->leftJoin('categories', 'category_transaction_journal.category_id', '=', 'categories.id');
|
||||
// add fields
|
||||
$this->fields[] = 'categories.id as category_id';
|
||||
$this->fields[] = 'categories.name as category_name';
|
||||
$this->fields[] = 'categories.id as category_id';
|
||||
$this->fields[] = 'categories.name as category_name';
|
||||
$this->hasCatInformation = true;
|
||||
}
|
||||
|
||||
@ -226,8 +226,10 @@ trait MetaCollection
|
||||
*/
|
||||
public function excludeInternalReference(string $internalReference): GroupCollectorInterface
|
||||
{
|
||||
$this->joinMetaDataTables();
|
||||
$internalReference = json_encode($internalReference);
|
||||
$internalReference = str_replace('\\', '\\\\', trim($internalReference, '"'));
|
||||
|
||||
$this->joinMetaDataTables();
|
||||
$this->query->where('journal_meta.name', '=', 'internal_reference');
|
||||
$this->query->where('journal_meta.data', 'NOT LIKE', sprintf('%%%s%%', $internalReference));
|
||||
|
||||
@ -251,6 +253,9 @@ trait MetaCollection
|
||||
*/
|
||||
public function externalIdContains(string $externalId): GroupCollectorInterface
|
||||
{
|
||||
$externalId = json_encode($externalId);
|
||||
$externalId = str_replace('\\', '\\\\', trim($externalId, '"'));
|
||||
|
||||
$this->joinMetaDataTables();
|
||||
$this->query->where('journal_meta.name', '=', 'external_id');
|
||||
$this->query->where('journal_meta.data', 'LIKE', sprintf('%%%s%%', $externalId));
|
||||
@ -263,6 +268,9 @@ trait MetaCollection
|
||||
*/
|
||||
public function externalIdDoesNotContain(string $externalId): GroupCollectorInterface
|
||||
{
|
||||
$externalId = json_encode($externalId);
|
||||
$externalId = str_replace('\\', '\\\\', trim($externalId, '"'));
|
||||
|
||||
$this->joinMetaDataTables();
|
||||
$this->query->where('journal_meta.name', '=', 'external_id');
|
||||
$this->query->where('journal_meta.data', 'NOT LIKE', sprintf('%%%s%%', $externalId));
|
||||
@ -275,6 +283,9 @@ trait MetaCollection
|
||||
*/
|
||||
public function externalIdDoesNotEnd(string $externalId): GroupCollectorInterface
|
||||
{
|
||||
$externalId = json_encode($externalId);
|
||||
$externalId = str_replace('\\', '\\\\', trim($externalId, '"'));
|
||||
|
||||
$this->joinMetaDataTables();
|
||||
$this->query->where('journal_meta.name', '=', 'external_id');
|
||||
$this->query->where('journal_meta.data', 'NOT LIKE', sprintf('%%%s"', $externalId));
|
||||
@ -287,6 +298,9 @@ trait MetaCollection
|
||||
*/
|
||||
public function externalIdDoesNotStart(string $externalId): GroupCollectorInterface
|
||||
{
|
||||
$externalId = json_encode($externalId);
|
||||
$externalId = str_replace('\\', '\\\\', trim($externalId, '"'));
|
||||
|
||||
$this->joinMetaDataTables();
|
||||
$this->query->where('journal_meta.name', '=', 'external_id');
|
||||
$this->query->where('journal_meta.data', 'LIKE', sprintf('"%s%%', $externalId));
|
||||
@ -299,6 +313,9 @@ trait MetaCollection
|
||||
*/
|
||||
public function externalIdEnds(string $externalId): GroupCollectorInterface
|
||||
{
|
||||
$externalId = json_encode($externalId);
|
||||
$externalId = str_replace('\\', '\\\\', trim($externalId, '"'));
|
||||
|
||||
$this->joinMetaDataTables();
|
||||
$this->query->where('journal_meta.name', '=', 'external_id');
|
||||
$this->query->where('journal_meta.data', 'LIKE', sprintf('%%%s"', $externalId));
|
||||
@ -311,6 +328,9 @@ trait MetaCollection
|
||||
*/
|
||||
public function externalIdStarts(string $externalId): GroupCollectorInterface
|
||||
{
|
||||
$externalId = json_encode($externalId);
|
||||
$externalId = str_replace('\\', '\\\\', trim($externalId, '"'));
|
||||
|
||||
$this->joinMetaDataTables();
|
||||
$this->query->where('journal_meta.name', '=', 'external_id');
|
||||
$this->query->where('journal_meta.data', 'LIKE', sprintf('"%s%%', $externalId));
|
||||
@ -465,11 +485,16 @@ trait MetaCollection
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function internalReferenceContains(string $externalId): GroupCollectorInterface
|
||||
public function internalReferenceContains(string $internalReference): GroupCollectorInterface
|
||||
{
|
||||
$internalReference = json_encode($internalReference);
|
||||
$internalReference = str_replace('\\', '\\\\', trim($internalReference, '"'));
|
||||
//var_dump($internalReference);
|
||||
//exit;
|
||||
|
||||
$this->joinMetaDataTables();
|
||||
$this->query->where('journal_meta.name', '=', 'internal_reference');
|
||||
$this->query->where('journal_meta.data', 'LIKE', sprintf('%%%s%%', $externalId));
|
||||
$this->query->where('journal_meta.data', 'LIKE', sprintf('%%%s%%', $internalReference));
|
||||
|
||||
return $this;
|
||||
}
|
||||
@ -477,11 +502,14 @@ trait MetaCollection
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function internalReferenceDoesNotContain(string $externalId): GroupCollectorInterface
|
||||
public function internalReferenceDoesNotContain(string $internalReference): GroupCollectorInterface
|
||||
{
|
||||
$internalReference = json_encode($internalReference);
|
||||
$internalReference = str_replace('\\', '\\\\', trim($internalReference, '"'));
|
||||
|
||||
$this->joinMetaDataTables();
|
||||
$this->query->where('journal_meta.name', '=', 'internal_reference');
|
||||
$this->query->where('journal_meta.data', 'NOT LIKE', sprintf('%%%s%%', $externalId));
|
||||
$this->query->where('journal_meta.data', 'NOT LIKE', sprintf('%%%s%%', $internalReference));
|
||||
|
||||
return $this;
|
||||
}
|
||||
@ -489,11 +517,14 @@ trait MetaCollection
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function internalReferenceDoesNotEnd(string $externalId): GroupCollectorInterface
|
||||
public function internalReferenceDoesNotEnd(string $internalReference): GroupCollectorInterface
|
||||
{
|
||||
$internalReference = json_encode($internalReference);
|
||||
$internalReference = str_replace('\\', '\\\\', trim($internalReference, '"'));
|
||||
|
||||
$this->joinMetaDataTables();
|
||||
$this->query->where('journal_meta.name', '=', 'internal_reference');
|
||||
$this->query->where('journal_meta.data', 'NOT LIKE', sprintf('%%%s"', $externalId));
|
||||
$this->query->where('journal_meta.data', 'NOT LIKE', sprintf('%%%s"', $internalReference));
|
||||
|
||||
return $this;
|
||||
}
|
||||
@ -501,11 +532,14 @@ trait MetaCollection
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function internalReferenceDoesNotStart(string $externalId): GroupCollectorInterface
|
||||
public function internalReferenceDoesNotStart(string $internalReference): GroupCollectorInterface
|
||||
{
|
||||
$internalReference = json_encode($internalReference);
|
||||
$internalReference = str_replace('\\', '\\\\', trim($internalReference, '"'));
|
||||
|
||||
$this->joinMetaDataTables();
|
||||
$this->query->where('journal_meta.name', '=', 'internal_reference');
|
||||
$this->query->where('journal_meta.data', 'LIKE', sprintf('"%s%%', $externalId));
|
||||
$this->query->where('journal_meta.data', 'LIKE', sprintf('"%s%%', $internalReference));
|
||||
|
||||
return $this;
|
||||
}
|
||||
@ -513,11 +547,14 @@ trait MetaCollection
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function internalReferenceEnds(string $externalId): GroupCollectorInterface
|
||||
public function internalReferenceEnds(string $internalReference): GroupCollectorInterface
|
||||
{
|
||||
$internalReference = json_encode($internalReference);
|
||||
$internalReference = str_replace('\\', '\\\\', trim($internalReference, '"'));
|
||||
|
||||
$this->joinMetaDataTables();
|
||||
$this->query->where('journal_meta.name', '=', 'internal_reference');
|
||||
$this->query->where('journal_meta.data', 'LIKE', sprintf('%%%s"', $externalId));
|
||||
$this->query->where('journal_meta.data', 'LIKE', sprintf('%%%s"', $internalReference));
|
||||
|
||||
return $this;
|
||||
}
|
||||
@ -525,11 +562,14 @@ trait MetaCollection
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function internalReferenceStarts(string $externalId): GroupCollectorInterface
|
||||
public function internalReferenceStarts(string $internalReference): GroupCollectorInterface
|
||||
{
|
||||
$internalReference = json_encode($internalReference);
|
||||
$internalReference = str_replace('\\', '\\\\', trim($internalReference, '"'));
|
||||
|
||||
$this->joinMetaDataTables();
|
||||
$this->query->where('journal_meta.name', '=', 'internal_reference');
|
||||
$this->query->where('journal_meta.data', 'LIKE', sprintf('"%s%%', $externalId));
|
||||
$this->query->where('journal_meta.data', 'LIKE', sprintf('"%s%%', $internalReference));
|
||||
|
||||
return $this;
|
||||
}
|
||||
@ -563,7 +603,7 @@ trait MetaCollection
|
||||
}
|
||||
);
|
||||
// add fields
|
||||
$this->fields[] = 'notes.text as notes';
|
||||
$this->fields[] = 'notes.text as notes';
|
||||
$this->hasNotesInformation = true;
|
||||
}
|
||||
|
||||
@ -796,8 +836,10 @@ trait MetaCollection
|
||||
*/
|
||||
public function setInternalReference(string $internalReference): GroupCollectorInterface
|
||||
{
|
||||
$this->joinMetaDataTables();
|
||||
$internalReference = json_encode($internalReference);
|
||||
$internalReference = str_replace('\\', '\\\\', trim($internalReference, '"'));
|
||||
|
||||
$this->joinMetaDataTables();
|
||||
$this->query->where('journal_meta.name', '=', 'internal_reference');
|
||||
$this->query->where('journal_meta.data', 'LIKE', sprintf('%%%s%%', $internalReference));
|
||||
|
||||
@ -871,8 +913,8 @@ trait MetaCollection
|
||||
$this->withTagInformation();
|
||||
|
||||
// this method adds a "postFilter" to the collector.
|
||||
$list = $tags->pluck('tag')->toArray();
|
||||
$filter = function (int $index, array $object) use ($list): bool {
|
||||
$list = $tags->pluck('tag')->toArray();
|
||||
$filter = function (int $index, array $object) use ($list): bool {
|
||||
foreach ($object['transactions'] as $transaction) {
|
||||
foreach ($transaction['tags'] as $tag) {
|
||||
if (in_array($tag['name'], $list, true)) {
|
||||
|
@ -376,11 +376,11 @@ interface GroupCollectorInterface
|
||||
/**
|
||||
* Look for specific external ID's.
|
||||
*
|
||||
* @param string $externalId
|
||||
* @param string $internalReference
|
||||
*
|
||||
* @return GroupCollectorInterface
|
||||
*/
|
||||
public function excludeInternalReference(string $externalId): GroupCollectorInterface;
|
||||
public function excludeInternalReference(string $internalReference): GroupCollectorInterface;
|
||||
|
||||
/**
|
||||
* Limit the result to NOT a set of specific transaction journals.
|
||||
@ -629,46 +629,46 @@ interface GroupCollectorInterface
|
||||
public function hasNoAttachments(): GroupCollectorInterface;
|
||||
|
||||
/**
|
||||
* @param string $externalId
|
||||
* @param string $internalReference
|
||||
*
|
||||
* @return GroupCollectorInterface
|
||||
*/
|
||||
public function internalReferenceContains(string $externalId): GroupCollectorInterface;
|
||||
public function internalReferenceContains(string $internalReference): GroupCollectorInterface;
|
||||
|
||||
/**
|
||||
* @param string $externalId
|
||||
* @param string $internalReference
|
||||
*
|
||||
* @return GroupCollectorInterface
|
||||
*/
|
||||
public function internalReferenceDoesNotContain(string $externalId): GroupCollectorInterface;
|
||||
public function internalReferenceDoesNotContain(string $internalReference): GroupCollectorInterface;
|
||||
|
||||
/**
|
||||
* @param string $externalId
|
||||
* @param string $internalReference
|
||||
*
|
||||
* @return GroupCollectorInterface
|
||||
*/
|
||||
public function internalReferenceDoesNotEnd(string $externalId): GroupCollectorInterface;
|
||||
public function internalReferenceDoesNotEnd(string $internalReference): GroupCollectorInterface;
|
||||
|
||||
/**
|
||||
* @param string $externalId
|
||||
* @param string $internalReference
|
||||
*
|
||||
* @return GroupCollectorInterface
|
||||
*/
|
||||
public function internalReferenceDoesNotStart(string $externalId): GroupCollectorInterface;
|
||||
public function internalReferenceDoesNotStart(string $internalReference): GroupCollectorInterface;
|
||||
|
||||
/**
|
||||
* @param string $externalId
|
||||
* @param string $internalReference
|
||||
*
|
||||
* @return GroupCollectorInterface
|
||||
*/
|
||||
public function internalReferenceEnds(string $externalId): GroupCollectorInterface;
|
||||
public function internalReferenceEnds(string $internalReference): GroupCollectorInterface;
|
||||
|
||||
/**
|
||||
* @param string $externalId
|
||||
* @param string $internalReference
|
||||
*
|
||||
* @return GroupCollectorInterface
|
||||
*/
|
||||
public function internalReferenceStarts(string $externalId): GroupCollectorInterface;
|
||||
public function internalReferenceStarts(string $internalReference): GroupCollectorInterface;
|
||||
|
||||
/**
|
||||
* Only journals that are reconciled.
|
||||
@ -1119,11 +1119,11 @@ interface GroupCollectorInterface
|
||||
/**
|
||||
* Look for specific external ID's.
|
||||
*
|
||||
* @param string $externalId
|
||||
* @param string $internalReference
|
||||
*
|
||||
* @return GroupCollectorInterface
|
||||
*/
|
||||
public function setInternalReference(string $externalId): GroupCollectorInterface;
|
||||
public function setInternalReference(string $internalReference): GroupCollectorInterface;
|
||||
|
||||
/**
|
||||
* Limit the result to a set of specific transaction journals.
|
||||
|
@ -133,6 +133,13 @@ class PreferencesController extends Controller
|
||||
$frontPageAccounts = $accountIds;
|
||||
}
|
||||
|
||||
// for the demo user, the slackUrl is automatically emptied.
|
||||
// this isn't really secure but it means that the demo site has a semi-secret
|
||||
// slackUrl.
|
||||
if (auth()->user()->hasRole('demo')) {
|
||||
$slackUrl = '';
|
||||
}
|
||||
|
||||
return view(
|
||||
'preferences.index',
|
||||
compact(
|
||||
@ -198,12 +205,14 @@ class PreferencesController extends Controller
|
||||
|
||||
|
||||
// slack URL:
|
||||
$url = (string)$request->get('slackUrl');
|
||||
if (str_starts_with($url, 'https://hooks.slack.com/services/')) {
|
||||
app('preferences')->set('slack_webhook_url', $url);
|
||||
}
|
||||
if ('' === $url) {
|
||||
app('preferences')->delete('slack_webhook_url');
|
||||
if (!auth()->user()->hasRole('demo')) {
|
||||
$url = (string)$request->get('slackUrl');
|
||||
if (str_starts_with($url, 'https://hooks.slack.com/services/')) {
|
||||
app('preferences')->set('slack_webhook_url', $url);
|
||||
}
|
||||
if ('' === $url) {
|
||||
app('preferences')->delete('slack_webhook_url');
|
||||
}
|
||||
}
|
||||
|
||||
// custom fiscal year
|
||||
|
@ -121,7 +121,7 @@ class DownloadExchangeRates implements ShouldQueue
|
||||
app('log')->warning(sprintf('Trying to grab "%s" resulted in bad JSON.', $url));
|
||||
return;
|
||||
}
|
||||
$date = Carbon::createFromFormat('Y-m-d', $json['date']);
|
||||
$date = Carbon::createFromFormat('Y-m-d', $json['date'], config('app.timezone'));
|
||||
$this->saveRates($currency, $date, $json['rates']);
|
||||
}
|
||||
|
||||
|
@ -24,6 +24,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Notifications\Admin;
|
||||
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
use Illuminate\Notifications\Messages\SlackMessage;
|
||||
@ -97,7 +98,9 @@ class TestNotification extends Notification
|
||||
*/
|
||||
public function via($notifiable)
|
||||
{
|
||||
$slackUrl = (string)app('preferences')->getForUser(auth()->user(), 'slack_webhook_url', '')->data;
|
||||
/** @var User|null $user */
|
||||
$user = auth()->user();
|
||||
$slackUrl = null === $user ? '' : (string)app('preferences')->getForUser(auth()->user(), 'slack_webhook_url', '')->data;
|
||||
if (str_starts_with($slackUrl, 'https://hooks.slack.com/services/')) {
|
||||
return ['mail', 'slack'];
|
||||
}
|
||||
|
@ -25,6 +25,7 @@ declare(strict_types=1);
|
||||
namespace FireflyIII\Notifications\Admin;
|
||||
|
||||
use FireflyIII\Models\InvitedUser;
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
use Illuminate\Notifications\Messages\SlackMessage;
|
||||
@ -100,7 +101,9 @@ class UserInvitation extends Notification
|
||||
*/
|
||||
public function via($notifiable)
|
||||
{
|
||||
$slackUrl = (string)app('preferences')->getForUser(auth()->user(), 'slack_webhook_url', '')->data;
|
||||
/** @var User|null $user */
|
||||
$user = auth()->user();
|
||||
$slackUrl = null === $user ? '' : (string)app('preferences')->getForUser(auth()->user(), 'slack_webhook_url', '')->data;
|
||||
if (str_starts_with($slackUrl, 'https://hooks.slack.com/services/')) {
|
||||
return ['mail', 'slack'];
|
||||
}
|
||||
|
@ -98,7 +98,9 @@ class UserRegistration extends Notification
|
||||
*/
|
||||
public function via($notifiable)
|
||||
{
|
||||
$slackUrl = (string)app('preferences')->getForUser(auth()->user(), 'slack_webhook_url', '')->data;
|
||||
/** @var User|null $user */
|
||||
$user = auth()->user();
|
||||
$slackUrl = null === $user ? '' : (string)app('preferences')->getForUser(auth()->user(), 'slack_webhook_url', '')->data;
|
||||
if (str_starts_with($slackUrl, 'https://hooks.slack.com/services/')) {
|
||||
return ['mail', 'slack'];
|
||||
}
|
||||
|
@ -24,6 +24,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Notifications\Admin;
|
||||
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
use Illuminate\Notifications\Messages\SlackMessage;
|
||||
@ -112,7 +113,9 @@ class VersionCheckResult extends Notification
|
||||
*/
|
||||
public function via($notifiable)
|
||||
{
|
||||
$slackUrl = (string)app('preferences')->getForUser(auth()->user(), 'slack_webhook_url', '')->data;
|
||||
/** @var User|null $user */
|
||||
$user = auth()->user();
|
||||
$slackUrl = null === $user ? '' : (string)app('preferences')->getForUser(auth()->user(), 'slack_webhook_url', '')->data;
|
||||
if (str_starts_with($slackUrl, 'https://hooks.slack.com/services/')) {
|
||||
return ['mail', 'slack'];
|
||||
}
|
||||
|
@ -25,6 +25,7 @@ declare(strict_types=1);
|
||||
namespace FireflyIII\Notifications\User;
|
||||
|
||||
use FireflyIII\Models\Bill;
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
use Illuminate\Notifications\Messages\SlackMessage;
|
||||
@ -118,7 +119,9 @@ class BillReminder extends Notification
|
||||
*/
|
||||
public function via($notifiable)
|
||||
{
|
||||
$slackUrl = (string)app('preferences')->getForUser(auth()->user(), 'slack_webhook_url', '')->data;
|
||||
/** @var User|null $user */
|
||||
$user = auth()->user();
|
||||
$slackUrl = null === $user ? '' : (string)app('preferences')->getForUser(auth()->user(), 'slack_webhook_url', '')->data;
|
||||
if (str_starts_with($slackUrl, 'https://hooks.slack.com/services/')) {
|
||||
return ['mail', 'slack'];
|
||||
}
|
||||
|
@ -24,6 +24,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Notifications\User;
|
||||
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
use Illuminate\Notifications\Messages\SlackMessage;
|
||||
@ -94,7 +95,9 @@ class NewAccessToken extends Notification
|
||||
*/
|
||||
public function via($notifiable)
|
||||
{
|
||||
$slackUrl = (string)app('preferences')->getForUser(auth()->user(), 'slack_webhook_url', '')->data;
|
||||
/** @var User|null $user */
|
||||
$user = auth()->user();
|
||||
$slackUrl = null === $user ? '' : (string)app('preferences')->getForUser(auth()->user(), 'slack_webhook_url', '')->data;
|
||||
if (str_starts_with($slackUrl, 'https://hooks.slack.com/services/')) {
|
||||
return ['mail', 'slack'];
|
||||
}
|
||||
|
@ -25,6 +25,7 @@ declare(strict_types=1);
|
||||
namespace FireflyIII\Notifications\User;
|
||||
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
use Illuminate\Notifications\Notification;
|
||||
@ -122,7 +123,9 @@ class UserLogin extends Notification
|
||||
*/
|
||||
public function via($notifiable)
|
||||
{
|
||||
$slackUrl = (string)app('preferences')->getForUser(auth()->user(), 'slack_webhook_url', '')->data;
|
||||
/** @var User|null $user */
|
||||
$user = auth()->user();
|
||||
$slackUrl = null === $user ? '' : (string)app('preferences')->getForUser(auth()->user(), 'slack_webhook_url', '')->data;
|
||||
if (str_starts_with($slackUrl, 'https://hooks.slack.com/services/')) {
|
||||
return ['mail', 'slack'];
|
||||
}
|
||||
|
@ -25,6 +25,10 @@ declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Repositories\Administration\Account;
|
||||
|
||||
use FireflyIII\Models\Account;
|
||||
use FireflyIII\Models\AccountMeta;
|
||||
use FireflyIII\Models\AccountType;
|
||||
use FireflyIII\Models\TransactionCurrency;
|
||||
use FireflyIII\Support\Repositories\Administration\AdministrationTrait;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
@ -35,6 +39,7 @@ class AccountRepository implements AccountRepositoryInterface
|
||||
{
|
||||
use AdministrationTrait;
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
@ -42,11 +47,11 @@ class AccountRepository implements AccountRepositoryInterface
|
||||
{
|
||||
// search by group, not by user
|
||||
$dbQuery = $this->userGroup->accounts()
|
||||
->where('active', true)
|
||||
->orderBy('accounts.order', 'ASC')
|
||||
->orderBy('accounts.account_type_id', 'ASC')
|
||||
->orderBy('accounts.name', 'ASC')
|
||||
->with(['accountType']);
|
||||
->where('active', true)
|
||||
->orderBy('accounts.order', 'ASC')
|
||||
->orderBy('accounts.account_type_id', 'ASC')
|
||||
->orderBy('accounts.name', 'ASC')
|
||||
->with(['accountType']);
|
||||
if ('' !== $query) {
|
||||
// split query on spaces just in case:
|
||||
$parts = explode(' ', $query);
|
||||
@ -62,4 +67,98 @@ class AccountRepository implements AccountRepositoryInterface
|
||||
|
||||
return $dbQuery->take($limit)->get(['accounts.*']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function getAccountsByType(array $types, ?array $sort = []): Collection
|
||||
{
|
||||
$res = array_intersect([AccountType::ASSET, AccountType::MORTGAGE, AccountType::LOAN, AccountType::DEBT], $types);
|
||||
$query = $this->userGroup->accounts();
|
||||
if (0 !== count($types)) {
|
||||
$query->accountTypeIn($types);
|
||||
}
|
||||
|
||||
// add sort parameters. At this point they're filtered to allowed fields to sort by:
|
||||
if (0 !== count($sort)) {
|
||||
foreach ($sort as $param) {
|
||||
$query->orderBy($param[0], $param[1]);
|
||||
}
|
||||
}
|
||||
|
||||
if (0 === count($sort)) {
|
||||
if (0 !== count($res)) {
|
||||
$query->orderBy('accounts.order', 'ASC');
|
||||
}
|
||||
$query->orderBy('accounts.active', 'DESC');
|
||||
$query->orderBy('accounts.name', 'ASC');
|
||||
}
|
||||
return $query->get(['accounts.*']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $accountIds
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function getAccountsById(array $accountIds): Collection
|
||||
{
|
||||
$query = $this->userGroup->accounts();
|
||||
|
||||
if (0 !== count($accountIds)) {
|
||||
$query->whereIn('accounts.id', $accountIds);
|
||||
}
|
||||
$query->orderBy('accounts.order', 'ASC');
|
||||
$query->orderBy('accounts.active', 'DESC');
|
||||
$query->orderBy('accounts.name', 'ASC');
|
||||
|
||||
return $query->get(['accounts.*']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Account $account
|
||||
*
|
||||
* @return TransactionCurrency|null
|
||||
*/
|
||||
public function getAccountCurrency(Account $account): ?TransactionCurrency
|
||||
{
|
||||
$type = $account->accountType->type;
|
||||
$list = config('firefly.valid_currency_account_types');
|
||||
|
||||
// return null if not in this list.
|
||||
if (!in_array($type, $list, true)) {
|
||||
return null;
|
||||
}
|
||||
$currencyId = (int)$this->getMetaValue($account, 'currency_id');
|
||||
if ($currencyId > 0) {
|
||||
return TransactionCurrency::find($currencyId);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return meta value for account. Null if not found.
|
||||
*
|
||||
* @param Account $account
|
||||
* @param string $field
|
||||
*
|
||||
* @return null|string
|
||||
*/
|
||||
public function getMetaValue(Account $account, string $field): ?string
|
||||
{
|
||||
$result = $account->accountMeta->filter(
|
||||
function (AccountMeta $meta) use ($field) {
|
||||
return strtolower($meta->name) === strtolower($field);
|
||||
}
|
||||
);
|
||||
if (0 === $result->count()) {
|
||||
return null;
|
||||
}
|
||||
if (1 === $result->count()) {
|
||||
return (string)$result->first()->data;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -25,6 +25,8 @@ declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Repositories\Administration\Account;
|
||||
|
||||
use FireflyIII\Models\Account;
|
||||
use FireflyIII\Models\TransactionCurrency;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
/**
|
||||
@ -34,10 +36,42 @@ interface AccountRepositoryInterface
|
||||
{
|
||||
/**
|
||||
* @param string $query
|
||||
* @param array $types
|
||||
* @param int $limit
|
||||
* @param array $types
|
||||
* @param int $limit
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function searchAccount(string $query, array $types, int $limit): Collection;
|
||||
|
||||
/**
|
||||
* @param array $types
|
||||
* @param array|null $sort
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function getAccountsByType(array $types, ?array $sort = []): Collection;
|
||||
|
||||
/**
|
||||
* @param array $accountIds
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function getAccountsById(array $accountIds): Collection;
|
||||
|
||||
/**
|
||||
* @param Account $account
|
||||
*
|
||||
* @return TransactionCurrency|null
|
||||
*/
|
||||
public function getAccountCurrency(Account $account): ?TransactionCurrency;
|
||||
|
||||
/**
|
||||
* Return meta value for account. Null if not found.
|
||||
*
|
||||
* @param Account $account
|
||||
* @param string $field
|
||||
*
|
||||
* @return null|string
|
||||
*/
|
||||
public function getMetaValue(Account $account, string $field): ?string;
|
||||
}
|
||||
|
@ -26,9 +26,10 @@ namespace FireflyIII\Support\Http\Api;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use DateTimeInterface;
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Models\CurrencyExchangeRate;
|
||||
use FireflyIII\Models\TransactionCurrency;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use FireflyIII\Support\CacheProperties;
|
||||
|
||||
/**
|
||||
* Trait ConvertsExchangeRates
|
||||
@ -49,6 +50,8 @@ trait ConvertsExchangeRates
|
||||
}
|
||||
|
||||
// if not enabled, return the same array but without conversion:
|
||||
return $set;
|
||||
$this->enabled = false;
|
||||
if (false === $this->enabled) {
|
||||
$set['converted'] = false;
|
||||
return $set;
|
||||
@ -69,7 +72,7 @@ trait ConvertsExchangeRates
|
||||
$carbon = Carbon::createFromFormat(DateTimeInterface::ATOM, $date);
|
||||
$rate = $this->getRate($currency, $native, $carbon);
|
||||
$rate = '0' === $rate ? '1' : $rate;
|
||||
Log::debug(sprintf('bcmul("%s", "%s")', (string)$entry, $rate));
|
||||
app('log')->debug(sprintf('bcmul("%s", "%s")', (string)$entry, $rate));
|
||||
$set['entries'][$date] = (float)bcmul((string)$entry, $rate);
|
||||
}
|
||||
return $set;
|
||||
@ -80,7 +83,7 @@ trait ConvertsExchangeRates
|
||||
*/
|
||||
private function getPreference(): void
|
||||
{
|
||||
$this->enabled = true;
|
||||
$this->enabled = config('cer.currency_conversion');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -103,55 +106,65 @@ trait ConvertsExchangeRates
|
||||
* @param Carbon $date
|
||||
*
|
||||
* @return string
|
||||
* @throws FireflyException
|
||||
*/
|
||||
private function getRate(TransactionCurrency $from, TransactionCurrency $to, Carbon $date): string
|
||||
{
|
||||
Log::debug(sprintf('getRate(%s, %s, "%s")', $from->code, $to->code, $date->format('Y-m-d')));
|
||||
// first attempt:
|
||||
$rate = $this->getFromDB((int)$from->id, (int)$to->id, $date->format('Y-m-d'));
|
||||
if (null !== $rate) {
|
||||
return $rate;
|
||||
}
|
||||
// no result. perhaps the other way around?
|
||||
$rate = $this->getFromDB((int)$to->id, (int)$from->id, $date->format('Y-m-d'));
|
||||
if (null !== $rate) {
|
||||
return bcdiv('1', $rate);
|
||||
}
|
||||
|
||||
// if nothing in place, fall back on the rate for $from to EUR
|
||||
$first = $this->getEuroRate($from, $date);
|
||||
$second = $this->getEuroRate($to, $date);
|
||||
|
||||
// combined (if present), they can be used to calculate the necessary conversion rate.
|
||||
if ('0' === $first || '0' === $second) {
|
||||
return '0';
|
||||
}
|
||||
|
||||
$second = bcdiv('1', $second);
|
||||
return bcmul($first, $second);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $from
|
||||
* @param int $to
|
||||
* @param string $date
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
private function getFromDB(int $from, int $to, string $date): ?string
|
||||
{
|
||||
$key = sprintf('cer-%d-%d-%s', $from, $to, $date);
|
||||
|
||||
$cache = new CacheProperties();
|
||||
$cache->addProperty($key);
|
||||
if ($cache->has()) {
|
||||
return $cache->get();
|
||||
}
|
||||
|
||||
/** @var CurrencyExchangeRate $result */
|
||||
$result = auth()->user()
|
||||
->currencyExchangeRates()
|
||||
->where('from_currency_id', $from->id)
|
||||
->where('to_currency_id', $to->id)
|
||||
->where('date', '<=', $date->format('Y-m-d'))
|
||||
->where('from_currency_id', $from)
|
||||
->where('to_currency_id', $to)
|
||||
->where('date', '<=', $date)
|
||||
->orderBy('date', 'DESC')
|
||||
->first();
|
||||
if (null !== $result) {
|
||||
$rate = (string)$result->rate;
|
||||
Log::debug(sprintf('Rate is %s', $rate));
|
||||
$cache->store($rate);
|
||||
return $rate;
|
||||
}
|
||||
// no result. perhaps the other way around?
|
||||
/** @var CurrencyExchangeRate $result */
|
||||
$result = auth()->user()
|
||||
->currencyExchangeRates()
|
||||
->where('from_currency_id', $to->id)
|
||||
->where('to_currency_id', $from->id)
|
||||
->where('date', '<=', $date->format('Y-m-d'))
|
||||
->orderBy('date', 'DESC')
|
||||
->first();
|
||||
if (null !== $result) {
|
||||
$rate = bcdiv('1', (string)$result->rate);
|
||||
Log::debug(sprintf('Reversed rate is %s', $rate));
|
||||
return $rate;
|
||||
}
|
||||
// try euro rates
|
||||
$result1 = $this->getEuroRate($from, $date);
|
||||
if ('0' === $result1) {
|
||||
Log::debug(sprintf('No exchange rate between EUR and %s', $from->code));
|
||||
return '0';
|
||||
}
|
||||
$result2 = $this->getEuroRate($to, $date);
|
||||
if ('0' === $result2) {
|
||||
Log::debug(sprintf('No exchange rate between EUR and %s', $to->code));
|
||||
return '0';
|
||||
}
|
||||
// still need to inverse rate 2:
|
||||
$result2 = bcdiv('1', $result2);
|
||||
$rate = bcmul($result1, $result2);
|
||||
Log::debug(sprintf('Rate %s to EUR is %s', $from->code, $result1));
|
||||
Log::debug(sprintf('Rate EUR to %s is %s', $to->code, $result2));
|
||||
Log::debug(sprintf('Rate for %s to %s is %s', $from->code, $to->code, $rate));
|
||||
return $rate;
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -159,47 +172,55 @@ trait ConvertsExchangeRates
|
||||
* @param Carbon $date
|
||||
*
|
||||
* @return string
|
||||
* @throws FireflyException
|
||||
*/
|
||||
private function getEuroRate(TransactionCurrency $currency, Carbon $date): string
|
||||
{
|
||||
Log::debug(sprintf('Find rate for %s to Euro', $currency->code));
|
||||
$euroId = $this->getEuroId();
|
||||
if ($euroId === (int)$currency->id) {
|
||||
return '1';
|
||||
}
|
||||
$rate = $this->getFromDB((int)$currency->id, $euroId, $date->format('Y-m-d'));
|
||||
|
||||
if (null !== $rate) {
|
||||
// app('log')->debug(sprintf('Rate for %s to EUR is %s.', $currency->code, $rate));
|
||||
return $rate;
|
||||
}
|
||||
$rate = $this->getFromDB($euroId, (int)$currency->id, $date->format('Y-m-d'));
|
||||
if (null !== $rate) {
|
||||
$rate = bcdiv('1', $rate);
|
||||
// app('log')->debug(sprintf('Inverted rate for %s to EUR is %s.', $currency->code, $rate));
|
||||
return $rate;
|
||||
}
|
||||
// grab backup values from config file:
|
||||
$backup = config(sprintf('cer.rates.%s', $currency->code));
|
||||
if (null !== $backup) {
|
||||
$backup = bcdiv('1', (string)$backup);
|
||||
// app('log')->debug(sprintf('Backup rate for %s to EUR is %s.', $currency->code, $backup));
|
||||
return $backup;
|
||||
}
|
||||
|
||||
// app('log')->debug(sprintf('No rate for %s to EUR.', $currency->code));
|
||||
return '0';
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
* @throws FireflyException
|
||||
*/
|
||||
private function getEuroId(): int
|
||||
{
|
||||
$cache = new CacheProperties();
|
||||
$cache->addProperty('cer-euro-id');
|
||||
if ($cache->has()) {
|
||||
return $cache->get();
|
||||
}
|
||||
$euro = TransactionCurrency::whereCode('EUR')->first();
|
||||
if (null === $euro) {
|
||||
app('log')->warning('Cannot do indirect conversion without EUR.');
|
||||
return '0';
|
||||
throw new FireflyException('Cannot find EUR in system, cannot do currency conversion.');
|
||||
}
|
||||
|
||||
// try one way:
|
||||
/** @var CurrencyExchangeRate $result */
|
||||
$result = auth()->user()
|
||||
->currencyExchangeRates()
|
||||
->where('from_currency_id', $currency->id)
|
||||
->where('to_currency_id', $euro->id)
|
||||
->where('date', '<=', $date->format('Y-m-d'))
|
||||
->orderBy('date', 'DESC')
|
||||
->first();
|
||||
if (null !== $result) {
|
||||
$rate = (string)$result->rate;
|
||||
Log::debug(sprintf('Rate for %s to EUR is %s.', $currency->code, $rate));
|
||||
return $rate;
|
||||
}
|
||||
// try the other way around and inverse it.
|
||||
/** @var CurrencyExchangeRate $result */
|
||||
$result = auth()->user()
|
||||
->currencyExchangeRates()
|
||||
->where('from_currency_id', $euro->id)
|
||||
->where('to_currency_id', $currency->id)
|
||||
->where('date', '<=', $date->format('Y-m-d'))
|
||||
->orderBy('date', 'DESC')
|
||||
->first();
|
||||
if (null !== $result) {
|
||||
$rate = bcdiv('1', (string)$result->rate);
|
||||
Log::debug(sprintf('Inverted rate for %s to EUR is %s.', $currency->code, $rate));
|
||||
return $rate;
|
||||
}
|
||||
|
||||
Log::debug(sprintf('No rate for %s to EUR.', $currency->code));
|
||||
return '0';
|
||||
$cache->store((int)$euro->id);
|
||||
return (int)$euro->id;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -268,7 +289,7 @@ trait ConvertsExchangeRates
|
||||
*/
|
||||
private function convertAmount(string $amount, TransactionCurrency $from, TransactionCurrency $to, ?Carbon $date = null): string
|
||||
{
|
||||
Log::debug(sprintf('Converting %s from %s to %s', $amount, $from->code, $to->code));
|
||||
app('log')->debug(sprintf('Converting %s from %s to %s', $amount, $from->code, $to->code));
|
||||
$date = $date ?? today(config('app.timezone'));
|
||||
$rate = $this->getRate($from, $to, $date);
|
||||
|
||||
|
61
app/Support/Http/Api/ExchangeRateConverter.php
Normal file
61
app/Support/Http/Api/ExchangeRateConverter.php
Normal file
@ -0,0 +1,61 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
/*
|
||||
* ExchangeRateConverter.php
|
||||
* Copyright (c) 2023 james@firefly-iii.org
|
||||
*
|
||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
namespace FireflyIII\Support\Http\Api;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Models\TransactionCurrency;
|
||||
|
||||
/**
|
||||
* Class ExchangeRateConverter
|
||||
*/
|
||||
class ExchangeRateConverter
|
||||
{
|
||||
use ConvertsExchangeRates;
|
||||
|
||||
/**
|
||||
* @param TransactionCurrency $from
|
||||
* @param TransactionCurrency $to
|
||||
* @param Carbon $date
|
||||
*
|
||||
* @return string
|
||||
* @throws FireflyException
|
||||
*/
|
||||
public function getCurrencyRate(TransactionCurrency $from, TransactionCurrency $to, Carbon $date): string
|
||||
{
|
||||
if (null === $this->enabled) {
|
||||
$this->getPreference();
|
||||
}
|
||||
|
||||
// if not enabled, return "1"
|
||||
if (false === $this->enabled) {
|
||||
return '1';
|
||||
}
|
||||
|
||||
$rate = $this->getRate($from, $to, $date);
|
||||
return '0' === $rate ? '1' : $rate;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -36,9 +36,9 @@ use Illuminate\Contracts\Auth\Authenticatable;
|
||||
*/
|
||||
trait AdministrationTrait
|
||||
{
|
||||
protected ?int $administrationId = null;
|
||||
protected User $user;
|
||||
protected ?UserGroup $userGroup = null;
|
||||
protected ?int $administrationId = null;
|
||||
protected User $user;
|
||||
protected ?UserGroup $userGroup = null;
|
||||
|
||||
/**
|
||||
* @return int
|
||||
@ -67,12 +67,15 @@ trait AdministrationTrait
|
||||
{
|
||||
if (null !== $this->administrationId) {
|
||||
$memberships = GroupMembership::where('user_id', $this->user->id)
|
||||
->where('user_group_id', $this->administrationId)
|
||||
->count();
|
||||
->where('user_group_id', $this->administrationId)
|
||||
->count();
|
||||
if (0 === $memberships) {
|
||||
throw new FireflyException(sprintf('User #%d has no access to administration #%d', $this->user->id, $this->administrationId));
|
||||
}
|
||||
$this->userGroup = UserGroup::find($this->administrationId);
|
||||
if (null === $this->userGroup) {
|
||||
throw new FireflyException(sprintf('Unfound administration for user #%d', $this->user->id));
|
||||
}
|
||||
return;
|
||||
}
|
||||
throw new FireflyException(sprintf('Cannot validate administration for user #%d', $this->user->id));
|
||||
@ -83,7 +86,7 @@ trait AdministrationTrait
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setUser(Authenticatable | User | null $user): void
|
||||
public function setUser(Authenticatable|User|null $user): void
|
||||
{
|
||||
if (null !== $user) {
|
||||
$this->user = $user;
|
||||
|
@ -57,7 +57,7 @@ trait FiltersWeekends
|
||||
$isWeekend = $date->isWeekend();
|
||||
if (!$isWeekend) {
|
||||
$return[] = clone $date;
|
||||
Log::debug(sprintf('Date is %s, not a weekend date.', $date->format('D d M Y')));
|
||||
//Log::debug(sprintf('Date is %s, not a weekend date.', $date->format('D d M Y')));
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -82,7 +82,7 @@ trait FiltersWeekends
|
||||
$return[] = $clone;
|
||||
continue;
|
||||
}
|
||||
Log::debug(sprintf('Date is %s, removed from final result', $date->format('D d M Y')));
|
||||
//Log::debug(sprintf('Date is %s, removed from final result', $date->format('D d M Y')));
|
||||
}
|
||||
|
||||
// filter unique dates
|
||||
|
@ -31,6 +31,7 @@ use FireflyIII\Models\Account;
|
||||
use FireflyIII\Models\Transaction;
|
||||
use FireflyIII\Models\TransactionCurrency;
|
||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||
use FireflyIII\Support\Http\Api\ExchangeRateConverter;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use JsonException;
|
||||
@ -114,7 +115,6 @@ class Steam
|
||||
*/
|
||||
public function balanceInRange(Account $account, Carbon $start, Carbon $end, ?TransactionCurrency $currency = null): array
|
||||
{
|
||||
// abuse chart properties:
|
||||
$cache = new CacheProperties();
|
||||
$cache->addProperty($account->id);
|
||||
$cache->addProperty('balance-in-range');
|
||||
@ -238,6 +238,241 @@ class Steam
|
||||
return $balance;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Account $account
|
||||
* @param Carbon $start
|
||||
* @param Carbon $end
|
||||
*
|
||||
* @return array
|
||||
* @throws FireflyException
|
||||
*/
|
||||
public function balanceInRangeConverted(Account $account, Carbon $start, Carbon $end, TransactionCurrency $native): array
|
||||
{
|
||||
|
||||
$cache = new CacheProperties();
|
||||
$cache->addProperty($account->id);
|
||||
$cache->addProperty('balance-in-range-converted');
|
||||
$cache->addProperty($native->id);
|
||||
$cache->addProperty($start);
|
||||
$cache->addProperty($end);
|
||||
if ($cache->has()) {
|
||||
return $cache->get();
|
||||
}
|
||||
app('log')->debug(sprintf('balanceInRangeConverted for account #%d to %s', $account->id, $native->code));
|
||||
$start->subDay();
|
||||
$end->addDay();
|
||||
$balances = [];
|
||||
$formatted = $start->format('Y-m-d');
|
||||
$currencies = [];
|
||||
$startBalance = $this->balanceConverted($account, $start, $native); // already converted to native amount
|
||||
$balances[$formatted] = $startBalance;
|
||||
|
||||
app('log')->debug(sprintf('Start balance on %s is %s', $formatted, $startBalance));
|
||||
|
||||
$converter = new ExchangeRateConverter();
|
||||
|
||||
// not sure why this is happening:
|
||||
$start->addDay();
|
||||
|
||||
// grab all transactions between start and end:
|
||||
$set = $account->transactions()
|
||||
->leftJoin('transaction_journals', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
|
||||
->where('transaction_journals.date', '>=', $start->format('Y-m-d 00:00:00'))
|
||||
->where('transaction_journals.date', '<=', $end->format('Y-m-d 23:59:59'))
|
||||
->orderBy('transaction_journals.date', 'ASC')
|
||||
->whereNull('transaction_journals.deleted_at')
|
||||
->get(
|
||||
[
|
||||
'transaction_journals.date',
|
||||
'transactions.transaction_currency_id',
|
||||
'transactions.amount',
|
||||
'transactions.foreign_currency_id',
|
||||
'transactions.foreign_amount',
|
||||
]
|
||||
)->toArray();
|
||||
|
||||
// loop the set and convert if necessary:
|
||||
$currentBalance = $startBalance;
|
||||
/** @var Transaction $transaction */
|
||||
foreach ($set as $transaction) {
|
||||
$day = Carbon::createFromFormat('Y-m-d H:i:s', $transaction['date'], config('app.timezone'));
|
||||
$format = $day->format('Y-m-d');
|
||||
// if the transaction is in the expected currency, change nothing.
|
||||
if ((int)$transaction['transaction_currency_id'] === (int)$native->id) {
|
||||
// change the current balance, set it to today, continue the loop.
|
||||
$currentBalance = bcadd($currentBalance, $transaction['amount']);
|
||||
$balances[$format] = $currentBalance;
|
||||
app('log')->debug(sprintf('%s: transaction in %s, new balance is %s.', $format, $native->code, $currentBalance));
|
||||
continue;
|
||||
}
|
||||
// if foreign currency is in the expected currency, do nothing:
|
||||
if ((int)$transaction['foreign_currency_id'] === (int)$native->id) {
|
||||
$currentBalance = bcadd($currentBalance, $transaction['foreign_amount']);
|
||||
$balances[$format] = $currentBalance;
|
||||
app('log')->debug(sprintf('%s: transaction in %s (foreign), new balance is %s.', $format, $native->code, $currentBalance));
|
||||
continue;
|
||||
}
|
||||
// otherwise, convert 'amount' to the necessary currency:
|
||||
$currencyId = (int)$transaction['transaction_currency_id'];
|
||||
$currency = $currencies[$currencyId] ?? TransactionCurrency::find($currencyId);
|
||||
|
||||
|
||||
$rate = $converter->getCurrencyRate($currency, $native, $day);
|
||||
$convertedAmount = bcmul($transaction['amount'], $rate);
|
||||
$currentBalance = bcadd($currentBalance, $convertedAmount);
|
||||
$balances[$format] = $currentBalance;
|
||||
|
||||
app('log')->debug(sprintf(
|
||||
'%s: transaction in %s(!). Conversion rate is %s. %s %s = %s %s',
|
||||
$format,
|
||||
$currency->code,
|
||||
$rate,
|
||||
$currency->code,
|
||||
$transaction['amount'],
|
||||
$native->code,
|
||||
$convertedAmount
|
||||
));
|
||||
|
||||
|
||||
}
|
||||
|
||||
$cache->store($balances);
|
||||
|
||||
return $balances;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets balance at the end of current month by default. Returns the balance converted
|
||||
* to the indicated currency ($native).
|
||||
*
|
||||
* @param Account $account
|
||||
* @param Carbon $date
|
||||
* @param TransactionCurrency $native
|
||||
*
|
||||
* @return string
|
||||
* @throws FireflyException
|
||||
*/
|
||||
public function balanceConverted(Account $account, Carbon $date, TransactionCurrency $native): string
|
||||
{
|
||||
app('log')->debug(sprintf('Now in balanceConverted (%s) for account #%d, converting to %s', $date->format('Y-m-d'), $account->id, $native->code));
|
||||
// abuse chart properties:
|
||||
$cache = new CacheProperties();
|
||||
$cache->addProperty($account->id);
|
||||
$cache->addProperty('balance');
|
||||
$cache->addProperty($date);
|
||||
$cache->addProperty($native ? $native->id : 0);
|
||||
if ($cache->has()) {
|
||||
return $cache->get();
|
||||
}
|
||||
/** @var AccountRepositoryInterface $repository */
|
||||
$repository = app(AccountRepositoryInterface::class);
|
||||
$currency = $repository->getAccountCurrency($account);
|
||||
if (null === $currency) {
|
||||
throw new FireflyException('Cannot get converted account balance: no currency found for account.');
|
||||
}
|
||||
|
||||
/**
|
||||
* selection of transactions
|
||||
* 1: all normal transactions. No foreign currency info. In $currency. Need conversion.
|
||||
* 2: all normal transactions. No foreign currency info. In $native. Need NO conversion.
|
||||
* 3: all normal transactions. No foreign currency info. In neither currency. Need conversion.
|
||||
* Then, select everything with foreign currency info:
|
||||
* 4. All transactions with foreign currency info in $native. Normal currency value is ignored. Do not need conversion.
|
||||
* 5. All transactions with foreign currency info NOT in $native, but currency info in $currency. Need conversion.
|
||||
* 6. All transactions with foreign currency info NOT in $native, and currency info NOT in $currency. Need conversion.
|
||||
*
|
||||
*/
|
||||
|
||||
$new = [];
|
||||
$existing = [];
|
||||
// 1
|
||||
$new[] = $account->transactions()
|
||||
->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
|
||||
->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59'))
|
||||
->where('transactions.transaction_currency_id', $currency->id)
|
||||
->whereNull('transactions.foreign_currency_id')
|
||||
->get(['transaction_journals.date', 'transactions.amount'])->toArray();
|
||||
app('log')->debug(sprintf('%d transactions in set #1', count($new[0])));
|
||||
// 2
|
||||
$existing[] = $account->transactions()
|
||||
->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
|
||||
->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59'))
|
||||
->where('transactions.transaction_currency_id', $native->id)
|
||||
->whereNull('transactions.foreign_currency_id')
|
||||
->get(['transactions.amount'])->toArray();
|
||||
app('log')->debug(sprintf('%d transactions in set #2', count($existing[0])));
|
||||
// 3
|
||||
$new[] = $account->transactions()
|
||||
->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
|
||||
->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59'))
|
||||
->where('transactions.transaction_currency_id', '!=', $currency->id)
|
||||
->where('transactions.transaction_currency_id', '!=', $native->id)
|
||||
->whereNull('transactions.foreign_currency_id')
|
||||
->get(['transaction_journals.date', 'transactions.amount'])->toArray();
|
||||
app('log')->debug(sprintf('%d transactions in set #3', count($new[1])));
|
||||
// 4
|
||||
$existing[] = $account->transactions()
|
||||
->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
|
||||
->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59'))
|
||||
->where('transactions.foreign_currency_id', $native->id)
|
||||
->whereNotNull('transactions.foreign_amount')
|
||||
->get(['transactions.foreign_amount'])->toArray();
|
||||
app('log')->debug(sprintf('%d transactions in set #4', count($existing[1])));
|
||||
// 5
|
||||
$new[] = $account->transactions()
|
||||
->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
|
||||
->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59'))
|
||||
->where('transactions.transaction_currency_id', $currency->id)
|
||||
->where('transactions.foreign_currency_id', '!=', $native->id)
|
||||
->whereNotNull('transactions.foreign_amount')
|
||||
->get(['transaction_journals.date', 'transactions.amount'])->toArray();
|
||||
app('log')->debug(sprintf('%d transactions in set #5', count($new[2])));
|
||||
// 6
|
||||
$new[] = $account->transactions()
|
||||
->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
|
||||
->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59'))
|
||||
->where('transactions.transaction_currency_id', '!=', $currency->id)
|
||||
->where('transactions.foreign_currency_id', '!=', $native->id)
|
||||
->whereNotNull('transactions.foreign_amount')
|
||||
->get(['transaction_journals.date', 'transactions.amount'])->toArray();
|
||||
app('log')->debug(sprintf('%d transactions in set #6', count($new[3])));
|
||||
|
||||
// process both sets of transactions. Of course, no need to convert set "existing".
|
||||
$balance = $this->sumTransactions($existing[0], 'amount');
|
||||
$balance = bcadd($balance, $this->sumTransactions($existing[1], 'foreign_amount'));
|
||||
//app('log')->debug(sprintf('Balance from set #2 and #4 is %f', $balance));
|
||||
|
||||
// need to convert the others. All sets use the "amount" value as their base (that's easy)
|
||||
// but we need to convert each transaction separately because the date difference may
|
||||
// incur huge currency changes.
|
||||
$converter = new ExchangeRateConverter();
|
||||
foreach ($new as $index => $set) {
|
||||
foreach ($set as $transaction) {
|
||||
$date = Carbon::createFromFormat('Y-m-d H:i:s', $transaction['date']);
|
||||
$rate = $converter->getCurrencyRate($currency, $native, $date);
|
||||
$convertedAmount = bcmul($transaction['amount'], $rate);
|
||||
$balance = bcadd($balance, $convertedAmount);
|
||||
// app('log')->debug(sprintf('Date: %s, rate: %s, amount: %s %s, new: %s %s',
|
||||
// $date->format('Y-m-d'),
|
||||
// $rate,
|
||||
// $currency->code,
|
||||
// $transaction['amount'],
|
||||
// $native->code,
|
||||
// $convertedAmount
|
||||
// ));
|
||||
}
|
||||
//app('log')->debug(sprintf('Balance from new set #%d is %f', $index, $balance));
|
||||
}
|
||||
|
||||
// add virtual balance
|
||||
$virtual = null === $account->virtual_balance ? '0' : (string)$account->virtual_balance;
|
||||
$balance = bcadd($balance, $virtual);
|
||||
|
||||
$cache->store($balance);
|
||||
|
||||
return $balance;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method always ignores the virtual balance.
|
||||
*
|
||||
|
@ -493,7 +493,8 @@ trait TransactionValidation
|
||||
}
|
||||
/** @var TransactionJournal $journal */
|
||||
foreach ($transactionGroup->transactionJournals as $journal) {
|
||||
if ((int)$journal->id === (int)$transaction['transaction_journal_id']) {
|
||||
$journalId = (int)($transaction['transaction_journal_id'] ?? 0);
|
||||
if ((int)$journal->id === $journalId) {
|
||||
return $journal->transactions()->where('amount', '<', 0)->first()->account;
|
||||
}
|
||||
}
|
||||
@ -783,8 +784,8 @@ trait TransactionValidation
|
||||
private function compareAccountData(string $type, array $comparison): bool
|
||||
{
|
||||
return match ($type) {
|
||||
default => $this->compareAccountDataWithdrawal($comparison),
|
||||
'deposit' => $this->compareAccountDataDeposit($comparison),
|
||||
default => $this->compareAccountDataWithdrawal($comparison),
|
||||
'deposit' => $this->compareAccountDataDeposit($comparison),
|
||||
'transfer' => $this->compareAccountDataTransfer($comparison),
|
||||
};
|
||||
}
|
||||
|
@ -3,6 +3,13 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
This project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
## 6.0.19 - 2023-07-29
|
||||
|
||||
### Fixed
|
||||
|
||||
- [Issue 7577](https://github.com/firefly-iii/firefly-iii/issues/7577) Firefly III can't search for backward slashes in identifiers
|
||||
- [Issue 7762](https://github.com/firefly-iii/firefly-iii/issues/7762) User can't create access token
|
||||
|
||||
## 6.0.18 - 2023-07-19
|
||||
|
||||
### Fixed
|
||||
|
175
composer.lock
generated
175
composer.lock
generated
@ -473,16 +473,16 @@
|
||||
},
|
||||
{
|
||||
"name": "doctrine/dbal",
|
||||
"version": "3.6.4",
|
||||
"version": "3.6.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/doctrine/dbal.git",
|
||||
"reference": "19f0dec95edd6a3c3c5ff1d188ea94c6b7fc903f"
|
||||
"reference": "96d5a70fd91efdcec81fc46316efc5bf3da17ddf"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/doctrine/dbal/zipball/19f0dec95edd6a3c3c5ff1d188ea94c6b7fc903f",
|
||||
"reference": "19f0dec95edd6a3c3c5ff1d188ea94c6b7fc903f",
|
||||
"url": "https://api.github.com/repos/doctrine/dbal/zipball/96d5a70fd91efdcec81fc46316efc5bf3da17ddf",
|
||||
"reference": "96d5a70fd91efdcec81fc46316efc5bf3da17ddf",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -497,10 +497,10 @@
|
||||
"require-dev": {
|
||||
"doctrine/coding-standard": "12.0.0",
|
||||
"fig/log-test": "^1",
|
||||
"jetbrains/phpstorm-stubs": "2022.3",
|
||||
"phpstan/phpstan": "1.10.14",
|
||||
"jetbrains/phpstorm-stubs": "2023.1",
|
||||
"phpstan/phpstan": "1.10.21",
|
||||
"phpstan/phpstan-strict-rules": "^1.5",
|
||||
"phpunit/phpunit": "9.6.7",
|
||||
"phpunit/phpunit": "9.6.9",
|
||||
"psalm/plugin-phpunit": "0.18.4",
|
||||
"squizlabs/php_codesniffer": "3.7.2",
|
||||
"symfony/cache": "^5.4|^6.0",
|
||||
@ -565,7 +565,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/doctrine/dbal/issues",
|
||||
"source": "https://github.com/doctrine/dbal/tree/3.6.4"
|
||||
"source": "https://github.com/doctrine/dbal/tree/3.6.5"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -581,7 +581,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-06-15T07:40:12+00:00"
|
||||
"time": "2023-07-17T09:15:50+00:00"
|
||||
},
|
||||
{
|
||||
"name": "doctrine/deprecations",
|
||||
@ -1942,16 +1942,16 @@
|
||||
},
|
||||
{
|
||||
"name": "laravel/framework",
|
||||
"version": "v10.15.0",
|
||||
"version": "v10.16.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/framework.git",
|
||||
"reference": "c7599dc92e04532824bafbd226c2936ce6a905b8"
|
||||
"reference": "5c93d2795c393b462481179ce42dedfb30cc19b5"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/framework/zipball/c7599dc92e04532824bafbd226c2936ce6a905b8",
|
||||
"reference": "c7599dc92e04532824bafbd226c2936ce6a905b8",
|
||||
"url": "https://api.github.com/repos/laravel/framework/zipball/5c93d2795c393b462481179ce42dedfb30cc19b5",
|
||||
"reference": "5c93d2795c393b462481179ce42dedfb30cc19b5",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -2138,7 +2138,7 @@
|
||||
"issues": "https://github.com/laravel/framework/issues",
|
||||
"source": "https://github.com/laravel/framework"
|
||||
},
|
||||
"time": "2023-07-11T13:43:52+00:00"
|
||||
"time": "2023-07-26T03:30:46+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/passport",
|
||||
@ -2286,16 +2286,16 @@
|
||||
},
|
||||
{
|
||||
"name": "laravel/serializable-closure",
|
||||
"version": "v1.3.0",
|
||||
"version": "v1.3.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/serializable-closure.git",
|
||||
"reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37"
|
||||
"reference": "e5a3057a5591e1cfe8183034b0203921abe2c902"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/serializable-closure/zipball/f23fe9d4e95255dacee1bf3525e0810d1a1b0f37",
|
||||
"reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37",
|
||||
"url": "https://api.github.com/repos/laravel/serializable-closure/zipball/e5a3057a5591e1cfe8183034b0203921abe2c902",
|
||||
"reference": "e5a3057a5591e1cfe8183034b0203921abe2c902",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -2342,7 +2342,7 @@
|
||||
"issues": "https://github.com/laravel/serializable-closure/issues",
|
||||
"source": "https://github.com/laravel/serializable-closure"
|
||||
},
|
||||
"time": "2023-01-30T18:31:20+00:00"
|
||||
"time": "2023-07-14T13:56:28+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/slack-notification-channel",
|
||||
@ -5508,16 +5508,16 @@
|
||||
},
|
||||
{
|
||||
"name": "spatie/flare-client-php",
|
||||
"version": "1.4.1",
|
||||
"version": "1.4.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/spatie/flare-client-php.git",
|
||||
"reference": "943894c6a6b00501365ac0b91ae0dce56f2226fa"
|
||||
"reference": "5f2c6a7a0d2c1d90c12559dc7828fd942911a544"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/spatie/flare-client-php/zipball/943894c6a6b00501365ac0b91ae0dce56f2226fa",
|
||||
"reference": "943894c6a6b00501365ac0b91ae0dce56f2226fa",
|
||||
"url": "https://api.github.com/repos/spatie/flare-client-php/zipball/5f2c6a7a0d2c1d90c12559dc7828fd942911a544",
|
||||
"reference": "5f2c6a7a0d2c1d90c12559dc7828fd942911a544",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -5566,7 +5566,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/spatie/flare-client-php/issues",
|
||||
"source": "https://github.com/spatie/flare-client-php/tree/1.4.1"
|
||||
"source": "https://github.com/spatie/flare-client-php/tree/1.4.2"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -5574,7 +5574,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2023-07-06T09:29:49+00:00"
|
||||
"time": "2023-07-28T08:07:24+00:00"
|
||||
},
|
||||
{
|
||||
"name": "spatie/ignition",
|
||||
@ -5661,16 +5661,16 @@
|
||||
},
|
||||
{
|
||||
"name": "spatie/laravel-html",
|
||||
"version": "3.2.1",
|
||||
"version": "3.2.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/spatie/laravel-html.git",
|
||||
"reference": "bf7bdb55cc5ce15c4ec8134aa1df709c0397c397"
|
||||
"reference": "f9dac9f250735dd01d80e023f5acf6f3d10d3b3f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/spatie/laravel-html/zipball/bf7bdb55cc5ce15c4ec8134aa1df709c0397c397",
|
||||
"reference": "bf7bdb55cc5ce15c4ec8134aa1df709c0397c397",
|
||||
"url": "https://api.github.com/repos/spatie/laravel-html/zipball/f9dac9f250735dd01d80e023f5acf6f3d10d3b3f",
|
||||
"reference": "f9dac9f250735dd01d80e023f5acf6f3d10d3b3f",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -5727,7 +5727,7 @@
|
||||
"spatie"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/spatie/laravel-html/tree/3.2.1"
|
||||
"source": "https://github.com/spatie/laravel-html/tree/3.2.2"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -5735,7 +5735,7 @@
|
||||
"type": "custom"
|
||||
}
|
||||
],
|
||||
"time": "2023-01-24T23:47:16+00:00"
|
||||
"time": "2023-07-20T18:59:53+00:00"
|
||||
},
|
||||
{
|
||||
"name": "spatie/laravel-ignition",
|
||||
@ -7789,21 +7789,22 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/psr-http-message-bridge",
|
||||
"version": "v2.2.0",
|
||||
"version": "v2.3.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/psr-http-message-bridge.git",
|
||||
"reference": "28a732c05bbad801304ad5a5c674cf2970508993"
|
||||
"reference": "581ca6067eb62640de5ff08ee1ba6850a0ee472e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/28a732c05bbad801304ad5a5c674cf2970508993",
|
||||
"reference": "28a732c05bbad801304ad5a5c674cf2970508993",
|
||||
"url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/581ca6067eb62640de5ff08ee1ba6850a0ee472e",
|
||||
"reference": "581ca6067eb62640de5ff08ee1ba6850a0ee472e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.2.5",
|
||||
"psr/http-message": "^1.0 || ^2.0",
|
||||
"symfony/deprecation-contracts": "^2.5 || ^3.0",
|
||||
"symfony/http-foundation": "^5.4 || ^6.0"
|
||||
},
|
||||
"require-dev": {
|
||||
@ -7822,7 +7823,7 @@
|
||||
"type": "symfony-bridge",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "2.2-dev"
|
||||
"dev-main": "2.3-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@ -7857,7 +7858,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/symfony/psr-http-message-bridge/issues",
|
||||
"source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.2.0"
|
||||
"source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.3.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -7873,7 +7874,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-04-21T08:40:19+00:00"
|
||||
"time": "2023-07-26T11:53:26+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/routing",
|
||||
@ -8570,16 +8571,16 @@
|
||||
},
|
||||
{
|
||||
"name": "twig/twig",
|
||||
"version": "v3.6.1",
|
||||
"version": "v3.7.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/twigphp/Twig.git",
|
||||
"reference": "7e7d5839d4bec168dfeef0ac66d5c5a2edbabffd"
|
||||
"reference": "5cf942bbab3df42afa918caeba947f1b690af64b"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/7e7d5839d4bec168dfeef0ac66d5c5a2edbabffd",
|
||||
"reference": "7e7d5839d4bec168dfeef0ac66d5c5a2edbabffd",
|
||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/5cf942bbab3df42afa918caeba947f1b690af64b",
|
||||
"reference": "5cf942bbab3df42afa918caeba947f1b690af64b",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -8625,7 +8626,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/twigphp/Twig/issues",
|
||||
"source": "https://github.com/twigphp/Twig/tree/v3.6.1"
|
||||
"source": "https://github.com/twigphp/Twig/tree/v3.7.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -8637,7 +8638,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-06-08T12:52:13+00:00"
|
||||
"time": "2023-07-26T07:16:09+00:00"
|
||||
},
|
||||
{
|
||||
"name": "vlucas/phpdotenv",
|
||||
@ -9339,37 +9340,33 @@
|
||||
},
|
||||
{
|
||||
"name": "mockery/mockery",
|
||||
"version": "1.6.2",
|
||||
"version": "1.6.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/mockery/mockery.git",
|
||||
"reference": "13a7fa2642c76c58fa2806ef7f565344c817a191"
|
||||
"reference": "d1413755e26fe56a63455f7753221c86cbb88f66"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/mockery/mockery/zipball/13a7fa2642c76c58fa2806ef7f565344c817a191",
|
||||
"reference": "13a7fa2642c76c58fa2806ef7f565344c817a191",
|
||||
"url": "https://api.github.com/repos/mockery/mockery/zipball/d1413755e26fe56a63455f7753221c86cbb88f66",
|
||||
"reference": "d1413755e26fe56a63455f7753221c86cbb88f66",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"hamcrest/hamcrest-php": "^2.0.1",
|
||||
"lib-pcre": ">=7.0",
|
||||
"php": "^7.4 || ^8.0"
|
||||
"php": ">=7.4,<8.3"
|
||||
},
|
||||
"conflict": {
|
||||
"phpunit/phpunit": "<8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^8.5 || ^9.3",
|
||||
"psalm/plugin-phpunit": "^0.18",
|
||||
"vimeo/psalm": "^5.9"
|
||||
"psalm/plugin-phpunit": "^0.18.4",
|
||||
"symplify/easy-coding-standard": "^11.5.0",
|
||||
"vimeo/psalm": "^5.13.1"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.6.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"library/helpers.php",
|
||||
@ -9387,12 +9384,20 @@
|
||||
{
|
||||
"name": "Pádraic Brady",
|
||||
"email": "padraic.brady@gmail.com",
|
||||
"homepage": "http://blog.astrumfutura.com"
|
||||
"homepage": "https://github.com/padraic",
|
||||
"role": "Author"
|
||||
},
|
||||
{
|
||||
"name": "Dave Marshall",
|
||||
"email": "dave.marshall@atstsolutions.co.uk",
|
||||
"homepage": "http://davedevelopment.co.uk"
|
||||
"homepage": "https://davedevelopment.co.uk",
|
||||
"role": "Developer"
|
||||
},
|
||||
{
|
||||
"name": "Nathanael Esayeas",
|
||||
"email": "nathanael.esayeas@protonmail.com",
|
||||
"homepage": "https://github.com/ghostwriter",
|
||||
"role": "Lead Developer"
|
||||
}
|
||||
],
|
||||
"description": "Mockery is a simple yet flexible PHP mock object framework",
|
||||
@ -9410,10 +9415,13 @@
|
||||
"testing"
|
||||
],
|
||||
"support": {
|
||||
"docs": "https://docs.mockery.io/",
|
||||
"issues": "https://github.com/mockery/mockery/issues",
|
||||
"source": "https://github.com/mockery/mockery/tree/1.6.2"
|
||||
"rss": "https://github.com/mockery/mockery/releases.atom",
|
||||
"security": "https://github.com/mockery/mockery/security/advisories",
|
||||
"source": "https://github.com/mockery/mockery"
|
||||
},
|
||||
"time": "2023-06-07T09:07:52+00:00"
|
||||
"time": "2023-07-19T15:51:02+00:00"
|
||||
},
|
||||
{
|
||||
"name": "myclabs/deep-copy",
|
||||
@ -9937,16 +9945,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpdoc-parser",
|
||||
"version": "1.22.1",
|
||||
"version": "1.23.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpstan/phpdoc-parser.git",
|
||||
"reference": "65c39594fbd8c67abfc68bb323f86447bab79cc0"
|
||||
"reference": "a2b24135c35852b348894320d47b3902a94bc494"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/65c39594fbd8c67abfc68bb323f86447bab79cc0",
|
||||
"reference": "65c39594fbd8c67abfc68bb323f86447bab79cc0",
|
||||
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/a2b24135c35852b348894320d47b3902a94bc494",
|
||||
"reference": "a2b24135c35852b348894320d47b3902a94bc494",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -9978,22 +9986,22 @@
|
||||
"description": "PHPDoc parser with support for nullable, intersection and generic types",
|
||||
"support": {
|
||||
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
|
||||
"source": "https://github.com/phpstan/phpdoc-parser/tree/1.22.1"
|
||||
"source": "https://github.com/phpstan/phpdoc-parser/tree/1.23.0"
|
||||
},
|
||||
"time": "2023-06-29T20:46:06+00:00"
|
||||
"time": "2023-07-23T22:17:56+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpstan",
|
||||
"version": "1.10.25",
|
||||
"version": "1.10.26",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpstan/phpstan.git",
|
||||
"reference": "578f4e70d117f9a90699324c555922800ac38d8c"
|
||||
"reference": "5d660cbb7e1b89253a47147ae44044f49832351f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/578f4e70d117f9a90699324c555922800ac38d8c",
|
||||
"reference": "578f4e70d117f9a90699324c555922800ac38d8c",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/5d660cbb7e1b89253a47147ae44044f49832351f",
|
||||
"reference": "5d660cbb7e1b89253a47147ae44044f49832351f",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -10042,7 +10050,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-07-06T12:11:37+00:00"
|
||||
"time": "2023-07-19T12:44:37+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpstan-deprecation-rules",
|
||||
@ -10143,16 +10151,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-code-coverage",
|
||||
"version": "10.1.2",
|
||||
"version": "10.1.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
|
||||
"reference": "db1497ec8dd382e82c962f7abbe0320e4882ee4e"
|
||||
"reference": "be1fe461fdc917de2a29a452ccf2657d325b443d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/db1497ec8dd382e82c962f7abbe0320e4882ee4e",
|
||||
"reference": "db1497ec8dd382e82c962f7abbe0320e4882ee4e",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/be1fe461fdc917de2a29a452ccf2657d325b443d",
|
||||
"reference": "be1fe461fdc917de2a29a452ccf2657d325b443d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -10209,7 +10217,7 @@
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
|
||||
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
|
||||
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.2"
|
||||
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.3"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -10217,7 +10225,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2023-05-22T09:04:27+00:00"
|
||||
"time": "2023-07-26T13:45:28+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-file-iterator",
|
||||
@ -11072,16 +11080,16 @@
|
||||
},
|
||||
{
|
||||
"name": "sebastian/global-state",
|
||||
"version": "6.0.0",
|
||||
"version": "6.0.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/global-state.git",
|
||||
"reference": "aab257c712de87b90194febd52e4d184551c2d44"
|
||||
"reference": "7ea9ead78f6d380d2a667864c132c2f7b83055e4"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/aab257c712de87b90194febd52e4d184551c2d44",
|
||||
"reference": "aab257c712de87b90194febd52e4d184551c2d44",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/7ea9ead78f6d380d2a667864c132c2f7b83055e4",
|
||||
"reference": "7ea9ead78f6d380d2a667864c132c2f7b83055e4",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -11121,7 +11129,8 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/global-state/issues",
|
||||
"source": "https://github.com/sebastianbergmann/global-state/tree/6.0.0"
|
||||
"security": "https://github.com/sebastianbergmann/global-state/security/policy",
|
||||
"source": "https://github.com/sebastianbergmann/global-state/tree/6.0.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -11129,7 +11138,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2023-02-03T07:07:38+00:00"
|
||||
"time": "2023-07-19T07:19:23+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/lines-of-code",
|
||||
|
@ -24,50 +24,53 @@ declare(strict_types=1);
|
||||
|
||||
return [
|
||||
|
||||
'url' => 'https://ff3exchangerates.z6.web.core.windows.net',
|
||||
'enabled' => env('ENABLE_EXTERNAL_RATES', false),
|
||||
'url' => 'https://ff3exchangerates.z6.web.core.windows.net',
|
||||
'enabled' => true,
|
||||
'download_enabled' => env('ENABLE_EXTERNAL_RATES', false),
|
||||
|
||||
// if currencies are added, default rates must be added as well!
|
||||
// last exchange rate update: 6-6-2022
|
||||
// source: https://www.xe.com/currencyconverter/
|
||||
'date' => '2022-06-06',
|
||||
'rates' => [
|
||||
'date' => '2022-06-06',
|
||||
|
||||
// all rates are from EUR to $currency:
|
||||
'rates' => [
|
||||
|
||||
// europa
|
||||
['EUR', 'HUF', 387.9629],
|
||||
['EUR', 'GBP', 0.85420754],
|
||||
['EUR', 'UAH', 31.659752],
|
||||
['EUR', 'PLN', 4.581788],
|
||||
['EUR', 'TRY', 17.801397],
|
||||
['EUR', 'DKK', 7.4389753],
|
||||
'EUR' => 1,
|
||||
'HUF' => 387.9629,
|
||||
'GBP' => 0.85420754,
|
||||
'UAH' => 31.659752,
|
||||
'PLN' => 4.581788,
|
||||
'TRY' => 17.801397,
|
||||
'DKK' => 7.4389753,
|
||||
|
||||
// Americas
|
||||
['EUR', 'USD', 1.0722281],
|
||||
['EUR', 'BRL', 5.0973173],
|
||||
['EUR', 'CAD', 1.3459969],
|
||||
['EUR', 'MXN', 20.899824],
|
||||
'USD' => 1.0722281,
|
||||
'BRL' => 5.0973173,
|
||||
'CAD' => 1.3459969,
|
||||
'MXN' => 20.899824,
|
||||
|
||||
// Oceania currencies
|
||||
['EUR', 'IDR', 15466.299],
|
||||
['EUR', 'AUD', 1.4838549],
|
||||
['EUR', 'NZD', 1.6425829],
|
||||
'IDR' => 15466.299,
|
||||
'AUD' => 1.4838549,
|
||||
'NZD' => 1.6425829,
|
||||
|
||||
// africa
|
||||
['EUR', 'EGP', 19.99735],
|
||||
['EUR', 'MAD', 10.573307],
|
||||
['EUR', 'ZAR', 16.413167],
|
||||
'EGP' => 19.99735,
|
||||
'MAD' => 10.573307,
|
||||
'ZAR' => 16.413167,
|
||||
|
||||
// asia
|
||||
['EUR', 'JPY', 140.15257],
|
||||
['EUR', 'RMB', 7.1194265],
|
||||
['EUR', 'RUB', 66.000895],
|
||||
['EUR', 'INR', 83.220481],
|
||||
'JPY' => 140.15257,
|
||||
'RMB' => 7.1194265,
|
||||
'CNY' => 1,
|
||||
'RUB' => 66.000895,
|
||||
'INR' => 83.220481,
|
||||
|
||||
// int
|
||||
['EUR', 'XBT', 0, 00003417],
|
||||
['EUR', 'BCH', 0.00573987],
|
||||
['EUR', 'ETH', 0, 00056204],
|
||||
|
||||
['EUR', 'ILS', 3.5712508],
|
||||
['EUR', 'CHF', 1.0323891],
|
||||
['EUR', 'HRK', 7.5220845],
|
||||
'ILS' => 3.5712508,
|
||||
'CHF' => 1.0323891,
|
||||
'HRK' => 7.5220845,
|
||||
],
|
||||
];
|
||||
|
@ -106,8 +106,9 @@ return [
|
||||
'telemetry' => false,
|
||||
'webhooks' => true,
|
||||
'handle_debts' => true,
|
||||
// see cer.php for exchange rates feature flag.
|
||||
],
|
||||
'version' => '6.0.18',
|
||||
'version' => '6.0.19',
|
||||
'api_version' => '2.0.4',
|
||||
'db_version' => 19,
|
||||
|
||||
@ -127,7 +128,7 @@ return [
|
||||
'disable_csp_header' => env('DISABLE_CSP_HEADER', false),
|
||||
'allow_webhooks' => env('ALLOW_WEBHOOKS', false),
|
||||
|
||||
// email flags
|
||||
// flags
|
||||
'send_report_journals' => envNonEmpty('SEND_REPORT_JOURNALS', true),
|
||||
|
||||
// info for demo site
|
||||
|
@ -29,7 +29,6 @@ use FireflyIII\Models\TransactionCurrency;
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Collection;
|
||||
use Log;
|
||||
|
||||
/**
|
||||
* Class ExchangeRateSeeder
|
||||
@ -45,27 +44,34 @@ class ExchangeRateSeeder extends Seeder
|
||||
{
|
||||
$count = User::count();
|
||||
if (0 === $count) {
|
||||
Log::debug('Will not seed exchange rates yet.');
|
||||
app('log')->debug('Will not seed exchange rates yet.');
|
||||
return;
|
||||
}
|
||||
$users = User::get();
|
||||
$date = config('cer.date');
|
||||
$rates = config('cer.rates');
|
||||
$users = User::get();
|
||||
$date = config('cer.date');
|
||||
$rates = config('cer.rates');
|
||||
$usable = [];
|
||||
foreach ($rates as $rate) {
|
||||
$from = $this->getCurrency($rate[0]);
|
||||
$to = $this->getCurrency($rate[1]);
|
||||
if (null !== $from && null !== $to) {
|
||||
$usable[] = [$from, $to, $rate[2]];
|
||||
$euro = $this->getCurrency('EUR');
|
||||
if (null === $euro) {
|
||||
return;
|
||||
}
|
||||
foreach ($rates as $currencyCode => $rate) {
|
||||
// grab opposing currency
|
||||
$foreign = $this->getCurrency($currencyCode);
|
||||
if (null !== $foreign) {
|
||||
// save rate in array:
|
||||
$usable[] = [$foreign, $rate];
|
||||
app('log')->debug(sprintf('Have default exchange rate from %s to %s.', $euro->code, $foreign->code));
|
||||
}
|
||||
}
|
||||
unset($rates, $from, $to, $rate);
|
||||
unset($rates, $foreign, $rate);
|
||||
|
||||
// for each user, for each rate, check and save
|
||||
/** @var User $user */
|
||||
foreach ($users as $user) {
|
||||
foreach ($usable as $rate) {
|
||||
if (!$this->hasRate($user, $rate[0], $rate[1], $date)) {
|
||||
$this->addRate($user, $rate[0], $rate[1], $date, $rate[2]);
|
||||
if (!$this->hasRate($user, $euro, $rate[0], $date)) {
|
||||
$this->addRate($user, $euro, $rate[0], $date, $rate[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -82,41 +88,41 @@ class ExchangeRateSeeder extends Seeder
|
||||
}
|
||||
|
||||
/**
|
||||
* @param User $user
|
||||
* @param User $user
|
||||
* @param TransactionCurrency $from
|
||||
* @param TransactionCurrency $to
|
||||
* @param string $date
|
||||
* @param string $date
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function hasRate(User $user, TransactionCurrency $from, TransactionCurrency $to, string $date): bool
|
||||
{
|
||||
return $user->currencyExchangeRates()
|
||||
->where('from_currency_id', $from->id)
|
||||
->where('to_currency_id', $to->id)
|
||||
->where('date', $date)
|
||||
->count() > 0;
|
||||
->where('from_currency_id', $from->id)
|
||||
->where('to_currency_id', $to->id)
|
||||
->where('date', $date)
|
||||
->count() > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param User $user
|
||||
* @param User $user
|
||||
* @param TransactionCurrency $from
|
||||
* @param TransactionCurrency $to
|
||||
* @param string $date
|
||||
* @param float $rate
|
||||
* @param string $date
|
||||
* @param float $rate
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private function addRate(User $user, TransactionCurrency $from, TransactionCurrency $to, string $date, float $rate): void
|
||||
{
|
||||
/** @var User $user */
|
||||
CurrencyExchangeRate::create(
|
||||
[
|
||||
'user_id' => $user->id,
|
||||
'user_id' => $user->id,
|
||||
'user_group_id' => $user->user_group_id ?? null,
|
||||
'from_currency_id' => $from->id,
|
||||
'to_currency_id' => $to->id,
|
||||
'date' => $date,
|
||||
'rate' => $rate,
|
||||
'to_currency_id' => $to->id,
|
||||
'date' => $date,
|
||||
'rate' => $rate,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
@ -18,7 +18,7 @@
|
||||
"core-js": "^3.6.5",
|
||||
"date-fns": "^2.28.0",
|
||||
"pinia": "^2.0.14",
|
||||
"quasar": "^2.12.2",
|
||||
"quasar": "^2.12.3",
|
||||
"vue": "3",
|
||||
"vue-i18n": "^9.0.0",
|
||||
"vue-router": "^4.0.0",
|
||||
|
10
frontend/src/i18n/ja_JP/index.js
vendored
10
frontend/src/i18n/ja_JP/index.js
vendored
@ -78,7 +78,7 @@ export default {
|
||||
"bills_paid": "\u652f\u6255\u3044\u6e08\u307f\u8acb\u6c42",
|
||||
"left_to_spend": "\u652f\u51fa\u3067\u304d\u308b\u6b8b\u308a",
|
||||
"no_budget": "(\u4e88\u7b97\u306a\u3057)",
|
||||
"budgeted": "\u8a08\u4e0a\u4e88\u7b97",
|
||||
"budgeted": "\u4e88\u7b97\u8a2d\u5b9a",
|
||||
"spent": "\u652f\u51fa",
|
||||
"no_bill": "(\u8acb\u6c42\u306a\u3057)",
|
||||
"rule_trigger_source_account_starts_choice": "\u5f15\u304d\u51fa\u3057\u53e3\u5ea7\u540d\u304c...\u3067\u59cb\u307e\u308b",
|
||||
@ -156,7 +156,7 @@ export default {
|
||||
"rule_action_append_description_choice": "\u8aac\u660e\u306e\u7d42\u308f\u308a\u306b\u2026\u3092\u8ffd\u52a0",
|
||||
"rule_action_prepend_description_choice": "\u8aac\u660e\u306e\u7d42\u308f\u308a\u306b\u2026\u3092\u8ffd\u52a0",
|
||||
"rule_action_set_source_account_choice": "\u5f15\u304d\u51fa\u3057\u53e3\u5ea7\u3092...\u306b\u8a2d\u5b9a",
|
||||
"rule_action_set_destination_account_choice": "\u76f8\u624b\u5148\u53e3\u5ea7\u3092...\u306b\u8a2d\u5b9a",
|
||||
"rule_action_set_destination_account_choice": "\u9810\u3051\u5165\u308c\u53e3\u5ea7\u3092...\u306b\u8a2d\u5b9a",
|
||||
"rule_action_append_notes_choice": "\u5099\u8003\u306e\u7d42\u308f\u308a\u306b...\u3092\u8ffd\u52a0",
|
||||
"rule_action_prepend_notes_choice": "\u5099\u8003\u306e\u7d42\u308f\u308a\u306b\u2026\u3092\u8ffd\u52a0",
|
||||
"rule_action_clear_notes_choice": "\u5099\u8003\u3092\u524a\u9664",
|
||||
@ -204,8 +204,8 @@ export default {
|
||||
"currencies": "\u901a\u8ca8",
|
||||
"administration": "\u7ba1\u7406",
|
||||
"profile": "\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb",
|
||||
"source_account": "\u652f\u51fa\u5143\u53e3\u5ea7",
|
||||
"destination_account": "\u9001\u91d1\u5148\u306e\u53e3\u5ea7",
|
||||
"source_account": "\u5f15\u304d\u51fa\u3057\u53e3\u5ea7",
|
||||
"destination_account": "\u9810\u3051\u5165\u308c\u53e3\u5ea7",
|
||||
"amount": "\u91d1\u984d",
|
||||
"date": "\u65e5\u4ed8",
|
||||
"time": "\u6642\u523b",
|
||||
@ -215,7 +215,7 @@ export default {
|
||||
"budgets": "\u4e88\u7b97",
|
||||
"subscriptions": "\u8b1b\u8aad",
|
||||
"welcome_back": "\u6982\u8981",
|
||||
"bills_to_pay": "\u652f\u6255\u3046\u3079\u304d\u8acb\u6c42",
|
||||
"bills_to_pay": "\u672a\u6255\u3044\u306e\u8acb\u6c42",
|
||||
"net_worth": "\u7d14\u8cc7\u7523",
|
||||
"pref_last365": "\u6628\u5e74",
|
||||
"pref_last90": "\u904e\u53bb 90 \u65e5\u9593",
|
||||
|
@ -338,7 +338,7 @@ page container: q-ma-xs (margin all, xs) AND q-mb-md to give the page content so
|
||||
<q-footer bordered class="bg-grey-8 text-white">
|
||||
<q-toolbar>
|
||||
<div>
|
||||
<small>Firefly III v v6.0.18 © James Cole, AGPL-3.0-or-later.</small>
|
||||
<small>Firefly III v v6.0.19 © James Cole, AGPL-3.0-or-later.</small>
|
||||
</div>
|
||||
</q-toolbar>
|
||||
</q-footer>
|
||||
|
@ -5352,10 +5352,10 @@ qs@6.9.7:
|
||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.7.tgz#4610846871485e1e048f44ae3b94033f0e675afe"
|
||||
integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==
|
||||
|
||||
quasar@^2.12.2:
|
||||
version "2.12.2"
|
||||
resolved "https://registry.yarnpkg.com/quasar/-/quasar-2.12.2.tgz#f45923259449afb224afbac16f1e5c4a660c3f84"
|
||||
integrity sha512-UB+J1cN6b9FrRphUuMvW1Pt1uaOPH2XJMAZagQlYzVUmltKCXQ0sby+ANgGRYa8w/tsekMySmN9QvkQ3+hYv/g==
|
||||
quasar@^2.12.3:
|
||||
version "2.12.3"
|
||||
resolved "https://registry.yarnpkg.com/quasar/-/quasar-2.12.3.tgz#dd898cce1bbaf9e02310cc7e777c9c42a836a003"
|
||||
integrity sha512-9KK5TXWGsZ6XFF6MJQ0E98yp++D1PagqSJrKpE91A6QnZ1gng4KtkFI5iPyuqXciFpXvxniiLsZtxD5ZICHvPw==
|
||||
|
||||
queue-microtask@^1.2.2:
|
||||
version "1.2.3"
|
||||
|
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
2
public/v1/js/profile.js
vendored
2
public/v1/js/profile.js
vendored
File diff suppressed because one or more lines are too long
2
public/v1/js/webhooks/create.js
vendored
2
public/v1/js/webhooks/create.js
vendored
File diff suppressed because one or more lines are too long
2
public/v1/js/webhooks/edit.js
vendored
2
public/v1/js/webhooks/edit.js
vendored
File diff suppressed because one or more lines are too long
2
public/v1/js/webhooks/index.js
vendored
2
public/v1/js/webhooks/index.js
vendored
File diff suppressed because one or more lines are too long
2
public/v1/js/webhooks/show.js
vendored
2
public/v1/js/webhooks/show.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
<!DOCTYPE html><html><head><base href=/v3/ ><title>Firefly III</title><meta charset=utf-8><meta content="Personal finances manager" name=description><meta content="telephone=no" name=format-detection><meta content=no name=msapplication-tap-highlight><meta content="user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1,width=device-width" name=viewport><link href=favicon-32x32.png rel=icon sizes=32x32 type=image/png><link href=favicon-16x16.png rel=icon sizes=16x16 type=image/png><link href=maskable76.png rel=apple-touch-icon sizes=76x76><link href=maskable120.png rel=apple-touch-icon sizes=120x120><link href=maskable152.png rel=apple-touch-icon sizes=152x152><link href=apple-touch-icon.png rel=apple-touch-icon sizes=180x180><link color=#3c8dbc href=safari-pinned-tab.svg rel=mask-icon><link href=maskable192.png rel=icon sizes=192x192><link href=maskable128.png rel=icon sizes=128x128><link href=manifest.webmanifest rel=manifest><meta content=#1e6581 name=msapplication-TileColor><meta content=maskable512.png name=msapplication-TileImage><meta content=no name=msapplication-tap-highlight><meta content="Firefly III" name=application-name><meta content="noindex, nofollow, noarchive, noodp, NoImageIndex, noydir" name=robots><meta content=yes name=apple-mobile-web-app-capable><meta content="Firefly III" name=apple-mobile-web-app-title><meta content="Firefly III" name=application-name><meta content=#3c8dbc name=msapplication-TileColor><meta content="mstile-144x144.png?v=3e8AboOwbd" name=msapplication-TileImage><meta content=#3c8dbc name=theme-color><script defer src=/v3/js/vendor.c85174b6.js></script><script defer src=/v3/js/app.db0b243e.js></script><link href=/v3/css/vendor.1042cbfe.css rel=stylesheet><link href=/v3/css/app.50c7ba73.css rel=stylesheet></head><body><div id=q-app></div></body></html>
|
||||
<!DOCTYPE html><html><head><base href=/v3/ ><title>Firefly III</title><meta charset=utf-8><meta content="Personal finances manager" name=description><meta content="telephone=no" name=format-detection><meta content=no name=msapplication-tap-highlight><meta content="user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1,width=device-width" name=viewport><link href=favicon-32x32.png rel=icon sizes=32x32 type=image/png><link href=favicon-16x16.png rel=icon sizes=16x16 type=image/png><link href=maskable76.png rel=apple-touch-icon sizes=76x76><link href=maskable120.png rel=apple-touch-icon sizes=120x120><link href=maskable152.png rel=apple-touch-icon sizes=152x152><link href=apple-touch-icon.png rel=apple-touch-icon sizes=180x180><link color=#3c8dbc href=safari-pinned-tab.svg rel=mask-icon><link href=maskable192.png rel=icon sizes=192x192><link href=maskable128.png rel=icon sizes=128x128><link href=manifest.webmanifest rel=manifest><meta content=#1e6581 name=msapplication-TileColor><meta content=maskable512.png name=msapplication-TileImage><meta content=no name=msapplication-tap-highlight><meta content="Firefly III" name=application-name><meta content="noindex, nofollow, noarchive, noodp, NoImageIndex, noydir" name=robots><meta content=yes name=apple-mobile-web-app-capable><meta content="Firefly III" name=apple-mobile-web-app-title><meta content="Firefly III" name=application-name><meta content=#3c8dbc name=msapplication-TileColor><meta content="mstile-144x144.png?v=3e8AboOwbd" name=msapplication-TileImage><meta content=#3c8dbc name=theme-color><script defer src=/v3/js/vendor.fa245dad.js></script><script defer src=/v3/js/app.d0f06e34.js></script><link href=/v3/css/vendor.deebbe65.css rel=stylesheet><link href=/v3/css/app.50c7ba73.css rel=stylesheet></head><body><div id=q-app></div></body></html>
|
1
public/v3/js/2686.9a32e198.js
vendored
1
public/v3/js/2686.9a32e198.js
vendored
File diff suppressed because one or more lines are too long
1
public/v3/js/2769.435f626d.js
vendored
Normal file
1
public/v3/js/2769.435f626d.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
"use strict";(globalThis["webpackChunkfirefly_iii"]=globalThis["webpackChunkfirefly_iii"]||[]).push([[2769],{2769:(e,t,l)=>{l.r(t),l.d(t,{default:()=>d});var n=l(9835);const i={class:"fullscreen bg-blue text-white text-center q-pa-md flex flex-center"},o=(0,n._)("div",{style:{"font-size":"30vh"}}," 404 ",-1),s=(0,n._)("div",{class:"text-h2",style:{opacity:".4"}}," Oops. Nothing here... ",-1);function c(e,t,l,c,r,a){const u=(0,n.up)("q-btn");return(0,n.wg)(),(0,n.iD)("div",i,[(0,n._)("div",null,[o,s,(0,n.Wm)(u,{class:"q-mt-xl",color:"white",label:"Go Home","no-caps":"","text-color":"blue",to:"/",unelevated:""})])])}const r=(0,n.aZ)({name:"Error404"});var a=l(1639),u=l(8879),h=l(9984),f=l.n(h);const b=(0,a.Z)(r,[["render",c]]),d=b;f()(r,"components",{QBtn:u.Z})}}]);
|
1
public/v3/js/2769.fb18b544.js
vendored
1
public/v3/js/2769.fb18b544.js
vendored
@ -1 +0,0 @@
|
||||
"use strict";(globalThis["webpackChunkfirefly_iii"]=globalThis["webpackChunkfirefly_iii"]||[]).push([[2769],{855:(e,t,l)=>{l.r(t),l.d(t,{default:()=>d});var n=l(9835);const i={class:"fullscreen bg-blue text-white text-center q-pa-md flex flex-center"},o=(0,n._)("div",{style:{"font-size":"30vh"}}," 404 ",-1),s=(0,n._)("div",{class:"text-h2",style:{opacity:".4"}}," Oops. Nothing here... ",-1);function c(e,t,l,c,r,a){const u=(0,n.up)("q-btn");return(0,n.wg)(),(0,n.iD)("div",i,[(0,n._)("div",null,[o,s,(0,n.Wm)(u,{class:"q-mt-xl",color:"white",label:"Go Home","no-caps":"","text-color":"blue",to:"/",unelevated:""})])])}const r=(0,n.aZ)({name:"Error404"});var a=l(1639),u=l(8879),h=l(9984),f=l.n(h);const b=(0,a.Z)(r,[["render",c]]),d=b;f()(r,"components",{QBtn:u.Z})}}]);
|
1
public/v3/js/884.34f91a60.js
vendored
Normal file
1
public/v3/js/884.34f91a60.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
public/v3/js/app.d0f06e34.js
vendored
Normal file
1
public/v3/js/app.d0f06e34.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
public/v3/js/app.db0b243e.js
vendored
1
public/v3/js/app.db0b243e.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -19,9 +19,9 @@
|
||||
"fire_webhooks_checkbox": "Webhook\u3092\u5b9f\u884c",
|
||||
"no_budget_pointer": "\u307e\u3060\u4e88\u7b97\u3092\u7acb\u3066\u3066\u3044\u306a\u3044\u3088\u3046\u3067\u3059\u3002<a href=\"\/budgets\">\u4e88\u7b97<\/a>\u30da\u30fc\u30b8\u3067\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4e88\u7b97\u306f\u652f\u51fa\u306e\u628a\u63e1\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002",
|
||||
"no_bill_pointer": "\u307e\u3060\u8acb\u6c42\u304c\u306a\u3044\u3088\u3046\u3067\u3059\u3002<a href=\"\/budgets\">\u8acb\u6c42<\/a>\u30da\u30fc\u30b8\u3067\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u8acb\u6c42\u306f\u652f\u51fa\u306e\u628a\u63e1\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002",
|
||||
"source_account": "\u652f\u51fa\u5143\u53e3\u5ea7",
|
||||
"source_account": "\u5f15\u304d\u51fa\u3057\u53e3\u5ea7",
|
||||
"hidden_fields_preferences": "<a href=\"preferences\">\u8a2d\u5b9a<\/a> \u3067\u8ffd\u52a0\u306e\u53d6\u5f15\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u6709\u52b9\u306b\u3067\u304d\u307e\u3059\u3002",
|
||||
"destination_account": "\u9001\u91d1\u5148\u306e\u53e3\u5ea7",
|
||||
"destination_account": "\u9810\u3051\u5165\u308c\u53e3\u5ea7",
|
||||
"add_another_split": "\u5225\u306e\u5206\u5272\u3092\u8ffd\u52a0",
|
||||
"submission": "\u9001\u4fe1",
|
||||
"create_another": "\u4fdd\u5b58\u5f8c\u306b\u623b\u308a\u4f5c\u6210\u3092\u7d9a\u3051\u308b\u3002",
|
||||
@ -37,15 +37,15 @@
|
||||
"notes": "\u5099\u8003",
|
||||
"external_url": "\u5916\u90e8 URL",
|
||||
"update_transaction": "\u53d6\u5f15\u3092\u66f4\u65b0",
|
||||
"after_update_create_another": "\u4fdd\u5b58\u5f8c\u306b\u3053\u3053\u306b\u623b\u308a\u3001\u7de8\u96c6\u3092\u7d9a\u3051\u308b\u3002",
|
||||
"store_as_new": "\u66f4\u65b0\u3067\u306f\u306a\u304f\u3001\u65b0\u3057\u3044\u53d6\u5f15\u3068\u3057\u3066\u4fdd\u5b58\u3059\u308b\u3002",
|
||||
"after_update_create_another": "\u4fdd\u5b58\u5f8c\u306b\u623b\u3063\u3066\u7de8\u96c6\u3092\u7d9a\u3051\u308b\u3002",
|
||||
"store_as_new": "\u66f4\u65b0\u305b\u305a\u65b0\u3057\u3044\u53d6\u5f15\u3068\u3057\u3066\u4fdd\u5b58\u3059\u308b\u3002",
|
||||
"split_title_help": "\u5206\u5272\u53d6\u5f15\u3092\u4f5c\u6210\u3059\u308b\u5834\u5408\u3001\u53d6\u5f15\u306e\u3059\u3079\u3066\u306e\u5206\u5272\u306e\u5305\u62ec\u7684\u306a\u8aac\u660e\u304c\u5fc5\u8981\u3067\u3059\u3002",
|
||||
"none_in_select_list": "(\u306a\u3057)",
|
||||
"no_piggy_bank": "(\u8caf\u91d1\u7bb1\u304c\u3042\u308a\u307e\u305b\u3093)",
|
||||
"description": "\u8aac\u660e",
|
||||
"split_transaction_title_help": "\u5206\u5272\u53d6\u5f15\u3092\u4f5c\u6210\u3059\u308b\u5834\u5408\u3001\u53d6\u5f15\u306e\u3059\u3079\u3066\u306e\u5206\u5272\u306e\u5305\u62ec\u7684\u306a\u8aac\u660e\u304c\u5fc5\u8981\u3067\u3059\u3002",
|
||||
"destination_account_reconciliation": "\u9810\u3051\u5165\u308c\u53e3\u5ea7\u306e\u53d6\u5f15\u7167\u5408\u3092\u7de8\u96c6\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002",
|
||||
"source_account_reconciliation": "\u652f\u51fa\u5143\u53e3\u5ea7\u306e\u53d6\u5f15\u7167\u5408\u3092\u7de8\u96c6\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002",
|
||||
"source_account_reconciliation": "\u5f15\u304d\u51fa\u3057\u53e3\u5ea7\u306e\u53d6\u5f15\u7167\u5408\u3092\u7de8\u96c6\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002",
|
||||
"budget": "\u4e88\u7b97",
|
||||
"bill": "\u8acb\u6c42",
|
||||
"you_create_withdrawal": "\u51fa\u91d1\u3092\u4f5c\u6210\u3057\u3066\u3044\u307e\u3059\u3002",
|
||||
@ -58,7 +58,7 @@
|
||||
"profile_something_wrong": "\u4f55\u304b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\uff01",
|
||||
"profile_try_again": "\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u3082\u3046\u4e00\u5ea6\u3084\u308a\u76f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002",
|
||||
"profile_oauth_clients": "OAuth\u30af\u30e9\u30a4\u30a2\u30f3\u30c8",
|
||||
"profile_oauth_no_clients": "OAuth \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u4f5c\u6210\u3057\u3066\u3044\u307e\u305b\u3093\u3002",
|
||||
"profile_oauth_no_clients": "OAuth\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u4f5c\u6210\u3057\u3066\u3044\u307e\u305b\u3093\u3002",
|
||||
"profile_oauth_clients_header": "\u30af\u30e9\u30a4\u30a2\u30f3\u30c8",
|
||||
"profile_oauth_client_id": "\u30af\u30e9\u30a4\u30a2\u30f3\u30c8 ID",
|
||||
"profile_oauth_client_name": "\u540d\u524d",
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Piggy bank',
|
||||
'ale_action_add_tag' => 'Added tag',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Guardiola',
|
||||
'ale_action_add_tag' => 'Etiqueta afegida',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Piggy bank',
|
||||
'ale_action_add_tag' => 'Added tag',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Piggy bank',
|
||||
'ale_action_add_tag' => 'Added tag',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Sparschwein',
|
||||
'ale_action_add_tag' => 'Schlagwort hinzugefügt',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Κουμπαράς',
|
||||
'ale_action_add_tag' => 'Προστέθηκε ετικέτα',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Piggy bank',
|
||||
'ale_action_add_tag' => 'Added tag',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2614,6 +2614,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Piggy bank',
|
||||
'ale_action_add_tag' => 'Added tag',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
// Ignore this comment
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Hucha',
|
||||
'ale_action_add_tag' => 'Etiqueta añadida',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Piggy bank',
|
||||
'ale_action_add_tag' => 'Added tag',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Tirelire',
|
||||
'ale_action_add_tag' => 'Tag ajouté',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Piggy bank',
|
||||
'ale_action_add_tag' => 'Added tag',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Piggy bank',
|
||||
'ale_action_add_tag' => 'Added tag',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Salvadanaio',
|
||||
'ale_action_add_tag' => 'Etichette aggiunte',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -45,9 +45,9 @@ return [
|
||||
'title_deposit' => '収益 / 収入',
|
||||
'title_transfer' => '送金',
|
||||
'title_transfers' => '送金',
|
||||
'edit_currency' => '通貨 ":name" を編集する',
|
||||
'delete_currency' => '通貨 ":name" を削除する',
|
||||
'newPiggyBank' => '新規貯金箱の作成',
|
||||
'edit_currency' => '通貨「:name」を編集する',
|
||||
'delete_currency' => '通貨「:name」を削除する',
|
||||
'newPiggyBank' => '貯金箱を作成',
|
||||
'edit_piggyBank' => '貯金箱 ":name" を編集する',
|
||||
'preferences' => '設定',
|
||||
'profile' => 'プロフィール',
|
||||
@ -63,8 +63,8 @@ return [
|
||||
'withdrawal_list' => '支出',
|
||||
'Withdrawal_list' => '支出',
|
||||
'deposit_list' => '収入、所得、入金',
|
||||
'transfer_list' => '振り替え',
|
||||
'transfers_list' => '振り替え',
|
||||
'transfer_list' => '送金',
|
||||
'transfers_list' => '送金',
|
||||
|
||||
/*
|
||||
* PLEASE DO NOT EDIT THIS FILE DIRECTLY.
|
||||
@ -81,16 +81,16 @@ return [
|
||||
'reconciliation_list' => '調整',
|
||||
'create_withdrawal' => '新規出金を作成',
|
||||
'create_deposit' => '新しい入金を作成する',
|
||||
'create_transfer' => '新しい振り替えを作成する',
|
||||
'create_transfer' => '新しい送金を作成する',
|
||||
'create_new_transaction' => '新規取引を作成',
|
||||
'edit_journal' => '取り引き ":description" を編集する',
|
||||
'edit_journal' => '取引「:description」を編集する',
|
||||
'edit_reconciliation' => '":description" を編集する',
|
||||
'delete_journal' => '取り引き ":description" を削除する',
|
||||
'delete_group' => '取引「:description」を削除',
|
||||
'tags' => 'タグ',
|
||||
'createTag' => '新しいタグを作成する',
|
||||
'edit_tag' => 'タグ ":tag" を編集する',
|
||||
'delete_tag' => 'タグ ":tag" を削除する',
|
||||
'edit_tag' => 'タグ「:tag」を編集する',
|
||||
'delete_tag' => 'タグ「:tag」を削除する',
|
||||
'delete_journal_link' => '取引間のリンクを削除する',
|
||||
'edit_object_group' => 'グループ「:title」を編集',
|
||||
'delete_object_group' => 'グループ「:title」を削除',
|
||||
|
@ -38,7 +38,7 @@ return [
|
||||
'no_demo_text' => '申し訳ありませんが、<abbr title=":route">このページ</abbr>のデモ説明文はもうありません。',
|
||||
'see_help_icon' => '右上角にある<i class="fa fa-question-circle"></i>アイコンが更に多くの情報を教えてくれるかもしれません。',
|
||||
'index' => '<strong>Firefly III</strong>へようこそ!このページでは、あなたの収支に関しての基本的な情報が得られます。詳しくは、→<a href=":asset">Asset Accounts</a>アカウントを確認、あるいは<a href=":budgets">予算</a>や<a href=":reports">レポート</a>ページを見てください。或いは、気ままに見て回るのも良いでしょう。',
|
||||
'accounts-index' => '資産口座はあなた個人の銀行口座です。支出口座はあなたがお金を支出するところ、店や友人などです。収入口座はお金を受け取る、仕事や政府、その他の収入源です。債務はあなたの負債や古いクレジットカードの借金、奨学金などのローンです。このページではそれらを編集、削除できます。',
|
||||
'accounts-index' => '資産口座はあなた個人の銀行口座です。支出口座はあなたがお金を支出するところ、店や友人などです。収入口座はお金を受け取るところ、仕事や政府、その他の収入源です。債務はあなたの負債やクレジットカードの借金、奨学金などのローンです。このページではそれらを編集、削除できます。',
|
||||
'budgets-index' => 'このページは予算の概要を表示します。一番上のバーは予算計上に利用可能な残高を表しています。これは右の残高をクリックすることによってどんな期間にも変更できます。',
|
||||
'reports-index-start' => 'Firefly IIIは多くの形式のレポートに対応しています。右上角の<i class="fa fa-question-circle"></i>アイコンで見ることができます。',
|
||||
'reports-index-examples' => 'これらの例を必ず確認してください:<a href=":one">毎月の財務概要</a>、<a href=":two">年次財務概要</a>、<a href=":three">予算概要</a>。',
|
||||
|
@ -39,7 +39,7 @@ return [
|
||||
'greeting' => 'ようこそ',
|
||||
'closing' => 'ピーピー',
|
||||
'signature' => 'Firely-iiiのメールロボット',
|
||||
'footer_ps' => ':ipAddressにリクエストされたので、このメール送信されました。',
|
||||
'footer_ps' => 'このメールは:ipAddressのリクエストにより送信されました。',
|
||||
|
||||
// admin test
|
||||
'admin_test_subject' => 'あなたの Firefly III からのテストメッセージ',
|
||||
|
@ -138,7 +138,7 @@ return [
|
||||
'expenses_by_budget' => '予算別支出',
|
||||
'income_by_category' => 'カテゴリ別収入',
|
||||
'expenses_by_asset_account' => '資産口座ごとの支出',
|
||||
'expenses_by_expense_account' => '経費口座ごとの支出',
|
||||
'expenses_by_expense_account' => '支出口座ごとの支出',
|
||||
'cannot_redirect_to_account' => 'Firefly IIIはあなたを正しいページにリダイレクトすることができませんでした。申し訳ありません。',
|
||||
'sum_of_expenses' => '合計支出',
|
||||
'sum_of_income' => '合計収入',
|
||||
@ -146,15 +146,15 @@ return [
|
||||
'spent_in_specific_budget' => '予算":budget"の支出',
|
||||
'spent_in_specific_double' => '口座「:account」での支出',
|
||||
'earned_in_specific_double' => '口座「:account」での収入',
|
||||
'source_account' => '支出元口座',
|
||||
'source_account_reconciliation' => '支出元口座の取引照合を編集することはできません。',
|
||||
'destination_account' => '送金先の口座',
|
||||
'source_account' => '引き出し口座',
|
||||
'source_account_reconciliation' => '引き出し口座の取引照合を編集することはできません。',
|
||||
'destination_account' => '預け入れ口座',
|
||||
'destination_account_reconciliation' => '預け入れ口座の取引照合を編集することはできません。',
|
||||
'sum_of_expenses_in_budget' => '予算":budget"の合計支出',
|
||||
'left_in_budget_limit' => '予算による支出残高',
|
||||
'current_period' => '現在の期間',
|
||||
'show_the_current_period_and_overview' => '現在の期間と概要を見る',
|
||||
'pref_languages_locale' => '英語以外の言語で正しく動作させるには、あなたのOSが正しいロケール情報を持っている必要があります。もしこれらが利用可能でない場合、通貨データ、日付、金額が正しく表示されない可能性があります。',
|
||||
'pref_languages_locale' => '英語以外の言語で正しく動作させるには、あなたのOSが正しいロケール情報を持っている必要があります。利用できない場合は、通貨データ、日付、金額が正しく表示されない可能性があります。',
|
||||
'budget_in_period' => '予算「:name」の :start から :end までのすべての取引の通貨 :currency のチャート',
|
||||
'chart_budget_in_period' => '予算「:name」の :start から :end までのすべての取引の通貨 :currency のチャート',
|
||||
'chart_budget_in_period_only_currency' => ':currency で予算計上されたため、このチャートは :currency での取引のみ表示されます。',
|
||||
@ -297,7 +297,7 @@ return [
|
||||
'is_alpha_warning' => 'あなたはアルファバージョンを使用しています。バグや問題に注意してください。',
|
||||
'is_beta_warning' => 'あなたはベータバージョンを使用しています。バグや問題に注意してください。',
|
||||
'all_destination_accounts' => '預け入れ口座',
|
||||
'all_source_accounts' => '支出元口座',
|
||||
'all_source_accounts' => '引き出し口座',
|
||||
'back_to_index' => 'インデックスに戻る',
|
||||
'cant_logout_guard' => 'Firefly III からログアウトできません。',
|
||||
'internal_reference' => '内部参照',
|
||||
@ -374,7 +374,7 @@ return [
|
||||
'search_modifier_not_description_starts' => '説明が「:value」で始まらない',
|
||||
'search_modifier_description_ends' => '説明が「:value」で終わる',
|
||||
'search_modifier_not_description_ends' => '説明が「:value」で終わらない',
|
||||
'search_modifier_description_contains' => '説明が「:value」を含む',
|
||||
'search_modifier_description_contains' => '説明に「:value」を含む',
|
||||
'search_modifier_not_description_contains' => '説明が「:value」を含まない',
|
||||
'search_modifier_description_is' => '説明が「:value」と一致する',
|
||||
'search_modifier_not_description_is' => '説明が「:value」と一致しない',
|
||||
@ -419,7 +419,7 @@ return [
|
||||
'search_modifier_not_amount_less' => '金額が「:value」以上',
|
||||
'search_modifier_source_account_is' => '引き出し口座名が「:value」と一致',
|
||||
'search_modifier_not_source_account_is' => '引き出し口座名が「:value」ではない',
|
||||
'search_modifier_source_account_contains' => '引き出し口座名が「:value」を含む',
|
||||
'search_modifier_source_account_contains' => '引き出し口座名に「:value」を含む',
|
||||
'search_modifier_not_source_account_contains' => '引き出し口座名が「:value」を含まない',
|
||||
'search_modifier_source_account_starts' => '引き出し口座名が「:value」で始まる',
|
||||
'search_modifier_not_source_account_starts' => '引き出し口座名が「:value」で始まらない',
|
||||
@ -429,7 +429,7 @@ return [
|
||||
'search_modifier_not_source_account_id' => '引き出し口座IDが「:value」ではない',
|
||||
'search_modifier_source_account_nr_is' => '引き出し口座番号(IBAN)が「:value」',
|
||||
'search_modifier_not_source_account_nr_is' => '引き出し口座番号(IBAN)が「:value」ではない',
|
||||
'search_modifier_source_account_nr_contains' => '引き出し口座番号(IBAN)が「:value」を含む',
|
||||
'search_modifier_source_account_nr_contains' => '引き出し口座番号(IBAN)に「:value」を含む',
|
||||
'search_modifier_not_source_account_nr_contains' => '引き出し口座番号(IBAN)が「:value」を含まない',
|
||||
'search_modifier_source_account_nr_starts' => '引き出し口座番号(IBAN)が「:value」で始まる',
|
||||
'search_modifier_not_source_account_nr_starts' => '引き出し口座番号(IBAN)が「:value」で始まらない',
|
||||
@ -437,7 +437,7 @@ return [
|
||||
'search_modifier_not_source_account_nr_ends' => '引き出し口座番号(IBAN)が「:value」で終わらない',
|
||||
'search_modifier_destination_account_is' => '預け入れ口座名が「:value」と一致する',
|
||||
'search_modifier_not_destination_account_is' => '預け入れ口座名が「:value」ではない',
|
||||
'search_modifier_destination_account_contains' => '預け入れ口座名が「:value」を含む',
|
||||
'search_modifier_destination_account_contains' => '預け入れ口座名に「:value」を含む',
|
||||
'search_modifier_not_destination_account_contains' => '預け入れ口座名が「:value」を含まない',
|
||||
'search_modifier_destination_account_starts' => '預け入れ口座名が「:value」で始まる',
|
||||
'search_modifier_not_destination_account_starts' => '預け入れ口座名が「:value」で始まらない',
|
||||
@ -488,7 +488,7 @@ return [
|
||||
'search_modifier_not_tag_is_not' => 'タグが「:value」',
|
||||
'search_modifier_account_is' => 'どちらかの口座が「:value」',
|
||||
'search_modifier_not_account_is' => 'どちらの口座も「:value」ではない',
|
||||
'search_modifier_account_contains' => 'どちらかの口座が「:value」を含む',
|
||||
'search_modifier_account_contains' => 'どちらかの口座名に「:value」を含む',
|
||||
'search_modifier_not_account_contains' => 'どちらの口座も「:value」を含まない',
|
||||
'search_modifier_account_ends' => 'どちらかの口座が「:value」で終わる',
|
||||
'search_modifier_not_account_ends' => 'どちらの口座も「:value」で終わらない',
|
||||
@ -502,7 +502,7 @@ return [
|
||||
'search_modifier_not_account_nr_ends' => 'どちらの口座番号 / IBAN も「:value」で終わらない',
|
||||
'search_modifier_account_nr_starts' => 'どちらかの口座番号 / IBAN が「:value」で始まる',
|
||||
'search_modifier_not_account_nr_starts' => 'どちらの口座番号 / IBAN も「:value」で始まらない',
|
||||
'search_modifier_category_contains' => 'カテゴリが「:value」を含む',
|
||||
'search_modifier_category_contains' => 'カテゴリに「:value」を含む',
|
||||
'search_modifier_not_category_contains' => 'カテゴリが「:value」を含まない',
|
||||
'search_modifier_category_ends' => 'カテゴリが「:value」で終わる',
|
||||
'search_modifier_not_category_ends' => 'カテゴリが「:value」で終わらない',
|
||||
@ -520,13 +520,13 @@ return [
|
||||
'search_modifier_not_bill_ends' => '請求名が「:value」で終わらない',
|
||||
'search_modifier_bill_starts' => '請求名が「:value」で始まる',
|
||||
'search_modifier_not_bill_starts' => '請求名が「:value」で始まらない',
|
||||
'search_modifier_external_id_contains' => '外部 ID が「:value」を含む',
|
||||
'search_modifier_external_id_contains' => '外部IDに「:value」を含む',
|
||||
'search_modifier_not_external_id_contains' => '外部IDが「:value」を含まない',
|
||||
'search_modifier_external_id_ends' => '外部 ID が「:value」で終わる',
|
||||
'search_modifier_not_external_id_ends' => '外部IDが「:value」で終わらない',
|
||||
'search_modifier_external_id_starts' => '外部 ID が「:value」で始まる',
|
||||
'search_modifier_not_external_id_starts' => '外部IDが「:value」で始まらない',
|
||||
'search_modifier_internal_reference_contains' => '内部参照が「:value」を含む',
|
||||
'search_modifier_internal_reference_contains' => '内部参照に「:value」を含む',
|
||||
'search_modifier_not_internal_reference_contains' => '内部参照が「:value」を含まない',
|
||||
'search_modifier_internal_reference_ends' => '内部参照が「:value」で終わる',
|
||||
'search_modifier_internal_reference_starts' => '内部参照が「:value」で始まる',
|
||||
@ -534,7 +534,7 @@ return [
|
||||
'search_modifier_not_internal_reference_starts' => '内部参照が「:value」で始まらない',
|
||||
'search_modifier_external_url_is' => '外部 URL が「:value」',
|
||||
'search_modifier_not_external_url_is' => '外部URLが「:value」ではない',
|
||||
'search_modifier_external_url_contains' => '外部 URL が「:value」を含む',
|
||||
'search_modifier_external_url_contains' => '外部URLに「:value」を含む',
|
||||
'search_modifier_not_external_url_contains' => '外部URLが「:value」を含まない',
|
||||
'search_modifier_external_url_ends' => '外部 URL が「:value」で終わる',
|
||||
'search_modifier_not_external_url_ends' => '外部URLが「:value」で終わらない',
|
||||
@ -694,7 +694,7 @@ return [
|
||||
'search_modifier_attachment_name_starts' => 'いずれかの添付ファイル名が「:value」で始まる',
|
||||
'search_modifier_attachment_name_ends' => 'いずれかの添付ファイル名が「:value」で終わる',
|
||||
'search_modifier_attachment_notes_are' => 'いずれかの添付ファイルの備考が「:value」',
|
||||
'search_modifier_attachment_notes_contains' => 'いずれかの添付ファイルの備考が「:value」を含む',
|
||||
'search_modifier_attachment_notes_contains' => 'いずれかの添付ファイルの備考に「:value」を含む',
|
||||
'search_modifier_attachment_notes_starts' => 'いずれかの添付ファイルの備考が「:value」で始まる',
|
||||
'search_modifier_attachment_notes_ends' => 'いずれかの添付ファイルの備考が「:value」で終わる',
|
||||
'search_modifier_not_attachment_name_is' => '添付ファイル名が「:value」ではない',
|
||||
@ -823,7 +823,7 @@ return [
|
||||
'rule_trigger_source_account_is_choice' => '引き出し口座名が...',
|
||||
'rule_trigger_source_account_is' => '引き出し口座名が「:trigger_value」',
|
||||
'rule_trigger_source_account_contains_choice' => '引き出し口座名が…を含む',
|
||||
'rule_trigger_source_account_contains' => '引き出し口座名が「:trigger_value」を含む',
|
||||
'rule_trigger_source_account_contains' => '引き出し口座名に「:trigger_value」を含む',
|
||||
'rule_trigger_account_id_choice' => 'どちらかの口座IDが…',
|
||||
'rule_trigger_account_id' => 'どちらかの口座IDが :trigger_value と一致',
|
||||
'rule_trigger_source_account_id_choice' => '引き出し口座IDが…',
|
||||
@ -843,7 +843,7 @@ return [
|
||||
'rule_trigger_source_account_nr_is_choice' => '引き出し口座番号/IBANが…',
|
||||
'rule_trigger_source_account_nr_is' => '引き出し口座番号/IBANが「:trigger_value」',
|
||||
'rule_trigger_source_account_nr_contains_choice' => '引き出し口座番号/IBANが…を含む',
|
||||
'rule_trigger_source_account_nr_contains' => '引き出し口座番号/IBANが「:trigger_value」を含む',
|
||||
'rule_trigger_source_account_nr_contains' => '引き出し口座番号/IBANに「:trigger_value」を含む',
|
||||
'rule_trigger_destination_account_starts_choice' => '預け入れ口座名が...で始まる',
|
||||
'rule_trigger_destination_account_starts' => '預け入れ口座名が「:trigger_value」で始まる',
|
||||
'rule_trigger_destination_account_ends_choice' => '預け入れ口座名が...で終わる',
|
||||
@ -851,7 +851,7 @@ return [
|
||||
'rule_trigger_destination_account_is_choice' => '預け入れ口座名が…',
|
||||
'rule_trigger_destination_account_is' => '預け入れ口座名が「:trigger_value」',
|
||||
'rule_trigger_destination_account_contains_choice' => '預け入れ口座名が...を含む',
|
||||
'rule_trigger_destination_account_contains' => '預け入れ口座名が「:trigger_value」を含む',
|
||||
'rule_trigger_destination_account_contains' => '預け入れ口座名に「:trigger_value」を含む',
|
||||
'rule_trigger_destination_account_nr_starts_choice' => '預け入れ口座番号/IBANが...で始まる',
|
||||
'rule_trigger_destination_account_nr_starts' => '預け入れ口座番号/IBANが「:trigger_value」で始まる',
|
||||
'rule_trigger_destination_account_nr_ends_choice' => '預け入れ口座番号/IBANが...で終わる',
|
||||
@ -859,7 +859,7 @@ return [
|
||||
'rule_trigger_destination_account_nr_is_choice' => '預け入れ口座番号/IBANが…',
|
||||
'rule_trigger_destination_account_nr_is' => '引き出し口座番号/IBANが「:trigger_value」',
|
||||
'rule_trigger_destination_account_nr_contains_choice' => '預け入れ口座番号/IBANが...を含む',
|
||||
'rule_trigger_destination_account_nr_contains' => '預け入れ口座番号/IBANが「:trigger_value」を含む',
|
||||
'rule_trigger_destination_account_nr_contains' => '預け入れ口座番号/IBANに「:trigger_value」を含む',
|
||||
'rule_trigger_transaction_type_choice' => '取引種別が…',
|
||||
'rule_trigger_transaction_type' => '取引種別が「:trigger_value」',
|
||||
'rule_trigger_category_is_choice' => 'カテゴリが…',
|
||||
@ -950,7 +950,7 @@ return [
|
||||
'rule_trigger_account_is_choice' => 'どちらかの口座が…と一致する',
|
||||
'rule_trigger_account_is' => 'どちらかの口座が「:trigger_value」と一致する',
|
||||
'rule_trigger_account_contains_choice' => 'どちらかの口座が…を含む',
|
||||
'rule_trigger_account_contains' => 'どちらかの口座が「:trigger_value」を含む',
|
||||
'rule_trigger_account_contains' => 'どちらかの口座名に「:trigger_value」を含む',
|
||||
'rule_trigger_account_ends_choice' => 'どちらかの口座が…で終わる',
|
||||
'rule_trigger_account_ends' => 'どちらかの口座が「:trigger_value」で終わる',
|
||||
'rule_trigger_account_starts_choice' => 'どちらかの口座で…で始まる',
|
||||
@ -958,7 +958,7 @@ return [
|
||||
'rule_trigger_account_nr_is_choice' => 'どちらかの口座番号 / IBAN が…',
|
||||
'rule_trigger_account_nr_is' => 'どちらかの口座番号 / IBAN が「:trigger_value」',
|
||||
'rule_trigger_account_nr_contains_choice' => 'どちらかの口座番号 / IBAN が…を含む',
|
||||
'rule_trigger_account_nr_contains' => 'どちらかの口座番号 / IBAN が「:trigger_value」を含む',
|
||||
'rule_trigger_account_nr_contains' => 'どちらかの口座番号 / IBAN に「:trigger_value」を含む',
|
||||
'rule_trigger_account_nr_ends_choice' => 'どちらかの口座番号 / IBAN が…で終わる',
|
||||
'rule_trigger_account_nr_ends' => 'どちらかの口座番号 / IBAN が「:trigger_value」で終わる',
|
||||
'rule_trigger_account_nr_starts_choice' => 'どちらかの口座番号 / IBAN が…で始まる',
|
||||
@ -982,13 +982,13 @@ return [
|
||||
'rule_trigger_bill_starts_choice' => '請求名が…で始まる',
|
||||
'rule_trigger_bill_starts' => '請求名が「:trigger_value」で始まる',
|
||||
'rule_trigger_external_id_contains_choice' => '外部 ID が…を含む',
|
||||
'rule_trigger_external_id_contains' => '外部 ID が「:trigger_value」を含む',
|
||||
'rule_trigger_external_id_contains' => '外部IDに「:trigger_value」を含む',
|
||||
'rule_trigger_external_id_ends_choice' => '外部 ID が…で終わる',
|
||||
'rule_trigger_external_id_ends' => '外部 ID が「:trigger_value」で終わる',
|
||||
'rule_trigger_external_id_starts_choice' => '外部 ID が…で始まる',
|
||||
'rule_trigger_external_id_starts' => '外部 ID が「:trigger_value」で始まる',
|
||||
'rule_trigger_internal_reference_contains_choice' => '内部参照が…を含む',
|
||||
'rule_trigger_internal_reference_contains' => '内部参照が「:trigger_value」を含む',
|
||||
'rule_trigger_internal_reference_contains' => '内部参照に「:trigger_value」を含む',
|
||||
'rule_trigger_internal_reference_ends_choice' => '内部参照が…で終わる',
|
||||
'rule_trigger_internal_reference_ends' => '内部参照が「:trigger_value」で終わる',
|
||||
'rule_trigger_internal_reference_starts_choice' => '内部参照が…で始まる',
|
||||
@ -996,7 +996,7 @@ return [
|
||||
'rule_trigger_external_url_is_choice' => '外部 URL が…',
|
||||
'rule_trigger_external_url_is' => '外部 URL が「:trigger_value」',
|
||||
'rule_trigger_external_url_contains_choice' => '外部 URL に…を含む',
|
||||
'rule_trigger_external_url_contains' => '外部 URL が「:trigger_value」を含む',
|
||||
'rule_trigger_external_url_contains' => '外部 URLに「:trigger_value」を含む',
|
||||
'rule_trigger_external_url_ends_choice' => '外部 URL が…で終わる',
|
||||
'rule_trigger_external_url_ends' => '外部 URL が「:trigger_value」で終わる',
|
||||
'rule_trigger_external_url_starts_choice' => '外部 URL が…で始まる',
|
||||
@ -1244,7 +1244,7 @@ return [
|
||||
'rule_action_prepend_description_choice' => '説明の終わりに…を追加',
|
||||
'rule_action_set_source_account_choice' => '引き出し口座を...に設定',
|
||||
'rule_action_set_source_account' => '支払元口座を「:action_value」にする',
|
||||
'rule_action_set_destination_account_choice' => '相手先口座を...に設定',
|
||||
'rule_action_set_destination_account_choice' => '預け入れ口座を...に設定',
|
||||
'rule_action_set_destination_account' => '預け入れ口座を「:action_value」にする',
|
||||
'rule_action_append_notes_choice' => '備考の終わりに...を追加',
|
||||
'rule_action_append_notes' => '備考の始めに「:action_value」を追加',
|
||||
@ -1399,34 +1399,34 @@ return [
|
||||
|
||||
// profile:
|
||||
'purge_data_title' => 'Firefly III からデータを消去',
|
||||
'purge_data_expl' => '「パージ」とは、「削除済みのものを削除する」ことを意味します。通常、Firefly IIIは何も永久には削除せず、それを非表示にします。下のボタンは以前に削除されたレコードのすべてを削除します。',
|
||||
'delete_stuff_header' => '削除と完全消去',
|
||||
'purge_all_data' => '削除済の全レコードを完全消去',
|
||||
'purge_data_expl' => '「パージ」とは、「削除済みのものを削除する」ことを意味します。通常、Firefly IIIは何も永久には削除せず非表示にします。下のボタンはこれまでに削除されたレコードのすべてを削除します。',
|
||||
'delete_stuff_header' => '削除とパージ',
|
||||
'purge_all_data' => '削除済の全レコードをパージ',
|
||||
'purge_data' => 'データを消去',
|
||||
'purged_all_records' => '削除済の全レコードが完全消去されました。',
|
||||
'purged_all_records' => '削除済の全レコードがパージされました。',
|
||||
'delete_data_title' => 'Firefly IIIからデータを削除',
|
||||
'permanent_delete_stuff' => 'Firefly IIIからデータを削除することができます。下のボタンを使用すると、表示されているものおよび非表示のものから削除されます。 このための取り消しボタンはありませんが、必要な場合サルベージできる項目がデータベースに残っている可能性があります。',
|
||||
'permanent_delete_stuff' => 'あなたはFirefly IIIからデータを削除することができます。以下のボタンで、表示されているものと非表示のものが削除されます。 取り消しボタンはありませんが、必要な場合はサルベージできる項目がデータベースに残っている可能性があります。',
|
||||
'other_sessions_logged_out' => 'すべてのセッションでログアウトしました。',
|
||||
'delete_unused_accounts' => '未使用の口座を削除すると、オートコンプリートの一覧がきれいになります。',
|
||||
'delete_all_unused_accounts' => '未使用の口座を削除',
|
||||
'deleted_all_unused_accounts' => 'すべての未使用の口座は削除されました',
|
||||
'delete_all_budgets' => 'すべての予算を削除する',
|
||||
'delete_all_categories' => 'すべてのカテゴリを削除する',
|
||||
'delete_all_tags' => 'すべてのタグを削除する',
|
||||
'delete_all_bills' => 'すべての請求を削除する',
|
||||
'delete_all_piggy_banks' => 'すべての貯金箱を削除する',
|
||||
'delete_all_rules' => 'すべてのルールを削除する',
|
||||
'delete_all_recurring' => 'すべての定期的な取引を削除する',
|
||||
'delete_all_object_groups' => 'すべての対象グループを削除する',
|
||||
'delete_all_accounts' => 'すべての口座を削除する',
|
||||
'delete_all_asset_accounts' => 'すべての資産口座を削除する',
|
||||
'delete_all_expense_accounts' => 'すべての支出口座を削除する',
|
||||
'delete_all_revenue_accounts' => 'すべての収入口座を削除する',
|
||||
'delete_all_liabilities' => 'すべての負債を削除する',
|
||||
'delete_all_transactions' => 'すべての取引を削除する',
|
||||
'delete_all_withdrawals' => 'すべての引き出しを削除する',
|
||||
'delete_all_deposits' => 'すべての入金を削除する',
|
||||
'delete_all_transfers' => 'すべての送金を削除する',
|
||||
'delete_all_budgets' => 'すべての予算を削除',
|
||||
'delete_all_categories' => 'すべてのカテゴリを削除',
|
||||
'delete_all_tags' => 'すべてのタグを削除',
|
||||
'delete_all_bills' => 'すべての請求を削除',
|
||||
'delete_all_piggy_banks' => 'すべての貯金箱を削除',
|
||||
'delete_all_rules' => 'すべてのルールを削除',
|
||||
'delete_all_recurring' => 'すべての定期的な取引を削除',
|
||||
'delete_all_object_groups' => 'すべてのグループを削除',
|
||||
'delete_all_accounts' => 'すべての口座を削除',
|
||||
'delete_all_asset_accounts' => 'すべての資産口座を削除',
|
||||
'delete_all_expense_accounts' => 'すべての支出口座を削除',
|
||||
'delete_all_revenue_accounts' => 'すべての収入口座を削除',
|
||||
'delete_all_liabilities' => 'すべての負債を削除',
|
||||
'delete_all_transactions' => 'すべての取引を削除',
|
||||
'delete_all_withdrawals' => 'すべての引き出しを削除',
|
||||
'delete_all_deposits' => 'すべての入金を削除',
|
||||
'delete_all_transfers' => 'すべての送金を削除',
|
||||
'also_delete_transactions' => '口座を削除すると、関連するすべての出金、入金、送金も削除されます!',
|
||||
'deleted_all_budgets' => 'すべての予算が削除されました',
|
||||
'deleted_all_categories' => 'すべてのカテゴリが削除されました',
|
||||
@ -1471,7 +1471,7 @@ return [
|
||||
'secure_pw_should' => 'チェックを入れるべき?',
|
||||
'secure_pw_long_password' => 'はい。常にパスワードが安全であることを確認してください。',
|
||||
'command_line_token' => 'コマンドライントークン',
|
||||
'explain_command_line_token' => 'データのエクスポートなどのコマンドラインオプションを実行するには、このトークンが必要です。 トークンがなければ、それら慎重に扱うべきコマンドは動作しません。私を含め、誰にもコマンドライントークンを共有しないでください。 もし失くしたり、疑心暗鬼に陥っている場合は、ボタンでトークンを再生成してください。',
|
||||
'explain_command_line_token' => 'データのエクスポートなどのコマンドラインオプションを実行するには、このトークンが必要です。 それら慎重に扱うべきコマンドはトークンがなければ動作しません。私を含め、誰にもコマンドライントークンを共有しないでください。 もし紛失したり、疑心暗鬼に陥っている場合は、ボタンでトークンを再生成してください。',
|
||||
'regenerate_command_line_token' => 'コマンドライントークンを再生成',
|
||||
'token_regenerated' => '新しいコマンドライントークンが生成されました',
|
||||
'change_your_email' => 'メールアドレスを変更する',
|
||||
@ -1485,7 +1485,7 @@ return [
|
||||
'delete_local_info_only' => "Firefly III がユーザー管理や認証処理に担わないため、この機能はローカルの Firefly III の情報のみを削除します。",
|
||||
'oauth' => 'OAuth',
|
||||
'profile_oauth_clients' => 'OAuthクライアント',
|
||||
'profile_oauth_no_clients' => 'OAuth クライアントを作成していません。',
|
||||
'profile_oauth_no_clients' => 'OAuthクライアントを作成していません。',
|
||||
'profile_oauth_clients_external_auth' => 'Autheliaのような外部認証プロバイダを使用している場合、OAuth クライアントは動作しません。パーソナルアクセストークンのみを使用できます。',
|
||||
'profile_oauth_clients_header' => 'クライアント',
|
||||
'profile_oauth_client_id' => 'クライアント ID',
|
||||
@ -1704,7 +1704,7 @@ return [
|
||||
'transferred_in' => '送金 (入)',
|
||||
'transferred_away' => '送金 (出)',
|
||||
'auto_budget_none' => '自動予算なし',
|
||||
'auto_budget_reset' => '期間ごとに固定金額を設定する',
|
||||
'auto_budget_reset' => '期間ごとに定額を設定する',
|
||||
'auto_budget_rollover' => '期間ごとに金額を追加',
|
||||
'auto_budget_adjusted' => '期間ごとに金額を追加し過剰な支出のために補正します',
|
||||
'auto_budget_period_daily' => '毎日',
|
||||
@ -1800,7 +1800,7 @@ return [
|
||||
'delete_revenue_account' => '収入口座「:name」を削除',
|
||||
'delete_liabilities_account' => '債務「:name」を削除',
|
||||
'asset_deleted' => '資産口座「:name」を正常に削除しました',
|
||||
'account_deleted' => 'アカウント「:name」を正常に削除しました',
|
||||
'account_deleted' => '口座「:name」を正常に削除しました',
|
||||
'expense_deleted' => '支出口座「:name」を正常に削除しました',
|
||||
'revenue_deleted' => '収入口座「:name」を正常に削除しました',
|
||||
'update_asset_account' => '資産口座を更新',
|
||||
@ -2055,7 +2055,7 @@ return [
|
||||
'newWithdrawal' => '新しい支出',
|
||||
'newDeposit' => '新しい入金',
|
||||
'newTransfer' => '新しい送金',
|
||||
'bills_to_pay' => '支払うべき請求',
|
||||
'bills_to_pay' => '未払いの請求',
|
||||
'per_day' => '1日あたり',
|
||||
'left_to_spend_per_day' => '1日あたりの残り支出額',
|
||||
'bills_paid' => '支払い済み請求',
|
||||
@ -2291,7 +2291,7 @@ return [
|
||||
'paid' => '支払い済み',
|
||||
'unpaid' => '未払い',
|
||||
'day' => '日',
|
||||
'budgeted' => '計上予算',
|
||||
'budgeted' => '予算設定',
|
||||
'period' => '期間',
|
||||
'balance' => '収支',
|
||||
'in_out_period' => 'この期間の収支',
|
||||
@ -2412,7 +2412,7 @@ return [
|
||||
'delete_user' => 'ユーザー :email を削除',
|
||||
'user_deleted' => 'ユーザーが削除されました。',
|
||||
'send_test_email' => 'テストメールメッセージを送信',
|
||||
'send_test_email_text' => 'あなたの環境がメールを送信できるか確認するため、このボタンを押してください。エラーがあってもここには表示されず、<strong>ログファイルに反映されます</strong>。ボタンは好きなだけ何度も押すことができます。スパム制御はされていません。メールは <code>:email</code> に送信され、すぐに到着します。',
|
||||
'send_test_email_text' => 'あなたの環境がメールを送信できるか確認するため、このボタンを押してください。エラーがあってもここには表示されず、<strong>ログファイルに記載されます</strong>。ボタンは好きなだけ何度も押すことができます。スパム制御はされていません。メールは <code>:email</code> に送信され、すぐに届きます。',
|
||||
'send_message' => 'メッセージを送信',
|
||||
'send_test_triggered' => 'テストが実行されました。受信トレイとログファイルを確認してください。',
|
||||
'give_admin_careful' => '管理者権限を与えられたユーザーは、あなたの特権を奪うことができます。注意してください。',
|
||||
@ -2474,7 +2474,7 @@ return [
|
||||
'overview_for_link' => 'リンクタイプ「:name」の概要',
|
||||
'source_transaction' => '元の取引',
|
||||
'link_description' => 'リンクの説明',
|
||||
'destination_transaction' => '宛先の取引',
|
||||
'destination_transaction' => '取引先',
|
||||
'delete_journal_link' => '<a href=":source_link">:source</a> と <a href=":destination_link">:destination</a> の間のリンクを削除する',
|
||||
'deleted_link' => 'リンクを削除しました',
|
||||
|
||||
@ -2510,8 +2510,8 @@ return [
|
||||
'convert_invalid_source' => '取引 #%d の引き出し元情報が無効です。',
|
||||
'convert_invalid_destination' => '取引 #%d の宛先情報が無効です。',
|
||||
'create_another' => '保存後に戻り作成を続ける。',
|
||||
'after_update_create_another' => '保存後にここに戻り、編集を続ける。',
|
||||
'store_as_new' => '更新ではなく、新しい取引として保存する。',
|
||||
'after_update_create_another' => '保存後に戻って編集を続ける。',
|
||||
'store_as_new' => '更新せず新しい取引として保存する。',
|
||||
'reset_after' => '送信後にフォームをリセット',
|
||||
'errors_submission' => '送信内容に問題がありました。エラーを確認してください。',
|
||||
'transaction_expand_split' => '分割を展開',
|
||||
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => '貯金箱',
|
||||
'ale_action_add_tag' => '追加したタグ',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -60,11 +60,11 @@ return [
|
||||
'attachments' => '添付ファイル',
|
||||
'BIC' => 'BIC',
|
||||
'verify_password' => 'パスワードの安全性確認',
|
||||
'source_account' => '支出元口座',
|
||||
'source_account' => '引き出し口座',
|
||||
'destination_account' => '預け入れ口座',
|
||||
'asset_destination_account' => '預け入れ口座',
|
||||
'include_net_worth' => '純資産に含める',
|
||||
'asset_source_account' => '支出元口座',
|
||||
'asset_source_account' => '引き出し口座',
|
||||
'journal_description' => '説明',
|
||||
'note' => '備考',
|
||||
'currency' => '通貨',
|
||||
@ -95,7 +95,7 @@ return [
|
||||
'piggy_bank_id' => '貯金箱',
|
||||
'returnHere' => 'ここへ戻る',
|
||||
'returnHereExplanation' => '保存後に戻り作成を続ける。',
|
||||
'returnHereUpdateExplanation' => '保存後、ここへ戻る。',
|
||||
'returnHereUpdateExplanation' => '保存後に戻る。',
|
||||
'description' => '説明',
|
||||
'expense_account' => '支出口座',
|
||||
'revenue_account' => '収入口座',
|
||||
@ -164,8 +164,8 @@ return [
|
||||
'delete_recurring' => '定期的な取引「:title」を削除',
|
||||
'user_areYouSure' => 'ユーザー 「:email」 を削除すると、すべてが消去されます。元に戻すことはできません。 あなたが自分自身を削除すると、この Firefly III へのアクセスができなくなります。',
|
||||
'attachment_areYouSure' => '添付ファイル「:name」を削除してもよろしいですか?',
|
||||
'account_areYouSure' => 'アカウント「:name」を削除してもよろしいですか?',
|
||||
'account_areYouSure_js' => 'アカウント「{name}」を削除してもよろしいですか?',
|
||||
'account_areYouSure' => '口座「:name」を削除してもよろしいですか?',
|
||||
'account_areYouSure_js' => '口座「{name}」を削除してもよろしいですか?',
|
||||
'bill_areYouSure' => '請求「:name」を削除してもよろしいですか?',
|
||||
'rule_areYouSure' => 'ルール「:title」を削除してもよろしいですか?',
|
||||
'object_group_areYouSure' => 'グループ「:title」を削除してもよろしいですか?',
|
||||
@ -289,7 +289,7 @@ return [
|
||||
'weekend' => '週末',
|
||||
'client_secret' => 'クライアントシークレット',
|
||||
'withdrawal_destination_id' => '送信先の口座',
|
||||
'deposit_source_id' => '支出元口座',
|
||||
'deposit_source_id' => '引き出し口座',
|
||||
'expected_on' => '予定日時',
|
||||
'paid' => '支払い済み',
|
||||
'auto_budget_type' => '自動予算',
|
||||
|
@ -45,7 +45,7 @@ return [
|
||||
'iban' => '無効なIBANです。',
|
||||
'zero_or_more' => '数値はマイナスにできません。',
|
||||
'date_or_time' => '数値はISO 8601 準拠の有効な日付や時刻である必要があります。',
|
||||
'source_equals_destination' => '支出元と支出先が同じです。',
|
||||
'source_equals_destination' => '引き出し口座と預け入れ口座が同じです。',
|
||||
'unique_account_number_for_user' => 'この口座番号は既に使われているようです。',
|
||||
'unique_iban_for_user' => 'このIBANは既に使われているようです。',
|
||||
'deleted_user' => 'セキュリティ上の制約から、このメールアドレスでは登録できません。',
|
||||
|
@ -2312,7 +2312,7 @@ return [
|
||||
'left_for_piggy_banks' => '저금통 잔액',
|
||||
'sum_of_piggy_banks' => '저금통 합계',
|
||||
'saved_so_far' => '지금까지 저장됨',
|
||||
'left_to_save' => '왼쪽으로 저장',
|
||||
'left_to_save' => '남은 저장',
|
||||
'suggested_amount' => '월별 권장 절약 금액',
|
||||
'add_money_to_piggy_title' => '":name" 저금통애 금액 추가',
|
||||
'remove_money_from_piggy_title' => '":name" 저금통에서 금액 제거',
|
||||
@ -2695,9 +2695,9 @@ return [
|
||||
'ale_action_log_add' => '":name" 저금통에 :amount 추가',
|
||||
'ale_action_log_remove' => '":name" 저금통에서 :amount 제거',
|
||||
'ale_action_clear_budget' => '예산에서 제거됨',
|
||||
'ale_action_update_group_title' => 'Updated transaction group title',
|
||||
'ale_action_update_date' => 'Updated transaction date',
|
||||
'ale_action_update_order' => 'Updated transaction order',
|
||||
'ale_action_update_group_title' => '분할거래 설명 변경',
|
||||
'ale_action_update_date' => '거래 날짜 변경',
|
||||
'ale_action_update_order' => '거래 순서 변경',
|
||||
'ale_action_clear_category' => '카테고리에서 제거됨',
|
||||
'ale_action_clear_notes' => '제거된 노트',
|
||||
'ale_action_clear_tag' => '삭제된 태그',
|
||||
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => '저금통',
|
||||
'ale_action_add_tag' => '태그 추가',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -61,10 +61,10 @@ return [
|
||||
'invalid_selection' => '선택이 잘못되었습니다.',
|
||||
'belongs_user' => '이 값은 이 필드에 유효하지 않습니다.',
|
||||
'at_least_one_transaction' => '하나 이상의 거래가 필요합니다.',
|
||||
'recurring_transaction_id' => 'Need at least one transaction.',
|
||||
'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.',
|
||||
'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.',
|
||||
'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.',
|
||||
'recurring_transaction_id' => '하나 이상의 거래가 필요합니다.',
|
||||
'need_id_to_match' => 'API가 일치시킬수 있도록 이 엔트리를 ID와 함께 제출해야 합니다.',
|
||||
'too_many_unmatched' => '제출된 거래가 각각의 데이터베이스 엔트리와 일치하지 않습니다. 기존 엔트리에 유효한 ID가 있는지 확인해 주세요.',
|
||||
'id_does_not_match' => '입력된 ID #:id가 예상된 ID와 일치하지 않습니다. 일치시키거나 빈칸을 입력하십시오.',
|
||||
'at_least_one_repetition' => '하나 이상의 반복이 필요합니다.',
|
||||
'require_repeat_until' => '반복 횟수 또는 종료 날짜(repeat_until) 가 필요합니다. 둘 다 없습니다.',
|
||||
'require_currency_info' => '이 필드의 내용은 통화 정보가 없으면 유효하지 않습니다.',
|
||||
@ -234,20 +234,20 @@ return [
|
||||
|
||||
// validation of accounts:
|
||||
'withdrawal_source_need_data' => '계속하려면 유효한 소스 계정 ID 및/또는 유효한 소스 계정 이름이 필요합니다.',
|
||||
'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".',
|
||||
'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.',
|
||||
'withdrawal_source_bad_data' => '[a] ID ":id" 또는 이름 ":name"을 검색할 때 유효한 소스 계정을 찾을 수 없습니다.',
|
||||
'withdrawal_dest_need_data' => '[a] 계속하려면 유효한 대상 계정 ID 및/또는 유효한 대상 계정 이름이 필요합니다.',
|
||||
'withdrawal_dest_bad_data' => 'ID ":id" 또는 이름 ":name"을 검색할 때 유효한 대상 계정을 찾을 수 없습니다.',
|
||||
|
||||
'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.',
|
||||
'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.',
|
||||
'withdrawal_dest_iban_exists' => '대상 계정의 IBAN이 이미 자산 계정에 사용되고 있거나, 부채는 출금 대상으로 사용될 수 없습니다.',
|
||||
'deposit_src_iban_exists' => '소스 계정의 IBAN이 이미 자산 계정에 사용되고 있거나, 부채는 입금 소스로 사용될 수 없습니다.',
|
||||
|
||||
'reconciliation_source_bad_data' => 'ID ":id" 또는 이름 ":name"을 검색할 때 유효한 조정 계정을 찾을 수 없습니다.',
|
||||
|
||||
'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".',
|
||||
'generic_source_bad_data' => '[e] ID ":id" 또는 이름 ":name"을 검색할 때 유효한 소스 계정을 찾을 수 없습니다.',
|
||||
|
||||
'deposit_source_need_data' => '계속하려면 유효한 소스 계정 ID 및/또는 유효한 소스 계정 이름이 필요합니다.',
|
||||
'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".',
|
||||
'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.',
|
||||
'deposit_source_bad_data' => '[b] ID ":id" 또는 이름 ":name"을 검색할 때 유효한 소스 계정을 찾을 수 없습니다.',
|
||||
'deposit_dest_need_data' => '[b] 계속하려면 유효한 대상 계정 ID 및/또는 유효한 대상 계정 이름이 필요합니다.',
|
||||
'deposit_dest_bad_data' => 'ID ":id" 또는 이름 ":name"을 검색할 때 유효한 대상 계정을 찾을 수 없습니다.',
|
||||
'deposit_dest_wrong_type' => '제출된 대상 계정이 올바른 유형이 아닙니다.',
|
||||
|
||||
@ -264,14 +264,14 @@ return [
|
||||
|
||||
|
||||
'transfer_source_need_data' => '계속하려면 유효한 소스 계정 ID 및/또는 유효한 소스 계정 이름이 필요합니다.',
|
||||
'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".',
|
||||
'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.',
|
||||
'transfer_source_bad_data' => '[c] ID ":id" 또는 이름 ":name"을 검색할 때 유효한 소스 계정을 찾을 수 없습니다.',
|
||||
'transfer_dest_need_data' => '[c] 계속하려면 유효한 대상 계정 ID 및/또는 유효한 대상 계정 이름이 필요합니다.',
|
||||
'transfer_dest_bad_data' => 'ID ":id" 또는 이름 ":name"을 검색할 때 유효한 대상 계정을 찾을 수 없습니다.',
|
||||
'need_id_in_edit' => '각 분할에는 transaction_journal_id(유효한 ID 또는 0) 가 있어야 합니다.',
|
||||
|
||||
'ob_source_need_data' => '계속하려면 유효한 소스 계정 ID 및/또는 유효한 소스 계정 이름이 필요합니다.',
|
||||
'lc_source_need_data' => '계속하려면 유효한 소스 계정 ID가 필요합니다.',
|
||||
'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.',
|
||||
'ob_dest_need_data' => '[d] 계속하려면 유효한 대상 계정 ID 및/또는 유효한 대상 계정 이름이 필요합니다.',
|
||||
'ob_dest_bad_data' => 'ID ":id" 또는 이름 ":name"을 검색할 때 유효한 대상 계정을 찾을 수 없습니다.',
|
||||
'reconciliation_either_account' => '조정을 제출하려면 소스 계정 또는 대상 계정 중 하나를 제출해야 합니다.',
|
||||
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Sparegris',
|
||||
'ale_action_add_tag' => 'La til tagg',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Spaarpotje',
|
||||
'ale_action_add_tag' => 'Tag toegevoegd',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Sparegris',
|
||||
'ale_action_add_tag' => 'La til tagg',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Skarbonka',
|
||||
'ale_action_add_tag' => 'Dodano tag',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Cofrinho',
|
||||
'ale_action_add_tag' => 'Etiqueta adicionada',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Mealheiro',
|
||||
'ale_action_add_tag' => 'Etiqueta adicionada',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Piggy bank',
|
||||
'ale_action_add_tag' => 'Added tag',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Копилка',
|
||||
'ale_action_add_tag' => 'Добавленный тег',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Piggy bank',
|
||||
'ale_action_add_tag' => 'Added tag',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Hranilnik',
|
||||
'ale_action_add_tag' => 'Dodana oznaka',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2715,6 +2715,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Piggy bank',
|
||||
'ale_action_add_tag' => 'Added tag',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Piggy bank',
|
||||
'ale_action_add_tag' => 'Added tag',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2715,6 +2715,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Piggy bank',
|
||||
'ale_action_add_tag' => 'Added tag',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Скарбничка',
|
||||
'ale_action_add_tag' => 'Added tag',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Piggy bank',
|
||||
'ale_action_add_tag' => 'Added tag',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => '存钱罐',
|
||||
'ale_action_add_tag' => '添加标签',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -2714,6 +2714,10 @@ return [
|
||||
'ale_action_remove_from_piggy' => 'Piggy bank',
|
||||
'ale_action_add_tag' => 'Added tag',
|
||||
|
||||
// dashboard
|
||||
'enable_auto_convert' => 'Enable currency conversion',
|
||||
'disable_auto_convert' => 'Disable currency conversion',
|
||||
|
||||
];
|
||||
|
||||
/*
|
||||
|
@ -11,13 +11,14 @@
|
||||
{# CSS things #}
|
||||
|
||||
{# libraries #}
|
||||
<link href="v1/lib/bs/css/bootstrap.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/fa/css/font-awesome.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/css/daterangepicker.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/bs/css/bootstrap.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css"
|
||||
nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/fa/css/font-awesome.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css"
|
||||
nonce="{{ JS_NONCE }}">
|
||||
|
||||
{# the theme #}
|
||||
<link href="v1/lib/adminlte/css/AdminLTE.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/adminlte/css/skins/skin-blue-light.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/adminlte/css/AdminLTE.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css"
|
||||
nonce="{{ JS_NONCE }}">
|
||||
|
||||
{# favicons #}
|
||||
{% include('partials.favicons') %}
|
||||
|
@ -11,13 +11,14 @@
|
||||
{# CSS things #}
|
||||
|
||||
{# libraries #}
|
||||
<link href="v1/lib/bs/css/bootstrap.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/fa/css/font-awesome.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/css/daterangepicker.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/bs/css/bootstrap.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css"
|
||||
nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/fa/css/font-awesome.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css"
|
||||
nonce="{{ JS_NONCE }}">
|
||||
|
||||
{# the theme #}
|
||||
<link href="v1/lib/adminlte/css/AdminLTE.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/adminlte/css/skins/skin-blue-light.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/adminlte/css/AdminLTE.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css"
|
||||
nonce="{{ JS_NONCE }}">
|
||||
|
||||
{# favicons #}
|
||||
{% include('partials.favicons') %}
|
||||
|
@ -9,11 +9,12 @@
|
||||
<base href="{{ route('index') }}/">
|
||||
|
||||
{# libraries #}
|
||||
<link href="v1/lib/bs/css/bootstrap.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/bs/css/bootstrap.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css"
|
||||
nonce="{{ JS_NONCE }}">
|
||||
|
||||
{# the theme #}
|
||||
<link href="v1/lib/adminlte/css/AdminLTE.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/adminlte/css/skins/skin-blue-light.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/adminlte/css/AdminLTE.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css"
|
||||
nonce="{{ JS_NONCE }}">
|
||||
|
||||
{# favicons #}
|
||||
{% include('partials.favicons') %}
|
||||
|
@ -11,13 +11,14 @@
|
||||
{# CSS things #}
|
||||
|
||||
{# libraries #}
|
||||
<link href="v1/lib/bs/css/bootstrap.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/fa/css/font-awesome.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/css/daterangepicker.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/bs/css/bootstrap.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css"
|
||||
nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/fa/css/font-awesome.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css"
|
||||
nonce="{{ JS_NONCE }}">
|
||||
|
||||
{# the theme #}
|
||||
<link href="v1/lib/adminlte/css/AdminLTE.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/adminlte/css/skins/skin-blue-light.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/adminlte/css/AdminLTE.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css"
|
||||
nonce="{{ JS_NONCE }}">
|
||||
|
||||
{# favicons #}
|
||||
{% include('partials.favicons') %}
|
||||
|
@ -11,13 +11,15 @@
|
||||
{# CSS things #}
|
||||
|
||||
{# libraries #}
|
||||
<link href="v1/lib/bs/css/bootstrap.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/fa/css/font-awesome.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/bs/css/bootstrap.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css"
|
||||
nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/fa/css/font-awesome.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css"
|
||||
nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/css/daterangepicker.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
|
||||
{# the theme #}
|
||||
<link href="v1/lib/adminlte/css/AdminLTE.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/adminlte/css/skins/skin-blue-light.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/adminlte/css/AdminLTE.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css"
|
||||
nonce="{{ JS_NONCE }}">
|
||||
|
||||
{# favicons #}
|
||||
{% include('partials.favicons') %}
|
||||
|
101
resources/views/vendor/passport/authorize.twig
vendored
101
resources/views/vendor/passport/authorize.twig
vendored
@ -10,12 +10,14 @@
|
||||
|
||||
{# CSS things #}
|
||||
{# libraries #}
|
||||
<link href="v1/lib/bs/css/bootstrap.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/fa/css/font-awesome.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/bs/css/bootstrap.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css"
|
||||
nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/fa/css/font-awesome.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css"
|
||||
nonce="{{ JS_NONCE }}">
|
||||
|
||||
{# the theme #}
|
||||
<link href="v1/lib/adminlte/css/AdminLTE.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/adminlte/css/skins/skin-blue-light.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
<link href="v1/lib/adminlte/css/AdminLTE.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css"
|
||||
nonce="{{ JS_NONCE }}">
|
||||
|
||||
{# Firefly III customisations #}
|
||||
<link href="v1/css/firefly.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
|
||||
@ -48,68 +50,69 @@
|
||||
</style>
|
||||
</head>
|
||||
<body class="passport-authorize">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-6 col-md-offset-3">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
{{ trans('firefly.authorization_request', {version: config('firefly.version')}) }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{% if client.user.id == user.id %}
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-6 col-md-offset-3">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
{{ trans('firefly.authorization_request', {version: config('firefly.version')}) }}
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{% if client.user.id == user.id %}
|
||||
<p>
|
||||
{{ trans('firefly.authorization_request_intro', {client: client.name|escape})|raw }}
|
||||
</p>
|
||||
<p>
|
||||
{{ trans('firefly.authorization_request_site', {url: client.redirect|phphost})|raw }}
|
||||
</p>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if client.user.id != user.id %}
|
||||
{% if client.user.id != user.id %}
|
||||
<p class="text-danger">
|
||||
{{ 'authorization_request_invalid'|_ }}
|
||||
|
||||
</p>
|
||||
{% endif %}
|
||||
<!-- Scope List -->
|
||||
{% if scopes|length > 0 %}
|
||||
<div class="scopes">
|
||||
<p><strong>{{ 'scopes_will_be_able'|_ }}</strong></p>
|
||||
{% endif %}
|
||||
<!-- Scope List -->
|
||||
{% if scopes|length > 0 %}
|
||||
<div class="scopes">
|
||||
<p><strong>{{ 'scopes_will_be_able'|_ }}</strong></p>
|
||||
|
||||
<ul>
|
||||
{% for scope in scopes %}
|
||||
<li>{{ scope.description }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="buttons">
|
||||
<!-- Authorize Button -->
|
||||
{% if client.user.id == user.id %}
|
||||
<form method="post" action="{{ route('index') }}/oauth/authorize">
|
||||
{{ csrf_field() }}
|
||||
|
||||
<input type="hidden" name="state" value="{{ request.state }}">
|
||||
<input type="hidden" name="client_id" value="{{ client.id }}">
|
||||
<button type="submit" class="btn btn-success btn-approve">{{ 'button_authorize'|_ }}</button>
|
||||
</form>
|
||||
{% endif %}
|
||||
|
||||
<!-- Cancel Button -->
|
||||
<form method="post" action="{{ route('index') }}/oauth/authorize">
|
||||
{{ csrf_field() }}
|
||||
{{ method_field('DELETE') }}
|
||||
|
||||
<input type="hidden" name="state" value="{{ request.state }}">
|
||||
<input type="hidden" name="client_id" value="{{ client.id }}">
|
||||
<button class="btn btn-danger">{{ 'cancel'|_ }}</button>
|
||||
</form>
|
||||
<ul>
|
||||
{% for scope in scopes %}
|
||||
<li>{{ scope.description }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="buttons">
|
||||
<!-- Authorize Button -->
|
||||
{% if client.user.id == user.id %}
|
||||
<form method="post" action="{{ route('index') }}/oauth/authorize">
|
||||
{{ csrf_field() }}
|
||||
|
||||
<input type="hidden" name="state" value="{{ request.state }}">
|
||||
<input type="hidden" name="client_id" value="{{ client.id }}">
|
||||
<button type="submit"
|
||||
class="btn btn-success btn-approve">{{ 'button_authorize'|_ }}</button>
|
||||
</form>
|
||||
{% endif %}
|
||||
|
||||
<!-- Cancel Button -->
|
||||
<form method="post" action="{{ route('index') }}/oauth/authorize">
|
||||
{{ csrf_field() }}
|
||||
{{ method_field('DELETE') }}
|
||||
|
||||
<input type="hidden" name="state" value="{{ request.state }}">
|
||||
<input type="hidden" name="client_id" value="{{ client.id }}">
|
||||
<button class="btn btn-danger">{{ 'cancel'|_ }}</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
105
yarn.lock
105
yarn.lock
@ -102,10 +102,10 @@
|
||||
regexpu-core "^5.3.1"
|
||||
semver "^6.3.1"
|
||||
|
||||
"@babel/helper-define-polyfill-provider@^0.4.1":
|
||||
version "0.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.1.tgz#af1429c4a83ac316a6a8c2cc8ff45cb5d2998d3a"
|
||||
integrity sha512-kX4oXixDxG197yhX+J3Wp+NpL2wuCFjWQAr6yX2jtCnflK9ulMI51ULFGIrWiX1jGfvAxdHp+XQCcP2bZGPs9A==
|
||||
"@babel/helper-define-polyfill-provider@^0.4.2":
|
||||
version "0.4.2"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7"
|
||||
integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==
|
||||
dependencies:
|
||||
"@babel/helper-compilation-targets" "^7.22.6"
|
||||
"@babel/helper-plugin-utils" "^7.22.5"
|
||||
@ -910,9 +910,9 @@
|
||||
semver "^6.3.1"
|
||||
|
||||
"@babel/preset-modules@^0.1.5":
|
||||
version "0.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9"
|
||||
integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==
|
||||
version "0.1.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6.tgz#31bcdd8f19538437339d17af00d177d854d9d458"
|
||||
integrity sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==
|
||||
dependencies:
|
||||
"@babel/helper-plugin-utils" "^7.0.0"
|
||||
"@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
|
||||
@ -1033,11 +1033,6 @@
|
||||
resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b"
|
||||
integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==
|
||||
|
||||
"@nicolo-ribaudo/semver-v6@^6.3.3":
|
||||
version "6.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz#ea6d23ade78a325f7a52750aab1526b02b628c29"
|
||||
integrity sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==
|
||||
|
||||
"@nodelib/fs.scandir@2.1.5":
|
||||
version "2.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
|
||||
@ -1144,9 +1139,9 @@
|
||||
"@types/estree" "*"
|
||||
|
||||
"@types/eslint@*":
|
||||
version "8.44.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.0.tgz#55818eabb376e2272f77fbf5c96c43137c3c1e53"
|
||||
integrity sha512-gsF+c/0XOguWgaOgvFs+xnnRqt9GwgTvIks36WpE6ueeI4KCEHHd8K/CKHqhOqrJKsYH8m27kRzQEvWXAwXUTw==
|
||||
version "8.44.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.1.tgz#d1811559bb6bcd1a76009e3f7883034b78a0415e"
|
||||
integrity sha512-XpNDc4Z5Tb4x+SW1MriMVeIsMoONHCkWFMkR/aPJbzEsxqHy+4Glu/BqTdPrApfDeMaXbtNh6bseNgl5KaWrSg==
|
||||
dependencies:
|
||||
"@types/estree" "*"
|
||||
"@types/json-schema" "*"
|
||||
@ -1253,9 +1248,9 @@
|
||||
integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==
|
||||
|
||||
"@types/node@*":
|
||||
version "20.4.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.2.tgz#129cc9ae69f93824f92fac653eebfb4812ab4af9"
|
||||
integrity sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw==
|
||||
version "20.4.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.5.tgz#9dc0a5cb1ccce4f7a731660935ab70b9c00a5d69"
|
||||
integrity sha512-rt40Nk13II9JwQBdeYqmbn2Q6IVTA5uPhvSO+JVqdXw/6/4glI6oR9ezty/A9Hg5u7JH4OmYmuQ+XvjKm0Datg==
|
||||
|
||||
"@types/parse-json@^4.0.0":
|
||||
version "4.0.0"
|
||||
@ -1710,28 +1705,28 @@ babel-loader@^8.2.3:
|
||||
schema-utils "^2.6.5"
|
||||
|
||||
babel-plugin-polyfill-corejs2@^0.4.4:
|
||||
version "0.4.4"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.4.tgz#9f9a0e1cd9d645cc246a5e094db5c3aa913ccd2b"
|
||||
integrity sha512-9WeK9snM1BfxB38goUEv2FLnA6ja07UMfazFHzCXUb3NyDZAwfXvQiURQ6guTTMeHcOsdknULm1PDhs4uWtKyA==
|
||||
version "0.4.5"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c"
|
||||
integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==
|
||||
dependencies:
|
||||
"@babel/compat-data" "^7.22.6"
|
||||
"@babel/helper-define-polyfill-provider" "^0.4.1"
|
||||
"@nicolo-ribaudo/semver-v6" "^6.3.3"
|
||||
"@babel/helper-define-polyfill-provider" "^0.4.2"
|
||||
semver "^6.3.1"
|
||||
|
||||
babel-plugin-polyfill-corejs3@^0.8.2:
|
||||
version "0.8.2"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.2.tgz#d406c5738d298cd9c66f64a94cf8d5904ce4cc5e"
|
||||
integrity sha512-Cid+Jv1BrY9ReW9lIfNlNpsI53N+FN7gE+f73zLAUbr9C52W4gKLWSByx47pfDJsEysojKArqOtOKZSVIIUTuQ==
|
||||
version "0.8.3"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz#b4f719d0ad9bb8e0c23e3e630c0c8ec6dd7a1c52"
|
||||
integrity sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==
|
||||
dependencies:
|
||||
"@babel/helper-define-polyfill-provider" "^0.4.1"
|
||||
"@babel/helper-define-polyfill-provider" "^0.4.2"
|
||||
core-js-compat "^3.31.0"
|
||||
|
||||
babel-plugin-polyfill-regenerator@^0.5.1:
|
||||
version "0.5.1"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.1.tgz#ace7a5eced6dff7d5060c335c52064778216afd3"
|
||||
integrity sha512-L8OyySuI6OSQ5hFy9O+7zFjyr4WhAfRjLIOkhQGYl+emwJkd/S4XXT1JpfrgR1jrQ1NcGiOh+yAdGlF8pnC3Jw==
|
||||
version "0.5.2"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326"
|
||||
integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==
|
||||
dependencies:
|
||||
"@babel/helper-define-polyfill-provider" "^0.4.1"
|
||||
"@babel/helper-define-polyfill-provider" "^0.4.2"
|
||||
|
||||
balanced-match@^1.0.0:
|
||||
version "1.0.2"
|
||||
@ -1968,9 +1963,9 @@ caniuse-api@^3.0.0:
|
||||
lodash.uniq "^4.5.0"
|
||||
|
||||
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001503:
|
||||
version "1.0.30001516"
|
||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001516.tgz#621b1be7d85a8843ee7d210fd9d87b52e3daab3a"
|
||||
integrity sha512-Wmec9pCBY8CWbmI4HsjBeQLqDTqV91nFVR83DnZpYyRnPI1wePDsTg0bGLPC5VU/3OIZV1fmxEea1b+tFKe86g==
|
||||
version "1.0.30001517"
|
||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz#90fabae294215c3495807eb24fc809e11dc2f0a8"
|
||||
integrity sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==
|
||||
|
||||
chalk@^2.0.0:
|
||||
version "2.4.2"
|
||||
@ -2216,9 +2211,9 @@ cookie@0.5.0:
|
||||
integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
|
||||
|
||||
core-js-compat@^3.31.0:
|
||||
version "3.31.1"
|
||||
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.31.1.tgz#5084ad1a46858df50ff89ace152441a63ba7aae0"
|
||||
integrity sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA==
|
||||
version "3.32.0"
|
||||
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.0.tgz#f41574b6893ab15ddb0ac1693681bd56c8550a90"
|
||||
integrity sha512-7a9a3D1k4UCVKnLhrgALyFcP7YCsLOQIxPd0dKjf/6GuPcgyiGP70ewWdCGrSK7evyhymi0qO4EqCmSJofDeYw==
|
||||
dependencies:
|
||||
browserslist "^4.21.9"
|
||||
|
||||
@ -2583,9 +2578,9 @@ ee-first@1.1.1:
|
||||
integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
|
||||
|
||||
electron-to-chromium@^1.4.431:
|
||||
version "1.4.463"
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.463.tgz#8eb04355f24fef5c8097661d14e143f6d8554055"
|
||||
integrity sha512-fT3hvdUWLjDbaTGzyOjng/CQhQJSQP8ThO3XZAoaxHvHo2kUXiRQVMj9M235l8uDFiNPsPa6KHT1p3RaR6ugRw==
|
||||
version "1.4.475"
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.475.tgz#2fee0e2a70cc1538b94f7f90aabcc436e4dcc827"
|
||||
integrity sha512-mTye5u5P98kSJO2n7zYALhpJDmoSQejIGya0iR01GpoRady8eK3bw7YHHnjA1Rfi4ZSLdpuzlAC7Zw+1Zu7Z6A==
|
||||
|
||||
elliptic@^6.5.3:
|
||||
version "6.5.4"
|
||||
@ -2776,9 +2771,9 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
|
||||
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
|
||||
|
||||
fast-glob@^3.0.3:
|
||||
version "3.3.0"
|
||||
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0"
|
||||
integrity sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==
|
||||
version "3.3.1"
|
||||
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4"
|
||||
integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==
|
||||
dependencies:
|
||||
"@nodelib/fs.stat" "^2.0.2"
|
||||
"@nodelib/fs.walk" "^1.2.3"
|
||||
@ -3598,9 +3593,9 @@ lru-cache@^6.0.0:
|
||||
yallist "^4.0.0"
|
||||
|
||||
magic-string@^0.30.0:
|
||||
version "0.30.1"
|
||||
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.1.tgz#ce5cd4b0a81a5d032bd69aab4522299b2166284d"
|
||||
integrity sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==
|
||||
version "0.30.2"
|
||||
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.2.tgz#dcf04aad3d0d1314bc743d076c50feb29b3c7aca"
|
||||
integrity sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==
|
||||
dependencies:
|
||||
"@jridgewell/sourcemap-codec" "^1.4.15"
|
||||
|
||||
@ -4346,9 +4341,9 @@ postcss@^7.0.36:
|
||||
source-map "^0.6.1"
|
||||
|
||||
postcss@^8.1.10, postcss@^8.2.15, postcss@^8.4, postcss@^8.4.14:
|
||||
version "8.4.26"
|
||||
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.26.tgz#1bc62ab19f8e1e5463d98cf74af39702a00a9e94"
|
||||
integrity sha512-jrXHFF8iTloAenySjM/ob3gSj7pCu0Ji49hnjqzsgSRa50hkWCKD0HQ+gMNJkW38jBI68MpAAg7ZWwHwX8NMMw==
|
||||
version "8.4.27"
|
||||
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.27.tgz#234d7e4b72e34ba5a92c29636734349e0d9c3057"
|
||||
integrity sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==
|
||||
dependencies:
|
||||
nanoid "^3.3.6"
|
||||
picocolors "^1.0.0"
|
||||
@ -5035,9 +5030,9 @@ terser@^4.6.3:
|
||||
source-map-support "~0.5.12"
|
||||
|
||||
terser@^5.16.8, terser@^5.9.0:
|
||||
version "5.19.1"
|
||||
resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.1.tgz#dbd7231f224a9e2401d0f0959542ed74d76d340b"
|
||||
integrity sha512-27hxBUVdV6GoNg1pKQ7Z5cbR6V9txPVyBA+FQw3BaZ1Wuzvztce5p156DaP0NVZNrMZZ+6iG9Syf7WgMNKDg2Q==
|
||||
version "5.19.2"
|
||||
resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.2.tgz#bdb8017a9a4a8de4663a7983f45c506534f9234e"
|
||||
integrity sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==
|
||||
dependencies:
|
||||
"@jridgewell/source-map" "^0.3.3"
|
||||
acorn "^8.8.2"
|
||||
@ -5079,9 +5074,9 @@ toidentifier@1.0.1:
|
||||
integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
|
||||
|
||||
tslib@^2.0.3:
|
||||
version "2.6.0"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3"
|
||||
integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==
|
||||
version "2.6.1"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410"
|
||||
integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==
|
||||
|
||||
tty-browserify@0.0.0:
|
||||
version "0.0.0"
|
||||
|
Loading…
Reference in New Issue
Block a user