mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-12-17 20:08:52 +00:00
Compare commits
40 Commits
develop-20
...
develop
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1daacb80b1 | ||
|
|
2bf841627a | ||
|
|
012df6bb24 | ||
|
|
486e0d5ed5 | ||
|
|
e8fe9db181 | ||
|
|
05f0cb26f8 | ||
|
|
bdaed65207 | ||
|
|
62a9195acc | ||
|
|
40d1e36ba8 | ||
|
|
61a8525d26 | ||
|
|
ef01fbe5f4 | ||
|
|
9413f49c84 | ||
|
|
d9ae99b5fe | ||
|
|
45d2d86bba | ||
|
|
e21d5e5d01 | ||
|
|
8781e2a870 | ||
|
|
9e4bfd9d1a | ||
|
|
d61d6aa2e2 | ||
|
|
230a3a0180 | ||
|
|
002454b995 | ||
|
|
e6d9c2e218 | ||
|
|
eaa5054b00 | ||
|
|
4e9e63ed08 | ||
|
|
76ea5b6e34 | ||
|
|
2f788f7397 | ||
|
|
29766aa9b7 | ||
|
|
cc30376297 | ||
|
|
5b007fbe01 | ||
|
|
e1f8ea3b1a | ||
|
|
6f019f0bb4 | ||
|
|
f475947776 | ||
|
|
ee6901eb92 | ||
|
|
84d7523d6c | ||
|
|
6900dc7dae | ||
|
|
6247e516c6 | ||
|
|
cdf970a88c | ||
|
|
a447c387f9 | ||
|
|
ce2c94efed | ||
|
|
205ea4270b | ||
|
|
088b0e2f30 |
13
.ci/php-cs-fixer/composer.lock
generated
13
.ci/php-cs-fixer/composer.lock
generated
@@ -402,16 +402,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "friendsofphp/php-cs-fixer",
|
"name": "friendsofphp/php-cs-fixer",
|
||||||
"version": "v3.92.0",
|
"version": "v3.92.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": "5646c2cd99b7cb4b658ff681fe27069ba86c7280"
|
"reference": "64fab3553dce507ce247f7d1a7d65f74ef658c3f"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/5646c2cd99b7cb4b658ff681fe27069ba86c7280",
|
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/64fab3553dce507ce247f7d1a7d65f74ef658c3f",
|
||||||
"reference": "5646c2cd99b7cb4b658ff681fe27069ba86c7280",
|
"reference": "64fab3553dce507ce247f7d1a7d65f74ef658c3f",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -451,6 +451,7 @@
|
|||||||
"php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6",
|
"php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6",
|
||||||
"php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6",
|
"php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6",
|
||||||
"phpunit/phpunit": "^9.6.25 || ^10.5.53 || ^11.5.34",
|
"phpunit/phpunit": "^9.6.25 || ^10.5.53 || ^11.5.34",
|
||||||
|
"symfony/polyfill-php85": "^1.33",
|
||||||
"symfony/var-dumper": "^5.4.48 || ^6.4.24 || ^7.3.2 || ^8.0",
|
"symfony/var-dumper": "^5.4.48 || ^6.4.24 || ^7.3.2 || ^8.0",
|
||||||
"symfony/yaml": "^5.4.45 || ^6.4.24 || ^7.3.2 || ^8.0"
|
"symfony/yaml": "^5.4.45 || ^6.4.24 || ^7.3.2 || ^8.0"
|
||||||
},
|
},
|
||||||
@@ -493,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.92.0"
|
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.92.2"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -501,7 +502,7 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-12-12T10:29:19+00:00"
|
"time": "2025-12-17T00:04:16+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/container",
|
"name": "psr/container",
|
||||||
|
|||||||
10
.env.example
10
.env.example
@@ -275,16 +275,6 @@ DISABLE_CSP_HEADER=false
|
|||||||
TRACKER_SITE_ID=
|
TRACKER_SITE_ID=
|
||||||
TRACKER_URL=
|
TRACKER_URL=
|
||||||
|
|
||||||
#
|
|
||||||
# You can automatically submit errors to the Firefly III developer using sentry.io
|
|
||||||
#
|
|
||||||
# This is entirely optional of course. If you run into errors, I will gladly accept GitHub
|
|
||||||
# issues or a forwared email message.
|
|
||||||
#
|
|
||||||
# If you set this to true, your installation will try to contact sentry.io when it runs into errors.
|
|
||||||
#
|
|
||||||
REPORT_ERRORS_ONLINE=false
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Firefly III supports webhooks. These are security sensitive and must be enabled manually first.
|
# Firefly III supports webhooks. These are security sensitive and must be enabled manually first.
|
||||||
#
|
#
|
||||||
|
|||||||
2
.github/workflows/label-actions.yml
vendored
2
.github/workflows/label-actions.yml
vendored
@@ -18,4 +18,4 @@ jobs:
|
|||||||
action:
|
action:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: dessant/label-actions@v4
|
- uses: dessant/label-actions@v5
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
|||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class BudgetController
|
* Class BudgetController
|
||||||
@@ -286,7 +287,7 @@ class BudgetController extends Controller
|
|||||||
}
|
}
|
||||||
if (null !== $limit && $this->convertToPrimary) {
|
if (null !== $limit && $this->convertToPrimary) {
|
||||||
// convert and add all amounts.
|
// convert and add all amounts.
|
||||||
$limit->amount = app('steam')->positive($amount);
|
$limit->amount = Steam::positive($amount);
|
||||||
Log::debug(sprintf('Final amount in limit with converted amount %s', $limit->amount));
|
Log::debug(sprintf('Final amount in limit with converted amount %s', $limit->amount));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -486,7 +486,7 @@ class BasicController extends Controller
|
|||||||
'currency_decimal_places' => $currencies[$currencyId]->decimal_places,
|
'currency_decimal_places' => $currencies[$currencyId]->decimal_places,
|
||||||
'value_parsed' => Amount::formatFlat($currencies[$currencyId]->symbol, $currencies[$currencyId]->decimal_places, $availableBudget, false),
|
'value_parsed' => Amount::formatFlat($currencies[$currencyId]->symbol, $currencies[$currencyId]->decimal_places, $availableBudget, false),
|
||||||
'local_icon' => 'money',
|
'local_icon' => 'money',
|
||||||
'sub_title' => Amount::formatFlat($currencies[$currencyId]->symbol, $currencies[$currencyId]->decimal_places, $availableBudget, false),
|
'sub_title' => Amount::formatFlat($currencies[$currencyId]->symbol, $currencies[$currencyId]->decimal_places, bcdiv($availableBudget, (string)$days), false),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
foreach ($spent as $row) {
|
foreach ($spent as $row) {
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ use Illuminate\Console\Command;
|
|||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use ValueError;
|
use ValueError;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
class CorrectsAmounts extends Command
|
class CorrectsAmounts extends Command
|
||||||
{
|
{
|
||||||
@@ -244,7 +245,7 @@ class CorrectsAmounts extends Command
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (-1 === $check) {
|
if (-1 === $check) {
|
||||||
$item->trigger_value = app('steam')->positive($item->trigger_value);
|
$item->trigger_value = Steam::positive($item->trigger_value);
|
||||||
$item->save();
|
$item->save();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ use FireflyIII\Enums\AccountTypeEnum;
|
|||||||
use FireflyIII\Models\Account;
|
use FireflyIII\Models\Account;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
class CorrectsIbans extends Command
|
class CorrectsIbans extends Command
|
||||||
{
|
{
|
||||||
@@ -55,7 +56,7 @@ class CorrectsIbans extends Command
|
|||||||
/** @var Account $account */
|
/** @var Account $account */
|
||||||
foreach ($accounts as $account) {
|
foreach ($accounts as $account) {
|
||||||
$iban = (string) $account->iban;
|
$iban = (string) $account->iban;
|
||||||
$newIban = app('steam')->filterSpaces($iban);
|
$newIban = Steam::filterSpaces($iban);
|
||||||
if ('' !== $iban && $iban !== $newIban) {
|
if ('' !== $iban && $iban !== $newIban) {
|
||||||
$account->iban = $newIban;
|
$account->iban = $newIban;
|
||||||
$account->save();
|
$account->save();
|
||||||
@@ -66,7 +67,7 @@ class CorrectsIbans extends Command
|
|||||||
$accountNumber = $account->accountMeta->where('name', 'account_number')->first();
|
$accountNumber = $account->accountMeta->where('name', 'account_number')->first();
|
||||||
if (null !== $accountNumber) {
|
if (null !== $accountNumber) {
|
||||||
$number = (string) $accountNumber->value;
|
$number = (string) $accountNumber->value;
|
||||||
$newNumber = app('steam')->filterSpaces($number);
|
$newNumber = Steam::filterSpaces($number);
|
||||||
if ('' !== $number && $number !== $newNumber) {
|
if ('' !== $number && $number !== $newNumber) {
|
||||||
$accountNumber->value = $newNumber;
|
$accountNumber->value = $newNumber;
|
||||||
$accountNumber->save();
|
$accountNumber->save();
|
||||||
|
|||||||
@@ -112,9 +112,9 @@ class CorrectsUnevenAmount extends Command
|
|||||||
if ($source->transaction_currency_id === $destination->transaction_currency_id) {
|
if ($source->transaction_currency_id === $destination->transaction_currency_id) {
|
||||||
Log::debug('Ready to swap data between transactions.');
|
Log::debug('Ready to swap data between transactions.');
|
||||||
$destination->foreign_currency_id = $source->transaction_currency_id;
|
$destination->foreign_currency_id = $source->transaction_currency_id;
|
||||||
$destination->foreign_amount = app('steam')->positive($source->amount);
|
$destination->foreign_amount = Steam::positive($source->amount);
|
||||||
$destination->transaction_currency_id = $source->foreign_currency_id;
|
$destination->transaction_currency_id = $source->foreign_currency_id;
|
||||||
$destination->amount = app('steam')->positive($source->foreign_amount);
|
$destination->amount = Steam::positive($source->foreign_amount);
|
||||||
$destination->balance_dirty = true;
|
$destination->balance_dirty = true;
|
||||||
$source->balance_dirty = true;
|
$source->balance_dirty = true;
|
||||||
$destination->save();
|
$destination->save();
|
||||||
@@ -257,8 +257,8 @@ class CorrectsUnevenAmount extends Command
|
|||||||
// source currency = dest foreign currency
|
// source currency = dest foreign currency
|
||||||
// dest amount = source foreign currency
|
// dest amount = source foreign currency
|
||||||
// dest currency = source foreign currency
|
// dest currency = source foreign currency
|
||||||
// Log::debug(sprintf('[a] %s', bccomp(app('steam')->positive($source->amount), app('steam')->positive($destination->foreign_amount))));
|
// Log::debug(sprintf('[a] %s', bccomp(\FireflyIII\Support\Facades\Steam::positive($source->amount), \FireflyIII\Support\Facades\Steam::positive($destination->foreign_amount))));
|
||||||
// Log::debug(sprintf('[b] %s', bccomp(app('steam')->positive($destination->amount), app('steam')->positive($source->foreign_amount))));
|
// Log::debug(sprintf('[b] %s', bccomp(\FireflyIII\Support\Facades\Steam::positive($destination->amount), \FireflyIII\Support\Facades\Steam::positive($source->foreign_amount))));
|
||||||
// Log::debug(sprintf('[c] %s', var_export($source->transaction_currency_id === $destination->foreign_currency_id,true)));
|
// Log::debug(sprintf('[c] %s', var_export($source->transaction_currency_id === $destination->foreign_currency_id,true)));
|
||||||
// Log::debug(sprintf('[d] %s', var_export((int) $destination->transaction_currency_id ===(int) $source->foreign_currency_id, true)));
|
// Log::debug(sprintf('[d] %s', var_export((int) $destination->transaction_currency_id ===(int) $source->foreign_currency_id, true)));
|
||||||
return 0 === bccomp(Steam::positive($source->amount), Steam::positive($destination->foreign_amount))
|
return 0 === bccomp(Steam::positive($source->amount), Steam::positive($destination->foreign_amount))
|
||||||
@@ -428,9 +428,9 @@ class CorrectsUnevenAmount extends Command
|
|||||||
|
|
||||||
// // only fix the destination transaction
|
// // only fix the destination transaction
|
||||||
// $destination->foreign_currency_id = $source->transaction_currency_id;
|
// $destination->foreign_currency_id = $source->transaction_currency_id;
|
||||||
// $destination->foreign_amount = app('steam')->positive($source->amount);
|
// $destination->foreign_amount = \FireflyIII\Support\Facades\Steam::positive($source->amount);
|
||||||
// $destination->transaction_currency_id = $source->foreign_currency_id;
|
// $destination->transaction_currency_id = $source->foreign_currency_id;
|
||||||
// $destination->amount = app('steam')->positive($source->foreign_amount);
|
// $destination->amount = \FireflyIII\Support\Facades\Steam::positive($source->foreign_amount);
|
||||||
// $destination->balance_dirty = true;
|
// $destination->balance_dirty = true;
|
||||||
// $source->balance_dirty = true;
|
// $source->balance_dirty = true;
|
||||||
// $destination->save();
|
// $destination->save();
|
||||||
|
|||||||
@@ -55,13 +55,13 @@ class ValidatesFilePermissions extends Command
|
|||||||
/** @var string $directory */
|
/** @var string $directory */
|
||||||
foreach ($directories as $directory) {
|
foreach ($directories as $directory) {
|
||||||
if (!is_dir($directory)) {
|
if (!is_dir($directory)) {
|
||||||
$this->friendlyError(sprintf('Directory "%s" cannot found. It is necessary to allow files to be uploaded.', $uploadDir));
|
$this->friendlyError(sprintf('Directory "%s" cannot found. It is necessary to allow files to be uploaded.', $directory));
|
||||||
$errors = true;
|
$errors = true;
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!is_writable($directory)) {
|
if (!is_writable($directory)) {
|
||||||
$this->friendlyError(sprintf('Directory "%s" is not writeable. Uploading attachments may fail silently.', $uploadDir));
|
$this->friendlyError(sprintf('Directory "%s" is not writeable. Uploading attachments may fail silently.', $directory));
|
||||||
$errors = true;
|
$errors = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,6 @@ use Illuminate\Validation\ValidationException as LaravelValidationException;
|
|||||||
use Laravel\Passport\Exceptions\OAuthServerException as LaravelOAuthException;
|
use Laravel\Passport\Exceptions\OAuthServerException as LaravelOAuthException;
|
||||||
use League\OAuth2\Server\Exception\OAuthServerException;
|
use League\OAuth2\Server\Exception\OAuthServerException;
|
||||||
use Override;
|
use Override;
|
||||||
use Sentry\Laravel\Integration;
|
|
||||||
use Symfony\Component\HttpFoundation\Exception\SuspiciousOperationException;
|
use Symfony\Component\HttpFoundation\Exception\SuspiciousOperationException;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
|
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
|
||||||
@@ -50,6 +49,7 @@ use Symfony\Component\HttpKernel\Exception\HttpException;
|
|||||||
use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
|
use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
|
||||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||||
use Throwable;
|
use Throwable;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
use function Safe\json_encode;
|
use function Safe\json_encode;
|
||||||
use function Safe\parse_url;
|
use function Safe\parse_url;
|
||||||
@@ -83,14 +83,7 @@ class Handler extends ExceptionHandler
|
|||||||
* Register the exception handling callbacks for the application.
|
* Register the exception handling callbacks for the application.
|
||||||
*/
|
*/
|
||||||
#[Override]
|
#[Override]
|
||||||
public function register(): void
|
public function register(): void {}
|
||||||
{
|
|
||||||
if (true === config('firefly.report_errors_online')) {
|
|
||||||
$this->reportable(function (Throwable $e): void {
|
|
||||||
Integration::captureUnhandledException($e);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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
|
||||||
@@ -287,7 +280,7 @@ class Handler extends ExceptionHandler
|
|||||||
protected function invalid($request, LaravelValidationException $exception): \Illuminate\Http\Response|JsonResponse|RedirectResponse
|
protected function invalid($request, LaravelValidationException $exception): \Illuminate\Http\Response|JsonResponse|RedirectResponse
|
||||||
{
|
{
|
||||||
// protect against open redirect when submitting invalid forms.
|
// protect against open redirect when submitting invalid forms.
|
||||||
$previous = app('steam')->getSafePreviousUrl();
|
$previous = Steam::getSafePreviousUrl();
|
||||||
$redirect = $this->getRedirectUrl($exception);
|
$redirect = $this->getRedirectUrl($exception);
|
||||||
|
|
||||||
return redirect($redirect ?? $previous)
|
return redirect($redirect ?? $previous)
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ use FireflyIII\Services\Internal\Update\AccountUpdateService;
|
|||||||
use Illuminate\Database\QueryException;
|
use Illuminate\Database\QueryException;
|
||||||
use Illuminate\Support\Facades\Validator;
|
use Illuminate\Support\Facades\Validator;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class TransactionFactory
|
* Class TransactionFactory
|
||||||
@@ -58,10 +59,10 @@ class TransactionFactory
|
|||||||
$foreignAmount = null;
|
$foreignAmount = null;
|
||||||
}
|
}
|
||||||
if (null !== $foreignAmount) {
|
if (null !== $foreignAmount) {
|
||||||
$foreignAmount = app('steam')->negative($foreignAmount);
|
$foreignAmount = Steam::negative($foreignAmount);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->create(app('steam')->negative($amount), $foreignAmount);
|
return $this->create(Steam::negative($amount), $foreignAmount);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -170,10 +171,10 @@ class TransactionFactory
|
|||||||
$foreignAmount = null;
|
$foreignAmount = null;
|
||||||
}
|
}
|
||||||
if (null !== $foreignAmount) {
|
if (null !== $foreignAmount) {
|
||||||
$foreignAmount = app('steam')->positive($foreignAmount);
|
$foreignAmount = Steam::positive($foreignAmount);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->create(app('steam')->positive($amount), $foreignAmount);
|
return $this->create(Steam::positive($amount), $foreignAmount);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setAccount(Account $account): void
|
public function setAccount(Account $account): void
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Generator\Chart\Basic;
|
namespace FireflyIII\Generator\Chart\Basic;
|
||||||
|
|
||||||
use FireflyIII\Support\ChartColour;
|
use FireflyIII\Support\ChartColour;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class ChartJsGenerator.
|
* Class ChartJsGenerator.
|
||||||
@@ -56,7 +57,7 @@ class ChartJsGenerator implements GeneratorInterface
|
|||||||
$index = 0;
|
$index = 0;
|
||||||
foreach ($data as $key => $valueArray) {
|
foreach ($data as $key => $valueArray) {
|
||||||
// make larger than 0
|
// make larger than 0
|
||||||
$chartData['datasets'][0]['data'][] = app('steam')->positive((string) $valueArray['amount']);
|
$chartData['datasets'][0]['data'][] = Steam::positive((string) $valueArray['amount']);
|
||||||
$chartData['datasets'][0]['backgroundColor'][] = ChartColour::getColour($index);
|
$chartData['datasets'][0]['backgroundColor'][] = ChartColour::getColour($index);
|
||||||
$chartData['datasets'][0]['currency_symbol'][] = $valueArray['currency_symbol'];
|
$chartData['datasets'][0]['currency_symbol'][] = $valueArray['currency_symbol'];
|
||||||
$chartData['labels'][] = $key;
|
$chartData['labels'][] = $key;
|
||||||
@@ -163,7 +164,7 @@ class ChartJsGenerator implements GeneratorInterface
|
|||||||
$index = 0;
|
$index = 0;
|
||||||
foreach ($data as $key => $value) {
|
foreach ($data as $key => $value) {
|
||||||
// make larger than 0
|
// make larger than 0
|
||||||
$chartData['datasets'][0]['data'][] = app('steam')->positive((string) $value);
|
$chartData['datasets'][0]['data'][] = Steam::positive((string) $value);
|
||||||
$chartData['datasets'][0]['backgroundColor'][] = ChartColour::getColour($index);
|
$chartData['datasets'][0]['backgroundColor'][] = ChartColour::getColour($index);
|
||||||
|
|
||||||
$chartData['labels'][] = $key;
|
$chartData['labels'][] = $key;
|
||||||
|
|||||||
@@ -153,13 +153,13 @@ class MonthReportGenerator implements ReportGeneratorInterface
|
|||||||
|
|
||||||
// make sure amount is in the right "direction".
|
// make sure amount is in the right "direction".
|
||||||
if ($account->id === $journal['destination_account_id']) {
|
if ($account->id === $journal['destination_account_id']) {
|
||||||
$transactionAmount = app('steam')->positive($journal['amount']);
|
$transactionAmount = Steam::positive($journal['amount']);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($currency->id === $journal['foreign_currency_id']) {
|
if ($currency->id === $journal['foreign_currency_id']) {
|
||||||
$transactionAmount = $journal['foreign_amount'];
|
$transactionAmount = $journal['foreign_amount'];
|
||||||
if ($account->id === $journal['destination_account_id']) {
|
if ($account->id === $journal['destination_account_id']) {
|
||||||
$transactionAmount = app('steam')->positive($journal['foreign_amount']);
|
$transactionAmount = Steam::positive($journal['foreign_amount']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -175,7 +175,7 @@ class MonthReportGenerator implements ReportGeneratorInterface
|
|||||||
$journals[$index]['payment_date'] = $journalRepository->getMetaDateById($journal['transaction_journal_id'], 'payment_date');
|
$journals[$index]['payment_date'] = $journalRepository->getMetaDateById($journal['transaction_journal_id'], 'payment_date');
|
||||||
$journals[$index]['invoice_date'] = $journalRepository->getMetaDateById($journal['transaction_journal_id'], 'invoice_date');
|
$journals[$index]['invoice_date'] = $journalRepository->getMetaDateById($journal['transaction_journal_id'], 'invoice_date');
|
||||||
}
|
}
|
||||||
$locale = app('steam')->getLocale();
|
$locale = Steam::getLocale();
|
||||||
// call is correct.
|
// call is correct.
|
||||||
Log::debug(sprintf('getAuditReport end: Call finalAccountBalance with date/time "%s"', $this->end->toIso8601String()));
|
Log::debug(sprintf('getAuditReport end: Call finalAccountBalance with date/time "%s"', $this->end->toIso8601String()));
|
||||||
|
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ namespace FireflyIII\Helpers\Collector\Extensions;
|
|||||||
|
|
||||||
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
||||||
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
|
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Trait AmountCollection
|
* Trait AmountCollection
|
||||||
@@ -39,7 +40,7 @@ trait AmountCollection
|
|||||||
{
|
{
|
||||||
$this->query->where(
|
$this->query->where(
|
||||||
static function (EloquentBuilder $q) use ($amount): void { // @phpstan-ignore-line
|
static function (EloquentBuilder $q) use ($amount): void { // @phpstan-ignore-line
|
||||||
$q->where('source.amount', app('steam')->negative($amount));
|
$q->where('source.amount', Steam::negative($amount));
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -50,7 +51,7 @@ trait AmountCollection
|
|||||||
{
|
{
|
||||||
$this->query->where(
|
$this->query->where(
|
||||||
static function (EloquentBuilder $q) use ($amount): void { // @phpstan-ignore-line
|
static function (EloquentBuilder $q) use ($amount): void { // @phpstan-ignore-line
|
||||||
$q->where('source.amount', '!=', app('steam')->negative($amount));
|
$q->where('source.amount', '!=', Steam::negative($amount));
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -64,7 +65,7 @@ trait AmountCollection
|
|||||||
{
|
{
|
||||||
$this->query->where(
|
$this->query->where(
|
||||||
static function (EloquentBuilder $q) use ($amount): void { // @phpstan-ignore-line
|
static function (EloquentBuilder $q) use ($amount): void { // @phpstan-ignore-line
|
||||||
$q->where('destination.amount', '<=', app('steam')->positive($amount));
|
$q->where('destination.amount', '<=', Steam::positive($amount));
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -78,7 +79,7 @@ trait AmountCollection
|
|||||||
{
|
{
|
||||||
$this->query->where(
|
$this->query->where(
|
||||||
static function (EloquentBuilder $q) use ($amount): void { // @phpstan-ignore-line
|
static function (EloquentBuilder $q) use ($amount): void { // @phpstan-ignore-line
|
||||||
$q->where('destination.amount', '>=', app('steam')->positive($amount));
|
$q->where('destination.amount', '>=', Steam::positive($amount));
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -93,7 +94,7 @@ trait AmountCollection
|
|||||||
$this->query->where(
|
$this->query->where(
|
||||||
static function (EloquentBuilder $q) use ($amount): void { // @phpstan-ignore-line
|
static function (EloquentBuilder $q) use ($amount): void { // @phpstan-ignore-line
|
||||||
$q->whereNotNull('source.foreign_amount');
|
$q->whereNotNull('source.foreign_amount');
|
||||||
$q->where('source.foreign_amount', app('steam')->negative($amount));
|
$q->where('source.foreign_amount', Steam::negative($amount));
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -108,7 +109,7 @@ trait AmountCollection
|
|||||||
$this->query->where(
|
$this->query->where(
|
||||||
static function (EloquentBuilder $q) use ($amount): void { // @phpstan-ignore-line
|
static function (EloquentBuilder $q) use ($amount): void { // @phpstan-ignore-line
|
||||||
$q->whereNull('source.foreign_amount');
|
$q->whereNull('source.foreign_amount');
|
||||||
$q->orWhere('source.foreign_amount', '!=', app('steam')->negative($amount));
|
$q->orWhere('source.foreign_amount', '!=', Steam::negative($amount));
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -123,7 +124,7 @@ trait AmountCollection
|
|||||||
$this->query->where(
|
$this->query->where(
|
||||||
static function (EloquentBuilder $q) use ($amount): void { // @phpstan-ignore-line
|
static function (EloquentBuilder $q) use ($amount): void { // @phpstan-ignore-line
|
||||||
$q->whereNotNull('destination.foreign_amount');
|
$q->whereNotNull('destination.foreign_amount');
|
||||||
$q->where('destination.foreign_amount', '<=', app('steam')->positive($amount));
|
$q->where('destination.foreign_amount', '<=', Steam::positive($amount));
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -138,7 +139,7 @@ trait AmountCollection
|
|||||||
$this->query->where(
|
$this->query->where(
|
||||||
static function (EloquentBuilder $q) use ($amount): void { // @phpstan-ignore-line
|
static function (EloquentBuilder $q) use ($amount): void { // @phpstan-ignore-line
|
||||||
$q->whereNotNull('destination.foreign_amount');
|
$q->whereNotNull('destination.foreign_amount');
|
||||||
$q->where('destination.foreign_amount', '>=', app('steam')->positive($amount));
|
$q->where('destination.foreign_amount', '>=', Steam::positive($amount));
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ use Illuminate\Http\Request;
|
|||||||
use Illuminate\Routing\Redirector;
|
use Illuminate\Routing\Redirector;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Illuminate\View\View;
|
use Illuminate\View\View;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class EditController
|
* Class EditController
|
||||||
@@ -148,9 +149,9 @@ class EditController extends Controller
|
|||||||
'BIC' => $repository->getMetaValue($account, 'BIC'),
|
'BIC' => $repository->getMetaValue($account, 'BIC'),
|
||||||
'opening_balance_date' => substr((string) $openingBalanceDate, 0, 10),
|
'opening_balance_date' => substr((string) $openingBalanceDate, 0, 10),
|
||||||
'liability_type_id' => $account->account_type_id,
|
'liability_type_id' => $account->account_type_id,
|
||||||
'opening_balance' => app('steam')->bcround($openingBalanceAmount, $currency->decimal_places),
|
'opening_balance' => Steam::bcround($openingBalanceAmount, $currency->decimal_places),
|
||||||
'liability_direction' => $this->repository->getMetaValue($account, 'liability_direction'),
|
'liability_direction' => $this->repository->getMetaValue($account, 'liability_direction'),
|
||||||
'virtual_balance' => app('steam')->bcround($virtualBalance, $currency->decimal_places),
|
'virtual_balance' => Steam::bcround($virtualBalance, $currency->decimal_places),
|
||||||
'currency_id' => $currency->id,
|
'currency_id' => $currency->id,
|
||||||
'include_net_worth' => $hasOldInput ? (bool) $request->old('include_net_worth') : $includeNetWorth,
|
'include_net_worth' => $hasOldInput ? (bool) $request->old('include_net_worth') : $includeNetWorth,
|
||||||
'interest' => $repository->getMetaValue($account, 'interest'),
|
'interest' => $repository->getMetaValue($account, 'interest'),
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ use FireflyIII\Exceptions\FireflyException;
|
|||||||
use FireflyIII\Http\Controllers\Controller;
|
use FireflyIII\Http\Controllers\Controller;
|
||||||
use FireflyIII\Providers\RouteServiceProvider;
|
use FireflyIII\Providers\RouteServiceProvider;
|
||||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Contracts\Foundation\Application;
|
use Illuminate\Contracts\Foundation\Application;
|
||||||
use Illuminate\Contracts\View\Factory;
|
use Illuminate\Contracts\View\Factory;
|
||||||
@@ -68,7 +69,7 @@ class LoginController extends Controller
|
|||||||
protected string $redirectTo = RouteServiceProvider::HOME;
|
protected string $redirectTo = RouteServiceProvider::HOME;
|
||||||
private UserRepositoryInterface $repository;
|
private UserRepositoryInterface $repository;
|
||||||
|
|
||||||
private string $username = 'email';
|
private string $username = 'email';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new controller instance.
|
* Create a new controller instance.
|
||||||
@@ -85,7 +86,7 @@ class LoginController extends Controller
|
|||||||
*
|
*
|
||||||
* @throws ValidationException
|
* @throws ValidationException
|
||||||
*/
|
*/
|
||||||
public function login(Request $request): JsonResponse|RedirectResponse
|
public function login(Request $request): JsonResponse | RedirectResponse
|
||||||
{
|
{
|
||||||
$username = $request->get($this->username());
|
$username = $request->get($this->username());
|
||||||
Log::channel('audit')->info(sprintf('User is trying to login using "%s"', $username));
|
Log::channel('audit')->info(sprintf('User is trying to login using "%s"', $username));
|
||||||
@@ -103,8 +104,7 @@ class LoginController extends Controller
|
|||||||
$this->username => trans('auth.failed'),
|
$this->username => trans('auth.failed'),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
->onlyInput($this->username)
|
->onlyInput($this->username);
|
||||||
;
|
|
||||||
}
|
}
|
||||||
Log::debug('Login data is present.');
|
Log::debug('Login data is present.');
|
||||||
|
|
||||||
@@ -128,11 +128,10 @@ class LoginController extends Controller
|
|||||||
// send a custom login event because laravel will also fire a login event if a "remember me"-cookie
|
// send a custom login event because laravel will also fire a login event if a "remember me"-cookie
|
||||||
// restores the event.
|
// restores the event.
|
||||||
event(new ActuallyLoggedIn($this->guard()->user()));
|
event(new ActuallyLoggedIn($this->guard()->user()));
|
||||||
|
|
||||||
return $this->sendLoginResponse($request);
|
return $this->sendLoginResponse($request);
|
||||||
}
|
}
|
||||||
Log::warning('Login attempt failed.');
|
Log::warning('Login attempt failed.');
|
||||||
$username = (string) $request->get($this->username());
|
$username = (string)$request->get($this->username());
|
||||||
$user = $this->repository->findByEmail($username);
|
$user = $this->repository->findByEmail($username);
|
||||||
if (!$user instanceof User) {
|
if (!$user instanceof User) {
|
||||||
// send event to owner.
|
// send event to owner.
|
||||||
@@ -185,10 +184,10 @@ class LoginController extends Controller
|
|||||||
/**
|
/**
|
||||||
* Log the user out of the application.
|
* Log the user out of the application.
|
||||||
*/
|
*/
|
||||||
public function logout(Request $request): Redirector|RedirectResponse|Response
|
public function logout(Request $request): Redirector | RedirectResponse | Response
|
||||||
{
|
{
|
||||||
$authGuard = config('firefly.authentication_guard');
|
$authGuard = config('firefly.authentication_guard');
|
||||||
$logoutUrl = config('firefly.custom_logout_url');
|
$logoutUrl = config('firefly.custom_logout_url');
|
||||||
if ('remote_user_guard' === $authGuard && '' !== $logoutUrl) {
|
if ('remote_user_guard' === $authGuard && '' !== $logoutUrl) {
|
||||||
return redirect($logoutUrl);
|
return redirect($logoutUrl);
|
||||||
}
|
}
|
||||||
@@ -222,13 +221,13 @@ class LoginController extends Controller
|
|||||||
* @throws ContainerExceptionInterface
|
* @throws ContainerExceptionInterface
|
||||||
* @throws NotFoundExceptionInterface
|
* @throws NotFoundExceptionInterface
|
||||||
*/
|
*/
|
||||||
public function showLoginForm(Request $request): Factory|Redirector|RedirectResponse|View
|
public function showLoginForm(Request $request): Factory | Redirector | RedirectResponse | View
|
||||||
{
|
{
|
||||||
Log::channel('audit')->info('Show login form (1.1).');
|
Log::channel('audit')->info('Show login form (1.1).');
|
||||||
|
|
||||||
$count = DB::table('users')->count();
|
$count = DB::table('users')->count();
|
||||||
$guard = config('auth.defaults.guard');
|
$guard = config('auth.defaults.guard');
|
||||||
$title = (string) trans('firefly.login_page_title');
|
$title = (string)trans('firefly.login_page_title');
|
||||||
|
|
||||||
if (0 === $count && 'web' === $guard) {
|
if (0 === $count && 'web' === $guard) {
|
||||||
return redirect(route('register'));
|
return redirect(route('register'));
|
||||||
@@ -248,16 +247,37 @@ class LoginController extends Controller
|
|||||||
$allowReset = false;
|
$allowReset = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$email = $request->old('email');
|
$email = $request->old('email');
|
||||||
$remember = $request->old('remember');
|
$remember = $request->old('remember');
|
||||||
|
|
||||||
$storeInCookie = config('google2fa.store_in_cookie', false);
|
$storeInCookie = config('google2fa.store_in_cookie', false);
|
||||||
if (false !== $storeInCookie) {
|
if (false !== $storeInCookie) {
|
||||||
$cookieName = config('google2fa.cookie_name', 'google2fa_token');
|
$cookieName = config('google2fa.cookie_name', 'google2fa_token');
|
||||||
Cookie::queue(Cookie::make($cookieName, 'invalid-'.Carbon::now()->getTimestamp()));
|
Cookie::queue(Cookie::make($cookieName, 'invalid-' . Carbon::now()->getTimestamp()));
|
||||||
}
|
}
|
||||||
$usernameField = $this->username();
|
$usernameField = $this->username();
|
||||||
|
|
||||||
return view('auth.login', ['allowRegistration' => $allowRegistration, 'email' => $email, 'remember' => $remember, 'allowReset' => $allowReset, 'title' => $title, 'usernameField' => $usernameField]);
|
return view('auth.login', ['allowRegistration' => $allowRegistration, 'email' => $email, 'remember' => $remember, 'allowReset' => $allowReset, 'title' => $title, 'usernameField' => $usernameField]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send the response after the user was authenticated.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
|
protected function sendLoginResponse(Request $request)
|
||||||
|
{
|
||||||
|
$request->session()->regenerate();
|
||||||
|
$this->clearLoginAttempts($request);
|
||||||
|
|
||||||
|
if ($response = $this->authenticated($request, $this->guard()->user())) {
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
$path = Steam::getSafeUrl(session()->pull('url.intended', route('index')), route('index'));
|
||||||
|
Log::debug(sprintf('SafeURL is %s', $path));
|
||||||
|
return $request->wantsJson() ? new JsonResponse([], 204) : redirect()->to($path);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ use Illuminate\Contracts\View\View;
|
|||||||
use Illuminate\Http\RedirectResponse;
|
use Illuminate\Http\RedirectResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class EditController
|
* Class EditController
|
||||||
@@ -84,8 +85,8 @@ class EditController extends Controller
|
|||||||
$this->rememberPreviousUrl('bills.edit.url');
|
$this->rememberPreviousUrl('bills.edit.url');
|
||||||
}
|
}
|
||||||
|
|
||||||
$bill->amount_min = app('steam')->bcround($bill->amount_min, $bill->transactionCurrency->decimal_places);
|
$bill->amount_min = Steam::bcround($bill->amount_min, $bill->transactionCurrency->decimal_places);
|
||||||
$bill->amount_max = app('steam')->bcround($bill->amount_max, $bill->transactionCurrency->decimal_places);
|
$bill->amount_max = Steam::bcround($bill->amount_max, $bill->transactionCurrency->decimal_places);
|
||||||
$rules = $this->repository->getRulesForBill($bill);
|
$rules = $this->repository->getRulesForBill($bill);
|
||||||
|
|
||||||
// code to handle active-checkboxes
|
// code to handle active-checkboxes
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ use Illuminate\Http\Request;
|
|||||||
use Illuminate\Routing\Redirector;
|
use Illuminate\Routing\Redirector;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Illuminate\View\View;
|
use Illuminate\View\View;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class BudgetLimitController
|
* Class BudgetLimitController
|
||||||
@@ -274,7 +275,7 @@ class BudgetLimitController extends Controller
|
|||||||
$array['left_per_day'] = 0 === $daysLeft ? bcadd((string) $array['spent'], (string) $array['amount']) : bcdiv(bcadd((string) $array['spent'], (string) $array['amount']), $array['days_left']);
|
$array['left_per_day'] = 0 === $daysLeft ? bcadd((string) $array['spent'], (string) $array['amount']) : bcdiv(bcadd((string) $array['spent'], (string) $array['amount']), $array['days_left']);
|
||||||
|
|
||||||
// left per day formatted.
|
// left per day formatted.
|
||||||
$array['amount'] = app('steam')->bcround($limit['amount'], $limit->transactionCurrency->decimal_places);
|
$array['amount'] = Steam::bcround($limit['amount'], $limit->transactionCurrency->decimal_places);
|
||||||
$array['left_per_day_formatted'] = app('amount')->formatAnything($limit->transactionCurrency, $array['left_per_day']);
|
$array['left_per_day_formatted'] = app('amount')->formatAnything($limit->transactionCurrency, $array['left_per_day']);
|
||||||
if ('true' === $request->get('redirect')) {
|
if ('true' === $request->get('redirect')) {
|
||||||
return redirect(route('budgets.index'));
|
return redirect(route('budgets.index'));
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ use Illuminate\Http\RedirectResponse;
|
|||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Illuminate\View\View;
|
use Illuminate\View\View;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class EditController
|
* Class EditController
|
||||||
@@ -104,7 +105,7 @@ class EditController extends Controller
|
|||||||
$amount = '0';
|
$amount = '0';
|
||||||
}
|
}
|
||||||
$amount = (string) $amount;
|
$amount = (string) $amount;
|
||||||
$preFilled['auto_budget_amount'] = app('steam')->bcround($amount, $autoBudget->transactionCurrency->decimal_places);
|
$preFilled['auto_budget_amount'] = Steam::bcround($amount, $autoBudget->transactionCurrency->decimal_places);
|
||||||
}
|
}
|
||||||
|
|
||||||
// put previous url in session if not redirect from store (not "return_to_edit").
|
// put previous url in session if not redirect from store (not "return_to_edit").
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ use Illuminate\Http\Request;
|
|||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Illuminate\View\View;
|
use Illuminate\View\View;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class IndexController
|
* Class IndexController
|
||||||
@@ -203,7 +204,7 @@ class IndexController extends Controller
|
|||||||
foreach ($budgetLimits as $limit) {
|
foreach ($budgetLimits as $limit) {
|
||||||
Log::debug(sprintf('Working on budget limit #%d', $limit->id));
|
Log::debug(sprintf('Working on budget limit #%d', $limit->id));
|
||||||
$currency = $limit->transactionCurrency ?? $primaryCurrency;
|
$currency = $limit->transactionCurrency ?? $primaryCurrency;
|
||||||
$amount = app('steam')->bcround($limit->amount, $currency->decimal_places);
|
$amount = Steam::bcround($limit->amount, $currency->decimal_places);
|
||||||
$array['budgeted'][] = [
|
$array['budgeted'][] = [
|
||||||
'id' => $limit->id,
|
'id' => $limit->id,
|
||||||
'amount' => $amount,
|
'amount' => $amount,
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ use FireflyIII\Models\Bill;
|
|||||||
use FireflyIII\Repositories\Bill\BillRepositoryInterface;
|
use FireflyIII\Repositories\Bill\BillRepositoryInterface;
|
||||||
use FireflyIII\Support\CacheProperties;
|
use FireflyIII\Support\CacheProperties;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class BillController.
|
* Class BillController.
|
||||||
@@ -113,7 +114,7 @@ class BillController extends Controller
|
|||||||
if ($cache->has()) {
|
if ($cache->has()) {
|
||||||
return response()->json($cache->get());
|
return response()->json($cache->get());
|
||||||
}
|
}
|
||||||
$locale = app('steam')->getLocale();
|
$locale = Steam::getLocale();
|
||||||
|
|
||||||
/** @var GroupCollectorInterface $collector */
|
/** @var GroupCollectorInterface $collector */
|
||||||
$collector = app(GroupCollectorInterface::class);
|
$collector = app(GroupCollectorInterface::class);
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ use FireflyIII\Support\Http\Controllers\DateCalculation;
|
|||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class BudgetController.
|
* Class BudgetController.
|
||||||
@@ -166,7 +167,7 @@ class BudgetController extends Controller
|
|||||||
if ($cache->has()) {
|
if ($cache->has()) {
|
||||||
return response()->json($cache->get());
|
return response()->json($cache->get());
|
||||||
}
|
}
|
||||||
$locale = app('steam')->getLocale();
|
$locale = Steam::getLocale();
|
||||||
$entries = [];
|
$entries = [];
|
||||||
$amount = $budgetLimit->amount ?? '0';
|
$amount = $budgetLimit->amount ?? '0';
|
||||||
$budgetCollection = new Collection()->push($budget);
|
$budgetCollection = new Collection()->push($budget);
|
||||||
@@ -531,13 +532,13 @@ class BudgetController extends Controller
|
|||||||
// get budget limit in this period for this currency.
|
// get budget limit in this period for this currency.
|
||||||
$limit = $this->blRepository->find($budget, $currency, $currentStart, $currentEnd);
|
$limit = $this->blRepository->find($budget, $currency, $currentStart, $currentEnd);
|
||||||
if ($limit instanceof BudgetLimit) {
|
if ($limit instanceof BudgetLimit) {
|
||||||
$chartData[1]['entries'][$title] = app('steam')->bcround($limit->amount, $currency->decimal_places);
|
$chartData[1]['entries'][$title] = Steam::bcround($limit->amount, $currency->decimal_places);
|
||||||
}
|
}
|
||||||
|
|
||||||
// get spent amount in this period for this currency.
|
// get spent amount in this period for this currency.
|
||||||
$sum = $this->opsRepository->sumExpenses($currentStart, $currentEnd, $accounts, new Collection()->push($budget), $currency);
|
$sum = $this->opsRepository->sumExpenses($currentStart, $currentEnd, $accounts, new Collection()->push($budget), $currency);
|
||||||
$amount = app('steam')->positive($sum[$currency->id]['sum'] ?? '0');
|
$amount = Steam::positive($sum[$currency->id]['sum'] ?? '0');
|
||||||
$chartData[0]['entries'][$title] = app('steam')->bcround($amount, $currency->decimal_places);
|
$chartData[0]['entries'][$title] = Steam::bcround($amount, $currency->decimal_places);
|
||||||
|
|
||||||
$currentStart = clone $currentEnd;
|
$currentStart = clone $currentEnd;
|
||||||
$currentStart->addDay()->startOfDay();
|
$currentStart->addDay()->startOfDay();
|
||||||
@@ -574,8 +575,8 @@ class BudgetController extends Controller
|
|||||||
$currentEnd = Navigation::endOfPeriod($currentStart, $preferredRange);
|
$currentEnd = Navigation::endOfPeriod($currentStart, $preferredRange);
|
||||||
$title = $currentStart->isoFormat($titleFormat);
|
$title = $currentStart->isoFormat($titleFormat);
|
||||||
$sum = $this->nbRepository->sumExpenses($currentStart, $currentEnd, $accounts, $currency);
|
$sum = $this->nbRepository->sumExpenses($currentStart, $currentEnd, $accounts, $currency);
|
||||||
$amount = app('steam')->positive($sum[$currency->id]['sum'] ?? '0');
|
$amount = Steam::positive($sum[$currency->id]['sum'] ?? '0');
|
||||||
$chartData[$title] = app('steam')->bcround($amount, $currency->decimal_places);
|
$chartData[$title] = Steam::bcround($amount, $currency->decimal_places);
|
||||||
$currentStart = Navigation::addPeriod($currentStart, $preferredRange, 0);
|
$currentStart = Navigation::addPeriod($currentStart, $preferredRange, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
|
|||||||
use FireflyIII\Support\CacheProperties;
|
use FireflyIII\Support\CacheProperties;
|
||||||
use FireflyIII\Support\Http\Controllers\DateCalculation;
|
use FireflyIII\Support\Http\Controllers\DateCalculation;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class PiggyBankController.
|
* Class PiggyBankController.
|
||||||
@@ -70,7 +71,7 @@ class PiggyBankController extends Controller
|
|||||||
}
|
}
|
||||||
$set = $repository->getEvents($piggyBank);
|
$set = $repository->getEvents($piggyBank);
|
||||||
$set = $set->reverse();
|
$set = $set->reverse();
|
||||||
$locale = app('steam')->getLocale();
|
$locale = Steam::getLocale();
|
||||||
|
|
||||||
// get first event or start date of piggy bank or today
|
// get first event or start date of piggy bank or today
|
||||||
$startDate = $piggyBank->start_date ?? today(config('app.timezone'));
|
$startDate = $piggyBank->start_date ?? today(config('app.timezone'));
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ class JavascriptController extends Controller
|
|||||||
if ($account instanceof Account) {
|
if ($account instanceof Account) {
|
||||||
$currency = $repository->getAccountCurrency($account) ?? $this->primaryCurrency;
|
$currency = $repository->getAccountCurrency($account) ?? $this->primaryCurrency;
|
||||||
}
|
}
|
||||||
$locale = app('steam')->getLocale();
|
$locale = Steam::getLocale();
|
||||||
$accounting = app('amount')->getJsConfig();
|
$accounting = app('amount')->getJsConfig();
|
||||||
$accounting['frac_digits'] = $currency->decimal_places;
|
$accounting['frac_digits'] = $currency->decimal_places;
|
||||||
$pref = Preferences::get('language', config('firefly.default_language', 'en_US'));
|
$pref = Preferences::get('language', config('firefly.default_language', 'en_US'));
|
||||||
|
|||||||
@@ -278,9 +278,9 @@ class ReconcileController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($inverse) {
|
if ($inverse) {
|
||||||
$journal['amount'] = app('steam')->positive($journal['amount']);
|
$journal['amount'] = Steam::positive($journal['amount']);
|
||||||
if (null !== $journal['foreign_amount']) {
|
if (null !== $journal['foreign_amount']) {
|
||||||
$journal['foreign_amount'] = app('steam')->positive($journal['foreign_amount']);
|
$journal['foreign_amount'] = Steam::positive($journal['foreign_amount']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ use FireflyIII\Models\RecurrenceRepetition;
|
|||||||
use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface;
|
use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class RecurrenceController
|
* Class RecurrenceController
|
||||||
@@ -167,7 +168,7 @@ class RecurrenceController extends Controller
|
|||||||
}
|
}
|
||||||
$date->startOfDay();
|
$date->startOfDay();
|
||||||
$preSelected = (string) $request->get('pre_select');
|
$preSelected = (string) $request->get('pre_select');
|
||||||
$locale = app('steam')->getLocale();
|
$locale = Steam::getLocale();
|
||||||
|
|
||||||
Log::debug(sprintf('date = %s, today = %s. date > today? %s', $date->toAtomString(), $today->toAtomString(), var_export($date > $today, true)));
|
Log::debug(sprintf('date = %s, today = %s. date > today? %s', $date->toAtomString(), $today->toAtomString(), var_export($date > $today, true)));
|
||||||
Log::debug(sprintf('past = true? %s', var_export('true' === (string) $request->get('past'), true)));
|
Log::debug(sprintf('past = true? %s', var_export('true' === (string) $request->get('past'), true)));
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ use Illuminate\Http\RedirectResponse;
|
|||||||
use Illuminate\Routing\Redirector;
|
use Illuminate\Routing\Redirector;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Illuminate\View\View;
|
use Illuminate\View\View;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class EditController
|
* Class EditController
|
||||||
@@ -89,7 +90,7 @@ class EditController extends Controller
|
|||||||
$preFilled = [
|
$preFilled = [
|
||||||
'name' => $piggyBank->name,
|
'name' => $piggyBank->name,
|
||||||
'transaction_currency_id' => (int) $piggyBank->transaction_currency_id,
|
'transaction_currency_id' => (int) $piggyBank->transaction_currency_id,
|
||||||
'target_amount' => app('steam')->bcround($piggyBank->target_amount, $piggyBank->transactionCurrency->decimal_places),
|
'target_amount' => Steam::bcround($piggyBank->target_amount, $piggyBank->transactionCurrency->decimal_places),
|
||||||
'target_date' => $targetDate,
|
'target_date' => $targetDate,
|
||||||
'start_date' => $startDate,
|
'start_date' => $startDate,
|
||||||
'accounts' => [],
|
'accounts' => [],
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ use Illuminate\Support\Facades\Log;
|
|||||||
use Illuminate\View\View;
|
use Illuminate\View\View;
|
||||||
use JsonException;
|
use JsonException;
|
||||||
use Safe\Exceptions\FilesystemException;
|
use Safe\Exceptions\FilesystemException;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
use function Safe\file_get_contents;
|
use function Safe\file_get_contents;
|
||||||
use function Safe\json_decode;
|
use function Safe\json_decode;
|
||||||
@@ -108,7 +109,7 @@ class PreferencesController extends Controller
|
|||||||
if (!is_array($frontpageAccounts)) {
|
if (!is_array($frontpageAccounts)) {
|
||||||
$frontpageAccounts = $accountIds;
|
$frontpageAccounts = $accountIds;
|
||||||
}
|
}
|
||||||
$language = app('steam')->getLanguage();
|
$language = Steam::getLanguage();
|
||||||
$languages = config('firefly.languages');
|
$languages = config('firefly.languages');
|
||||||
$locale = Preferences::get('locale', config('firefly.default_locale', 'equal'))->data;
|
$locale = Preferences::get('locale', config('firefly.default_locale', 'equal'))->data;
|
||||||
$listPageSize = Preferences::get('listPageSize', 50)->data;
|
$listPageSize = Preferences::get('listPageSize', 50)->data;
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ use Illuminate\Contracts\View\View;
|
|||||||
use Illuminate\Http\RedirectResponse;
|
use Illuminate\Http\RedirectResponse;
|
||||||
use Illuminate\Routing\Redirector;
|
use Illuminate\Routing\Redirector;
|
||||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class DeleteController
|
* Class DeleteController
|
||||||
@@ -83,7 +84,7 @@ class DeleteController extends Controller
|
|||||||
}
|
}
|
||||||
$objectType = strtolower($journal->transaction_type_type ?? $journal->transactionType->type);
|
$objectType = strtolower($journal->transaction_type_type ?? $journal->transactionType->type);
|
||||||
$subTitle = (string) trans('firefly.delete_'.$objectType, ['description' => $group->title ?? $journal->description]);
|
$subTitle = (string) trans('firefly.delete_'.$objectType, ['description' => $group->title ?? $journal->description]);
|
||||||
$previous = app('steam')->getSafePreviousUrl();
|
$previous = Steam::getSafePreviousUrl();
|
||||||
// put previous url in session
|
// put previous url in session
|
||||||
Log::debug('Will try to remember previous URL');
|
Log::debug('Will try to remember previous URL');
|
||||||
$this->rememberPreviousUrl('transactions.delete.url');
|
$this->rememberPreviousUrl('transactions.delete.url');
|
||||||
|
|||||||
@@ -24,13 +24,13 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace FireflyIII\Http\Controllers\Transaction;
|
namespace FireflyIII\Http\Controllers\Transaction;
|
||||||
|
|
||||||
use FireflyIII\Support\Facades\Preferences;
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use FireflyIII\Exceptions\FireflyException;
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
||||||
use FireflyIII\Http\Controllers\Controller;
|
use FireflyIII\Http\Controllers\Controller;
|
||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
|
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use FireflyIII\Support\Http\Controllers\PeriodOverview;
|
use FireflyIII\Support\Http\Controllers\PeriodOverview;
|
||||||
use Illuminate\Contracts\View\Factory;
|
use Illuminate\Contracts\View\Factory;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -58,7 +58,7 @@ class IndexController extends Controller
|
|||||||
$this->middleware(
|
$this->middleware(
|
||||||
function ($request, $next) {
|
function ($request, $next) {
|
||||||
app('view')->share('mainTitleIcon', 'fa-exchange');
|
app('view')->share('mainTitleIcon', 'fa-exchange');
|
||||||
app('view')->share('title', (string) trans('firefly.transactions'));
|
app('view')->share('title', (string)trans('firefly.transactions'));
|
||||||
|
|
||||||
$this->repository = app(JournalRepositoryInterface::class);
|
$this->repository = app(JournalRepositoryInterface::class);
|
||||||
|
|
||||||
@@ -84,8 +84,8 @@ class IndexController extends Controller
|
|||||||
|
|
||||||
$subTitleIcon = config('firefly.transactionIconsByType.'.$objectType);
|
$subTitleIcon = config('firefly.transactionIconsByType.'.$objectType);
|
||||||
$types = config('firefly.transactionTypesByType.'.$objectType);
|
$types = config('firefly.transactionTypesByType.'.$objectType);
|
||||||
$page = (int) $request->get('page');
|
$page = (int)$request->get('page');
|
||||||
$pageSize = (int) Preferences::get('listPageSize', 50)->data;
|
$pageSize = (int)Preferences::get('listPageSize', 50)->data;
|
||||||
|
|
||||||
if (!$start instanceof Carbon) {
|
if (!$start instanceof Carbon) {
|
||||||
$start = session('start');
|
$start = session('start');
|
||||||
@@ -100,11 +100,17 @@ class IndexController extends Controller
|
|||||||
[$start, $end] = $end < $start ? [$end, $start] : [$start, $end];
|
[$start, $end] = $end < $start ? [$end, $start] : [$start, $end];
|
||||||
$startStr = $start->isoFormat($this->monthAndDayFormat);
|
$startStr = $start->isoFormat($this->monthAndDayFormat);
|
||||||
$endStr = $end->isoFormat($this->monthAndDayFormat);
|
$endStr = $end->isoFormat($this->monthAndDayFormat);
|
||||||
$subTitle = (string) trans(sprintf('firefly.title_%s_between', $objectType), ['start' => $startStr, 'end' => $endStr]);
|
$subTitle = (string)trans(sprintf('firefly.title_%s_between', $objectType), ['start' => $startStr, 'end' => $endStr]);
|
||||||
$path = route('transactions.index', [$objectType, $start->format('Y-m-d'), $end->format('Y-m-d')]);
|
$path = route('transactions.index', [$objectType, $start->format('Y-m-d'), $end->format('Y-m-d')]);
|
||||||
$firstJournal = $this->repository->firstNull();
|
$firstJournal = $this->repository->firstNull();
|
||||||
$startPeriod = $firstJournal instanceof TransactionJournal ? $firstJournal->date : new Carbon();
|
$startPeriod = $firstJournal instanceof TransactionJournal ? $firstJournal->date : new Carbon();
|
||||||
$endPeriod = clone $end;
|
$endPeriod = clone $end;
|
||||||
|
|
||||||
|
// limit to 3 years for the time being.
|
||||||
|
if (now()->diffInYears($startPeriod, true) > 3) {
|
||||||
|
$startPeriod = now()->subYears(3);
|
||||||
|
}
|
||||||
|
|
||||||
$periods = $this->getTransactionPeriodOverview($objectType, $startPeriod, $endPeriod);
|
$periods = $this->getTransactionPeriodOverview($objectType, $startPeriod, $endPeriod);
|
||||||
|
|
||||||
/** @var GroupCollectorInterface $collector */
|
/** @var GroupCollectorInterface $collector */
|
||||||
@@ -137,14 +143,14 @@ class IndexController extends Controller
|
|||||||
{
|
{
|
||||||
$subTitleIcon = config('firefly.transactionIconsByType.'.$objectType);
|
$subTitleIcon = config('firefly.transactionIconsByType.'.$objectType);
|
||||||
$types = config('firefly.transactionTypesByType.'.$objectType);
|
$types = config('firefly.transactionTypesByType.'.$objectType);
|
||||||
$page = (int) $request->get('page');
|
$page = (int)$request->get('page');
|
||||||
$pageSize = (int) Preferences::get('listPageSize', 50)->data;
|
$pageSize = (int)Preferences::get('listPageSize', 50)->data;
|
||||||
$path = route('transactions.index.all', [$objectType]);
|
$path = route('transactions.index.all', [$objectType]);
|
||||||
$first = $this->repository->firstNull();
|
$first = $this->repository->firstNull();
|
||||||
$start = $first instanceof TransactionJournal ? $first->date : new Carbon();
|
$start = $first instanceof TransactionJournal ? $first->date : new Carbon();
|
||||||
$last = $this->repository->getLast();
|
$last = $this->repository->getLast();
|
||||||
$end = $last instanceof TransactionJournal ? $last->date : today(config('app.timezone'));
|
$end = $last instanceof TransactionJournal ? $last->date : today(config('app.timezone'));
|
||||||
$subTitle = (string) trans('firefly.all_'.$objectType);
|
$subTitle = (string)trans('firefly.all_'.$objectType);
|
||||||
|
|
||||||
/** @var GroupCollectorInterface $collector */
|
/** @var GroupCollectorInterface $collector */
|
||||||
$collector = app(GroupCollectorInterface::class);
|
$collector = app(GroupCollectorInterface::class);
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ use Illuminate\Http\RedirectResponse;
|
|||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Routing\Redirector;
|
use Illuminate\Routing\Redirector;
|
||||||
use Illuminate\View\View;
|
use Illuminate\View\View;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class LinkController.
|
* Class LinkController.
|
||||||
@@ -145,6 +146,6 @@ class LinkController extends Controller
|
|||||||
$linkId = (int) $request->get('id');
|
$linkId = (int) $request->get('id');
|
||||||
$this->repository->switchLinkById($linkId);
|
$this->repository->switchLinkById($linkId);
|
||||||
|
|
||||||
return redirect(app('steam')->getSafePreviousUrl());
|
return redirect(Steam::getSafePreviousUrl());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ use Illuminate\Routing\Redirector;
|
|||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Illuminate\View\View as IlluminateView;
|
use Illuminate\View\View as IlluminateView;
|
||||||
use InvalidArgumentException;
|
use InvalidArgumentException;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class MassController.
|
* Class MassController.
|
||||||
@@ -142,9 +143,9 @@ class MassController extends Controller
|
|||||||
|
|
||||||
// reverse amounts
|
// reverse amounts
|
||||||
foreach ($journals as $index => $journal) {
|
foreach ($journals as $index => $journal) {
|
||||||
$journals[$index]['amount'] = app('steam')->bcround(app('steam')->positive($journal['amount']), $journal['currency_decimal_places']);
|
$journals[$index]['amount'] = Steam::bcround(Steam::positive($journal['amount']), $journal['currency_decimal_places']);
|
||||||
$journals[$index]['foreign_amount'] = null === $journal['foreign_amount']
|
$journals[$index]['foreign_amount'] = null === $journal['foreign_amount']
|
||||||
? null : app('steam')->positive($journal['foreign_amount']);
|
? null : Steam::positive($journal['foreign_amount']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->rememberPreviousUrl('transactions.mass-edit.url');
|
$this->rememberPreviousUrl('transactions.mass-edit.url');
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ use Illuminate\Contracts\Session\Session;
|
|||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Session\Middleware\StartSession;
|
use Illuminate\Session\Middleware\StartSession;
|
||||||
use Override;
|
use Override;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class StartFireflySession.
|
* Class StartFireflySession.
|
||||||
@@ -42,7 +43,7 @@ class StartFireflySession extends StartSession
|
|||||||
protected function storeCurrentUrl(Request $request, $session): void
|
protected function storeCurrentUrl(Request $request, $session): void
|
||||||
{
|
{
|
||||||
$url = $request->fullUrl();
|
$url = $request->fullUrl();
|
||||||
$safeUrl = app('steam')->getSafeUrl($url, route('index'));
|
$safeUrl = Steam::getSafeUrl($url, route('index'));
|
||||||
|
|
||||||
if ($url !== $safeUrl) {
|
if ($url !== $safeUrl) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ use FireflyIII\Support\Request\ChecksLogin;
|
|||||||
use FireflyIII\Support\Request\ConvertsDataTypes;
|
use FireflyIII\Support\Request\ConvertsDataTypes;
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class AccountFormRequest.
|
* Class AccountFormRequest.
|
||||||
@@ -87,7 +88,7 @@ class AccountFormRequest extends FormRequest
|
|||||||
$data['account_type_id'] = $this->convertInteger('liability_type_id');
|
$data['account_type_id'] = $this->convertInteger('liability_type_id');
|
||||||
if ('' !== $data['opening_balance']) {
|
if ('' !== $data['opening_balance']) {
|
||||||
// opening balance is always positive for liabilities
|
// opening balance is always positive for liabilities
|
||||||
$data['opening_balance'] = app('steam')->positive($data['opening_balance']);
|
$data['opening_balance'] = Steam::positive($data['opening_balance']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ use FireflyIII\Exceptions\FireflyException;
|
|||||||
use Illuminate\Bus\Queueable;
|
use Illuminate\Bus\Queueable;
|
||||||
use Illuminate\Mail\Mailable;
|
use Illuminate\Mail\Mailable;
|
||||||
use Illuminate\Queue\SerializesModels;
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class NewIPAddressWarningMail
|
* Class NewIPAddressWarningMail
|
||||||
@@ -57,7 +58,7 @@ class NewIPAddressWarningMail extends Mailable
|
|||||||
$this->host = '';
|
$this->host = '';
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$hostName = app('steam')->getHostName($this->ipAddress);
|
$hostName = Steam::getHostName($this->ipAddress);
|
||||||
} catch (FireflyException $e) {
|
} catch (FireflyException $e) {
|
||||||
Log::error($e->getMessage());
|
Log::error($e->getMessage());
|
||||||
$hostName = $this->ipAddress;
|
$hostName = $this->ipAddress;
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ use FireflyIII\Support\Repositories\UserGroup\UserGroupTrait;
|
|||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Override;
|
use Override;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class OperationsRepository
|
* Class OperationsRepository
|
||||||
@@ -157,7 +158,7 @@ class OperationsRepository implements OperationsRepositoryInterface, UserGroupIn
|
|||||||
];
|
];
|
||||||
|
|
||||||
foreach ($journals as $journal) {
|
foreach ($journals as $journal) {
|
||||||
$amount = app('steam')->negative($journal['amount']);
|
$amount = Steam::negative($journal['amount']);
|
||||||
$journalCurrencyId = (int) $journal['currency_id'];
|
$journalCurrencyId = (int) $journal['currency_id'];
|
||||||
if (false === $convertToPrimary) {
|
if (false === $convertToPrimary) {
|
||||||
$currencyId = $journalCurrencyId;
|
$currencyId = $journalCurrencyId;
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ class NoCategoryRepository implements NoCategoryRepositoryInterface, UserGroupIn
|
|||||||
$journalId = (int) $journal['transaction_journal_id'];
|
$journalId = (int) $journal['transaction_journal_id'];
|
||||||
$array[$currencyId]['categories'][0]['transaction_journals'][$journalId]
|
$array[$currencyId]['categories'][0]['transaction_journals'][$journalId]
|
||||||
= [
|
= [
|
||||||
'amount' => app('steam')->negative($journal['amount']),
|
'amount' => Steam::negative($journal['amount']),
|
||||||
'date' => $journal['date'],
|
'date' => $journal['date'],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -124,7 +124,7 @@ class NoCategoryRepository implements NoCategoryRepositoryInterface, UserGroupIn
|
|||||||
$journalId = (int) $journal['transaction_journal_id'];
|
$journalId = (int) $journal['transaction_journal_id'];
|
||||||
$array[$currencyId]['categories'][0]['transaction_journals'][$journalId]
|
$array[$currencyId]['categories'][0]['transaction_journals'][$journalId]
|
||||||
= [
|
= [
|
||||||
'amount' => app('steam')->positive($journal['amount']),
|
'amount' => Steam::positive($journal['amount']),
|
||||||
'date' => $journal['date'],
|
'date' => $journal['date'],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ class OperationsRepository implements OperationsRepositoryInterface, UserGroupIn
|
|||||||
// only a subset of the fields.
|
// only a subset of the fields.
|
||||||
$journalId = (int) $journal['transaction_journal_id'];
|
$journalId = (int) $journal['transaction_journal_id'];
|
||||||
$array[$currencyId]['categories'][$categoryId]['transaction_journals'][$journalId] = [
|
$array[$currencyId]['categories'][$categoryId]['transaction_journals'][$journalId] = [
|
||||||
'amount' => app('steam')->negative($journal['amount']),
|
'amount' => Steam::negative($journal['amount']),
|
||||||
'date' => $journal['date'],
|
'date' => $journal['date'],
|
||||||
'source_account_id' => (string) $journal['source_account_id'],
|
'source_account_id' => (string) $journal['source_account_id'],
|
||||||
'budget_name' => $journal['budget_name'],
|
'budget_name' => $journal['budget_name'],
|
||||||
@@ -178,7 +178,7 @@ class OperationsRepository implements OperationsRepositoryInterface, UserGroupIn
|
|||||||
// only a subset of the fields.
|
// only a subset of the fields.
|
||||||
$journalId = (int) $journal['transaction_journal_id'];
|
$journalId = (int) $journal['transaction_journal_id'];
|
||||||
$array[$currencyId]['categories'][$categoryId]['transaction_journals'][$journalId] = [
|
$array[$currencyId]['categories'][$categoryId]['transaction_journals'][$journalId] = [
|
||||||
'amount' => app('steam')->positive($journal['amount']),
|
'amount' => Steam::positive($journal['amount']),
|
||||||
'date' => $journal['date'],
|
'date' => $journal['date'],
|
||||||
'source_account_id' => (string) $journal['source_account_id'],
|
'source_account_id' => (string) $journal['source_account_id'],
|
||||||
'destination_account_id' => (string) $journal['destination_account_id'],
|
'destination_account_id' => (string) $journal['destination_account_id'],
|
||||||
@@ -240,7 +240,7 @@ class OperationsRepository implements OperationsRepositoryInterface, UserGroupIn
|
|||||||
// only a subset of the fields.
|
// only a subset of the fields.
|
||||||
$journalId = (int) $journal['transaction_journal_id'];
|
$journalId = (int) $journal['transaction_journal_id'];
|
||||||
$array[$currencyId]['categories'][$categoryId]['transaction_journals'][$journalId] = [
|
$array[$currencyId]['categories'][$categoryId]['transaction_journals'][$journalId] = [
|
||||||
'amount' => app('steam')->positive($journal['amount']),
|
'amount' => Steam::positive($journal['amount']),
|
||||||
'date' => $journal['date'],
|
'date' => $journal['date'],
|
||||||
'source_account_id' => (string) $journal['source_account_id'],
|
'source_account_id' => (string) $journal['source_account_id'],
|
||||||
'category_name' => $journal['category_name'],
|
'category_name' => $journal['category_name'],
|
||||||
@@ -303,7 +303,7 @@ class OperationsRepository implements OperationsRepositoryInterface, UserGroupIn
|
|||||||
// only a subset of the fields.
|
// only a subset of the fields.
|
||||||
$journalId = (int) $journal['transaction_journal_id'];
|
$journalId = (int) $journal['transaction_journal_id'];
|
||||||
$array[$currencyId]['categories'][$categoryId]['transaction_journals'][$journalId] = [
|
$array[$currencyId]['categories'][$categoryId]['transaction_journals'][$journalId] = [
|
||||||
'amount' => app('steam')->negative($journal['amount']),
|
'amount' => Steam::negative($journal['amount']),
|
||||||
'date' => $journal['date'],
|
'date' => $journal['date'],
|
||||||
'source_account_id' => (string) $journal['source_account_id'],
|
'source_account_id' => (string) $journal['source_account_id'],
|
||||||
'category_name' => $journal['category_name'],
|
'category_name' => $journal['category_name'],
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
|||||||
use FireflyIII\Support\Repositories\UserGroup\UserGroupInterface;
|
use FireflyIII\Support\Repositories\UserGroup\UserGroupInterface;
|
||||||
use FireflyIII\Support\Repositories\UserGroup\UserGroupTrait;
|
use FireflyIII\Support\Repositories\UserGroup\UserGroupTrait;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class OperationsRepository
|
* Class OperationsRepository
|
||||||
@@ -97,7 +98,7 @@ class OperationsRepository implements OperationsRepositoryInterface, UserGroupIn
|
|||||||
];
|
];
|
||||||
|
|
||||||
$array[$currencyId]['tags'][$tagId]['transaction_journals'][$journalId] = [
|
$array[$currencyId]['tags'][$tagId]['transaction_journals'][$journalId] = [
|
||||||
'amount' => app('steam')->negative($journal['amount']),
|
'amount' => Steam::negative($journal['amount']),
|
||||||
'date' => $journal['date'],
|
'date' => $journal['date'],
|
||||||
'source_account_id' => $journal['source_account_id'],
|
'source_account_id' => $journal['source_account_id'],
|
||||||
'budget_name' => $journal['budget_name'],
|
'budget_name' => $journal['budget_name'],
|
||||||
@@ -182,7 +183,7 @@ class OperationsRepository implements OperationsRepositoryInterface, UserGroupIn
|
|||||||
];
|
];
|
||||||
$journalId = (int) $journal['transaction_journal_id'];
|
$journalId = (int) $journal['transaction_journal_id'];
|
||||||
$array[$currencyId]['tags'][$tagId]['transaction_journals'][$journalId] = [
|
$array[$currencyId]['tags'][$tagId]['transaction_journals'][$journalId] = [
|
||||||
'amount' => app('steam')->positive($journal['amount']),
|
'amount' => Steam::positive($journal['amount']),
|
||||||
'date' => $journal['date'],
|
'date' => $journal['date'],
|
||||||
'source_account_id' => $journal['source_account_id'],
|
'source_account_id' => $journal['source_account_id'],
|
||||||
'budget_name' => $journal['budget_name'],
|
'budget_name' => $journal['budget_name'],
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ use FireflyIII\Support\Repositories\UserGroup\UserGroupTrait;
|
|||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
use function Safe\json_decode;
|
use function Safe\json_decode;
|
||||||
|
|
||||||
@@ -245,9 +246,9 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterface,
|
|||||||
$transaction = $journal->transactions->first();
|
$transaction = $journal->transactions->first();
|
||||||
$currency = $transaction->transactionCurrency;
|
$currency = $transaction->transactionCurrency;
|
||||||
$type = $journal->transactionType->type;
|
$type = $journal->transactionType->type;
|
||||||
$amount = app('steam')->positive($transaction->amount);
|
$amount = Steam::positive($transaction->amount);
|
||||||
if (TransactionTypeEnum::WITHDRAWAL->value === $type) {
|
if (TransactionTypeEnum::WITHDRAWAL->value === $type) {
|
||||||
return Amount::formatAnything($currency, app('steam')->negative($amount));
|
return Amount::formatAnything($currency, Steam::negative($amount));
|
||||||
}
|
}
|
||||||
|
|
||||||
return Amount::formatAnything($currency, $amount);
|
return Amount::formatAnything($currency, $amount);
|
||||||
@@ -267,9 +268,9 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterface,
|
|||||||
|
|
||||||
$currency = $transaction->foreignCurrency;
|
$currency = $transaction->foreignCurrency;
|
||||||
$type = $journal->transactionType->type;
|
$type = $journal->transactionType->type;
|
||||||
$amount = app('steam')->positive($transaction->foreign_amount);
|
$amount = Steam::positive($transaction->foreign_amount);
|
||||||
if (TransactionTypeEnum::WITHDRAWAL->value === $type) {
|
if (TransactionTypeEnum::WITHDRAWAL->value === $type) {
|
||||||
return Amount::formatAnything($currency, app('steam')->negative($amount));
|
return Amount::formatAnything($currency, Steam::negative($amount));
|
||||||
}
|
}
|
||||||
|
|
||||||
return Amount::formatAnything($currency, $amount);
|
return Amount::formatAnything($currency, $amount);
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ use FireflyIII\Models\TransactionJournal;
|
|||||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\Services\Internal\Destroy\TransactionGroupDestroyService;
|
use FireflyIII\Services\Internal\Destroy\TransactionGroupDestroyService;
|
||||||
use Illuminate\Support\Facades\Validator;
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Trait AccountServiceTrait
|
* Trait AccountServiceTrait
|
||||||
@@ -65,7 +66,7 @@ trait AccountServiceTrait
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return app('steam')->filterSpaces($iban);
|
return Steam::filterSpaces($iban);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -225,7 +226,7 @@ trait AccountServiceTrait
|
|||||||
}
|
}
|
||||||
|
|
||||||
// make amount positive, regardless:
|
// make amount positive, regardless:
|
||||||
$amount = app('steam')->positive($amount);
|
$amount = Steam::positive($amount);
|
||||||
|
|
||||||
// get or grab currency:
|
// get or grab currency:
|
||||||
$currency = $this->accountRepository->getAccountCurrency($account);
|
$currency = $this->accountRepository->getAccountCurrency($account);
|
||||||
@@ -371,12 +372,12 @@ trait AccountServiceTrait
|
|||||||
}
|
}
|
||||||
// if direction is "debit" (I owe this debt), amount is negative.
|
// if direction is "debit" (I owe this debt), amount is negative.
|
||||||
// which means the liability will have a negative balance which the user must fill.
|
// which means the liability will have a negative balance which the user must fill.
|
||||||
$openingBalance = app('steam')->negative($openingBalance);
|
$openingBalance = Steam::negative($openingBalance);
|
||||||
|
|
||||||
// if direction is "credit" (I am owed this debt), amount is positive.
|
// if direction is "credit" (I am owed this debt), amount is positive.
|
||||||
// which means the liability will have a positive balance which is drained when its paid back into any asset.
|
// which means the liability will have a positive balance which is drained when its paid back into any asset.
|
||||||
if ('credit' === $direction) {
|
if ('credit' === $direction) {
|
||||||
$openingBalance = app('steam')->positive($openingBalance);
|
$openingBalance = Steam::positive($openingBalance);
|
||||||
}
|
}
|
||||||
|
|
||||||
// create if not exists:
|
// create if not exists:
|
||||||
@@ -398,11 +399,11 @@ trait AccountServiceTrait
|
|||||||
$journal->transactionCurrency()->associate($currency);
|
$journal->transactionCurrency()->associate($currency);
|
||||||
|
|
||||||
// account always gains money:
|
// account always gains money:
|
||||||
$accountTransaction->amount = app('steam')->positive($openingBalance);
|
$accountTransaction->amount = Steam::positive($openingBalance);
|
||||||
$accountTransaction->transaction_currency_id = $currency->id;
|
$accountTransaction->transaction_currency_id = $currency->id;
|
||||||
|
|
||||||
// CL account always loses money:
|
// CL account always loses money:
|
||||||
$clTransaction->amount = app('steam')->negative($openingBalance);
|
$clTransaction->amount = Steam::negative($openingBalance);
|
||||||
$clTransaction->transaction_currency_id = $currency->id;
|
$clTransaction->transaction_currency_id = $currency->id;
|
||||||
// save both
|
// save both
|
||||||
$accountTransaction->save();
|
$accountTransaction->save();
|
||||||
@@ -448,7 +449,7 @@ trait AccountServiceTrait
|
|||||||
}
|
}
|
||||||
|
|
||||||
// amount must be positive for the transaction to work.
|
// amount must be positive for the transaction to work.
|
||||||
$amount = app('steam')->positive($openingBalance);
|
$amount = Steam::positive($openingBalance);
|
||||||
|
|
||||||
// get or grab currency:
|
// get or grab currency:
|
||||||
$currency = $this->accountRepository->getAccountCurrency($account);
|
$currency = $this->accountRepository->getAccountCurrency($account);
|
||||||
@@ -584,21 +585,21 @@ trait AccountServiceTrait
|
|||||||
if (1 === bccomp('0', $openingBalance)) {
|
if (1 === bccomp('0', $openingBalance)) {
|
||||||
Log::debug('Amount is negative.');
|
Log::debug('Amount is negative.');
|
||||||
// account transaction loses money:
|
// account transaction loses money:
|
||||||
$accountTransaction->amount = app('steam')->negative($openingBalance);
|
$accountTransaction->amount = Steam::negative($openingBalance);
|
||||||
$accountTransaction->transaction_currency_id = $currency->id;
|
$accountTransaction->transaction_currency_id = $currency->id;
|
||||||
|
|
||||||
// OB account transaction gains money
|
// OB account transaction gains money
|
||||||
$obTransaction->amount = app('steam')->positive($openingBalance);
|
$obTransaction->amount = Steam::positive($openingBalance);
|
||||||
$obTransaction->transaction_currency_id = $currency->id;
|
$obTransaction->transaction_currency_id = $currency->id;
|
||||||
}
|
}
|
||||||
if (-1 === bccomp('0', $openingBalance)) {
|
if (-1 === bccomp('0', $openingBalance)) {
|
||||||
Log::debug('Amount is positive.');
|
Log::debug('Amount is positive.');
|
||||||
// account gains money:
|
// account gains money:
|
||||||
$accountTransaction->amount = app('steam')->positive($openingBalance);
|
$accountTransaction->amount = Steam::positive($openingBalance);
|
||||||
$accountTransaction->transaction_currency_id = $currency->id;
|
$accountTransaction->transaction_currency_id = $currency->id;
|
||||||
|
|
||||||
// OB account loses money:
|
// OB account loses money:
|
||||||
$obTransaction->amount = app('steam')->negative($openingBalance);
|
$obTransaction->amount = Steam::negative($openingBalance);
|
||||||
$obTransaction->transaction_currency_id = $currency->id;
|
$obTransaction->transaction_currency_id = $currency->id;
|
||||||
}
|
}
|
||||||
// save both
|
// save both
|
||||||
@@ -646,7 +647,7 @@ trait AccountServiceTrait
|
|||||||
}
|
}
|
||||||
|
|
||||||
// make amount positive, regardless:
|
// make amount positive, regardless:
|
||||||
$amount = app('steam')->positive($openingBalance);
|
$amount = Steam::positive($openingBalance);
|
||||||
|
|
||||||
// get or grab currency:
|
// get or grab currency:
|
||||||
$currency = $this->accountRepository->getAccountCurrency($account);
|
$currency = $this->accountRepository->getAccountCurrency($account);
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ use FireflyIII\Models\TransactionGroup;
|
|||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class CreditRecalculateService
|
* Class CreditRecalculateService
|
||||||
@@ -159,8 +160,8 @@ class CreditRecalculateService
|
|||||||
$this->validateOpeningBalance($account, $openingBalance);
|
$this->validateOpeningBalance($account, $openingBalance);
|
||||||
}
|
}
|
||||||
$startOfDebt = $this->repository->getOpeningBalanceAmount($account, false) ?? '0';
|
$startOfDebt = $this->repository->getOpeningBalanceAmount($account, false) ?? '0';
|
||||||
$leftOfDebt = app('steam')->positive($startOfDebt);
|
$leftOfDebt = Steam::positive($startOfDebt);
|
||||||
// Log::debug(sprintf('Start of debt is "%s", so initial left of debt is "%s"', app('steam')->bcround($startOfDebt, 2), app('steam')->bcround($leftOfDebt, 2)));
|
// Log::debug(sprintf('Start of debt is "%s", so initial left of debt is "%s"', \FireflyIII\Support\Facades\Steam::bcround($startOfDebt, 2), \FireflyIII\Support\Facades\Steam::bcround($leftOfDebt, 2)));
|
||||||
|
|
||||||
/** @var AccountMetaFactory $factory */
|
/** @var AccountMetaFactory $factory */
|
||||||
$factory = app(AccountMetaFactory::class);
|
$factory = app(AccountMetaFactory::class);
|
||||||
@@ -200,17 +201,17 @@ class CreditRecalculateService
|
|||||||
$dest = $openingBalance->transactions()->where('amount', '>', 0)->first();
|
$dest = $openingBalance->transactions()->where('amount', '>', 0)->first();
|
||||||
if ($source->account_id !== $account->id) {
|
if ($source->account_id !== $account->id) {
|
||||||
Log::info(sprintf('Liability #%d has a reversed opening balance. Will fix this now.', $account->id));
|
Log::info(sprintf('Liability #%d has a reversed opening balance. Will fix this now.', $account->id));
|
||||||
Log::debug(sprintf('Source amount "%s" is now "%s"', $source->amount, app('steam')->positive($source->amount)));
|
Log::debug(sprintf('Source amount "%s" is now "%s"', $source->amount, Steam::positive($source->amount)));
|
||||||
Log::debug(sprintf('Destination amount "%s" is now "%s"', $dest->amount, app('steam')->negative($dest->amount)));
|
Log::debug(sprintf('Destination amount "%s" is now "%s"', $dest->amount, Steam::negative($dest->amount)));
|
||||||
$source->amount = app('steam')->positive($source->amount);
|
$source->amount = Steam::positive($source->amount);
|
||||||
$dest->amount = app('steam')->negative($source->amount);
|
$dest->amount = Steam::negative($source->amount);
|
||||||
if (null !== $source->foreign_amount && '' !== $source->foreign_amount) {
|
if (null !== $source->foreign_amount && '' !== $source->foreign_amount) {
|
||||||
$source->foreign_amount = app('steam')->positive($source->foreign_amount);
|
$source->foreign_amount = Steam::positive($source->foreign_amount);
|
||||||
Log::debug(sprintf('Source foreign amount "%s" is now "%s"', $source->foreign_amount, app('steam')->positive($source->foreign_amount)));
|
Log::debug(sprintf('Source foreign amount "%s" is now "%s"', $source->foreign_amount, Steam::positive($source->foreign_amount)));
|
||||||
}
|
}
|
||||||
if (null !== $dest->foreign_amount && '' !== $dest->foreign_amount) {
|
if (null !== $dest->foreign_amount && '' !== $dest->foreign_amount) {
|
||||||
$dest->foreign_amount = app('steam')->negative($dest->foreign_amount);
|
$dest->foreign_amount = Steam::negative($dest->foreign_amount);
|
||||||
Log::debug(sprintf('Destination amount "%s" is now "%s"', $dest->foreign_amount, app('steam')->negative($dest->foreign_amount)));
|
Log::debug(sprintf('Destination amount "%s" is now "%s"', $dest->foreign_amount, Steam::negative($dest->foreign_amount)));
|
||||||
}
|
}
|
||||||
$source->save();
|
$source->save();
|
||||||
$dest->save();
|
$dest->save();
|
||||||
@@ -241,7 +242,7 @@ class CreditRecalculateService
|
|||||||
$foreignCurrency = $transaction->foreignCurrency;
|
$foreignCurrency = $transaction->foreignCurrency;
|
||||||
$accountCurrency = $this->repository->getAccountCurrency($account);
|
$accountCurrency = $this->repository->getAccountCurrency($account);
|
||||||
$type = $journal->transactionType->type;
|
$type = $journal->transactionType->type;
|
||||||
// Log::debug(sprintf('Left of debt is: %s', app('steam')->bcround($leftOfDebt, 2)));
|
// Log::debug(sprintf('Left of debt is: %s', \FireflyIII\Support\Facades\Steam::bcround($leftOfDebt, 2)));
|
||||||
|
|
||||||
if ('' === $direction) {
|
if ('' === $direction) {
|
||||||
// Log::warning('Direction is empty, so do nothing.');
|
// Log::warning('Direction is empty, so do nothing.');
|
||||||
@@ -262,81 +263,81 @@ class CreditRecalculateService
|
|||||||
$isCredit = 'credit' === $direction;
|
$isCredit = 'credit' === $direction;
|
||||||
|
|
||||||
if ($isSameAccount && $isCredit && $this->isWithdrawalIn($usedAmount, $type)) { // case 1
|
if ($isSameAccount && $isCredit && $this->isWithdrawalIn($usedAmount, $type)) { // case 1
|
||||||
$usedAmount = app('steam')->positive($usedAmount);
|
$usedAmount = Steam::positive($usedAmount);
|
||||||
|
|
||||||
return bcadd($leftOfDebt, (string) $usedAmount);
|
return bcadd($leftOfDebt, (string) $usedAmount);
|
||||||
// Log::debug(sprintf('Case 1 (withdrawal into credit liability): %s + %s = %s', app('steam')->bcround($leftOfDebt, 2), app('steam')->bcround($usedAmount, 2), app('steam')->bcround($result, 2)));
|
// Log::debug(sprintf('Case 1 (withdrawal into credit liability): %s + %s = %s', \FireflyIII\Support\Facades\Steam::bcround($leftOfDebt, 2), \FireflyIII\Support\Facades\Steam::bcround($usedAmount, 2), \FireflyIII\Support\Facades\Steam::bcround($result, 2)));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($isSameAccount && $isCredit && $this->isWithdrawalOut($usedAmount, $type)) { // case 2
|
if ($isSameAccount && $isCredit && $this->isWithdrawalOut($usedAmount, $type)) { // case 2
|
||||||
$usedAmount = app('steam')->positive($usedAmount);
|
$usedAmount = Steam::positive($usedAmount);
|
||||||
|
|
||||||
return bcsub($leftOfDebt, (string) $usedAmount);
|
return bcsub($leftOfDebt, (string) $usedAmount);
|
||||||
// Log::debug(sprintf('Case 2 (withdrawal away from liability): %s - %s = %s', app('steam')->bcround($leftOfDebt, 2), app('steam')->bcround($usedAmount, 2), app('steam')->bcround($result, 2)));
|
// Log::debug(sprintf('Case 2 (withdrawal away from liability): %s - %s = %s', \FireflyIII\Support\Facades\Steam::bcround($leftOfDebt, 2), \FireflyIII\Support\Facades\Steam::bcround($usedAmount, 2), \FireflyIII\Support\Facades\Steam::bcround($result, 2)));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($isSameAccount && $isCredit && $this->isDepositOut($usedAmount, $type)) { // case 3
|
if ($isSameAccount && $isCredit && $this->isDepositOut($usedAmount, $type)) { // case 3
|
||||||
$usedAmount = app('steam')->positive($usedAmount);
|
$usedAmount = Steam::positive($usedAmount);
|
||||||
|
|
||||||
return bcsub($leftOfDebt, (string) $usedAmount);
|
return bcsub($leftOfDebt, (string) $usedAmount);
|
||||||
// Log::debug(sprintf('Case 3 (deposit away from liability): %s - %s = %s', app('steam')->bcround($leftOfDebt, 2), app('steam')->bcround($usedAmount, 2), app('steam')->bcround($result, 2)));
|
// Log::debug(sprintf('Case 3 (deposit away from liability): %s - %s = %s', \FireflyIII\Support\Facades\Steam::bcround($leftOfDebt, 2), \FireflyIII\Support\Facades\Steam::bcround($usedAmount, 2), \FireflyIII\Support\Facades\Steam::bcround($result, 2)));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($isSameAccount && $isCredit && $this->isDepositIn($usedAmount, $type)) { // case 4
|
if ($isSameAccount && $isCredit && $this->isDepositIn($usedAmount, $type)) { // case 4
|
||||||
$usedAmount = app('steam')->positive($usedAmount);
|
$usedAmount = Steam::positive($usedAmount);
|
||||||
|
|
||||||
return bcadd($leftOfDebt, (string) $usedAmount);
|
return bcadd($leftOfDebt, (string) $usedAmount);
|
||||||
// Log::debug(sprintf('Case 4 (deposit into credit liability): %s + %s = %s', app('steam')->bcround($leftOfDebt, 2), app('steam')->bcround($usedAmount, 2), app('steam')->bcround($result, 2)));
|
// Log::debug(sprintf('Case 4 (deposit into credit liability): %s + %s = %s', \FireflyIII\Support\Facades\Steam::bcround($leftOfDebt, 2), \FireflyIII\Support\Facades\Steam::bcround($usedAmount, 2), \FireflyIII\Support\Facades\Steam::bcround($result, 2)));
|
||||||
}
|
}
|
||||||
if ($isSameAccount && $isCredit && $this->isTransferIn($usedAmount, $type)) { // case 5
|
if ($isSameAccount && $isCredit && $this->isTransferIn($usedAmount, $type)) { // case 5
|
||||||
$usedAmount = app('steam')->positive($usedAmount);
|
$usedAmount = Steam::positive($usedAmount);
|
||||||
|
|
||||||
return bcadd($leftOfDebt, (string) $usedAmount);
|
return bcadd($leftOfDebt, (string) $usedAmount);
|
||||||
// Log::debug(sprintf('Case 5 (transfer into credit liability): %s + %s = %s', app('steam')->bcround($leftOfDebt, 2), app('steam')->bcround($usedAmount, 2), app('steam')->bcround($result, 2)));
|
// Log::debug(sprintf('Case 5 (transfer into credit liability): %s + %s = %s', \FireflyIII\Support\Facades\Steam::bcround($leftOfDebt, 2), \FireflyIII\Support\Facades\Steam::bcround($usedAmount, 2), \FireflyIII\Support\Facades\Steam::bcround($result, 2)));
|
||||||
}
|
}
|
||||||
if ($isSameAccount && $isDebit && $this->isWithdrawalIn($usedAmount, $type)) { // case 6
|
if ($isSameAccount && $isDebit && $this->isWithdrawalIn($usedAmount, $type)) { // case 6
|
||||||
$usedAmount = app('steam')->positive($usedAmount);
|
$usedAmount = Steam::positive($usedAmount);
|
||||||
|
|
||||||
return bcsub($leftOfDebt, (string) $usedAmount);
|
return bcsub($leftOfDebt, (string) $usedAmount);
|
||||||
// Log::debug(sprintf('Case 6 (withdrawal into debit liability): %s - %s = %s', app('steam')->bcround($leftOfDebt, 2), app('steam')->bcround($usedAmount, 2), app('steam')->bcround($result, 2)));
|
// Log::debug(sprintf('Case 6 (withdrawal into debit liability): %s - %s = %s', \FireflyIII\Support\Facades\Steam::bcround($leftOfDebt, 2), \FireflyIII\Support\Facades\Steam::bcround($usedAmount, 2), \FireflyIII\Support\Facades\Steam::bcround($result, 2)));
|
||||||
}
|
}
|
||||||
if ($isSameAccount && $isDebit && $this->isDepositOut($usedAmount, $type)) { // case 7
|
if ($isSameAccount && $isDebit && $this->isDepositOut($usedAmount, $type)) { // case 7
|
||||||
$usedAmount = app('steam')->positive($usedAmount);
|
$usedAmount = Steam::positive($usedAmount);
|
||||||
|
|
||||||
return bcadd($leftOfDebt, (string) $usedAmount);
|
return bcadd($leftOfDebt, (string) $usedAmount);
|
||||||
// Log::debug(sprintf('Case 7 (deposit away from liability): %s + %s = %s', app('steam')->bcround($leftOfDebt, 2), app('steam')->bcround($usedAmount, 2), app('steam')->bcround($result, 2)));
|
// Log::debug(sprintf('Case 7 (deposit away from liability): %s + %s = %s', \FireflyIII\Support\Facades\Steam::bcround($leftOfDebt, 2), \FireflyIII\Support\Facades\Steam::bcround($usedAmount, 2), \FireflyIII\Support\Facades\Steam::bcround($result, 2)));
|
||||||
}
|
}
|
||||||
if ($isSameAccount && $isDebit && $this->isWithdrawalOut($usedAmount, $type)) { // case 8
|
if ($isSameAccount && $isDebit && $this->isWithdrawalOut($usedAmount, $type)) { // case 8
|
||||||
$usedAmount = app('steam')->positive($usedAmount);
|
$usedAmount = Steam::positive($usedAmount);
|
||||||
|
|
||||||
return bcadd($leftOfDebt, (string) $usedAmount);
|
return bcadd($leftOfDebt, (string) $usedAmount);
|
||||||
// Log::debug(sprintf('Case 8 (withdrawal away from liability): %s + %s = %s', app('steam')->bcround($leftOfDebt, 2), app('steam')->bcround($usedAmount, 2), app('steam')->bcround($result, 2)));
|
// Log::debug(sprintf('Case 8 (withdrawal away from liability): %s + %s = %s', \FireflyIII\Support\Facades\Steam::bcround($leftOfDebt, 2), \FireflyIII\Support\Facades\Steam::bcround($usedAmount, 2), \FireflyIII\Support\Facades\Steam::bcround($result, 2)));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($isSameAccount && $isDebit && $this->isTransferIn($usedAmount, $type)) { // case 9
|
if ($isSameAccount && $isDebit && $this->isTransferIn($usedAmount, $type)) { // case 9
|
||||||
$usedAmount = app('steam')->positive($usedAmount);
|
$usedAmount = Steam::positive($usedAmount);
|
||||||
|
|
||||||
return bcsub($leftOfDebt, (string) $usedAmount);
|
return bcsub($leftOfDebt, (string) $usedAmount);
|
||||||
// 2024-10-05, #9225 this used to say you would owe more, but a transfer INTO a debit from wherever means you owe LESS.
|
// 2024-10-05, #9225 this used to say you would owe more, but a transfer INTO a debit from wherever means you owe LESS.
|
||||||
// Log::debug(sprintf('Case 9 (transfer into debit liability, means you owe LESS): %s - %s = %s', app('steam')->bcround($leftOfDebt, 2), app('steam')->bcround($usedAmount, 2), app('steam')->bcround($result, 2)));
|
// Log::debug(sprintf('Case 9 (transfer into debit liability, means you owe LESS): %s - %s = %s', \FireflyIII\Support\Facades\Steam::bcround($leftOfDebt, 2), \FireflyIII\Support\Facades\Steam::bcround($usedAmount, 2), \FireflyIII\Support\Facades\Steam::bcround($result, 2)));
|
||||||
}
|
}
|
||||||
if ($isSameAccount && $isDebit && $this->isTransferOut($usedAmount, $type)) { // case 10
|
if ($isSameAccount && $isDebit && $this->isTransferOut($usedAmount, $type)) { // case 10
|
||||||
$usedAmount = app('steam')->positive($usedAmount);
|
$usedAmount = Steam::positive($usedAmount);
|
||||||
|
|
||||||
return bcadd($leftOfDebt, (string) $usedAmount);
|
return bcadd($leftOfDebt, (string) $usedAmount);
|
||||||
// 2024-10-05, #9225 this used to say you would owe less, but a transfer OUT OF a debit from wherever means you owe MORE.
|
// 2024-10-05, #9225 this used to say you would owe less, but a transfer OUT OF a debit from wherever means you owe MORE.
|
||||||
// Log::debug(sprintf('Case 10 (transfer out of debit liability, means you owe MORE): %s + %s = %s', app('steam')->bcround($leftOfDebt, 2), app('steam')->bcround($usedAmount, 2), app('steam')->bcround($result, 2)));
|
// Log::debug(sprintf('Case 10 (transfer out of debit liability, means you owe MORE): %s + %s = %s', \FireflyIII\Support\Facades\Steam::bcround($leftOfDebt, 2), \FireflyIII\Support\Facades\Steam::bcround($usedAmount, 2), \FireflyIII\Support\Facades\Steam::bcround($result, 2)));
|
||||||
}
|
}
|
||||||
|
|
||||||
// in any other case, remove amount from left of debt.
|
// in any other case, remove amount from left of debt.
|
||||||
if (in_array($type, [TransactionTypeEnum::WITHDRAWAL->value, TransactionTypeEnum::DEPOSIT->value, TransactionTypeEnum::TRANSFER->value], true)) {
|
if (in_array($type, [TransactionTypeEnum::WITHDRAWAL->value, TransactionTypeEnum::DEPOSIT->value, TransactionTypeEnum::TRANSFER->value], true)) {
|
||||||
$usedAmount = app('steam')->negative($usedAmount);
|
$usedAmount = Steam::negative($usedAmount);
|
||||||
|
|
||||||
return bcadd($leftOfDebt, (string) $usedAmount);
|
return bcadd($leftOfDebt, (string) $usedAmount);
|
||||||
// Log::debug(sprintf('Case X (all other cases): %s + %s = %s', app('steam')->bcround($leftOfDebt, 2), app('steam')->bcround($usedAmount, 2), app('steam')->bcround($result, 2)));
|
// Log::debug(sprintf('Case X (all other cases): %s + %s = %s', \FireflyIII\Support\Facades\Steam::bcround($leftOfDebt, 2), \FireflyIII\Support\Facades\Steam::bcround($usedAmount, 2), \FireflyIII\Support\Facades\Steam::bcround($result, 2)));
|
||||||
}
|
}
|
||||||
|
|
||||||
Log::warning(sprintf('[-1] Catch-all, should not happen. Left of debt = %s', app('steam')->bcround($leftOfDebt, 2)));
|
Log::warning(sprintf('[-1] Catch-all, should not happen. Left of debt = %s', Steam::bcround($leftOfDebt, 2)));
|
||||||
|
|
||||||
return $leftOfDebt;
|
return $leftOfDebt;
|
||||||
}
|
}
|
||||||
@@ -344,10 +345,10 @@ class CreditRecalculateService
|
|||||||
private function getAmountToUse(Transaction $transaction, TransactionCurrency $accountCurrency, ?TransactionCurrency $foreignCurrency): string
|
private function getAmountToUse(Transaction $transaction, TransactionCurrency $accountCurrency, ?TransactionCurrency $foreignCurrency): string
|
||||||
{
|
{
|
||||||
$usedAmount = $transaction->amount;
|
$usedAmount = $transaction->amount;
|
||||||
// Log::debug(sprintf('Amount of transaction is %s', app('steam')->bcround($usedAmount, 2)));
|
// Log::debug(sprintf('Amount of transaction is %s', \FireflyIII\Support\Facades\Steam::bcround($usedAmount, 2)));
|
||||||
if ($foreignCurrency instanceof TransactionCurrency && $foreignCurrency->id === $accountCurrency->id) {
|
if ($foreignCurrency instanceof TransactionCurrency && $foreignCurrency->id === $accountCurrency->id) {
|
||||||
$usedAmount = $transaction->foreign_amount;
|
$usedAmount = $transaction->foreign_amount;
|
||||||
// Log::debug(sprintf('Overruled by foreign amount. Amount of transaction is now %s', app('steam')->bcround($usedAmount, 2)));
|
// Log::debug(sprintf('Overruled by foreign amount. Amount of transaction is now %s', \FireflyIII\Support\Facades\Steam::bcround($usedAmount, 2)));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $usedAmount;
|
return $usedAmount;
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ use FireflyIII\Models\Location;
|
|||||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\Services\Internal\Support\AccountServiceTrait;
|
use FireflyIII\Services\Internal\Support\AccountServiceTrait;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class AccountUpdateService
|
* Class AccountUpdateService
|
||||||
@@ -123,7 +124,7 @@ class AccountUpdateService
|
|||||||
$account->active = $data['active'];
|
$account->active = $data['active'];
|
||||||
}
|
}
|
||||||
if (array_key_exists('iban', $data)) {
|
if (array_key_exists('iban', $data)) {
|
||||||
$account->iban = app('steam')->filterSpaces((string) $data['iban']);
|
$account->iban = Steam::filterSpaces((string) $data['iban']);
|
||||||
}
|
}
|
||||||
|
|
||||||
// set liability, but account must already be a liability.
|
// set liability, but account must already be a liability.
|
||||||
@@ -269,7 +270,7 @@ class AccountUpdateService
|
|||||||
|
|
||||||
// if liability, make sure the amount is positive for a credit, and negative for a debit.
|
// if liability, make sure the amount is positive for a credit, and negative for a debit.
|
||||||
if ($this->isLiability($account)) {
|
if ($this->isLiability($account)) {
|
||||||
$openingBalance = 'credit' === $data['liability_direction'] ? app('steam')->positive($openingBalance) : app('steam')->negative(
|
$openingBalance = 'credit' === $data['liability_direction'] ? Steam::positive($openingBalance) : Steam::negative(
|
||||||
$openingBalance
|
$openingBalance
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface
|
|||||||
use FireflyIII\Services\Internal\Support\JournalServiceTrait;
|
use FireflyIII\Services\Internal\Support\JournalServiceTrait;
|
||||||
use FireflyIII\Support\Facades\FireflyConfig;
|
use FireflyIII\Support\Facades\FireflyConfig;
|
||||||
use FireflyIII\Support\Facades\Preferences;
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
use FireflyIII\Support\NullArrayObject;
|
use FireflyIII\Support\NullArrayObject;
|
||||||
use FireflyIII\Validation\AccountValidator;
|
use FireflyIII\Validation\AccountValidator;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
@@ -661,12 +662,12 @@ class JournalUpdateService
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$origSourceTransaction = $this->getSourceTransaction();
|
$origSourceTransaction = $this->getSourceTransaction();
|
||||||
$origSourceTransaction->amount = app('steam')->negative($amount);
|
$origSourceTransaction->amount = Steam::negative($amount);
|
||||||
$origSourceTransaction->balance_dirty = true;
|
$origSourceTransaction->balance_dirty = true;
|
||||||
$origSourceTransaction->save();
|
$origSourceTransaction->save();
|
||||||
$destTransaction = $this->getDestinationTransaction();
|
$destTransaction = $this->getDestinationTransaction();
|
||||||
$originalAmount = $destTransaction->amount;
|
$originalAmount = $destTransaction->amount;
|
||||||
$destTransaction->amount = app('steam')->positive($amount);
|
$destTransaction->amount = Steam::positive($amount);
|
||||||
$destTransaction->balance_dirty = true;
|
$destTransaction->balance_dirty = true;
|
||||||
$destTransaction->save();
|
$destTransaction->save();
|
||||||
// refresh transactions.
|
// refresh transactions.
|
||||||
@@ -674,9 +675,18 @@ class JournalUpdateService
|
|||||||
$this->destinationTransaction->refresh();
|
$this->destinationTransaction->refresh();
|
||||||
Log::debug(sprintf('Updated amount to "%s"', $amount));
|
Log::debug(sprintf('Updated amount to "%s"', $amount));
|
||||||
|
|
||||||
|
$group = $this->transactionGroup;
|
||||||
|
if (null === $group) {
|
||||||
|
$group = $this->transactionJournal?->transactionGroup;
|
||||||
|
}
|
||||||
|
if (null === $group) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// should not return in NULL but seems to do.
|
||||||
event(new TriggeredAuditLog(
|
event(new TriggeredAuditLog(
|
||||||
$this->transactionGroup->user,
|
$group->user,
|
||||||
$this->transactionGroup,
|
$group,
|
||||||
'update_amount',
|
'update_amount',
|
||||||
[
|
[
|
||||||
'currency_symbol' => $destTransaction->transactionCurrency->symbol,
|
'currency_symbol' => $destTransaction->transactionCurrency->symbol,
|
||||||
@@ -721,7 +731,7 @@ class JournalUpdateService
|
|||||||
// add foreign currency info to source and destination if possible.
|
// add foreign currency info to source and destination if possible.
|
||||||
if (null !== $foreignCurrency && null !== $foreignAmount) {
|
if (null !== $foreignCurrency && null !== $foreignAmount) {
|
||||||
$source->foreign_currency_id = $foreignCurrency->id;
|
$source->foreign_currency_id = $foreignCurrency->id;
|
||||||
$source->foreign_amount = app('steam')->negative($foreignAmount);
|
$source->foreign_amount = Steam::negative($foreignAmount);
|
||||||
$source->save();
|
$source->save();
|
||||||
|
|
||||||
// if the transaction is a TRANSFER, and the foreign amount and currency are set (like they seem to be)
|
// if the transaction is a TRANSFER, and the foreign amount and currency are set (like they seem to be)
|
||||||
@@ -734,13 +744,13 @@ class JournalUpdateService
|
|||||||
if ($isTransfer || $isBetween) {
|
if ($isTransfer || $isBetween) {
|
||||||
Log::debug('Switch amounts, store in amount and not foreign_amount');
|
Log::debug('Switch amounts, store in amount and not foreign_amount');
|
||||||
$dest->transaction_currency_id = $foreignCurrency->id;
|
$dest->transaction_currency_id = $foreignCurrency->id;
|
||||||
$dest->amount = app('steam')->positive($foreignAmount);
|
$dest->amount = Steam::positive($foreignAmount);
|
||||||
$dest->foreign_amount = app('steam')->positive($source->amount);
|
$dest->foreign_amount = Steam::positive($source->amount);
|
||||||
$dest->foreign_currency_id = $source->transaction_currency_id;
|
$dest->foreign_currency_id = $source->transaction_currency_id;
|
||||||
}
|
}
|
||||||
if (!$isTransfer && !$isBetween) {
|
if (!$isTransfer && !$isBetween) {
|
||||||
$dest->foreign_currency_id = $foreignCurrency->id;
|
$dest->foreign_currency_id = $foreignCurrency->id;
|
||||||
$dest->foreign_amount = app('steam')->positive($foreignAmount);
|
$dest->foreign_amount = Steam::positive($foreignAmount);
|
||||||
}
|
}
|
||||||
|
|
||||||
$dest->save();
|
$dest->save();
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
|
|||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class FrontpageChartGenerator
|
* Class FrontpageChartGenerator
|
||||||
@@ -102,7 +103,7 @@ class FrontpageChartGenerator
|
|||||||
$this->blRepository->setUser($user);
|
$this->blRepository->setUser($user);
|
||||||
$this->opsRepository->setUser($user);
|
$this->opsRepository->setUser($user);
|
||||||
|
|
||||||
$locale = app('steam')->getLocale();
|
$locale = Steam::getLocale();
|
||||||
$this->monthAndDayFormat = (string)trans('config.month_and_day_js', [], $locale);
|
$this->monthAndDayFormat = (string)trans('config.month_and_day_js', [], $locale);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ use FireflyIII\Models\Category;
|
|||||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\Repositories\Category\OperationsRepositoryInterface;
|
use FireflyIII\Repositories\Category\OperationsRepositoryInterface;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class WholePeriodChartGenerator
|
* Class WholePeriodChartGenerator
|
||||||
@@ -102,8 +103,8 @@ class WholePeriodChartGenerator
|
|||||||
$earnedInfoKey = sprintf('earned-in-%s', $code);
|
$earnedInfoKey = sprintf('earned-in-%s', $code);
|
||||||
$spentAmount = $spent[$key][$currencyId]['sum'] ?? '0';
|
$spentAmount = $spent[$key][$currencyId]['sum'] ?? '0';
|
||||||
$earnedAmount = $earned[$key][$currencyId]['sum'] ?? '0';
|
$earnedAmount = $earned[$key][$currencyId]['sum'] ?? '0';
|
||||||
$chartData[$spentInfoKey]['entries'][$label] = app('steam')->bcround($spentAmount, $currency['currency_decimal_places']);
|
$chartData[$spentInfoKey]['entries'][$label] = Steam::bcround($spentAmount, $currency['currency_decimal_places']);
|
||||||
$chartData[$earnedInfoKey]['entries'][$label] = app('steam')->bcround($earnedAmount, $currency['currency_decimal_places']);
|
$chartData[$earnedInfoKey]['entries'][$label] = Steam::bcround($earnedAmount, $currency['currency_decimal_places']);
|
||||||
}
|
}
|
||||||
$current = Navigation::addPeriod($current, $step);
|
$current = Navigation::addPeriod($current, $step);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ use FireflyIII\Models\TransactionCurrency;
|
|||||||
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Throwable;
|
use Throwable;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class CurrencyForm
|
* Class CurrencyForm
|
||||||
@@ -150,7 +151,7 @@ class CurrencyForm
|
|||||||
|
|
||||||
// make sure value is formatted nicely:
|
// make sure value is formatted nicely:
|
||||||
if (null !== $value && '' !== $value) {
|
if (null !== $value && '' !== $value) {
|
||||||
$value = app('steam')->bcround($value, $primaryCurrency->decimal_places);
|
$value = Steam::bcround($value, $primaryCurrency->decimal_places);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -202,7 +203,7 @@ class CurrencyForm
|
|||||||
|
|
||||||
// make sure value is formatted nicely:
|
// make sure value is formatted nicely:
|
||||||
if (null !== $value && '' !== $value) {
|
if (null !== $value && '' !== $value) {
|
||||||
$value = app('steam')->bcround($value, $primaryCurrency->decimal_places);
|
$value = Steam::bcround($value, $primaryCurrency->decimal_places);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ trait ChartGeneration
|
|||||||
return $cache->get();
|
return $cache->get();
|
||||||
}
|
}
|
||||||
Log::debug('Regenerate chart.account.account-balance-chart from scratch.');
|
Log::debug('Regenerate chart.account.account-balance-chart from scratch.');
|
||||||
$locale = app('steam')->getLocale();
|
$locale = Steam::getLocale();
|
||||||
|
|
||||||
/** @var GeneratorInterface $generator */
|
/** @var GeneratorInterface $generator */
|
||||||
$generator = app(GeneratorInterface::class);
|
$generator = app(GeneratorInterface::class);
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ use FireflyIII\Models\TransactionGroup;
|
|||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
use Illuminate\Http\RedirectResponse;
|
use Illuminate\Http\RedirectResponse;
|
||||||
use Illuminate\Routing\Redirector;
|
use Illuminate\Routing\Redirector;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Trait UserNavigation
|
* Trait UserNavigation
|
||||||
@@ -53,7 +54,7 @@ trait UserNavigation
|
|||||||
$url = (string)session($identifier);
|
$url = (string)session($identifier);
|
||||||
Log::debug(sprintf('The URL is %s', $url));
|
Log::debug(sprintf('The URL is %s', $url));
|
||||||
|
|
||||||
return app('steam')->getSafeUrl($url, route('index'));
|
return Steam::getSafeUrl($url, route('index'));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -137,7 +138,7 @@ trait UserNavigation
|
|||||||
|
|
||||||
final protected function rememberPreviousUrl(string $identifier): ?string
|
final protected function rememberPreviousUrl(string $identifier): ?string
|
||||||
{
|
{
|
||||||
$return = app('steam')->getSafePreviousUrl();
|
$return = Steam::getSafePreviousUrl();
|
||||||
session()->put($identifier, $return);
|
session()->put($identifier, $return);
|
||||||
|
|
||||||
Log::debug(sprintf('rememberPreviousUrl: %s: "%s"', $identifier, $return));
|
Log::debug(sprintf('rememberPreviousUrl: %s: "%s"', $identifier, $return));
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ use FireflyIII\Support\Calendar\Calculator;
|
|||||||
use FireflyIII\Support\Calendar\Periodicity;
|
use FireflyIII\Support\Calendar\Periodicity;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Throwable;
|
use Throwable;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class Navigation.
|
* Class Navigation.
|
||||||
@@ -404,7 +405,7 @@ class Navigation
|
|||||||
*/
|
*/
|
||||||
public function listOfPeriods(Carbon $start, Carbon $end): array
|
public function listOfPeriods(Carbon $start, Carbon $end): array
|
||||||
{
|
{
|
||||||
$locale = app('steam')->getLocale();
|
$locale = Steam::getLocale();
|
||||||
// define period to increment
|
// define period to increment
|
||||||
$increment = 'addDay';
|
$increment = 'addDay';
|
||||||
$format = $this->preferredCarbonFormat($start, $end);
|
$format = $this->preferredCarbonFormat($start, $end);
|
||||||
@@ -536,7 +537,7 @@ class Navigation
|
|||||||
*/
|
*/
|
||||||
public function preferredCarbonLocalizedFormat(Carbon $start, Carbon $end): string
|
public function preferredCarbonLocalizedFormat(Carbon $start, Carbon $end): string
|
||||||
{
|
{
|
||||||
$locale = app('steam')->getLocale();
|
$locale = Steam::getLocale();
|
||||||
$diff = $start->diffInMonths($end, true);
|
$diff = $start->diffInMonths($end, true);
|
||||||
if ($diff >= 1.001 && $diff < 12.001) {
|
if ($diff >= 1.001 && $diff < 12.001) {
|
||||||
return (string)trans('config.month_js', [], $locale);
|
return (string)trans('config.month_js', [], $locale);
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ use Psr\Container\NotFoundExceptionInterface;
|
|||||||
use Spatie\Period\Boundaries;
|
use Spatie\Period\Boundaries;
|
||||||
use Spatie\Period\Period;
|
use Spatie\Period\Period;
|
||||||
use Spatie\Period\Precision;
|
use Spatie\Period\Precision;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
trait RecalculatesAvailableBudgetsTrait
|
trait RecalculatesAvailableBudgetsTrait
|
||||||
{
|
{
|
||||||
@@ -103,7 +104,7 @@ trait RecalculatesAvailableBudgetsTrait
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Log::debug(sprintf('Concluded new amount for this AB must be %s', $newAmount));
|
Log::debug(sprintf('Concluded new amount for this AB must be %s', $newAmount));
|
||||||
$availableBudget->amount = app('steam')->bcround($newAmount, $availableBudget->transactionCurrency->decimal_places);
|
$availableBudget->amount = Steam::bcround($newAmount, $availableBudget->transactionCurrency->decimal_places);
|
||||||
$availableBudget->save();
|
$availableBudget->save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -139,7 +139,7 @@ class TransactionSummarizer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// $array[$currencyId]['sum'] = bcadd($array[$currencyId]['sum'], app('steam')->{$method}($amount));
|
// $array[$currencyId]['sum'] = bcadd($array[$currencyId]['sum'], \FireflyIII\Support\Facades\Steam::{$method}($amount));
|
||||||
// Log::debug(sprintf('Journal #%d adds amount %s %s', $journal['transaction_journal_id'], $currencyCode, $amount));
|
// Log::debug(sprintf('Journal #%d adds amount %s %s', $journal['transaction_journal_id'], $currencyCode, $amount));
|
||||||
}
|
}
|
||||||
Log::debug('End of sumExpenses.', $array);
|
Log::debug('End of sumExpenses.', $array);
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ use Illuminate\Support\Collection;
|
|||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use LogicException;
|
use LogicException;
|
||||||
use TypeError;
|
use TypeError;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class OperatorQuerySearch
|
* Class OperatorQuerySearch
|
||||||
@@ -2287,7 +2288,7 @@ class OperatorQuerySearch implements SearchInterface
|
|||||||
// strip comma's, make dots.
|
// strip comma's, make dots.
|
||||||
Log::debug(sprintf('Original value "%s"', $value));
|
Log::debug(sprintf('Original value "%s"', $value));
|
||||||
$value = str_replace(',', '.', $value);
|
$value = str_replace(',', '.', $value);
|
||||||
$amount = app('steam')->positive($value);
|
$amount = Steam::positive($value);
|
||||||
Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount));
|
Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount));
|
||||||
$this->collector->amountIs($amount);
|
$this->collector->amountIs($amount);
|
||||||
|
|
||||||
@@ -2297,7 +2298,7 @@ class OperatorQuerySearch implements SearchInterface
|
|||||||
// strip comma's, make dots.
|
// strip comma's, make dots.
|
||||||
Log::debug(sprintf('Original value "%s"', $value));
|
Log::debug(sprintf('Original value "%s"', $value));
|
||||||
$value = str_replace(',', '.', $value);
|
$value = str_replace(',', '.', $value);
|
||||||
$amount = app('steam')->positive($value);
|
$amount = Steam::positive($value);
|
||||||
Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount));
|
Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount));
|
||||||
$this->collector->amountIsNot($amount);
|
$this->collector->amountIsNot($amount);
|
||||||
|
|
||||||
@@ -2307,7 +2308,7 @@ class OperatorQuerySearch implements SearchInterface
|
|||||||
// strip comma's, make dots.
|
// strip comma's, make dots.
|
||||||
$value = str_replace(',', '.', $value);
|
$value = str_replace(',', '.', $value);
|
||||||
|
|
||||||
$amount = app('steam')->positive($value);
|
$amount = Steam::positive($value);
|
||||||
Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount));
|
Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount));
|
||||||
$this->collector->foreignAmountIs($amount);
|
$this->collector->foreignAmountIs($amount);
|
||||||
|
|
||||||
@@ -2317,7 +2318,7 @@ class OperatorQuerySearch implements SearchInterface
|
|||||||
// strip comma's, make dots.
|
// strip comma's, make dots.
|
||||||
$value = str_replace(',', '.', $value);
|
$value = str_replace(',', '.', $value);
|
||||||
|
|
||||||
$amount = app('steam')->positive($value);
|
$amount = Steam::positive($value);
|
||||||
Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount));
|
Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount));
|
||||||
$this->collector->foreignAmountIsNot($amount);
|
$this->collector->foreignAmountIsNot($amount);
|
||||||
|
|
||||||
@@ -2328,7 +2329,7 @@ class OperatorQuerySearch implements SearchInterface
|
|||||||
// strip comma's, make dots.
|
// strip comma's, make dots.
|
||||||
$value = str_replace(',', '.', $value);
|
$value = str_replace(',', '.', $value);
|
||||||
|
|
||||||
$amount = app('steam')->positive($value);
|
$amount = Steam::positive($value);
|
||||||
Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount));
|
Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount));
|
||||||
$this->collector->amountLess($amount);
|
$this->collector->amountLess($amount);
|
||||||
|
|
||||||
@@ -2339,7 +2340,7 @@ class OperatorQuerySearch implements SearchInterface
|
|||||||
// strip comma's, make dots.
|
// strip comma's, make dots.
|
||||||
$value = str_replace(',', '.', $value);
|
$value = str_replace(',', '.', $value);
|
||||||
|
|
||||||
$amount = app('steam')->positive($value);
|
$amount = Steam::positive($value);
|
||||||
Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount));
|
Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount));
|
||||||
$this->collector->foreignAmountLess($amount);
|
$this->collector->foreignAmountLess($amount);
|
||||||
|
|
||||||
@@ -2350,7 +2351,7 @@ class OperatorQuerySearch implements SearchInterface
|
|||||||
Log::debug(sprintf('Now handling operator "%s"', $operator));
|
Log::debug(sprintf('Now handling operator "%s"', $operator));
|
||||||
// strip comma's, make dots.
|
// strip comma's, make dots.
|
||||||
$value = str_replace(',', '.', $value);
|
$value = str_replace(',', '.', $value);
|
||||||
$amount = app('steam')->positive($value);
|
$amount = Steam::positive($value);
|
||||||
Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount));
|
Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount));
|
||||||
$this->collector->amountMore($amount);
|
$this->collector->amountMore($amount);
|
||||||
|
|
||||||
@@ -2361,7 +2362,7 @@ class OperatorQuerySearch implements SearchInterface
|
|||||||
Log::debug(sprintf('Now handling operator "%s"', $operator));
|
Log::debug(sprintf('Now handling operator "%s"', $operator));
|
||||||
// strip comma's, make dots.
|
// strip comma's, make dots.
|
||||||
$value = str_replace(',', '.', $value);
|
$value = str_replace(',', '.', $value);
|
||||||
$amount = app('steam')->positive($value);
|
$amount = Steam::positive($value);
|
||||||
Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount));
|
Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount));
|
||||||
$this->collector->foreignAmountMore($amount);
|
$this->collector->foreignAmountMore($amount);
|
||||||
|
|
||||||
|
|||||||
@@ -23,9 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace FireflyIII\Support;
|
namespace FireflyIII\Support;
|
||||||
|
|
||||||
use FireflyIII\Support\Facades\Preferences;
|
|
||||||
use Deprecated;
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
|
use Deprecated;
|
||||||
use Exception;
|
use Exception;
|
||||||
use FireflyIII\Exceptions\FireflyException;
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
use FireflyIII\Models\Account;
|
use FireflyIII\Models\Account;
|
||||||
@@ -33,6 +32,7 @@ use FireflyIII\Models\AccountMeta;
|
|||||||
use FireflyIII\Models\Transaction;
|
use FireflyIII\Models\Transaction;
|
||||||
use FireflyIII\Models\TransactionCurrency;
|
use FireflyIII\Models\TransactionCurrency;
|
||||||
use FireflyIII\Support\Facades\Amount;
|
use FireflyIII\Support\Facades\Amount;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use FireflyIII\Support\Http\Api\ExchangeRateConverter;
|
use FireflyIII\Support\Http\Api\ExchangeRateConverter;
|
||||||
use FireflyIII\Support\Singleton\PreferencesSingleton;
|
use FireflyIII\Support\Singleton\PreferencesSingleton;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
@@ -43,7 +43,6 @@ use Psr\Container\ContainerExceptionInterface;
|
|||||||
use Psr\Container\NotFoundExceptionInterface;
|
use Psr\Container\NotFoundExceptionInterface;
|
||||||
use Safe\Exceptions\UrlException;
|
use Safe\Exceptions\UrlException;
|
||||||
use ValueError;
|
use ValueError;
|
||||||
|
|
||||||
use function Safe\parse_url;
|
use function Safe\parse_url;
|
||||||
use function Safe\preg_replace;
|
use function Safe\preg_replace;
|
||||||
|
|
||||||
@@ -55,38 +54,37 @@ class Steam
|
|||||||
public function accountsBalancesOptimized(Collection $accounts, Carbon $date, ?TransactionCurrency $primary = null, ?bool $convertToPrimary = null, bool $inclusive = true): array
|
public function accountsBalancesOptimized(Collection $accounts, Carbon $date, ?TransactionCurrency $primary = null, ?bool $convertToPrimary = null, bool $inclusive = true): array
|
||||||
{
|
{
|
||||||
Log::debug(sprintf('accountsBalancesOptimized: Called for %d account(s) with date/time "%s" (inclusive: %s)', $accounts->count(), $date->toIso8601String(), var_export($inclusive, true)));
|
Log::debug(sprintf('accountsBalancesOptimized: Called for %d account(s) with date/time "%s" (inclusive: %s)', $accounts->count(), $date->toIso8601String(), var_export($inclusive, true)));
|
||||||
$result = [];
|
$result = [];
|
||||||
$convertToPrimary ??= Amount::convertToPrimary();
|
$convertToPrimary ??= Amount::convertToPrimary();
|
||||||
$primary ??= Amount::getPrimaryCurrency();
|
$primary ??= Amount::getPrimaryCurrency();
|
||||||
$currencies = $this->getCurrencies($accounts);
|
$currencies = $this->getCurrencies($accounts);
|
||||||
|
|
||||||
// balance(s) in all currencies for ALL accounts.
|
// balance(s) in all currencies for ALL accounts.
|
||||||
$arrayOfSums = Transaction::whereIn('account_id', $accounts->pluck('id')->toArray())
|
$arrayOfSums = Transaction::whereIn('account_id', $accounts->pluck('id')->toArray())
|
||||||
->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
|
->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
|
||||||
->leftJoin('transaction_currencies', 'transaction_currencies.id', '=', 'transactions.transaction_currency_id')
|
->leftJoin('transaction_currencies', 'transaction_currencies.id', '=', 'transactions.transaction_currency_id')
|
||||||
->where('transaction_journals.date', $inclusive ? '<=' : '<', $date->format('Y-m-d H:i:s'))
|
->where('transaction_journals.date', $inclusive ? '<=' : '<', $date->format('Y-m-d H:i:s'))
|
||||||
->groupBy(['transactions.account_id', 'transaction_currencies.code'])
|
->groupBy(['transactions.account_id', 'transaction_currencies.code'])
|
||||||
->get(['transactions.account_id', 'transaction_currencies.code', DB::raw('SUM(transactions.amount) as sum_of_amount')])->toArray()
|
->get(['transactions.account_id', 'transaction_currencies.code', DB::raw('SUM(transactions.amount) as sum_of_amount')])->toArray();
|
||||||
;
|
|
||||||
|
|
||||||
Log::debug('Array of sums: ', $arrayOfSums);
|
Log::debug('Array of sums: ', $arrayOfSums);
|
||||||
|
|
||||||
/** @var Account $account */
|
/** @var Account $account */
|
||||||
foreach ($accounts as $account) {
|
foreach ($accounts as $account) {
|
||||||
$return = [
|
$return = [
|
||||||
'pc_balance' => '0',
|
'pc_balance' => '0',
|
||||||
'balance' => '0', // this key is overwritten right away, but I must remember it is always created.
|
'balance' => '0', // this key is overwritten right away, but I must remember it is always created.
|
||||||
];
|
];
|
||||||
$currency = $currencies[$account->id];
|
$currency = $currencies[$account->id];
|
||||||
|
|
||||||
// second array
|
// second array
|
||||||
$accountSums = array_filter($arrayOfSums, fn (array $entry): bool => $entry['account_id'] === $account->id);
|
$accountSums = array_filter($arrayOfSums, fn(array $entry): bool => $entry['account_id'] === $account->id);
|
||||||
if (0 === count($accountSums)) {
|
if (0 === count($accountSums)) {
|
||||||
$result[$account->id] = $return;
|
$result[$account->id] = $return;
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$sumsByCode = [];
|
$sumsByCode = [];
|
||||||
foreach ($accountSums as $accountSum) {
|
foreach ($accountSums as $accountSum) {
|
||||||
// $accountSum = array_values($accountSum)[0];
|
// $accountSum = array_values($accountSum)[0];
|
||||||
$sumOfAmount = (string)$accountSum['sum_of_amount'];
|
$sumOfAmount = (string)$accountSum['sum_of_amount'];
|
||||||
@@ -95,7 +93,7 @@ class Steam
|
|||||||
}
|
}
|
||||||
// Log::debug('All balances are (joined)', $others);
|
// Log::debug('All balances are (joined)', $others);
|
||||||
// if there is no request to convert, take this as "balance" and "pc_balance".
|
// if there is no request to convert, take this as "balance" and "pc_balance".
|
||||||
$return['balance'] = $sumsByCode[$currency->code] ?? '0';
|
$return['balance'] = $sumsByCode[$currency->code] ?? '0';
|
||||||
if (!$convertToPrimary) {
|
if (!$convertToPrimary) {
|
||||||
unset($return['pc_balance']);
|
unset($return['pc_balance']);
|
||||||
// Log::debug(sprintf('Set balance to %s, unset pc_balance', $return['balance']));
|
// Log::debug(sprintf('Set balance to %s, unset pc_balance', $return['balance']));
|
||||||
@@ -108,7 +106,7 @@ class Steam
|
|||||||
}
|
}
|
||||||
|
|
||||||
// either way, the balance is always combined with the virtual balance:
|
// either way, the balance is always combined with the virtual balance:
|
||||||
$virtualBalance = (string)('' === (string)$account->virtual_balance ? '0' : $account->virtual_balance);
|
$virtualBalance = (string)('' === (string)$account->virtual_balance ? '0' : $account->virtual_balance);
|
||||||
|
|
||||||
if ($convertToPrimary) {
|
if ($convertToPrimary) {
|
||||||
// the primary currency balance is combined with a converted virtual_balance:
|
// the primary currency balance is combined with a converted virtual_balance:
|
||||||
@@ -131,7 +129,8 @@ class Steam
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calls accountsBalancesOptimized for the given accounts and makes sure that inclusive is set to false, so it properly gets the balance of a range.
|
* Calls accountsBalancesOptimized for the given accounts and makes sure that inclusive is set to false, so it
|
||||||
|
* properly gets the balance of a range.
|
||||||
*/
|
*/
|
||||||
public function accountsBalancesInRange(Collection $accounts, Carbon $start, Carbon $end, ?TransactionCurrency $primary = null, ?bool $convertToPrimary = null): array
|
public function accountsBalancesInRange(Collection $accounts, Carbon $start, Carbon $end, ?TransactionCurrency $primary = null, ?bool $convertToPrimary = null): array
|
||||||
{
|
{
|
||||||
@@ -160,10 +159,10 @@ class Steam
|
|||||||
// Log::debug(sprintf('Trying bcround("%s",%d)', $number, $precision));
|
// Log::debug(sprintf('Trying bcround("%s",%d)', $number, $precision));
|
||||||
if (str_contains($number, '.')) {
|
if (str_contains($number, '.')) {
|
||||||
if ('-' !== $number[0]) {
|
if ('-' !== $number[0]) {
|
||||||
return bcadd($number, '0.'.str_repeat('0', $precision).'5', $precision);
|
return bcadd($number, '0.' . str_repeat('0', $precision) . '5', $precision);
|
||||||
}
|
}
|
||||||
|
|
||||||
return bcsub($number, '0.'.str_repeat('0', $precision).'5', $precision);
|
return bcsub($number, '0.' . str_repeat('0', $precision) . '5', $precision);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $number;
|
return $number;
|
||||||
@@ -305,11 +304,12 @@ class Steam
|
|||||||
"balance": balance in the account's currency OR user's primary currency if the account has no currency
|
"balance": balance in the account's currency OR user's primary currency if the account has no currency
|
||||||
--> "pc_balance": balance in the user's primary currency, with all amounts converted to the primary currency.
|
--> "pc_balance": balance in the user's primary currency, with all amounts converted to the primary currency.
|
||||||
"EUR": balance in EUR (or whatever currencies the account has balance in)
|
"EUR": balance in EUR (or whatever currencies the account has balance in)
|
||||||
TXT)]
|
TXT
|
||||||
|
)]
|
||||||
public function finalAccountBalance(Account $account, Carbon $date, ?TransactionCurrency $primary = null, ?bool $convertToPrimary = null, bool $inclusive = true): array
|
public function finalAccountBalance(Account $account, Carbon $date, ?TransactionCurrency $primary = null, ?bool $convertToPrimary = null, bool $inclusive = true): array
|
||||||
{
|
{
|
||||||
|
|
||||||
$cache = new CacheProperties();
|
$cache = new CacheProperties();
|
||||||
$cache->addProperty($account->id);
|
$cache->addProperty($account->id);
|
||||||
$cache->addProperty($date);
|
$cache->addProperty($date);
|
||||||
if ($cache->has()) {
|
if ($cache->has()) {
|
||||||
@@ -324,27 +324,26 @@ class Steam
|
|||||||
$primary = Amount::getPrimaryCurrencyByUserGroup($account->user->userGroup);
|
$primary = Amount::getPrimaryCurrencyByUserGroup($account->user->userGroup);
|
||||||
}
|
}
|
||||||
// account balance thing.
|
// account balance thing.
|
||||||
$currencyPresent = isset($account->meta) && array_key_exists('currency', $account->meta) && null !== $account->meta['currency'];
|
$currencyPresent = isset($account->meta) && array_key_exists('currency', $account->meta) && null !== $account->meta['currency'];
|
||||||
if ($currencyPresent) {
|
if ($currencyPresent) {
|
||||||
$accountCurrency = $account->meta['currency'];
|
$accountCurrency = $account->meta['currency'];
|
||||||
}
|
}
|
||||||
if (!$currencyPresent) {
|
if (!$currencyPresent) {
|
||||||
$accountCurrency = $this->getAccountCurrency($account);
|
$accountCurrency = $this->getAccountCurrency($account);
|
||||||
}
|
}
|
||||||
$hasCurrency = null !== $accountCurrency;
|
$hasCurrency = null !== $accountCurrency;
|
||||||
$currency = $hasCurrency ? $accountCurrency : $primary;
|
$currency = $hasCurrency ? $accountCurrency : $primary;
|
||||||
$return = [
|
$return = [
|
||||||
'pc_balance' => '0',
|
'pc_balance' => '0',
|
||||||
'balance' => '0', // this key is overwritten right away, but I must remember it is always created.
|
'balance' => '0', // this key is overwritten right away, but I must remember it is always created.
|
||||||
];
|
];
|
||||||
// balance(s) in all currencies.
|
// balance(s) in all currencies.
|
||||||
$array = $account->transactions()
|
$array = $account->transactions()
|
||||||
->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
|
->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
|
||||||
->leftJoin('transaction_currencies', 'transaction_currencies.id', '=', 'transactions.transaction_currency_id')
|
->leftJoin('transaction_currencies', 'transaction_currencies.id', '=', 'transactions.transaction_currency_id')
|
||||||
->where('transaction_journals.date', $inclusive ? '<=' : '<', $date->format('Y-m-d H:i:s'))
|
->where('transaction_journals.date', $inclusive ? '<=' : '<', $date->format('Y-m-d H:i:s'))
|
||||||
->get(['transaction_currencies.code', 'transactions.amount'])->toArray()
|
->get(['transaction_currencies.code', 'transactions.amount'])->toArray();
|
||||||
;
|
$others = $this->groupAndSumTransactions($array, 'code', 'amount');
|
||||||
$others = $this->groupAndSumTransactions($array, 'code', 'amount');
|
|
||||||
Log::debug('All balances are (joined)', $others);
|
Log::debug('All balances are (joined)', $others);
|
||||||
// if there is no request to convert, take this as "balance" and "pc_balance".
|
// if there is no request to convert, take this as "balance" and "pc_balance".
|
||||||
$return['balance'] = $others[$currency->code] ?? '0';
|
$return['balance'] = $others[$currency->code] ?? '0';
|
||||||
@@ -359,7 +358,7 @@ class Steam
|
|||||||
}
|
}
|
||||||
|
|
||||||
// either way, the balance is always combined with the virtual balance:
|
// either way, the balance is always combined with the virtual balance:
|
||||||
$virtualBalance = (string)('' === (string)$account->virtual_balance ? '0' : $account->virtual_balance);
|
$virtualBalance = (string)('' === (string)$account->virtual_balance ? '0' : $account->virtual_balance);
|
||||||
|
|
||||||
if ($convertToPrimary) {
|
if ($convertToPrimary) {
|
||||||
// the primary currency balance is combined with a converted virtual_balance:
|
// the primary currency balance is combined with a converted virtual_balance:
|
||||||
@@ -373,7 +372,7 @@ class Steam
|
|||||||
$return['balance'] = bcadd($return['balance'], $virtualBalance);
|
$return['balance'] = bcadd($return['balance'], $virtualBalance);
|
||||||
// Log::debug(sprintf('Virtual balance makes the (primary currency) total %s', $return['balance']));
|
// Log::debug(sprintf('Virtual balance makes the (primary currency) total %s', $return['balance']));
|
||||||
}
|
}
|
||||||
$final = array_merge($return, $others);
|
$final = array_merge($return, $others);
|
||||||
Log::debug('Final balance is', $final);
|
Log::debug('Final balance is', $final);
|
||||||
$cache->store($final);
|
$cache->store($final);
|
||||||
|
|
||||||
@@ -391,7 +390,7 @@ class Steam
|
|||||||
Log::debug(sprintf('called finalAccountBalanceInRange(#%d, %s, %s)', $account->id, $start->format('Y-m-d H:i:s'), $end->format('Y-m-d H:i:s')));
|
Log::debug(sprintf('called finalAccountBalanceInRange(#%d, %s, %s)', $account->id, $start->format('Y-m-d H:i:s'), $end->format('Y-m-d H:i:s')));
|
||||||
|
|
||||||
// set up cache
|
// set up cache
|
||||||
$cache = new CacheProperties();
|
$cache = new CacheProperties();
|
||||||
$cache->addProperty($account->id);
|
$cache->addProperty($account->id);
|
||||||
$cache->addProperty('final-balance-in-range');
|
$cache->addProperty('final-balance-in-range');
|
||||||
$cache->addProperty($start);
|
$cache->addProperty($start);
|
||||||
@@ -402,15 +401,15 @@ class Steam
|
|||||||
// return $cache->get();
|
// return $cache->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
$balances = [];
|
$balances = [];
|
||||||
$formatted = $start->format('Y-m-d');
|
$formatted = $start->format('Y-m-d');
|
||||||
Log::debug('Get first balance to start.');
|
Log::debug('Get first balance to start.');
|
||||||
// 2025-10-08 replaced finalAccountBalance with accountsBalancesOptimized:
|
// 2025-10-08 replaced finalAccountBalance with accountsBalancesOptimized:
|
||||||
$primaryCurrency = Amount::getPrimaryCurrencyByUserGroup($account->user->userGroup);
|
$primaryCurrency = Amount::getPrimaryCurrencyByUserGroup($account->user->userGroup);
|
||||||
$startBalance = $this->accountsBalancesOptimized(new Collection()->push($account), $start, $primaryCurrency, $convertToPrimary, false)[$account->id];
|
$startBalance = $this->accountsBalancesOptimized(new Collection()->push($account), $start, $primaryCurrency, $convertToPrimary, false)[$account->id];
|
||||||
$accountCurrency = $this->getAccountCurrency($account);
|
$accountCurrency = $this->getAccountCurrency($account);
|
||||||
$hasCurrency = $accountCurrency instanceof TransactionCurrency;
|
$hasCurrency = $accountCurrency instanceof TransactionCurrency;
|
||||||
$currency = $accountCurrency ?? $primaryCurrency;
|
$currency = $accountCurrency ?? $primaryCurrency;
|
||||||
Log::debug(sprintf('Currency is %s', $currency->code));
|
Log::debug(sprintf('Currency is %s', $currency->code));
|
||||||
|
|
||||||
// set start balances:
|
// set start balances:
|
||||||
@@ -422,7 +421,7 @@ class Steam
|
|||||||
Log::debug(sprintf('Also set start balance in %s', $primaryCurrency->code));
|
Log::debug(sprintf('Also set start balance in %s', $primaryCurrency->code));
|
||||||
$startBalance[$primaryCurrency->code] ??= '0';
|
$startBalance[$primaryCurrency->code] ??= '0';
|
||||||
}
|
}
|
||||||
$currencies = [
|
$currencies = [
|
||||||
$currency->id => $currency,
|
$currency->id => $currency,
|
||||||
$primaryCurrency->id => $primaryCurrency,
|
$primaryCurrency->id => $primaryCurrency,
|
||||||
];
|
];
|
||||||
@@ -432,48 +431,47 @@ class Steam
|
|||||||
|
|
||||||
// sums up the balance changes per day.
|
// sums up the balance changes per day.
|
||||||
Log::debug(sprintf('Date >= %s and <= %s', $start->format('Y-m-d H:i:s'), $end->format('Y-m-d H:i:s')));
|
Log::debug(sprintf('Date >= %s and <= %s', $start->format('Y-m-d H:i:s'), $end->format('Y-m-d H:i:s')));
|
||||||
$set = $account->transactions()
|
$set = $account->transactions()
|
||||||
->leftJoin('transaction_journals', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
|
->leftJoin('transaction_journals', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
|
||||||
->where('transaction_journals.date', '>=', $start->format('Y-m-d H:i:s'))
|
->where('transaction_journals.date', '>=', $start->format('Y-m-d H:i:s'))
|
||||||
->where('transaction_journals.date', '<=', $end->format('Y-m-d H:i:s'))
|
->where('transaction_journals.date', '<=', $end->format('Y-m-d H:i:s'))
|
||||||
->groupBy('transaction_journals.date')
|
->groupBy('transaction_journals.date')
|
||||||
->groupBy('transactions.transaction_currency_id')
|
->groupBy('transactions.transaction_currency_id')
|
||||||
->orderBy('transaction_journals.date', 'ASC')
|
->orderBy('transaction_journals.date', 'ASC')
|
||||||
->whereNull('transaction_journals.deleted_at')
|
->whereNull('transaction_journals.deleted_at')
|
||||||
->get(
|
->get(
|
||||||
[ // @phpstan-ignore-line
|
[ // @phpstan-ignore-line
|
||||||
'transaction_journals.date',
|
'transaction_journals.date',
|
||||||
'transactions.transaction_currency_id',
|
'transactions.transaction_currency_id',
|
||||||
DB::raw('SUM(transactions.amount) AS sum_of_day'),
|
DB::raw('SUM(transactions.amount) AS sum_of_day'),
|
||||||
]
|
]
|
||||||
)
|
);
|
||||||
;
|
|
||||||
|
|
||||||
$currentBalance = $startBalance;
|
$currentBalance = $startBalance;
|
||||||
$converter = new ExchangeRateConverter();
|
$converter = new ExchangeRateConverter();
|
||||||
|
|
||||||
|
|
||||||
/** @var Transaction $entry */
|
/** @var Transaction $entry */
|
||||||
foreach ($set as $entry) {
|
foreach ($set as $entry) {
|
||||||
// get date object
|
// get date object
|
||||||
$carbon = new Carbon($entry->date, $entry->date_tz);
|
$carbon = new Carbon($entry->date, $entry->date_tz);
|
||||||
$carbonKey = $carbon->format('Y-m-d');
|
$carbonKey = $carbon->format('Y-m-d');
|
||||||
// make sure sum is a string:
|
// make sure sum is a string:
|
||||||
$sumOfDay = (string)($entry->sum_of_day ?? '0');
|
$sumOfDay = (string)($entry->sum_of_day ?? '0');
|
||||||
// #10426 make sure sum is not in scientific notation.
|
// #10426 make sure sum is not in scientific notation.
|
||||||
$sumOfDay = $this->floatalize($sumOfDay);
|
$sumOfDay = $this->floatalize($sumOfDay);
|
||||||
|
|
||||||
// find currency of this entry, does not have to exist.
|
// find currency of this entry, does not have to exist.
|
||||||
$currencies[$entry->transaction_currency_id] ??= Amount::getTransactionCurrencyById($entry->transaction_currency_id);
|
$currencies[$entry->transaction_currency_id] ??= Amount::getTransactionCurrencyById($entry->transaction_currency_id);
|
||||||
|
|
||||||
// make sure this $entry has its own $entryCurrency
|
// make sure this $entry has its own $entryCurrency
|
||||||
/** @var TransactionCurrency $entryCurrency */
|
/** @var TransactionCurrency $entryCurrency */
|
||||||
$entryCurrency = $currencies[$entry->transaction_currency_id];
|
$entryCurrency = $currencies[$entry->transaction_currency_id];
|
||||||
|
|
||||||
Log::debug(sprintf('Processing transaction(s) on moment %s', $carbon->format('Y-m-d H:i:s')));
|
Log::debug(sprintf('Processing transaction(s) on moment %s', $carbon->format('Y-m-d H:i:s')));
|
||||||
|
|
||||||
// add amount to current balance in currency code.
|
// add amount to current balance in currency code.
|
||||||
$currentBalance[$entryCurrency->code] ??= '0';
|
$currentBalance[$entryCurrency->code] ??= '0';
|
||||||
$currentBalance[$entryCurrency->code] = bcadd($sumOfDay, (string)$currentBalance[$entryCurrency->code]);
|
$currentBalance[$entryCurrency->code] = bcadd($sumOfDay, (string)$currentBalance[$entryCurrency->code]);
|
||||||
|
|
||||||
// if not requested to convert to primary currency, add the amount to "balance", do nothing else.
|
// if not requested to convert to primary currency, add the amount to "balance", do nothing else.
|
||||||
@@ -491,7 +489,7 @@ class Steam
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// add to final array.
|
// add to final array.
|
||||||
$balances[$carbonKey] = $currentBalance;
|
$balances[$carbonKey] = $currentBalance;
|
||||||
Log::debug(sprintf('Updated entry [%s]', $carbonKey), $currentBalance);
|
Log::debug(sprintf('Updated entry [%s]', $carbonKey), $currentBalance);
|
||||||
}
|
}
|
||||||
$cache->store($balances);
|
$cache->store($balances);
|
||||||
@@ -508,7 +506,7 @@ class Steam
|
|||||||
*/
|
*/
|
||||||
public function floatalize(string $value): string
|
public function floatalize(string $value): string
|
||||||
{
|
{
|
||||||
$value = strtoupper($value);
|
$value = strtoupper($value);
|
||||||
if (!str_contains($value, 'E')) {
|
if (!str_contains($value, 'E')) {
|
||||||
return $value;
|
return $value;
|
||||||
}
|
}
|
||||||
@@ -532,8 +530,8 @@ class Steam
|
|||||||
|
|
||||||
public function getAccountCurrency(Account $account): ?TransactionCurrency
|
public function getAccountCurrency(Account $account): ?TransactionCurrency
|
||||||
{
|
{
|
||||||
$type = $account->accountType->type;
|
$type = $account->accountType->type;
|
||||||
$list = config('firefly.valid_currency_account_types');
|
$list = config('firefly.valid_currency_account_types');
|
||||||
|
|
||||||
// return null if not in this list.
|
// return null if not in this list.
|
||||||
if (!in_array($type, $list, true)) {
|
if (!in_array($type, $list, true)) {
|
||||||
@@ -586,15 +584,15 @@ class Steam
|
|||||||
{
|
{
|
||||||
$list = [];
|
$list = [];
|
||||||
|
|
||||||
$set = auth()->user()->transactions()
|
$set = auth()->user()->transactions()
|
||||||
->whereIn('transactions.account_id', $accounts)
|
->whereIn('transactions.account_id', $accounts)
|
||||||
->groupBy(['transactions.account_id', 'transaction_journals.user_id'])
|
->groupBy(['transactions.account_id', 'transaction_journals.user_id'])
|
||||||
->get(['transactions.account_id', DB::raw('MAX(transaction_journals.date) AS max_date')]) // @phpstan-ignore-line
|
->get(['transactions.account_id', DB::raw('MAX(transaction_journals.date) AS max_date')]) // @phpstan-ignore-line
|
||||||
;
|
;
|
||||||
|
|
||||||
/** @var Transaction $entry */
|
/** @var Transaction $entry */
|
||||||
foreach ($set as $entry) {
|
foreach ($set as $entry) {
|
||||||
$date = new Carbon($entry->max_date, config('app.timezone'));
|
$date = new Carbon($entry->max_date, config('app.timezone'));
|
||||||
$date->setTimezone(config('app.timezone'));
|
$date->setTimezone(config('app.timezone'));
|
||||||
$list[(int)$entry->account_id] = $date;
|
$list[(int)$entry->account_id] = $date;
|
||||||
}
|
}
|
||||||
@@ -612,14 +610,14 @@ class Steam
|
|||||||
if (null !== $cached) {
|
if (null !== $cached) {
|
||||||
return $cached;
|
return $cached;
|
||||||
}
|
}
|
||||||
$locale = Preferences::get('locale', config('firefly.default_locale', 'equal'))->data;
|
$locale = Preferences::get('locale', config('firefly.default_locale', 'equal'))->data;
|
||||||
if (is_array($locale)) {
|
if (is_array($locale)) {
|
||||||
$locale = 'equal';
|
$locale = 'equal';
|
||||||
}
|
}
|
||||||
if ('equal' === $locale) {
|
if ('equal' === $locale) {
|
||||||
$locale = $this->getLanguage();
|
$locale = $this->getLanguage();
|
||||||
}
|
}
|
||||||
$locale = (string)$locale;
|
$locale = (string)$locale;
|
||||||
|
|
||||||
// Check for Windows to replace the locale correctly.
|
// Check for Windows to replace the locale correctly.
|
||||||
if ('WIN' === strtoupper(substr(PHP_OS, 0, 3))) {
|
if ('WIN' === strtoupper(substr(PHP_OS, 0, 3))) {
|
||||||
@@ -663,8 +661,8 @@ class Steam
|
|||||||
*/
|
*/
|
||||||
public function getSafePreviousUrl(): string
|
public function getSafePreviousUrl(): string
|
||||||
{
|
{
|
||||||
// Log::debug(sprintf('getSafePreviousUrl: "%s"', session()->previousUrl()));
|
$res = $this->getSafeUrl(session()->previousUrl() ?? route('index'), route('index'));
|
||||||
return session()->previousUrl() ?? route('index');
|
Log::debug(sprintf('getSafePreviousUrl: "%s"', $res));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -673,8 +671,8 @@ class Steam
|
|||||||
public function getSafeUrl(string $unknownUrl, string $safeUrl): string
|
public function getSafeUrl(string $unknownUrl, string $safeUrl): string
|
||||||
{
|
{
|
||||||
// Log::debug(sprintf('getSafeUrl(%s, %s)', $unknownUrl, $safeUrl));
|
// Log::debug(sprintf('getSafeUrl(%s, %s)', $unknownUrl, $safeUrl));
|
||||||
$returnUrl = $safeUrl;
|
$returnUrl = $safeUrl;
|
||||||
|
// die('in get safe url');
|
||||||
try {
|
try {
|
||||||
$unknownHost = parse_url($unknownUrl, PHP_URL_HOST);
|
$unknownHost = parse_url($unknownUrl, PHP_URL_HOST);
|
||||||
} catch (UrlException $e) {
|
} catch (UrlException $e) {
|
||||||
@@ -791,12 +789,12 @@ class Steam
|
|||||||
if (null === $preference) {
|
if (null === $preference) {
|
||||||
$singleton->setPreference($key, $currency);
|
$singleton->setPreference($key, $currency);
|
||||||
}
|
}
|
||||||
$current = $amount;
|
$current = $amount;
|
||||||
if ($currency->id !== $primary->id) {
|
if ($currency->id !== $primary->id) {
|
||||||
$current = $converter->convert($currency, $primary, $date, $amount);
|
$current = $converter->convert($currency, $primary, $date, $amount);
|
||||||
Log::debug(sprintf('Convert %s %s to %s %s', $currency->code, $amount, $primary->code, $current));
|
Log::debug(sprintf('Convert %s %s to %s %s', $currency->code, $amount, $primary->code, $current));
|
||||||
}
|
}
|
||||||
$total = bcadd((string)$current, $total);
|
$total = bcadd((string)$current, $total);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $total;
|
return $total;
|
||||||
@@ -810,8 +808,8 @@ class Steam
|
|||||||
$primary = Amount::getPrimaryCurrency();
|
$primary = Amount::getPrimaryCurrency();
|
||||||
$currencies[$primary->id] = $primary;
|
$currencies[$primary->id] = $primary;
|
||||||
|
|
||||||
$ids = $accounts->pluck('id')->toArray();
|
$ids = $accounts->pluck('id')->toArray();
|
||||||
$result = AccountMeta::whereIn('account_id', $ids)->where('name', 'currency_id')->get();
|
$result = AccountMeta::whereIn('account_id', $ids)->where('name', 'currency_id')->get();
|
||||||
|
|
||||||
/** @var AccountMeta $item */
|
/** @var AccountMeta $item */
|
||||||
foreach ($result as $item) {
|
foreach ($result as $item) {
|
||||||
@@ -821,7 +819,7 @@ class Steam
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// collect those currencies, skip primary because we already have it.
|
// collect those currencies, skip primary because we already have it.
|
||||||
$set = TransactionCurrency::whereIn('id', $accountPreferences)->where('id', '!=', $primary->id)->get();
|
$set = TransactionCurrency::whereIn('id', $accountPreferences)->where('id', '!=', $primary->id)->get();
|
||||||
foreach ($set as $item) {
|
foreach ($set as $item) {
|
||||||
$currencies[$item->id] = $item;
|
$currencies[$item->id] = $item;
|
||||||
}
|
}
|
||||||
@@ -832,7 +830,7 @@ class Steam
|
|||||||
$currencyPresent = isset($account->meta) && array_key_exists('currency', $account->meta) && null !== $account->meta['currency'];
|
$currencyPresent = isset($account->meta) && array_key_exists('currency', $account->meta) && null !== $account->meta['currency'];
|
||||||
if ($currencyPresent) {
|
if ($currencyPresent) {
|
||||||
$currencyId = $account->meta['currency']->id;
|
$currencyId = $account->meta['currency']->id;
|
||||||
$currencies[$currencyId] ??= $account->meta['currency'];
|
$currencies[$currencyId] ??= $account->meta['currency'];
|
||||||
$accountCurrencies[$accountId] = $account->meta['currency'];
|
$accountCurrencies[$accountId] = $account->meta['currency'];
|
||||||
}
|
}
|
||||||
if (!$currencyPresent && !array_key_exists($accountId, $accountPreferences)) {
|
if (!$currencyPresent && !array_key_exists($accountId, $accountPreferences)) {
|
||||||
|
|||||||
@@ -200,7 +200,7 @@ class General extends AbstractExtension
|
|||||||
}
|
}
|
||||||
|
|
||||||
return implode(', ', $strings);
|
return implode(', ', $strings);
|
||||||
// return app('steam')->balance($account, $date);
|
// return \FireflyIII\Support\Facades\Steam::balance($account, $date);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ use FireflyIII\Models\RuleAction;
|
|||||||
use FireflyIII\Models\Transaction;
|
use FireflyIII\Models\Transaction;
|
||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
use FireflyIII\TransactionRules\Traits\RefreshNotesTrait;
|
use FireflyIII\TransactionRules\Traits\RefreshNotesTrait;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|
||||||
class SetAmount implements ActionInterface
|
class SetAmount implements ActionInterface
|
||||||
{
|
{
|
||||||
@@ -66,8 +67,8 @@ class SetAmount implements ActionInterface
|
|||||||
/** @var TransactionJournal $object */
|
/** @var TransactionJournal $object */
|
||||||
$object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
|
$object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']);
|
||||||
|
|
||||||
$positive = app('steam')->positive($value);
|
$positive = Steam::positive($value);
|
||||||
$negative = app('steam')->negative($value);
|
$negative = Steam::negative($value);
|
||||||
|
|
||||||
$this->updatePositive($object, $positive);
|
$this->updatePositive($object, $positive);
|
||||||
$this->updateNegative($object, $negative);
|
$this->updateNegative($object, $negative);
|
||||||
|
|||||||
26
changelog.md
26
changelog.md
@@ -3,6 +3,32 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
This project adheres to [Semantic Versioning](http://semver.org/).
|
This project adheres to [Semantic Versioning](http://semver.org/).
|
||||||
|
|
||||||
|
## v6.4.14 - 2025-12-17
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- [Issue 11368](https://github.com/firefly-iii/firefly-iii/issues/11368) (Attempt to read property "user" on null) reported by @simonwiles
|
||||||
|
|
||||||
|
## v6.4.13 - 2025-12-17
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- [Issue 11368](https://github.com/firefly-iii/firefly-iii/issues/11368) (Attempt to read property "user" on null) reported by @simonwiles
|
||||||
|
|
||||||
|
## v6.4.12 - 2025-12-17
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- [Issue 11368](https://github.com/firefly-iii/firefly-iii/issues/11368) (Attempt to read property "user" on null) reported by @simonwiles
|
||||||
|
- [Issue 11367](https://github.com/firefly-iii/firefly-iii/issues/11367) (Expenses page has incorrect summary values) reported by @purplemeteorite
|
||||||
|
|
||||||
|
## v6.4.11 - 2025-12-16
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- [Issue 11356](https://github.com/firefly-iii/firefly-iii/issues/11356) (Dashboard - Budget - Left To Spend "Per day" shows total budget value) reported by @lucasarrudadev
|
||||||
|
- [Issue 11357](https://github.com/firefly-iii/firefly-iii/issues/11357) (Firefly III v6.4.10 ran into an error: Undefined variable $uploadDir.) reported by @jgmm81
|
||||||
|
|
||||||
## v6.4.10 - 2025-12-15
|
## v6.4.10 - 2025-12-15
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|||||||
@@ -103,7 +103,6 @@
|
|||||||
"psr/log": "<4",
|
"psr/log": "<4",
|
||||||
"ramsey/uuid": "^4.7",
|
"ramsey/uuid": "^4.7",
|
||||||
"rcrowe/twigbridge": "^0.14",
|
"rcrowe/twigbridge": "^0.14",
|
||||||
"sentry/sentry-laravel": "^4.18",
|
|
||||||
"spatie/laravel-html": "^3.2",
|
"spatie/laravel-html": "^3.2",
|
||||||
"spatie/laravel-ignition": "^2",
|
"spatie/laravel-ignition": "^2",
|
||||||
"spatie/period": "^2.4",
|
"spatie/period": "^2.4",
|
||||||
|
|||||||
355
composer.lock
generated
355
composer.lock
generated
@@ -4,7 +4,7 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "8317b89f4d014debebcd301fde669321",
|
"content-hash": "8fff223d32252d22c0e6028d19a76756",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "bacon/bacon-qr-code",
|
"name": "bacon/bacon-qr-code",
|
||||||
@@ -1809,66 +1809,6 @@
|
|||||||
},
|
},
|
||||||
"time": "2022-03-31T05:55:34+00:00"
|
"time": "2022-03-31T05:55:34+00:00"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "jean85/pretty-package-versions",
|
|
||||||
"version": "2.1.1",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/Jean85/pretty-package-versions.git",
|
|
||||||
"reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/4d7aa5dab42e2a76d99559706022885de0e18e1a",
|
|
||||||
"reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"composer-runtime-api": "^2.1.0",
|
|
||||||
"php": "^7.4|^8.0"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"friendsofphp/php-cs-fixer": "^3.2",
|
|
||||||
"jean85/composer-provided-replaced-stub-package": "^1.0",
|
|
||||||
"phpstan/phpstan": "^2.0",
|
|
||||||
"phpunit/phpunit": "^7.5|^8.5|^9.6",
|
|
||||||
"rector/rector": "^2.0",
|
|
||||||
"vimeo/psalm": "^4.3 || ^5.0"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "1.x-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"Jean85\\": "src/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Alessandro Lai",
|
|
||||||
"email": "alessandro.lai85@gmail.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "A library to get pretty versions strings of installed dependencies",
|
|
||||||
"keywords": [
|
|
||||||
"composer",
|
|
||||||
"package",
|
|
||||||
"release",
|
|
||||||
"versions"
|
|
||||||
],
|
|
||||||
"support": {
|
|
||||||
"issues": "https://github.com/Jean85/pretty-package-versions/issues",
|
|
||||||
"source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.1"
|
|
||||||
},
|
|
||||||
"time": "2025-03-19T14:43:43+00:00"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "laravel-notification-channels/pushover",
|
"name": "laravel-notification-channels/pushover",
|
||||||
"version": "4.1.2",
|
"version": "4.1.2",
|
||||||
@@ -1938,16 +1878,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "laravel/framework",
|
"name": "laravel/framework",
|
||||||
"version": "v12.42.0",
|
"version": "v12.43.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/laravel/framework.git",
|
"url": "https://github.com/laravel/framework.git",
|
||||||
"reference": "509b33095564c5165366d81bbaa0afaac28abe75"
|
"reference": "195b893593a9298edee177c0844132ebaa02102f"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/laravel/framework/zipball/509b33095564c5165366d81bbaa0afaac28abe75",
|
"url": "https://api.github.com/repos/laravel/framework/zipball/195b893593a9298edee177c0844132ebaa02102f",
|
||||||
"reference": "509b33095564c5165366d81bbaa0afaac28abe75",
|
"reference": "195b893593a9298edee177c0844132ebaa02102f",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -2156,7 +2096,7 @@
|
|||||||
"issues": "https://github.com/laravel/framework/issues",
|
"issues": "https://github.com/laravel/framework/issues",
|
||||||
"source": "https://github.com/laravel/framework"
|
"source": "https://github.com/laravel/framework"
|
||||||
},
|
},
|
||||||
"time": "2025-12-09T15:51:23+00:00"
|
"time": "2025-12-16T18:53:08+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "laravel/passport",
|
"name": "laravel/passport",
|
||||||
@@ -3150,16 +3090,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "league/fractal",
|
"name": "league/fractal",
|
||||||
"version": "0.20.2",
|
"version": "0.21",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/thephpleague/fractal.git",
|
"url": "https://github.com/thephpleague/fractal.git",
|
||||||
"reference": "573ca2e0e348a7fe573a3e8fbc29a6588ece8c4e"
|
"reference": "9e817358dc451dfdcf656d6757f0c04e92dea0e8"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/thephpleague/fractal/zipball/573ca2e0e348a7fe573a3e8fbc29a6588ece8c4e",
|
"url": "https://api.github.com/repos/thephpleague/fractal/zipball/9e817358dc451dfdcf656d6757f0c04e92dea0e8",
|
||||||
"reference": "573ca2e0e348a7fe573a3e8fbc29a6588ece8c4e",
|
"reference": "9e817358dc451dfdcf656d6757f0c04e92dea0e8",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -3167,13 +3107,13 @@
|
|||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"doctrine/orm": "^2.5",
|
"doctrine/orm": "^2.5",
|
||||||
|
"friendsofphp/php-cs-fixer": "^3.91",
|
||||||
"illuminate/contracts": "~5.0",
|
"illuminate/contracts": "~5.0",
|
||||||
"laminas/laminas-paginator": "~2.12",
|
"laminas/laminas-paginator": "~2.12",
|
||||||
"mockery/mockery": "^1.3",
|
"mockery/mockery": "^1.3",
|
||||||
"pagerfanta/pagerfanta": "~1.0.0|~4.0.0",
|
"pagerfanta/pagerfanta": "~1.0.0|~4.0.0",
|
||||||
"phpstan/phpstan": "^1.4",
|
"phpstan/phpstan": "^1.4",
|
||||||
"phpunit/phpunit": "^9.5",
|
"phpunit/phpunit": "^9.5",
|
||||||
"squizlabs/php_codesniffer": "~3.4",
|
|
||||||
"vimeo/psalm": "^4.30"
|
"vimeo/psalm": "^4.30"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
@@ -3214,9 +3154,9 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/thephpleague/fractal/issues",
|
"issues": "https://github.com/thephpleague/fractal/issues",
|
||||||
"source": "https://github.com/thephpleague/fractal/tree/0.20.2"
|
"source": "https://github.com/thephpleague/fractal/tree/0.21"
|
||||||
},
|
},
|
||||||
"time": "2025-02-14T21:33:14+00:00"
|
"time": "2025-12-08T21:14:52+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "league/mime-type-detection",
|
"name": "league/mime-type-detection",
|
||||||
@@ -3546,22 +3486,22 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "mailersend/laravel-driver",
|
"name": "mailersend/laravel-driver",
|
||||||
"version": "v2.9.1",
|
"version": "v2.12.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/mailersend/mailersend-laravel-driver.git",
|
"url": "https://github.com/mailersend/mailersend-laravel-driver.git",
|
||||||
"reference": "87fd5ab76808bbaac9221be0d306baef13e98725"
|
"reference": "15e1ec41e29e65d3ca226929c65804190aaa93eb"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/mailersend/mailersend-laravel-driver/zipball/87fd5ab76808bbaac9221be0d306baef13e98725",
|
"url": "https://api.github.com/repos/mailersend/mailersend-laravel-driver/zipball/15e1ec41e29e65d3ca226929c65804190aaa93eb",
|
||||||
"reference": "87fd5ab76808bbaac9221be0d306baef13e98725",
|
"reference": "15e1ec41e29e65d3ca226929c65804190aaa93eb",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"ext-json": "*",
|
"ext-json": "*",
|
||||||
"illuminate/support": "^9.0 || ^10.0 || ^11.0 || ^12.0",
|
"illuminate/support": "^9.0 || ^10.0 || ^11.0 || ^12.0",
|
||||||
"mailersend/mailersend": "^0.31.0",
|
"mailersend/mailersend": "^0.35.0",
|
||||||
"nyholm/psr7": "^1.5",
|
"nyholm/psr7": "^1.5",
|
||||||
"php": ">=8.0",
|
"php": ">=8.0",
|
||||||
"php-http/guzzle7-adapter": "^1.0",
|
"php-http/guzzle7-adapter": "^1.0",
|
||||||
@@ -3609,29 +3549,28 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/mailersend/mailersend-laravel-driver/issues",
|
"issues": "https://github.com/mailersend/mailersend-laravel-driver/issues",
|
||||||
"source": "https://github.com/mailersend/mailersend-laravel-driver/tree/v2.9.1"
|
"source": "https://github.com/mailersend/mailersend-laravel-driver/tree/v2.12.0"
|
||||||
},
|
},
|
||||||
"time": "2025-04-09T09:33:07+00:00"
|
"time": "2025-10-28T14:59:16+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "mailersend/mailersend",
|
"name": "mailersend/mailersend",
|
||||||
"version": "v0.31.0",
|
"version": "v0.35.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/mailersend/mailersend-php.git",
|
"url": "https://github.com/mailersend/mailersend-php.git",
|
||||||
"reference": "513ff83ee768526055ad52987cde401ea7218c67"
|
"reference": "f1696cf9e727e9503fbc5882d2a111bd966ad276"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/mailersend/mailersend-php/zipball/513ff83ee768526055ad52987cde401ea7218c67",
|
"url": "https://api.github.com/repos/mailersend/mailersend-php/zipball/f1696cf9e727e9503fbc5882d2a111bd966ad276",
|
||||||
"reference": "513ff83ee768526055ad52987cde401ea7218c67",
|
"reference": "f1696cf9e727e9503fbc5882d2a111bd966ad276",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"beberlei/assert": "^3.2",
|
"beberlei/assert": "^3.2",
|
||||||
"ext-json": "*",
|
"ext-json": "*",
|
||||||
"illuminate/collections": "^8.0 || ^9.0 || ^10.0 || ^11.0 || ^12.0",
|
"php": "^7.4 || ^8.0 <8.5",
|
||||||
"php": "^7.4|^8.0",
|
|
||||||
"php-http/client-common": "^2.2",
|
"php-http/client-common": "^2.2",
|
||||||
"php-http/discovery": "^1.9",
|
"php-http/discovery": "^1.9",
|
||||||
"php-http/httplug": "^2.1",
|
"php-http/httplug": "^2.1",
|
||||||
@@ -3676,9 +3615,9 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/mailersend/mailersend-php/issues",
|
"issues": "https://github.com/mailersend/mailersend-php/issues",
|
||||||
"source": "https://github.com/mailersend/mailersend-php/tree/v0.31.0"
|
"source": "https://github.com/mailersend/mailersend-php/tree/v0.35.0"
|
||||||
},
|
},
|
||||||
"time": "2025-04-03T12:16:11+00:00"
|
"time": "2025-10-28T13:11:43+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "monolog/monolog",
|
"name": "monolog/monolog",
|
||||||
@@ -4885,16 +4824,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpseclib/phpseclib",
|
"name": "phpseclib/phpseclib",
|
||||||
"version": "3.0.47",
|
"version": "3.0.48",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/phpseclib/phpseclib.git",
|
"url": "https://github.com/phpseclib/phpseclib.git",
|
||||||
"reference": "9d6ca36a6c2dd434765b1071b2644a1c683b385d"
|
"reference": "64065a5679c50acb886e82c07aa139b0f757bb89"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/9d6ca36a6c2dd434765b1071b2644a1c683b385d",
|
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/64065a5679c50acb886e82c07aa139b0f757bb89",
|
||||||
"reference": "9d6ca36a6c2dd434765b1071b2644a1c683b385d",
|
"reference": "64065a5679c50acb886e82c07aa139b0f757bb89",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -4975,7 +4914,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/phpseclib/phpseclib/issues",
|
"issues": "https://github.com/phpseclib/phpseclib/issues",
|
||||||
"source": "https://github.com/phpseclib/phpseclib/tree/3.0.47"
|
"source": "https://github.com/phpseclib/phpseclib/tree/3.0.48"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -4991,7 +4930,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-10-06T01:07:24+00:00"
|
"time": "2025-12-15T11:51:42+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "pragmarx/google2fa",
|
"name": "pragmarx/google2fa",
|
||||||
@@ -5973,184 +5912,6 @@
|
|||||||
},
|
},
|
||||||
"time": "2025-08-20T11:25:49+00:00"
|
"time": "2025-08-20T11:25:49+00:00"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "sentry/sentry",
|
|
||||||
"version": "4.19.1",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/getsentry/sentry-php.git",
|
|
||||||
"reference": "1c21d60bebe67c0122335bd3fe977990435af0a3"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/getsentry/sentry-php/zipball/1c21d60bebe67c0122335bd3fe977990435af0a3",
|
|
||||||
"reference": "1c21d60bebe67c0122335bd3fe977990435af0a3",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"ext-curl": "*",
|
|
||||||
"ext-json": "*",
|
|
||||||
"ext-mbstring": "*",
|
|
||||||
"guzzlehttp/psr7": "^1.8.4|^2.1.1",
|
|
||||||
"jean85/pretty-package-versions": "^1.5|^2.0.4",
|
|
||||||
"php": "^7.2|^8.0",
|
|
||||||
"psr/log": "^1.0|^2.0|^3.0",
|
|
||||||
"symfony/options-resolver": "^4.4.30|^5.0.11|^6.0|^7.0|^8.0"
|
|
||||||
},
|
|
||||||
"conflict": {
|
|
||||||
"raven/raven": "*"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"friendsofphp/php-cs-fixer": "^3.4",
|
|
||||||
"guzzlehttp/promises": "^2.0.3",
|
|
||||||
"guzzlehttp/psr7": "^1.8.4|^2.1.1",
|
|
||||||
"monolog/monolog": "^1.6|^2.0|^3.0",
|
|
||||||
"phpbench/phpbench": "^1.0",
|
|
||||||
"phpstan/phpstan": "^1.3",
|
|
||||||
"phpunit/phpunit": "^8.5|^9.6",
|
|
||||||
"vimeo/psalm": "^4.17"
|
|
||||||
},
|
|
||||||
"suggest": {
|
|
||||||
"monolog/monolog": "Allow sending log messages to Sentry by using the included Monolog handler."
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"autoload": {
|
|
||||||
"files": [
|
|
||||||
"src/functions.php"
|
|
||||||
],
|
|
||||||
"psr-4": {
|
|
||||||
"Sentry\\": "src/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Sentry",
|
|
||||||
"email": "accounts@sentry.io"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "PHP SDK for Sentry (http://sentry.io)",
|
|
||||||
"homepage": "http://sentry.io",
|
|
||||||
"keywords": [
|
|
||||||
"crash-reporting",
|
|
||||||
"crash-reports",
|
|
||||||
"error-handler",
|
|
||||||
"error-monitoring",
|
|
||||||
"log",
|
|
||||||
"logging",
|
|
||||||
"profiling",
|
|
||||||
"sentry",
|
|
||||||
"tracing"
|
|
||||||
],
|
|
||||||
"support": {
|
|
||||||
"issues": "https://github.com/getsentry/sentry-php/issues",
|
|
||||||
"source": "https://github.com/getsentry/sentry-php/tree/4.19.1"
|
|
||||||
},
|
|
||||||
"funding": [
|
|
||||||
{
|
|
||||||
"url": "https://sentry.io/",
|
|
||||||
"type": "custom"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"url": "https://sentry.io/pricing/",
|
|
||||||
"type": "custom"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"time": "2025-12-02T15:57:41+00:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "sentry/sentry-laravel",
|
|
||||||
"version": "4.20.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/getsentry/sentry-laravel.git",
|
|
||||||
"reference": "95f2542ee1ebc993529b63f5c8543184abd00650"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/95f2542ee1ebc993529b63f5c8543184abd00650",
|
|
||||||
"reference": "95f2542ee1ebc993529b63f5c8543184abd00650",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"illuminate/support": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0 | ^12.0",
|
|
||||||
"nyholm/psr7": "^1.0",
|
|
||||||
"php": "^7.2 | ^8.0",
|
|
||||||
"sentry/sentry": "^4.19.0",
|
|
||||||
"symfony/psr-http-message-bridge": "^1.0 | ^2.0 | ^6.0 | ^7.0"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"friendsofphp/php-cs-fixer": "^3.11",
|
|
||||||
"guzzlehttp/guzzle": "^7.2",
|
|
||||||
"laravel/folio": "^1.1",
|
|
||||||
"laravel/framework": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0 | ^12.0",
|
|
||||||
"laravel/pennant": "^1.0",
|
|
||||||
"livewire/livewire": "^2.0 | ^3.0",
|
|
||||||
"mockery/mockery": "^1.3",
|
|
||||||
"orchestra/testbench": "^4.7 | ^5.1 | ^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0",
|
|
||||||
"phpstan/phpstan": "^1.10",
|
|
||||||
"phpunit/phpunit": "^8.4 | ^9.3 | ^10.4 | ^11.5"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"laravel": {
|
|
||||||
"aliases": {
|
|
||||||
"Sentry": "Sentry\\Laravel\\Facade"
|
|
||||||
},
|
|
||||||
"providers": [
|
|
||||||
"Sentry\\Laravel\\ServiceProvider",
|
|
||||||
"Sentry\\Laravel\\Tracing\\ServiceProvider"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-0": {
|
|
||||||
"Sentry\\Laravel\\": "src/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Sentry",
|
|
||||||
"email": "accounts@sentry.io"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Laravel SDK for Sentry (https://sentry.io)",
|
|
||||||
"homepage": "https://sentry.io",
|
|
||||||
"keywords": [
|
|
||||||
"crash-reporting",
|
|
||||||
"crash-reports",
|
|
||||||
"error-handler",
|
|
||||||
"error-monitoring",
|
|
||||||
"laravel",
|
|
||||||
"log",
|
|
||||||
"logging",
|
|
||||||
"profiling",
|
|
||||||
"sentry",
|
|
||||||
"tracing"
|
|
||||||
],
|
|
||||||
"support": {
|
|
||||||
"issues": "https://github.com/getsentry/sentry-laravel/issues",
|
|
||||||
"source": "https://github.com/getsentry/sentry-laravel/tree/4.20.0"
|
|
||||||
},
|
|
||||||
"funding": [
|
|
||||||
{
|
|
||||||
"url": "https://sentry.io/",
|
|
||||||
"type": "custom"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"url": "https://sentry.io/pricing/",
|
|
||||||
"type": "custom"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"time": "2025-12-02T10:37:40+00:00"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "spatie/backtrace",
|
"name": "spatie/backtrace",
|
||||||
"version": "1.8.1",
|
"version": "1.8.1",
|
||||||
@@ -10078,16 +9839,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "twig/twig",
|
"name": "twig/twig",
|
||||||
"version": "v3.22.1",
|
"version": "v3.22.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/twigphp/Twig.git",
|
"url": "https://github.com/twigphp/Twig.git",
|
||||||
"reference": "1de2ec1fc43ab58a4b7e80b214b96bfc895750f3"
|
"reference": "946ddeafa3c9f4ce279d1f34051af041db0e16f2"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/1de2ec1fc43ab58a4b7e80b214b96bfc895750f3",
|
"url": "https://api.github.com/repos/twigphp/Twig/zipball/946ddeafa3c9f4ce279d1f34051af041db0e16f2",
|
||||||
"reference": "1de2ec1fc43ab58a4b7e80b214b96bfc895750f3",
|
"reference": "946ddeafa3c9f4ce279d1f34051af041db0e16f2",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -10141,7 +9902,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/twigphp/Twig/issues",
|
"issues": "https://github.com/twigphp/Twig/issues",
|
||||||
"source": "https://github.com/twigphp/Twig/tree/v3.22.1"
|
"source": "https://github.com/twigphp/Twig/tree/v3.22.2"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -10153,7 +9914,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-11-16T16:01:12+00:00"
|
"time": "2025-12-14T11:28:47+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "vlucas/phpdotenv",
|
"name": "vlucas/phpdotenv",
|
||||||
@@ -10317,16 +10078,16 @@
|
|||||||
"packages-dev": [
|
"packages-dev": [
|
||||||
{
|
{
|
||||||
"name": "barryvdh/laravel-debugbar",
|
"name": "barryvdh/laravel-debugbar",
|
||||||
"version": "v3.16.1",
|
"version": "v3.16.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/barryvdh/laravel-debugbar.git",
|
"url": "https://github.com/barryvdh/laravel-debugbar.git",
|
||||||
"reference": "21b2c6fce05453efd4bceb34f9fddaa1cdb44090"
|
"reference": "730dbf8bf41f5691e026dd771e64dd54ad1b10b3"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/21b2c6fce05453efd4bceb34f9fddaa1cdb44090",
|
"url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/730dbf8bf41f5691e026dd771e64dd54ad1b10b3",
|
||||||
"reference": "21b2c6fce05453efd4bceb34f9fddaa1cdb44090",
|
"reference": "730dbf8bf41f5691e026dd771e64dd54ad1b10b3",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -10386,7 +10147,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/barryvdh/laravel-debugbar/issues",
|
"issues": "https://github.com/barryvdh/laravel-debugbar/issues",
|
||||||
"source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.16.1"
|
"source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.16.2"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -10398,7 +10159,7 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-11-19T08:31:25+00:00"
|
"time": "2025-12-03T14:52:46+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "barryvdh/laravel-ide-helper",
|
"name": "barryvdh/laravel-ide-helper",
|
||||||
@@ -10945,16 +10706,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "larastan/larastan",
|
"name": "larastan/larastan",
|
||||||
"version": "v3.8.0",
|
"version": "v3.8.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/larastan/larastan.git",
|
"url": "https://github.com/larastan/larastan.git",
|
||||||
"reference": "d13ef96d652d1b2a8f34f1760ba6bf5b9c98112e"
|
"reference": "ff3725291bc4c7e6032b5a54776e3e5104c86db9"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/larastan/larastan/zipball/d13ef96d652d1b2a8f34f1760ba6bf5b9c98112e",
|
"url": "https://api.github.com/repos/larastan/larastan/zipball/ff3725291bc4c7e6032b5a54776e3e5104c86db9",
|
||||||
"reference": "d13ef96d652d1b2a8f34f1760ba6bf5b9c98112e",
|
"reference": "ff3725291bc4c7e6032b5a54776e3e5104c86db9",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -10968,7 +10729,7 @@
|
|||||||
"illuminate/pipeline": "^11.44.2 || ^12.4.1",
|
"illuminate/pipeline": "^11.44.2 || ^12.4.1",
|
||||||
"illuminate/support": "^11.44.2 || ^12.4.1",
|
"illuminate/support": "^11.44.2 || ^12.4.1",
|
||||||
"php": "^8.2",
|
"php": "^8.2",
|
||||||
"phpstan/phpstan": "^2.1.29"
|
"phpstan/phpstan": "^2.1.32"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"doctrine/coding-standard": "^13",
|
"doctrine/coding-standard": "^13",
|
||||||
@@ -11023,7 +10784,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/larastan/larastan/issues",
|
"issues": "https://github.com/larastan/larastan/issues",
|
||||||
"source": "https://github.com/larastan/larastan/tree/v3.8.0"
|
"source": "https://github.com/larastan/larastan/tree/v3.8.1"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -11031,7 +10792,7 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-10-27T23:09:14+00:00"
|
"time": "2025-12-11T16:37:35+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "laravel-json-api/testing",
|
"name": "laravel-json-api/testing",
|
||||||
@@ -12022,16 +11783,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpunit/phpunit",
|
"name": "phpunit/phpunit",
|
||||||
"version": "12.5.3",
|
"version": "12.5.4",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
||||||
"reference": "6dc2e076d09960efbb0c1272aa9bc156fc80955e"
|
"reference": "4ba0e923f9d3fc655de22f9547c01d15a41fc93a"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/6dc2e076d09960efbb0c1272aa9bc156fc80955e",
|
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4ba0e923f9d3fc655de22f9547c01d15a41fc93a",
|
||||||
"reference": "6dc2e076d09960efbb0c1272aa9bc156fc80955e",
|
"reference": "4ba0e923f9d3fc655de22f9547c01d15a41fc93a",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -12099,7 +11860,7 @@
|
|||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
|
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
|
||||||
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
|
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
|
||||||
"source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.3"
|
"source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.4"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -12123,7 +11884,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-12-11T08:52:59+00:00"
|
"time": "2025-12-15T06:05:34+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "rector/rector",
|
"name": "rector/rector",
|
||||||
|
|||||||
@@ -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-12-15',
|
'version' => 'develop/2025-12-17',
|
||||||
'build_time' => 1765769630,
|
'build_time' => 1765957552,
|
||||||
'api_version' => '2.1.0', // field is no longer used.
|
'api_version' => '2.1.0', // field is no longer used.
|
||||||
'db_version' => 28, // field is no longer used.
|
'db_version' => 28, // field is no longer used.
|
||||||
|
|
||||||
@@ -107,7 +107,6 @@ return [
|
|||||||
'demo_password' => env('DEMO_PASSWORD', ''),
|
'demo_password' => env('DEMO_PASSWORD', ''),
|
||||||
'tracker_site_id' => env('TRACKER_SITE_ID', ''),
|
'tracker_site_id' => env('TRACKER_SITE_ID', ''),
|
||||||
'tracker_url' => env('TRACKER_URL', ''),
|
'tracker_url' => env('TRACKER_URL', ''),
|
||||||
'report_errors_online' => env('REPORT_ERRORS_ONLINE', false),
|
|
||||||
|
|
||||||
// authentication settings
|
// authentication settings
|
||||||
'authentication_guard' => envNonEmpty('AUTHENTICATION_GUARD', 'web'),
|
'authentication_guard' => envNonEmpty('AUTHENTICATION_GUARD', 'web'),
|
||||||
|
|||||||
594
package-lock.json
generated
594
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -277,7 +277,6 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% elseif transaction.transaction_type_type == 'Withdrawal' %}
|
{% elseif transaction.transaction_type_type == 'Withdrawal' %}
|
||||||
|
|
||||||
{# withdrawal into a liability #}
|
{# withdrawal into a liability #}
|
||||||
{% if 'Loan' == transaction.destination_account_type or 'Mortgage' == transaction.destination_account_type or 'Debt' == transaction.destination_account_type %}
|
{% if 'Loan' == transaction.destination_account_type or 'Mortgage' == transaction.destination_account_type or 'Debt' == transaction.destination_account_type %}
|
||||||
{% if currency.id == transaction.currency_id %}
|
{% if currency.id == transaction.currency_id %}
|
||||||
@@ -303,10 +302,12 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% elseif transaction.transaction_type_type == 'Opening balance' %}
|
{% elseif transaction.transaction_type_type == 'Opening balance' %}
|
||||||
{% if transaction.source_account_type == 'Initial balance account' %}
|
{% if account.id == transaction.source_account_id %}
|
||||||
{{ formatAmountBySymbol(transaction.destination_balance_after, transaction.currency_symbol, transaction.currency_decimal_places) }}
|
{{ formatAmountBySymbol(transaction.destination_balance_after, transaction.currency_symbol, transaction.currency_decimal_places) }}
|
||||||
{% else %}
|
{% elseif account.id == transaction.destination_account_id %}
|
||||||
{{ formatAmountBySymbol(transaction.source_balance_after, transaction.currency_symbol, transaction.currency_decimal_places) }}
|
{{ formatAmountBySymbol(transaction.source_balance_after, transaction.currency_symbol, transaction.currency_decimal_places) }}
|
||||||
|
{% else %}
|
||||||
|
-
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% elseif transaction.transaction_type_type == 'Transfer' %}
|
{% elseif transaction.transaction_type_type == 'Transfer' %}
|
||||||
{% if account.id == transaction.source_account_id %}
|
{% if account.id == transaction.source_account_id %}
|
||||||
|
|||||||
Reference in New Issue
Block a user