Auto commit for release 'develop' on 2024-12-28

This commit is contained in:
github-actions
2024-12-28 10:58:01 +01:00
parent f2166b97b8
commit 6c655634bc
22 changed files with 87 additions and 81 deletions

View File

@@ -59,8 +59,9 @@ class CorrectsNativeAmounts extends Command
*/ */
public function handle(): int public function handle(): int
{ {
if(!config('cer.enabled')) { if (!config('cer.enabled')) {
$this->friendlyInfo('This command will not run because currency exchange rates are disabled.'); $this->friendlyInfo('This command will not run because currency exchange rates are disabled.');
return 0; return 0;
} }
Log::debug('Will update all native amounts. This may take some time.'); Log::debug('Will update all native amounts. This may take some time.');

View File

@@ -71,6 +71,7 @@ class UpgradesTransferCurrencies extends Command
if ($this->count > 0) { if ($this->count > 0) {
$this->friendlyInfo(sprintf('Verified currency information of %d transfer(s).', $this->count)); $this->friendlyInfo(sprintf('Verified currency information of %d transfer(s).', $this->count));
} }
return 0; return 0;
} }
@@ -290,7 +291,8 @@ class UpgradesTransferCurrencies extends Command
if (null === $this->sourceTransaction->transaction_currency_id && null !== $this->sourceCurrency) { if (null === $this->sourceTransaction->transaction_currency_id && null !== $this->sourceCurrency) {
$this->sourceTransaction $this->sourceTransaction
->transaction_currency_id ->transaction_currency_id
= $this->sourceCurrency->id; = $this->sourceCurrency->id
;
$message = sprintf( $message = sprintf(
'Transaction #%d has no currency setting, now set to %s.', 'Transaction #%d has no currency setting, now set to %s.',
$this->sourceTransaction->id, $this->sourceTransaction->id,
@@ -335,7 +337,8 @@ class UpgradesTransferCurrencies extends Command
if (null === $this->destinationTransaction->transaction_currency_id && null !== $this->destinationCurrency) { if (null === $this->destinationTransaction->transaction_currency_id && null !== $this->destinationCurrency) {
$this->destinationTransaction $this->destinationTransaction
->transaction_currency_id ->transaction_currency_id
= $this->destinationCurrency->id; = $this->destinationCurrency->id
;
$message = sprintf( $message = sprintf(
'Transaction #%d has no currency setting, now set to %s.', 'Transaction #%d has no currency setting, now set to %s.',
$this->destinationTransaction->id, $this->destinationTransaction->id,

View File

@@ -68,9 +68,7 @@ class Handler extends ExceptionHandler
/** /**
* Register the exception handling callbacks for the application. * Register the exception handling callbacks for the application.
*/ */
public function register(): void public function register(): void {}
{
}
/** /**
* Render an exception into an HTTP response. It's complex but lucky for us, we never use it because * Render an exception into an HTTP response. It's complex but lucky for us, we never use it because

View File

@@ -44,7 +44,7 @@ class AccountObserver
private function updateNativeAmount(Account $account): void private function updateNativeAmount(Account $account): void
{ {
if(!Amount::convertToNative($account->user)) { if (!Amount::convertToNative($account->user)) {
return; return;
} }
$userCurrency = app('amount')->getDefaultCurrencyByUserGroup($account->user->userGroup); $userCurrency = app('amount')->getDefaultCurrencyByUserGroup($account->user->userGroup);

View File

@@ -45,7 +45,7 @@ class AutoBudgetObserver
private function updateNativeAmount(AutoBudget $autoBudget): void private function updateNativeAmount(AutoBudget $autoBudget): void
{ {
if(!Amount::convertToNative($autoBudget->budget->user)) { if (!Amount::convertToNative($autoBudget->budget->user)) {
return; return;
} }
$userCurrency = app('amount')->getDefaultCurrencyByUserGroup($autoBudget->budget->user->userGroup); $userCurrency = app('amount')->getDefaultCurrencyByUserGroup($autoBudget->budget->user->userGroup);

View File

@@ -45,7 +45,7 @@ class AvailableBudgetObserver
private function updateNativeAmount(AvailableBudget $availableBudget): void private function updateNativeAmount(AvailableBudget $availableBudget): void
{ {
if(!Amount::convertToNative($availableBudget->user)) { if (!Amount::convertToNative($availableBudget->user)) {
return; return;
} }
$userCurrency = app('amount')->getDefaultCurrencyByUserGroup($availableBudget->user->userGroup); $userCurrency = app('amount')->getDefaultCurrencyByUserGroup($availableBudget->user->userGroup);

View File

@@ -56,7 +56,7 @@ class BillObserver
private function updateNativeAmount(Bill $bill): void private function updateNativeAmount(Bill $bill): void
{ {
if(!Amount::convertToNative($bill->user)) { if (!Amount::convertToNative($bill->user)) {
return; return;
} }
$userCurrency = app('amount')->getDefaultCurrencyByUserGroup($bill->user->userGroup); $userCurrency = app('amount')->getDefaultCurrencyByUserGroup($bill->user->userGroup);

View File

@@ -45,7 +45,7 @@ class BudgetLimitObserver
private function updateNativeAmount(BudgetLimit $budgetLimit): void private function updateNativeAmount(BudgetLimit $budgetLimit): void
{ {
if(!Amount::convertToNative($budgetLimit->budget->user)) { if (!Amount::convertToNative($budgetLimit->budget->user)) {
return; return;
} }
$userCurrency = app('amount')->getDefaultCurrencyByUserGroup($budgetLimit->budget->user->userGroup); $userCurrency = app('amount')->getDefaultCurrencyByUserGroup($budgetLimit->budget->user->userGroup);

View File

@@ -45,7 +45,7 @@ class PiggyBankEventObserver
private function updateNativeAmount(PiggyBankEvent $event): void private function updateNativeAmount(PiggyBankEvent $event): void
{ {
if(!Amount::convertToNative($event->piggyBank->accounts()->first()->user)) { if (!Amount::convertToNative($event->piggyBank->accounts()->first()->user)) {
return; return;
} }
$userCurrency = app('amount')->getDefaultCurrencyByUserGroup($event->piggyBank->accounts()->first()->user->userGroup); $userCurrency = app('amount')->getDefaultCurrencyByUserGroup($event->piggyBank->accounts()->first()->user->userGroup);

View File

@@ -56,7 +56,7 @@ class TransactionObserver
public function updated(Transaction $transaction): void public function updated(Transaction $transaction): void
{ {
// Log::debug('Observe "updated" of a transaction.'); // Log::debug('Observe "updated" of a transaction.');
if (config('firefly.feature_flags.running_balance_column') && self::$recalculate) { if (config('firefly.feature_flags.running_balance_column') && self::$recalculate) {
if (1 === bccomp($transaction->amount, '0')) { if (1 === bccomp($transaction->amount, '0')) {
Log::debug('Trigger recalculateForJournal'); Log::debug('Trigger recalculateForJournal');
@@ -68,7 +68,7 @@ class TransactionObserver
private function updateNativeAmount(Transaction $transaction): void private function updateNativeAmount(Transaction $transaction): void
{ {
if(!Amount::convertToNative($transaction->transactionJournal->user)) { if (!Amount::convertToNative($transaction->transactionJournal->user)) {
return; return;
} }
$userCurrency = app('amount')->getDefaultCurrencyByUserGroup($transaction->transactionJournal->user->userGroup); $userCurrency = app('amount')->getDefaultCurrencyByUserGroup($transaction->transactionJournal->user->userGroup);

View File

@@ -90,7 +90,7 @@ class EditController extends Controller
$latitude = null !== $location ? $location->latitude : config('firefly.default_location.latitude'); $latitude = null !== $location ? $location->latitude : config('firefly.default_location.latitude');
$longitude = null !== $location ? $location->longitude : config('firefly.default_location.longitude'); $longitude = null !== $location ? $location->longitude : config('firefly.default_location.longitude');
$zoomLevel = null !== $location ? $location->zoom_level : config('firefly.default_location.zoom_level'); $zoomLevel = null !== $location ? $location->zoom_level : config('firefly.default_location.zoom_level');
$canEditCurrency = $account->piggyBanks()->count() === 0; $canEditCurrency = 0 === $account->piggyBanks()->count();
$hasLocation = null !== $location; $hasLocation = null !== $location;
$locations = [ $locations = [
'location' => [ 'location' => [
@@ -163,7 +163,7 @@ class EditController extends Controller
$request->session()->flash('preFilled', $preFilled); $request->session()->flash('preFilled', $preFilled);
return view('accounts.edit', compact('account', 'currency','canEditCurrency', 'showNetWorth', 'subTitle', 'subTitleIcon', 'locations', 'liabilityDirections', 'objectType', 'roles', 'preFilled', 'liabilityTypes', 'interestPeriods')); return view('accounts.edit', compact('account', 'currency', 'canEditCurrency', 'showNetWorth', 'subTitle', 'subTitleIcon', 'locations', 'liabilityDirections', 'objectType', 'roles', 'preFilled', 'liabilityTypes', 'interestPeriods'));
} }
/** /**

View File

@@ -47,7 +47,7 @@ class IndexController extends Controller
return $next($request); return $next($request);
} }
); );
if(!config('cer.enabled')) { if (!config('cer.enabled')) {
throw new NotFoundHttpException(); throw new NotFoundHttpException();
} }
} }

View File

@@ -154,7 +154,7 @@ class NoCategoryRepository implements NoCategoryRepositoryInterface
$journals = $collector->getExtractedJournals(); $journals = $collector->getExtractedJournals();
$array = []; $array = [];
// default currency information for native stuff. // default currency information for native stuff.
$convertToNative = Amount::convertToNative($this->user);; $convertToNative = Amount::convertToNative($this->user);
$default = Amount::getDefaultCurrency(); $default = Amount::getDefaultCurrency();
foreach ($journals as $journal) { foreach ($journals as $journal) {

View File

@@ -331,7 +331,7 @@ class OperationsRepository implements OperationsRepositoryInterface
$collector->setUser($this->user)->setRange($start, $end)->setTypes([TransactionTypeEnum::WITHDRAWAL->value]); $collector->setUser($this->user)->setRange($start, $end)->setTypes([TransactionTypeEnum::WITHDRAWAL->value]);
// default currency information for native stuff. // default currency information for native stuff.
$convertToNative = Amount::convertToNative($this->user);; $convertToNative = Amount::convertToNative($this->user);
$default = Amount::getDefaultCurrency(); $default = Amount::getDefaultCurrency();
if (null !== $accounts && $accounts->count() > 0) { if (null !== $accounts && $accounts->count() > 0) {
$collector->setAccounts($accounts); $collector->setAccounts($accounts);
@@ -411,7 +411,7 @@ class OperationsRepository implements OperationsRepositoryInterface
} }
$collector->setCategories($categories); $collector->setCategories($categories);
$journals = $collector->getExtractedJournals(); $journals = $collector->getExtractedJournals();
$convertToNative = Amount::convertToNative($this->user);; $convertToNative = Amount::convertToNative($this->user);
$default = Amount::getDefaultCurrency(); $default = Amount::getDefaultCurrency();
$array = []; $array = [];

View File

@@ -30,6 +30,7 @@ use FireflyIII\Models\TransactionJournal;
use FireflyIII\Models\UserGroup; use FireflyIII\Models\UserGroup;
use FireflyIII\User; use FireflyIII\User;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use FireflyIII\Support\Facades\Preferences;
/** /**
* Class Amount. * Class Amount.
@@ -70,9 +71,10 @@ class Amount
public function convertToNative(?User $user = null): bool public function convertToNative(?User $user = null): bool
{ {
if (null === $user) { if (null === $user) {
return \FireflyIII\Support\Facades\Preferences::get('convert_to_native', false)->data && config('cer.enabled'); return Preferences::get('convert_to_native', false)->data && config('cer.enabled');
} }
return \FireflyIII\Support\Facades\Preferences::getForUser($user, 'convert_to_native', false)->data && config('cer.enabled');
return Preferences::getForUser($user, 'convert_to_native', false)->data && config('cer.enabled');
} }
/** /**
@@ -317,11 +319,11 @@ class Amount
} }
// default is amount before currency // default is amount before currency
$format = $posA . $posD . '%v' . $space . $posB . '%s' . $posC . $posE; $format = $posA.$posD.'%v'.$space.$posB.'%s'.$posC.$posE;
if ($csPrecedes) { if ($csPrecedes) {
// alternative is currency before amount // alternative is currency before amount
$format = $posA . $posB . '%s' . $posC . $space . $posD . '%v' . $posE; $format = $posA.$posB.'%s'.$posC.$space.$posD.'%v'.$posE;
} }
return $format; return $format;

View File

@@ -31,6 +31,7 @@ use FireflyIII\Models\TransactionCurrency;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
use FireflyIII\Support\Facades\Amount;
/** /**
* Class Steam. * Class Steam.
@@ -310,8 +311,8 @@ class Steam
public function finalAccountBalance(Account $account, Carbon $date): array public function finalAccountBalance(Account $account, Carbon $date): array
{ {
Log::debug(sprintf('Now in finalAccountBalance(#%d, "%s", "%s")', $account->id, $account->name, $date->format('Y-m-d H:i:s'))); Log::debug(sprintf('Now in finalAccountBalance(#%d, "%s", "%s")', $account->id, $account->name, $date->format('Y-m-d H:i:s')));
$native = \FireflyIII\Support\Facades\Amount::getDefaultCurrencyByUserGroup($account->user->userGroup); $native = Amount::getDefaultCurrencyByUserGroup($account->user->userGroup);
$convertToNative = \FireflyIII\Support\Facades\Amount::convertToNative($account->user); $convertToNative = Amount::convertToNative($account->user);
$accountCurrency = $this->getAccountCurrency($account); $accountCurrency = $this->getAccountCurrency($account);
$hasCurrency = null !== $accountCurrency; $hasCurrency = null !== $accountCurrency;
$currency = $hasCurrency ? $accountCurrency : $native; $currency = $hasCurrency ? $accountCurrency : $native;

View File

@@ -10,17 +10,17 @@ This project adheres to [Semantic Versioning](http://semver.org/).
- Multi-currency support. If you set `ENABLE_EXCHANGE_RATES=true` and optionally `ENABLE_EXTERNAL_RATES=true` Firefly III will try to calculate all foreign currencies back to your native currency. This is a work in progress, not all fields and all places will support this yet. Please check out the [documentation](https://docs.firefly-iii.org/explanation/financial-concepts/exchange-rates/). - Multi-currency support. If you set `ENABLE_EXCHANGE_RATES=true` and optionally `ENABLE_EXTERNAL_RATES=true` Firefly III will try to calculate all foreign currencies back to your native currency. This is a work in progress, not all fields and all places will support this yet. Please check out the [documentation](https://docs.firefly-iii.org/explanation/financial-concepts/exchange-rates/).
- Notifications support Nfty, Pushover, Slack and Discord. - Notifications support Nfty, Pushover, Slack and Discord.
- Many new security related notifications. - Many new security related notifications.
- #5523 - [Issue 5523](https://github.com/firefly-iii/firefly-iii/issues/5523) (Add comment on a budget for a given month) reported by @n-serrette
- #8531 - [Issue 8531](https://github.com/firefly-iii/firefly-iii/issues/8531) (Add `notes` to transaction audit report) reported by @clouserw
- #8307 - [Issue 8307](https://github.com/firefly-iii/firefly-iii/issues/8307) (Notification support for Ntfy (and other push notification tools)) reported by @ragnarkarlsson
- #7945 - [Issue 7945](https://github.com/firefly-iii/firefly-iii/issues/7945) ("Rules" that only trigger manually) reported by @SekoiaTree
- #6760 - [Issue 6760](https://github.com/firefly-iii/firefly-iii/issues/6760) (Add a new trigger for automated rules) reported by @Gsyltc
- #6557 - [Issue 6557](https://github.com/firefly-iii/firefly-iii/issues/6557) (Piggy Banks - Draw Funds from Multiple Accounts) reported by @BugPhobic
### Changed ### Changed
- Firefly III requires PHP 8.4. - Firefly III requires PHP 8.4.
- #9501 - [Issue 9501](https://github.com/firefly-iii/firefly-iii/issues/9501) (PHP8.4 support) reported by @JC5
- Docker container no longer runs under root. - Docker container no longer runs under root.
- "Bills" are now called "subscriptions" to better reflect their purpose. - "Bills" are now called "subscriptions" to better reflect their purpose.
@@ -31,8 +31,8 @@ This project adheres to [Semantic Versioning](http://semver.org/).
### Fixed ### Fixed
- #9532 - [Issue 9532](https://github.com/firefly-iii/firefly-iii/issues/9532) (ReportSum Integrity Check fails due to empty foreign_amount) reported by @SircasticFox
- #7288 - [Issue 7288](https://github.com/firefly-iii/firefly-iii/issues/7288) (currentMonthStart/currentMonthEnd not working for no-budget view) reported by @bradsk88
### API ### API

View File

@@ -81,7 +81,7 @@ 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/2024-12-27', 'version' => 'develop/2024-12-28',
'api_version' => '2.1.0', // field is no longer used. 'api_version' => '2.1.0', // field is no longer used.
'db_version' => 25, 'db_version' => 25,

View File

@@ -5,6 +5,7 @@ declare(strict_types=1);
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\Log;
return new class () extends Migration { return new class () extends Migration {
/** /**
@@ -19,7 +20,7 @@ return new class () extends Migration {
$table->dropForeign('piggy_banks_account_id_foreign'); $table->dropForeign('piggy_banks_account_id_foreign');
}); });
} catch (RuntimeException $e) { } catch (RuntimeException $e) {
\Illuminate\Support\Facades\Log::error('Could not drop foreign key "piggy_banks_account_id_foreign". Probably not an issue.'); Log::error('Could not drop foreign key "piggy_banks_account_id_foreign". Probably not an issue.');
} }
Schema::table('piggy_banks', static function (Blueprint $table): void { Schema::table('piggy_banks', static function (Blueprint $table): void {
// 2. make column nullable. // 2. make column nullable.