mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-11 15:16:27 +00:00
Merge pull request #10975 from firefly-iii/release-1758945886
🤖 Automatically merge the PR into the develop branch.
This commit is contained in:
12
.ci/php-cs-fixer/composer.lock
generated
12
.ci/php-cs-fixer/composer.lock
generated
@@ -402,16 +402,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "friendsofphp/php-cs-fixer",
|
"name": "friendsofphp/php-cs-fixer",
|
||||||
"version": "v3.88.0",
|
"version": "v3.88.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
|
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
|
||||||
"reference": "f23469674ae50d40e398bfff8018911a2a2b0dbe"
|
"reference": "a8d15584bafb0f0d9d938827840060fd4a3ebc99"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/f23469674ae50d40e398bfff8018911a2a2b0dbe",
|
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/a8d15584bafb0f0d9d938827840060fd4a3ebc99",
|
||||||
"reference": "f23469674ae50d40e398bfff8018911a2a2b0dbe",
|
"reference": "a8d15584bafb0f0d9d938827840060fd4a3ebc99",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -494,7 +494,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
|
"issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
|
||||||
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.88.0"
|
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.88.2"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -502,7 +502,7 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-09-24T21:31:42+00:00"
|
"time": "2025-09-27T00:24:15+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/container",
|
"name": "psr/container",
|
||||||
|
@@ -24,7 +24,6 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace FireflyIII\Console\Commands\Tools;
|
namespace FireflyIII\Console\Commands\Tools;
|
||||||
|
|
||||||
use Carbon\CarbonInterface;
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use FireflyIII\Console\Commands\ShowsFriendlyMessages;
|
use FireflyIII\Console\Commands\ShowsFriendlyMessages;
|
||||||
use FireflyIII\Console\Commands\VerifiesAccessToken;
|
use FireflyIII\Console\Commands\VerifiesAccessToken;
|
||||||
|
@@ -109,10 +109,10 @@ class StoredGroupEventHandler
|
|||||||
$dest = $journal->transactions()->where('amount', '>', '0')->first();
|
$dest = $journal->transactions()->where('amount', '>', '0')->first();
|
||||||
$repository->deleteStatisticsForModel($source->account, $journal->date);
|
$repository->deleteStatisticsForModel($source->account, $journal->date);
|
||||||
$repository->deleteStatisticsForModel($dest->account, $journal->date);
|
$repository->deleteStatisticsForModel($dest->account, $journal->date);
|
||||||
foreach($journal->categories as $category) {
|
foreach ($journal->categories as $category) {
|
||||||
$repository->deleteStatisticsForModel($category, $journal->date);
|
$repository->deleteStatisticsForModel($category, $journal->date);
|
||||||
}
|
}
|
||||||
foreach($journal->tags as $tag) {
|
foreach ($journal->tags as $tag) {
|
||||||
$repository->deleteStatisticsForModel($tag, $journal->date);
|
$repository->deleteStatisticsForModel($tag, $journal->date);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -60,10 +60,6 @@ class UpdatedGroupEventHandler
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO duplicate
|
* TODO duplicate
|
||||||
*
|
|
||||||
* @param UpdatedTransactionGroup $event
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
private function removePeriodStatistics(UpdatedTransactionGroup $event): void
|
private function removePeriodStatistics(UpdatedTransactionGroup $event): void
|
||||||
{
|
{
|
||||||
@@ -76,10 +72,10 @@ class UpdatedGroupEventHandler
|
|||||||
$dest = $journal->transactions()->where('amount', '>', '0')->first();
|
$dest = $journal->transactions()->where('amount', '>', '0')->first();
|
||||||
$repository->deleteStatisticsForModel($source->account, $journal->date);
|
$repository->deleteStatisticsForModel($source->account, $journal->date);
|
||||||
$repository->deleteStatisticsForModel($dest->account, $journal->date);
|
$repository->deleteStatisticsForModel($dest->account, $journal->date);
|
||||||
foreach($journal->categories as $category) {
|
foreach ($journal->categories as $category) {
|
||||||
$repository->deleteStatisticsForModel($category, $journal->date);
|
$repository->deleteStatisticsForModel($category, $journal->date);
|
||||||
}
|
}
|
||||||
foreach($journal->tags as $tag) {
|
foreach ($journal->tags as $tag) {
|
||||||
$repository->deleteStatisticsForModel($tag, $journal->date);
|
$repository->deleteStatisticsForModel($tag, $journal->date);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -115,7 +115,8 @@ class CreateController extends Controller
|
|||||||
$preFilled = session()->has('preFilled') ? session('preFilled') : [];
|
$preFilled = session()->has('preFilled') ? session('preFilled') : [];
|
||||||
$subTitle = (string) trans(sprintf('breadcrumbs.create_%s', strtolower((string) $objectType)));
|
$subTitle = (string) trans(sprintf('breadcrumbs.create_%s', strtolower((string) $objectType)));
|
||||||
$subTitleIcon = 'fa-plus';
|
$subTitleIcon = 'fa-plus';
|
||||||
/** @var array|null $optionalFields */
|
|
||||||
|
/** @var null|array $optionalFields */
|
||||||
$optionalFields = Preferences::get('transaction_journal_optional_fields', [])->data;
|
$optionalFields = Preferences::get('transaction_journal_optional_fields', [])->data;
|
||||||
$allowedOpposingTypes = config('firefly.allowed_opposing_types');
|
$allowedOpposingTypes = config('firefly.allowed_opposing_types');
|
||||||
$accountToTypes = config('firefly.account_to_transaction');
|
$accountToTypes = config('firefly.account_to_transaction');
|
||||||
|
@@ -364,37 +364,37 @@ class CategoryRepository implements CategoryRepositoryInterface, UserGroupInterf
|
|||||||
Log::debug(sprintf('periodCollection(#%d, %s, %s)', $category->id, $start->format('Y-m-d'), $end->format('Y-m-d')));
|
Log::debug(sprintf('periodCollection(#%d, %s, %s)', $category->id, $start->format('Y-m-d'), $end->format('Y-m-d')));
|
||||||
|
|
||||||
return $category->transactionJournals()
|
return $category->transactionJournals()
|
||||||
->leftJoin('transactions','transactions.transaction_journal_id', '=', 'transaction_journals.id')
|
->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
|
||||||
->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id')
|
->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id')
|
||||||
->leftJoin('transaction_currencies', 'transaction_currencies.id', '=', 'transactions.transaction_currency_id')
|
->leftJoin('transaction_currencies', 'transaction_currencies.id', '=', 'transactions.transaction_currency_id')
|
||||||
->leftJoin('transaction_currencies as foreign_currencies', 'foreign_currencies.id', '=', 'transactions.foreign_currency_id')
|
->leftJoin('transaction_currencies as foreign_currencies', 'foreign_currencies.id', '=', 'transactions.foreign_currency_id')
|
||||||
->where('transaction_journals.date', '>=', $start)
|
->where('transaction_journals.date', '>=', $start)
|
||||||
->where('transaction_journals.date', '<=', $end)
|
->where('transaction_journals.date', '<=', $end)
|
||||||
->where('transactions.amount', '>', 0)
|
->where('transactions.amount', '>', 0)
|
||||||
->get([
|
->get([
|
||||||
// currencies
|
// currencies
|
||||||
'transaction_currencies.id as currency_id',
|
'transaction_currencies.id as currency_id',
|
||||||
'transaction_currencies.code as currency_code',
|
'transaction_currencies.code as currency_code',
|
||||||
'transaction_currencies.name as currency_name',
|
'transaction_currencies.name as currency_name',
|
||||||
'transaction_currencies.symbol as currency_symbol',
|
'transaction_currencies.symbol as currency_symbol',
|
||||||
'transaction_currencies.decimal_places as currency_decimal_places',
|
'transaction_currencies.decimal_places as currency_decimal_places',
|
||||||
|
|
||||||
// foreign
|
// foreign
|
||||||
'foreign_currencies.id as foreign_currency_id',
|
'foreign_currencies.id as foreign_currency_id',
|
||||||
'foreign_currencies.code as foreign_currency_code',
|
'foreign_currencies.code as foreign_currency_code',
|
||||||
'foreign_currencies.name as foreign_currency_name',
|
'foreign_currencies.name as foreign_currency_name',
|
||||||
'foreign_currencies.symbol as foreign_currency_symbol',
|
'foreign_currencies.symbol as foreign_currency_symbol',
|
||||||
'foreign_currencies.decimal_places as foreign_currency_decimal_places',
|
'foreign_currencies.decimal_places as foreign_currency_decimal_places',
|
||||||
|
|
||||||
// fields
|
// fields
|
||||||
'transaction_journals.date',
|
'transaction_journals.date',
|
||||||
'transaction_types.type',
|
'transaction_types.type',
|
||||||
'transaction_journals.transaction_currency_id',
|
'transaction_journals.transaction_currency_id',
|
||||||
'transactions.amount',
|
'transactions.amount',
|
||||||
'transactions.native_amount as pc_amount',
|
'transactions.native_amount as pc_amount',
|
||||||
'transactions.foreign_amount',
|
'transactions.foreign_amount',
|
||||||
])
|
])
|
||||||
->toArray()
|
->toArray()
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -510,7 +510,7 @@ class OperationsRepository implements OperationsRepositoryInterface, UserGroupIn
|
|||||||
$summarizer->setConvertToPrimary($convertToPrimary);
|
$summarizer->setConvertToPrimary($convertToPrimary);
|
||||||
|
|
||||||
// filter $journals by range AND currency if it is present.
|
// filter $journals by range AND currency if it is present.
|
||||||
$expenses = array_filter($expenses, static fn(array $expense): bool => $expense['category_id'] === $category->id);
|
$expenses = array_filter($expenses, static fn (array $expense): bool => $expense['category_id'] === $category->id);
|
||||||
|
|
||||||
return $summarizer->groupByCurrencyId($expenses, $method, false);
|
return $summarizer->groupByCurrencyId($expenses, $method, false);
|
||||||
}
|
}
|
||||||
|
@@ -387,37 +387,37 @@ class TagRepository implements TagRepositoryInterface, UserGroupInterface
|
|||||||
Log::debug(sprintf('periodCollection(#%d, %s, %s)', $tag->id, $start->format('Y-m-d'), $end->format('Y-m-d')));
|
Log::debug(sprintf('periodCollection(#%d, %s, %s)', $tag->id, $start->format('Y-m-d'), $end->format('Y-m-d')));
|
||||||
|
|
||||||
return $tag->transactionJournals()
|
return $tag->transactionJournals()
|
||||||
->leftJoin('transactions','transactions.transaction_journal_id', '=', 'transaction_journals.id')
|
->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
|
||||||
->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id')
|
->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id')
|
||||||
->leftJoin('transaction_currencies', 'transaction_currencies.id', '=', 'transactions.transaction_currency_id')
|
->leftJoin('transaction_currencies', 'transaction_currencies.id', '=', 'transactions.transaction_currency_id')
|
||||||
->leftJoin('transaction_currencies as foreign_currencies', 'foreign_currencies.id', '=', 'transactions.foreign_currency_id')
|
->leftJoin('transaction_currencies as foreign_currencies', 'foreign_currencies.id', '=', 'transactions.foreign_currency_id')
|
||||||
->where('transaction_journals.date', '>=', $start)
|
->where('transaction_journals.date', '>=', $start)
|
||||||
->where('transaction_journals.date', '<=', $end)
|
->where('transaction_journals.date', '<=', $end)
|
||||||
->where('transactions.amount', '>', 0)
|
->where('transactions.amount', '>', 0)
|
||||||
->get([
|
->get([
|
||||||
// currencies
|
// currencies
|
||||||
'transaction_currencies.id as currency_id',
|
'transaction_currencies.id as currency_id',
|
||||||
'transaction_currencies.code as currency_code',
|
'transaction_currencies.code as currency_code',
|
||||||
'transaction_currencies.name as currency_name',
|
'transaction_currencies.name as currency_name',
|
||||||
'transaction_currencies.symbol as currency_symbol',
|
'transaction_currencies.symbol as currency_symbol',
|
||||||
'transaction_currencies.decimal_places as currency_decimal_places',
|
'transaction_currencies.decimal_places as currency_decimal_places',
|
||||||
|
|
||||||
// foreign
|
// foreign
|
||||||
'foreign_currencies.id as foreign_currency_id',
|
'foreign_currencies.id as foreign_currency_id',
|
||||||
'foreign_currencies.code as foreign_currency_code',
|
'foreign_currencies.code as foreign_currency_code',
|
||||||
'foreign_currencies.name as foreign_currency_name',
|
'foreign_currencies.name as foreign_currency_name',
|
||||||
'foreign_currencies.symbol as foreign_currency_symbol',
|
'foreign_currencies.symbol as foreign_currency_symbol',
|
||||||
'foreign_currencies.decimal_places as foreign_currency_decimal_places',
|
'foreign_currencies.decimal_places as foreign_currency_decimal_places',
|
||||||
|
|
||||||
// fields
|
// fields
|
||||||
'transaction_journals.date',
|
'transaction_journals.date',
|
||||||
'transaction_types.type',
|
'transaction_types.type',
|
||||||
'transaction_journals.transaction_currency_id',
|
'transaction_journals.transaction_currency_id',
|
||||||
'transactions.amount',
|
'transactions.amount',
|
||||||
'transactions.native_amount as pc_amount',
|
'transactions.native_amount as pc_amount',
|
||||||
'transactions.foreign_amount',
|
'transactions.foreign_amount',
|
||||||
])
|
])
|
||||||
->toArray()
|
->toArray()
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -50,6 +50,7 @@ interface TagRepositoryInterface
|
|||||||
* This method destroys a tag.
|
* This method destroys a tag.
|
||||||
*/
|
*/
|
||||||
public function destroy(Tag $tag): bool;
|
public function destroy(Tag $tag): bool;
|
||||||
|
|
||||||
public function periodCollection(Tag $tag, Carbon $start, Carbon $end): array;
|
public function periodCollection(Tag $tag, Carbon $start, Carbon $end): array;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -38,7 +38,7 @@ class Timer
|
|||||||
|
|
||||||
public static function getInstance(): self
|
public static function getInstance(): self
|
||||||
{
|
{
|
||||||
if (!self::$instance instanceof \FireflyIII\Support\Debug\Timer) {
|
if (!self::$instance instanceof self) {
|
||||||
self::$instance = new self();
|
self::$instance = new self();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -92,16 +92,16 @@ trait PeriodOverview
|
|||||||
protected function getAccountPeriodOverview(Account $account, Carbon $start, Carbon $end): array
|
protected function getAccountPeriodOverview(Account $account, Carbon $start, Carbon $end): array
|
||||||
{
|
{
|
||||||
Log::debug(sprintf('Now in getAccountPeriodOverview(#%d, %s %s)', $account->id, $start->format('Y-m-d H:i:s.u'), $end->format('Y-m-d H:i:s.u')));
|
Log::debug(sprintf('Now in getAccountPeriodOverview(#%d, %s %s)', $account->id, $start->format('Y-m-d H:i:s.u'), $end->format('Y-m-d H:i:s.u')));
|
||||||
$this->accountRepository = app(AccountRepositoryInterface::class);
|
$this->accountRepository = app(AccountRepositoryInterface::class);
|
||||||
$this->accountRepository->setUser($account->user);
|
$this->accountRepository->setUser($account->user);
|
||||||
$this->periodStatisticRepo = app(PeriodStatisticRepositoryInterface::class);
|
$this->periodStatisticRepo = app(PeriodStatisticRepositoryInterface::class);
|
||||||
$range = Navigation::getViewRange(true);
|
$range = Navigation::getViewRange(true);
|
||||||
[$start, $end] = $end < $start ? [$end, $start] : [$start, $end];
|
[$start, $end] = $end < $start ? [$end, $start] : [$start, $end];
|
||||||
|
|
||||||
/** @var array $dates */
|
/** @var array $dates */
|
||||||
$dates = Navigation::blockPeriods($start, $end, $range);
|
$dates = Navigation::blockPeriods($start, $end, $range);
|
||||||
[$start, $end] = $this->getPeriodFromBlocks($dates, $start, $end);
|
[$start, $end] = $this->getPeriodFromBlocks($dates, $start, $end);
|
||||||
$this->statistics = $this->periodStatisticRepo->allInRangeForModel($account, $start, $end);
|
$this->statistics = $this->periodStatisticRepo->allInRangeForModel($account, $start, $end);
|
||||||
|
|
||||||
// TODO needs to be re-arranged:
|
// TODO needs to be re-arranged:
|
||||||
// get all period stats for entire range.
|
// get all period stats for entire range.
|
||||||
@@ -109,7 +109,7 @@ trait PeriodOverview
|
|||||||
// create new ones, or use collected.
|
// create new ones, or use collected.
|
||||||
|
|
||||||
|
|
||||||
$entries = [];
|
$entries = [];
|
||||||
Log::debug(sprintf('Count of loops: %d', count($dates)));
|
Log::debug(sprintf('Count of loops: %d', count($dates)));
|
||||||
foreach ($dates as $currentDate) {
|
foreach ($dates as $currentDate) {
|
||||||
$entries[] = $this->getSingleAccountPeriod($account, $currentDate['period'], $currentDate['start'], $currentDate['end']);
|
$entries[] = $this->getSingleAccountPeriod($account, $currentDate['period'], $currentDate['start'], $currentDate['end']);
|
||||||
@@ -145,18 +145,18 @@ trait PeriodOverview
|
|||||||
*/
|
*/
|
||||||
protected function getCategoryPeriodOverview(Category $category, Carbon $start, Carbon $end): array
|
protected function getCategoryPeriodOverview(Category $category, Carbon $start, Carbon $end): array
|
||||||
{
|
{
|
||||||
$this->categoryRepository = app(CategoryRepositoryInterface::class);
|
$this->categoryRepository = app(CategoryRepositoryInterface::class);
|
||||||
$this->categoryRepository->setUser($category->user);
|
$this->categoryRepository->setUser($category->user);
|
||||||
$this->periodStatisticRepo = app(PeriodStatisticRepositoryInterface::class);
|
$this->periodStatisticRepo = app(PeriodStatisticRepositoryInterface::class);
|
||||||
|
|
||||||
$range = Navigation::getViewRange(true);
|
$range = Navigation::getViewRange(true);
|
||||||
[$start, $end] = $end < $start ? [$end, $start] : [$start, $end];
|
[$start, $end] = $end < $start ? [$end, $start] : [$start, $end];
|
||||||
|
|
||||||
/** @var array $dates */
|
/** @var array $dates */
|
||||||
$dates = Navigation::blockPeriods($start, $end, $range);
|
$dates = Navigation::blockPeriods($start, $end, $range);
|
||||||
$entries = [];
|
$entries = [];
|
||||||
[$start, $end] = $this->getPeriodFromBlocks($dates, $start, $end);
|
[$start, $end] = $this->getPeriodFromBlocks($dates, $start, $end);
|
||||||
$this->statistics = $this->periodStatisticRepo->allInRangeForModel($category, $start, $end);
|
$this->statistics = $this->periodStatisticRepo->allInRangeForModel($category, $start, $end);
|
||||||
|
|
||||||
|
|
||||||
Log::debug(sprintf('Count of loops: %d', count($dates)));
|
Log::debug(sprintf('Count of loops: %d', count($dates)));
|
||||||
@@ -176,11 +176,11 @@ trait PeriodOverview
|
|||||||
*/
|
*/
|
||||||
protected function getNoBudgetPeriodOverview(Carbon $start, Carbon $end): array
|
protected function getNoBudgetPeriodOverview(Carbon $start, Carbon $end): array
|
||||||
{
|
{
|
||||||
$range = Navigation::getViewRange(true);
|
$range = Navigation::getViewRange(true);
|
||||||
|
|
||||||
[$start, $end] = $end < $start ? [$end, $start] : [$start, $end];
|
[$start, $end] = $end < $start ? [$end, $start] : [$start, $end];
|
||||||
|
|
||||||
$cache = new CacheProperties();
|
$cache = new CacheProperties();
|
||||||
$cache->addProperty($start);
|
$cache->addProperty($start);
|
||||||
$cache->addProperty($end);
|
$cache->addProperty($end);
|
||||||
$cache->addProperty($this->convertToPrimary);
|
$cache->addProperty($this->convertToPrimary);
|
||||||
@@ -191,28 +191,28 @@ trait PeriodOverview
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** @var array $dates */
|
/** @var array $dates */
|
||||||
$dates = Navigation::blockPeriods($start, $end, $range);
|
$dates = Navigation::blockPeriods($start, $end, $range);
|
||||||
$entries = [];
|
$entries = [];
|
||||||
|
|
||||||
// get all expenses without a budget.
|
// get all expenses without a budget.
|
||||||
/** @var GroupCollectorInterface $collector */
|
/** @var GroupCollectorInterface $collector */
|
||||||
$collector = app(GroupCollectorInterface::class);
|
$collector = app(GroupCollectorInterface::class);
|
||||||
$collector->setRange($start, $end)->withoutBudget()->withAccountInformation()->setTypes([TransactionTypeEnum::WITHDRAWAL->value]);
|
$collector->setRange($start, $end)->withoutBudget()->withAccountInformation()->setTypes([TransactionTypeEnum::WITHDRAWAL->value]);
|
||||||
$journals = $collector->getExtractedJournals();
|
$journals = $collector->getExtractedJournals();
|
||||||
|
|
||||||
foreach ($dates as $currentDate) {
|
foreach ($dates as $currentDate) {
|
||||||
$set = $this->filterJournalsByDate($journals, $currentDate['start'], $currentDate['end']);
|
$set = $this->filterJournalsByDate($journals, $currentDate['start'], $currentDate['end']);
|
||||||
$title = Navigation::periodShow($currentDate['end'], $currentDate['period']);
|
$title = Navigation::periodShow($currentDate['end'], $currentDate['period']);
|
||||||
$entries[]
|
$entries[]
|
||||||
= [
|
= [
|
||||||
'title' => $title,
|
'title' => $title,
|
||||||
'route' => route('budgets.no-budget', [$currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]),
|
'route' => route('budgets.no-budget', [$currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]),
|
||||||
'total_transactions' => count($set),
|
'total_transactions' => count($set),
|
||||||
'spent' => $this->groupByCurrency($set),
|
'spent' => $this->groupByCurrency($set),
|
||||||
'earned' => [],
|
'earned' => [],
|
||||||
'transferred_away' => [],
|
'transferred_away' => [],
|
||||||
'transferred_in' => [],
|
'transferred_in' => [],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
$cache->store($entries);
|
$cache->store($entries);
|
||||||
|
|
||||||
@@ -229,38 +229,38 @@ trait PeriodOverview
|
|||||||
protected function getNoCategoryPeriodOverview(Carbon $theDate): array
|
protected function getNoCategoryPeriodOverview(Carbon $theDate): array
|
||||||
{
|
{
|
||||||
Log::debug(sprintf('Now in getNoCategoryPeriodOverview(%s)', $theDate->format('Y-m-d')));
|
Log::debug(sprintf('Now in getNoCategoryPeriodOverview(%s)', $theDate->format('Y-m-d')));
|
||||||
$range = Navigation::getViewRange(true);
|
$range = Navigation::getViewRange(true);
|
||||||
$first = $this->journalRepos->firstNull();
|
$first = $this->journalRepos->firstNull();
|
||||||
$start = null === $first ? new Carbon() : $first->date;
|
$start = null === $first ? new Carbon() : $first->date;
|
||||||
$end = clone $theDate;
|
$end = clone $theDate;
|
||||||
$end = Navigation::endOfPeriod($end, $range);
|
$end = Navigation::endOfPeriod($end, $range);
|
||||||
|
|
||||||
Log::debug(sprintf('Start for getNoCategoryPeriodOverview() is %s', $start->format('Y-m-d')));
|
Log::debug(sprintf('Start for getNoCategoryPeriodOverview() is %s', $start->format('Y-m-d')));
|
||||||
Log::debug(sprintf('End for getNoCategoryPeriodOverview() is %s', $end->format('Y-m-d')));
|
Log::debug(sprintf('End for getNoCategoryPeriodOverview() is %s', $end->format('Y-m-d')));
|
||||||
|
|
||||||
// properties for cache
|
// properties for cache
|
||||||
$dates = Navigation::blockPeriods($start, $end, $range);
|
$dates = Navigation::blockPeriods($start, $end, $range);
|
||||||
$entries = [];
|
$entries = [];
|
||||||
|
|
||||||
// collect all expenses in this period:
|
// collect all expenses in this period:
|
||||||
/** @var GroupCollectorInterface $collector */
|
/** @var GroupCollectorInterface $collector */
|
||||||
$collector = app(GroupCollectorInterface::class);
|
$collector = app(GroupCollectorInterface::class);
|
||||||
$collector->withoutCategory();
|
$collector->withoutCategory();
|
||||||
$collector->setRange($start, $end);
|
$collector->setRange($start, $end);
|
||||||
$collector->setTypes([TransactionTypeEnum::DEPOSIT->value]);
|
$collector->setTypes([TransactionTypeEnum::DEPOSIT->value]);
|
||||||
$earnedSet = $collector->getExtractedJournals();
|
$earnedSet = $collector->getExtractedJournals();
|
||||||
|
|
||||||
// collect all income in this period:
|
// collect all income in this period:
|
||||||
/** @var GroupCollectorInterface $collector */
|
/** @var GroupCollectorInterface $collector */
|
||||||
$collector = app(GroupCollectorInterface::class);
|
$collector = app(GroupCollectorInterface::class);
|
||||||
$collector->withoutCategory();
|
$collector->withoutCategory();
|
||||||
$collector->setRange($start, $end);
|
$collector->setRange($start, $end);
|
||||||
$collector->setTypes([TransactionTypeEnum::WITHDRAWAL->value]);
|
$collector->setTypes([TransactionTypeEnum::WITHDRAWAL->value]);
|
||||||
$spentSet = $collector->getExtractedJournals();
|
$spentSet = $collector->getExtractedJournals();
|
||||||
|
|
||||||
// collect all transfers in this period:
|
// collect all transfers in this period:
|
||||||
/** @var GroupCollectorInterface $collector */
|
/** @var GroupCollectorInterface $collector */
|
||||||
$collector = app(GroupCollectorInterface::class);
|
$collector = app(GroupCollectorInterface::class);
|
||||||
$collector->withoutCategory();
|
$collector->withoutCategory();
|
||||||
$collector->setRange($start, $end);
|
$collector->setRange($start, $end);
|
||||||
$collector->setTypes([TransactionTypeEnum::TRANSFER->value]);
|
$collector->setTypes([TransactionTypeEnum::TRANSFER->value]);
|
||||||
@@ -274,20 +274,19 @@ trait PeriodOverview
|
|||||||
$title = Navigation::periodShow($currentDate['end'], $currentDate['period']);
|
$title = Navigation::periodShow($currentDate['end'], $currentDate['period']);
|
||||||
$entries[]
|
$entries[]
|
||||||
= [
|
= [
|
||||||
'title' => $title,
|
'title' => $title,
|
||||||
'route' => route('categories.no-category', [$currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]),
|
'route' => route('categories.no-category', [$currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]),
|
||||||
'total_transactions' => count($spent) + count($earned) + count($transferred),
|
'total_transactions' => count($spent) + count($earned) + count($transferred),
|
||||||
'spent' => $this->groupByCurrency($spent),
|
'spent' => $this->groupByCurrency($spent),
|
||||||
'earned' => $this->groupByCurrency($earned),
|
'earned' => $this->groupByCurrency($earned),
|
||||||
'transferred' => $this->groupByCurrency($transferred),
|
'transferred' => $this->groupByCurrency($transferred),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
Log::debug('End of loops');
|
Log::debug('End of loops');
|
||||||
|
|
||||||
return $entries;
|
return $entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected function getSingleAccountPeriod(Account $account, string $period, Carbon $start, Carbon $end): array
|
protected function getSingleAccountPeriod(Account $account, string $period, Carbon $start, Carbon $end): array
|
||||||
{
|
{
|
||||||
Log::debug(sprintf('Now in getSingleAccountPeriod(#%d, %s %s)', $account->id, $start->format('Y-m-d'), $end->format('Y-m-d')));
|
Log::debug(sprintf('Now in getSingleAccountPeriod(#%d, %s %s)', $account->id, $start->format('Y-m-d'), $end->format('Y-m-d')));
|
||||||
@@ -299,7 +298,7 @@ trait PeriodOverview
|
|||||||
];
|
];
|
||||||
$this->transactions = [];
|
$this->transactions = [];
|
||||||
foreach ($types as $type) {
|
foreach ($types as $type) {
|
||||||
$set = $this->getSingleAccountPeriodByType($account, $start, $end, $type);
|
$set = $this->getSingleAccountPeriodByType($account, $start, $end, $type);
|
||||||
$return['total_transactions'] += $set['count'];
|
$return['total_transactions'] += $set['count'];
|
||||||
unset($set['count']);
|
unset($set['count']);
|
||||||
$return[$type] = $set;
|
$return[$type] = $set;
|
||||||
@@ -319,7 +318,7 @@ trait PeriodOverview
|
|||||||
];
|
];
|
||||||
$this->transactions = [];
|
$this->transactions = [];
|
||||||
foreach ($types as $type) {
|
foreach ($types as $type) {
|
||||||
$set = $this->getSingleCategoryPeriodByType($category, $start, $end, $type);
|
$set = $this->getSingleCategoryPeriodByType($category, $start, $end, $type);
|
||||||
$return['total_transactions'] += $set['count'];
|
$return['total_transactions'] += $set['count'];
|
||||||
unset($set['count']);
|
unset($set['count']);
|
||||||
$return[$type] = $set;
|
$return[$type] = $set;
|
||||||
@@ -339,7 +338,7 @@ trait PeriodOverview
|
|||||||
];
|
];
|
||||||
$this->transactions = [];
|
$this->transactions = [];
|
||||||
foreach ($types as $type) {
|
foreach ($types as $type) {
|
||||||
$set = $this->getSingleTagPeriodByType($tag, $start, $end, $type);
|
$set = $this->getSingleTagPeriodByType($tag, $start, $end, $type);
|
||||||
$return['total_transactions'] += $set['count'];
|
$return['total_transactions'] += $set['count'];
|
||||||
unset($set['count']);
|
unset($set['count']);
|
||||||
$return[$type] = $set;
|
$return[$type] = $set;
|
||||||
@@ -413,15 +412,15 @@ trait PeriodOverview
|
|||||||
|
|
||||||
return $grouped;
|
return $grouped;
|
||||||
}
|
}
|
||||||
$grouped = [
|
$grouped = [
|
||||||
'count' => 0,
|
'count' => 0,
|
||||||
];
|
];
|
||||||
|
|
||||||
/** @var PeriodStatistic $statistic */
|
/** @var PeriodStatistic $statistic */
|
||||||
foreach ($statistics as $statistic) {
|
foreach ($statistics as $statistic) {
|
||||||
$id = (int)$statistic->transaction_currency_id;
|
$id = (int)$statistic->transaction_currency_id;
|
||||||
$currency = Amount::getTransactionCurrencyById($id);
|
$currency = Amount::getTransactionCurrencyById($id);
|
||||||
$grouped[$id] = [
|
$grouped[$id] = [
|
||||||
'amount' => (string)$statistic->amount,
|
'amount' => (string)$statistic->amount,
|
||||||
'count' => (int)$statistic->count,
|
'count' => (int)$statistic->count,
|
||||||
'currency_id' => $currency->id,
|
'currency_id' => $currency->id,
|
||||||
@@ -481,15 +480,15 @@ trait PeriodOverview
|
|||||||
|
|
||||||
return $grouped;
|
return $grouped;
|
||||||
}
|
}
|
||||||
$grouped = [
|
$grouped = [
|
||||||
'count' => 0,
|
'count' => 0,
|
||||||
];
|
];
|
||||||
|
|
||||||
/** @var PeriodStatistic $statistic */
|
/** @var PeriodStatistic $statistic */
|
||||||
foreach ($statistics as $statistic) {
|
foreach ($statistics as $statistic) {
|
||||||
$id = (int)$statistic->transaction_currency_id;
|
$id = (int)$statistic->transaction_currency_id;
|
||||||
$currency = Amount::getTransactionCurrencyById($id);
|
$currency = Amount::getTransactionCurrencyById($id);
|
||||||
$grouped[$id] = [
|
$grouped[$id] = [
|
||||||
'amount' => (string)$statistic->amount,
|
'amount' => (string)$statistic->amount,
|
||||||
'count' => (int)$statistic->count,
|
'count' => (int)$statistic->count,
|
||||||
'currency_id' => $currency->id,
|
'currency_id' => $currency->id,
|
||||||
@@ -549,15 +548,15 @@ trait PeriodOverview
|
|||||||
|
|
||||||
return $grouped;
|
return $grouped;
|
||||||
}
|
}
|
||||||
$grouped = [
|
$grouped = [
|
||||||
'count' => 0,
|
'count' => 0,
|
||||||
];
|
];
|
||||||
|
|
||||||
/** @var PeriodStatistic $statistic */
|
/** @var PeriodStatistic $statistic */
|
||||||
foreach ($statistics as $statistic) {
|
foreach ($statistics as $statistic) {
|
||||||
$id = (int)$statistic->transaction_currency_id;
|
$id = (int)$statistic->transaction_currency_id;
|
||||||
$currency = Amount::getTransactionCurrencyById($id);
|
$currency = Amount::getTransactionCurrencyById($id);
|
||||||
$grouped[$id] = [
|
$grouped[$id] = [
|
||||||
'amount' => (string)$statistic->amount,
|
'amount' => (string)$statistic->amount,
|
||||||
'count' => (int)$statistic->count,
|
'count' => (int)$statistic->count,
|
||||||
'currency_id' => $currency->id,
|
'currency_id' => $currency->id,
|
||||||
@@ -579,18 +578,18 @@ trait PeriodOverview
|
|||||||
*/
|
*/
|
||||||
protected function getTagPeriodOverview(Tag $tag, Carbon $start, Carbon $end): array // period overview for tags.
|
protected function getTagPeriodOverview(Tag $tag, Carbon $start, Carbon $end): array // period overview for tags.
|
||||||
{
|
{
|
||||||
$this->tagRepository = app(TagRepositoryInterface::class);
|
$this->tagRepository = app(TagRepositoryInterface::class);
|
||||||
$this->tagRepository->setUser($tag->user);
|
$this->tagRepository->setUser($tag->user);
|
||||||
$this->periodStatisticRepo = app(PeriodStatisticRepositoryInterface::class);
|
$this->periodStatisticRepo = app(PeriodStatisticRepositoryInterface::class);
|
||||||
|
|
||||||
$range = Navigation::getViewRange(true);
|
$range = Navigation::getViewRange(true);
|
||||||
[$start, $end] = $end < $start ? [$end, $start] : [$start, $end];
|
[$start, $end] = $end < $start ? [$end, $start] : [$start, $end];
|
||||||
|
|
||||||
/** @var array $dates */
|
/** @var array $dates */
|
||||||
$dates = Navigation::blockPeriods($start, $end, $range);
|
$dates = Navigation::blockPeriods($start, $end, $range);
|
||||||
$entries = [];
|
$entries = [];
|
||||||
[$start, $end] = $this->getPeriodFromBlocks($dates, $start, $end);
|
[$start, $end] = $this->getPeriodFromBlocks($dates, $start, $end);
|
||||||
$this->statistics = $this->periodStatisticRepo->allInRangeForModel($tag, $start, $end);
|
$this->statistics = $this->periodStatisticRepo->allInRangeForModel($tag, $start, $end);
|
||||||
|
|
||||||
|
|
||||||
Log::debug(sprintf('Count of loops: %d', count($dates)));
|
Log::debug(sprintf('Count of loops: %d', count($dates)));
|
||||||
@@ -601,41 +600,41 @@ trait PeriodOverview
|
|||||||
return $entries;
|
return $entries;
|
||||||
|
|
||||||
|
|
||||||
$range = Navigation::getViewRange(true);
|
$range = Navigation::getViewRange(true);
|
||||||
[$start, $end] = $end < $start ? [$end, $start] : [$start, $end];
|
[$start, $end] = $end < $start ? [$end, $start] : [$start, $end];
|
||||||
|
|
||||||
/** @var array $dates */
|
/** @var array $dates */
|
||||||
$dates = Navigation::blockPeriods($start, $end, $range);
|
$dates = Navigation::blockPeriods($start, $end, $range);
|
||||||
$entries = [];
|
$entries = [];
|
||||||
|
|
||||||
// collect all expenses in this period:
|
// collect all expenses in this period:
|
||||||
/** @var GroupCollectorInterface $collector */
|
/** @var GroupCollectorInterface $collector */
|
||||||
$collector = app(GroupCollectorInterface::class);
|
$collector = app(GroupCollectorInterface::class);
|
||||||
$collector->setTag($tag);
|
$collector->setTag($tag);
|
||||||
$collector->setRange($start, $end);
|
$collector->setRange($start, $end);
|
||||||
$collector->setTypes([TransactionTypeEnum::DEPOSIT->value]);
|
$collector->setTypes([TransactionTypeEnum::DEPOSIT->value]);
|
||||||
$earnedSet = $collector->getExtractedJournals();
|
$earnedSet = $collector->getExtractedJournals();
|
||||||
|
|
||||||
// collect all income in this period:
|
// collect all income in this period:
|
||||||
/** @var GroupCollectorInterface $collector */
|
/** @var GroupCollectorInterface $collector */
|
||||||
$collector = app(GroupCollectorInterface::class);
|
$collector = app(GroupCollectorInterface::class);
|
||||||
$collector->setTag($tag);
|
$collector->setTag($tag);
|
||||||
$collector->setRange($start, $end);
|
$collector->setRange($start, $end);
|
||||||
$collector->setTypes([TransactionTypeEnum::WITHDRAWAL->value]);
|
$collector->setTypes([TransactionTypeEnum::WITHDRAWAL->value]);
|
||||||
$spentSet = $collector->getExtractedJournals();
|
$spentSet = $collector->getExtractedJournals();
|
||||||
|
|
||||||
// collect all transfers in this period:
|
// collect all transfers in this period:
|
||||||
/** @var GroupCollectorInterface $collector */
|
/** @var GroupCollectorInterface $collector */
|
||||||
$collector = app(GroupCollectorInterface::class);
|
$collector = app(GroupCollectorInterface::class);
|
||||||
$collector->setTag($tag);
|
$collector->setTag($tag);
|
||||||
$collector->setRange($start, $end);
|
$collector->setRange($start, $end);
|
||||||
$collector->setTypes([TransactionTypeEnum::TRANSFER->value]);
|
$collector->setTypes([TransactionTypeEnum::TRANSFER->value]);
|
||||||
$transferSet = $collector->getExtractedJournals();
|
$transferSet = $collector->getExtractedJournals();
|
||||||
|
|
||||||
// filer all of them:
|
// filer all of them:
|
||||||
$earnedSet = $this->filterJournalsByTag($earnedSet, $tag);
|
$earnedSet = $this->filterJournalsByTag($earnedSet, $tag);
|
||||||
$spentSet = $this->filterJournalsByTag($spentSet, $tag);
|
$spentSet = $this->filterJournalsByTag($spentSet, $tag);
|
||||||
$transferSet = $this->filterJournalsByTag($transferSet, $tag);
|
$transferSet = $this->filterJournalsByTag($transferSet, $tag);
|
||||||
|
|
||||||
foreach ($dates as $currentDate) {
|
foreach ($dates as $currentDate) {
|
||||||
$spent = $this->filterJournalsByDate($spentSet, $currentDate['start'], $currentDate['end']);
|
$spent = $this->filterJournalsByDate($spentSet, $currentDate['start'], $currentDate['end']);
|
||||||
@@ -644,17 +643,17 @@ trait PeriodOverview
|
|||||||
$title = Navigation::periodShow($currentDate['end'], $currentDate['period']);
|
$title = Navigation::periodShow($currentDate['end'], $currentDate['period']);
|
||||||
$entries[]
|
$entries[]
|
||||||
= [
|
= [
|
||||||
'transactions' => 0,
|
'transactions' => 0,
|
||||||
'title' => $title,
|
'title' => $title,
|
||||||
'route' => route(
|
'route' => route(
|
||||||
'tags.show',
|
'tags.show',
|
||||||
[$tag->id, $currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]
|
[$tag->id, $currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]
|
||||||
),
|
),
|
||||||
'total_transactions' => count($spent) + count($earned) + count($transferred),
|
'total_transactions' => count($spent) + count($earned) + count($transferred),
|
||||||
'spent' => $this->groupByCurrency($spent),
|
'spent' => $this->groupByCurrency($spent),
|
||||||
'earned' => $this->groupByCurrency($earned),
|
'earned' => $this->groupByCurrency($earned),
|
||||||
'transferred' => $this->groupByCurrency($transferred),
|
'transferred' => $this->groupByCurrency($transferred),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $entries;
|
return $entries;
|
||||||
@@ -665,12 +664,12 @@ trait PeriodOverview
|
|||||||
*/
|
*/
|
||||||
protected function getTransactionPeriodOverview(string $transactionType, Carbon $start, Carbon $end): array
|
protected function getTransactionPeriodOverview(string $transactionType, Carbon $start, Carbon $end): array
|
||||||
{
|
{
|
||||||
$range = Navigation::getViewRange(true);
|
$range = Navigation::getViewRange(true);
|
||||||
$types = config(sprintf('firefly.transactionTypesByType.%s', $transactionType));
|
$types = config(sprintf('firefly.transactionTypesByType.%s', $transactionType));
|
||||||
[$start, $end] = $end < $start ? [$end, $start] : [$start, $end];
|
[$start, $end] = $end < $start ? [$end, $start] : [$start, $end];
|
||||||
|
|
||||||
// properties for cache
|
// properties for cache
|
||||||
$cache = new CacheProperties();
|
$cache = new CacheProperties();
|
||||||
$cache->addProperty($start);
|
$cache->addProperty($start);
|
||||||
$cache->addProperty($end);
|
$cache->addProperty($end);
|
||||||
$cache->addProperty('transactions-period-entries');
|
$cache->addProperty('transactions-period-entries');
|
||||||
@@ -680,16 +679,16 @@ trait PeriodOverview
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** @var array $dates */
|
/** @var array $dates */
|
||||||
$dates = Navigation::blockPeriods($start, $end, $range);
|
$dates = Navigation::blockPeriods($start, $end, $range);
|
||||||
$entries = [];
|
$entries = [];
|
||||||
$spent = [];
|
$spent = [];
|
||||||
$earned = [];
|
$earned = [];
|
||||||
$transferred = [];
|
$transferred = [];
|
||||||
// collect all journals in this period (regardless of type)
|
// collect all journals in this period (regardless of type)
|
||||||
$collector = app(GroupCollectorInterface::class);
|
$collector = app(GroupCollectorInterface::class);
|
||||||
$collector->setTypes($types)->setRange($start, $end);
|
$collector->setTypes($types)->setRange($start, $end);
|
||||||
$genericSet = $collector->getExtractedJournals();
|
$genericSet = $collector->getExtractedJournals();
|
||||||
$loops = 0;
|
$loops = 0;
|
||||||
|
|
||||||
foreach ($dates as $currentDate) {
|
foreach ($dates as $currentDate) {
|
||||||
$title = Navigation::periodShow($currentDate['end'], $currentDate['period']);
|
$title = Navigation::periodShow($currentDate['end'], $currentDate['period']);
|
||||||
@@ -707,14 +706,14 @@ trait PeriodOverview
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
$entries[]
|
$entries[]
|
||||||
= [
|
= [
|
||||||
'title' => $title,
|
'title' => $title,
|
||||||
'route' => route('transactions.index', [$transactionType, $currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]),
|
'route' => route('transactions.index', [$transactionType, $currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]),
|
||||||
'total_transactions' => count($spent) + count($earned) + count($transferred),
|
'total_transactions' => count($spent) + count($earned) + count($transferred),
|
||||||
'spent' => $this->groupByCurrency($spent),
|
'spent' => $this->groupByCurrency($spent),
|
||||||
'earned' => $this->groupByCurrency($earned),
|
'earned' => $this->groupByCurrency($earned),
|
||||||
'transferred' => $this->groupByCurrency($transferred),
|
'transferred' => $this->groupByCurrency($transferred),
|
||||||
];
|
];
|
||||||
++$loops;
|
++$loops;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -755,7 +754,7 @@ trait PeriodOverview
|
|||||||
{
|
{
|
||||||
$return = [];
|
$return = [];
|
||||||
foreach ($set as $entry) {
|
foreach ($set as $entry) {
|
||||||
$found = false;
|
$found = false;
|
||||||
|
|
||||||
/** @var array $localTag */
|
/** @var array $localTag */
|
||||||
foreach ($entry['tags'] as $localTag) {
|
foreach ($entry['tags'] as $localTag) {
|
||||||
@@ -864,13 +863,13 @@ trait PeriodOverview
|
|||||||
|
|
||||||
/** @var array $journal */
|
/** @var array $journal */
|
||||||
foreach ($journals as $journal) {
|
foreach ($journals as $journal) {
|
||||||
$currencyId = (int)$journal['currency_id'];
|
$currencyId = (int)$journal['currency_id'];
|
||||||
$currencyCode = $journal['currency_code'];
|
$currencyCode = $journal['currency_code'];
|
||||||
$currencyName = $journal['currency_name'];
|
$currencyName = $journal['currency_name'];
|
||||||
$currencySymbol = $journal['currency_symbol'];
|
$currencySymbol = $journal['currency_symbol'];
|
||||||
$currencyDecimalPlaces = $journal['currency_decimal_places'];
|
$currencyDecimalPlaces = $journal['currency_decimal_places'];
|
||||||
$foreignCurrencyId = $journal['foreign_currency_id'];
|
$foreignCurrencyId = $journal['foreign_currency_id'];
|
||||||
$amount = $journal['amount'] ?? '0';
|
$amount = $journal['amount'] ?? '0';
|
||||||
|
|
||||||
if ($this->convertToPrimary && $currencyId !== $this->primaryCurrency->id && $foreignCurrencyId !== $this->primaryCurrency->id) {
|
if ($this->convertToPrimary && $currencyId !== $this->primaryCurrency->id && $foreignCurrencyId !== $this->primaryCurrency->id) {
|
||||||
$amount = $journal['pc_amount'] ?? '0';
|
$amount = $journal['pc_amount'] ?? '0';
|
||||||
|
@@ -38,7 +38,7 @@ class PreferencesSingleton
|
|||||||
|
|
||||||
public static function getInstance(): self
|
public static function getInstance(): self
|
||||||
{
|
{
|
||||||
if (!self::$instance instanceof PreferencesSingleton) {
|
if (!self::$instance instanceof self) {
|
||||||
self::$instance = new self();
|
self::$instance = new self();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -78,8 +78,8 @@ return [
|
|||||||
'running_balance_column' => env('USE_RUNNING_BALANCE', false),
|
'running_balance_column' => env('USE_RUNNING_BALANCE', false),
|
||||||
// see cer.php for exchange rates feature flag.
|
// see cer.php for exchange rates feature flag.
|
||||||
],
|
],
|
||||||
'version' => 'develop/2025-09-26',
|
'version' => 'develop/2025-09-27',
|
||||||
'build_time' => 1758914637,
|
'build_time' => 1758945787,
|
||||||
'api_version' => '2.1.0', // field is no longer used.
|
'api_version' => '2.1.0', // field is no longer used.
|
||||||
'db_version' => 27,
|
'db_version' => 27,
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user