Compare commits

..

18 Commits

Author SHA1 Message Date
github-actions[bot]
f9b7149fc7 Merge pull request #11919 from firefly-iii/release-1773028359
🤖 Automatically merge the PR into the develop branch.
2026-03-09 04:52:46 +01:00
JC5
7c3fb7a95a 🤖 Auto commit for release 'develop' on 2026-03-09 2026-03-09 04:52:39 +01:00
James Cole
91b7ee06d8 Fix moar phpstan issues. 2026-03-08 17:44:19 +01:00
James Cole
84ea19d14c Fix a bunch of phpstan errors. 2026-03-08 17:08:51 +01:00
James Cole
9950f79a6b Merge branch 'main' into develop 2026-03-08 11:57:21 +01:00
James Cole
e3df7675d3 Fix https://github.com/firefly-iii/firefly-iii/issues/11916 2026-03-08 11:56:53 +01:00
James Cole
15094097bc Update various templates. 2026-03-07 13:42:11 +01:00
github-actions[bot]
a07dc4dbc8 Merge pull request #11904 from firefly-iii/release-1772875617
🤖 Automatically merge the PR into the develop branch.
2026-03-07 10:27:06 +01:00
JC5
c86562554b 🤖 Auto commit for release 'develop' on 2026-03-07 2026-03-07 10:26:58 +01:00
James Cole
19b548a417 Fix null type issues. 2026-03-07 10:20:06 +01:00
James Cole
71698b36e2 Fix various phpstan issues. 2026-03-07 10:17:07 +01:00
github-actions[bot]
f65ee4d419 Merge pull request #11901 from firefly-iii/release-1772861474
🤖 Automatically merge the PR into the develop branch.
2026-03-07 06:31:23 +01:00
JC5
535fd9777a 🤖 Auto commit for release 'develop' on 2026-03-07 2026-03-07 06:31:14 +01:00
James Cole
5d1fde9cf7 Clean up more errors. 2026-03-07 06:26:08 +01:00
James Cole
922f1e7c1a Merge branch 'develop' of github.com:firefly-iii/firefly-iii into develop 2026-03-07 06:25:45 +01:00
github-actions[bot]
ef5c35c04d Merge pull request #11900 from firefly-iii/release-1772860900
🤖 Automatically merge the PR into the develop branch.
2026-03-07 06:21:47 +01:00
JC5
4dfbdc644c 🤖 Auto commit for release 'develop' on 2026-03-07 2026-03-07 06:21:40 +01:00
James Cole
4a3f45e125 Add empty array 2026-03-07 06:15:55 +01:00
147 changed files with 384 additions and 180 deletions

View File

@@ -33,31 +33,16 @@ parameters:
- Illuminate\Database\Eloquent\Model
reportUnmatchedIgnoredErrors: true
ignoreErrors:
# these are actually interesting but not right now:
- identifier: nullCoalesce.offset
- identifier: nullCoalesce.variable
- identifier: larastan.noUnnecessaryCollectionCall
- identifier: varTag.differentVariable
- identifier: identical.alwaysTrue
- identifier: assign.propertyReadOnly
- identifier: varTag.nativeType
- identifier: property.onlyWritten
- identifier: parameter.phpDocType
- identifier: property.dynamicName
- identifier: property.unusedType
- identifier: staticMethod.deprecated
# ignore everything but things that BREAK
- identifier: property.deprecated
- identifier: method.deprecated
- identifier: cast.useless
- identifier: parameter.deprecatedClass
- identifier: method.deprecatedClass
- identifier: argument.type
- identifier: return.type
- identifier: assign.propertyType
- identifier: return.unusedType
- identifier: return.phpDocType
# all errors below I will (probably) never fix.
- identifier: property.unusedType # one false positive
- identifier: varTag.nativeType # dont even know what im supposed to fix.
- identifier: method.notFound # way too many false positives
- identifier: catch.neverThrown # plenty of errors that are thrown undocumented
- identifier: staticMethod.dynamicName # dont care

View File

@@ -171,6 +171,9 @@ abstract class Controller extends BaseController
return $manager->createData($resource)->toArray();
}
/**
* @deprecated
*/
#[Deprecated(message: <<<'TXT'
use Request classes
Method to grab all parameters from the URL
@@ -224,7 +227,8 @@ abstract class Controller extends BaseController
$value = min(max(1, $value), 2 ** 16);
$bag->set($integer, $value);
}
if (null === $value && 'limit' === $integer && auth()->check()) {
// && 'limit' === $integer
if (null === $value && auth()->check()) {
// set default for user:
/** @var User $user */
$user = auth()->user();

View File

@@ -83,7 +83,6 @@ final class StoreController extends Controller
/** @var BillTransformer $transformer */
$transformer = app(BillTransformer::class);
$transformer->setParameters($this->parameters);
$resource = new Item($bill, $transformer, 'bills');

View File

@@ -25,7 +25,7 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers\Models\BudgetLimit;
use FireflyIII\Api\V1\Controllers\Controller;
use FireflyIII\Api\V1\Requests\Data\SameDateRequest;
use FireflyIII\Api\V1\Requests\DateRangeRequest;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Budget;
use FireflyIII\Models\BudgetLimit;
@@ -118,12 +118,12 @@ final class ShowController extends Controller
*
* @SuppressWarnings("PHPMD.UnusedFormalParameter")
*/
public function indexAll(SameDateRequest $request): JsonResponse
public function indexAll(DateRangeRequest $request): JsonResponse
{
$manager = $this->getManager();
$manager->parseIncludes('budget');
$pageSize = $this->parameters->get('limit');
$collection = $this->blRepository->getAllBudgetLimits($this->parameters->get('start'), $this->parameters->get('end'));
$collection = $this->blRepository->getAllBudgetLimits($request->attributes->get('start'), $request->attributes->get('end'));
$count = $collection->count();
$budgetLimits = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
$paginator = new LengthAwarePaginator($budgetLimits, $count, $pageSize, $this->parameters->get('page'));

View File

@@ -25,7 +25,7 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers\Models\Recurrence;
use FireflyIII\Api\V1\Controllers\Controller;
use FireflyIII\Api\V1\Requests\Generic\SingleDateRequest;
use FireflyIII\Api\V1\Requests\DateRequest;
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
use FireflyIII\Jobs\CreateRecurringTransactions;
use FireflyIII\Models\Recurrence;
@@ -59,12 +59,12 @@ final class TriggerController extends Controller
});
}
public function trigger(SingleDateRequest $request, Recurrence $recurrence): JsonResponse
public function trigger(DateRequest $request, Recurrence $recurrence): JsonResponse
{
// find recurrence occurrence for this date and trigger it.
// grab the date from the last time the recurrence fired:
$backupDate = $recurrence->latest_date;
$date = $request->getDate();
$date = $request->attributes->get('date');
// fire the recurring cron job on the given date, then post-date the created transaction.
Log::info(sprintf('Trigger: will now fire recurring cron job task for date "%s".', $date->format('Y-m-d H:i:s')));

View File

@@ -48,6 +48,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
final class UpdateController extends Controller
{
private TransactionGroupRepositoryInterface $groupRepository;
protected array $acceptedRoles = [];
/**
* TransactionController constructor.

View File

@@ -32,7 +32,9 @@ class ApiRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected string $required = '';
protected array $acceptedRoles = [];
protected string $required = '';
public function handleConfig(array $config): void
{

View File

@@ -39,6 +39,8 @@ class AutocompleteRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
public function getData(): array
{
$types = $this->convertString('types');

View File

@@ -39,6 +39,8 @@ class MoveTransactionsRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
public function getAll(): array
{
return ['original_account' => $this->convertInteger('original_account'), 'destination_account' => $this->convertInteger('destination_account')];

View File

@@ -45,6 +45,8 @@ class TransactionRequest extends FormRequest
use ConvertsDataTypes;
use ValidatesBulkTransactionQuery;
protected array $acceptedRoles = [];
public function getAll(): array
{
$data = [];

View File

@@ -36,6 +36,8 @@ class DestroyRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -39,6 +39,8 @@ class ExportRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
public function getAll(): array
{
$result = [

View File

@@ -40,6 +40,8 @@ class SameDateRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -41,6 +41,8 @@ class SingleDateRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -45,6 +45,8 @@ class GenericRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
private Collection $accounts;
private Collection $bills;
private Collection $budgets;

View File

@@ -43,6 +43,8 @@ class StoreRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
public function getAllAccountData(): array
{
$active = true;

View File

@@ -46,6 +46,8 @@ class UpdateRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
public function getUpdateData(): array
{
$fields = [

View File

@@ -37,6 +37,8 @@ class StoreRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -37,6 +37,8 @@ class UpdateRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -42,6 +42,8 @@ class StoreRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -41,6 +41,8 @@ class UpdateRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -42,6 +42,8 @@ class StoreRequest extends FormRequest
use ConvertsDataTypes;
use ValidatesAutoBudgetRequest;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -43,6 +43,8 @@ class UpdateRequest extends FormRequest
use ConvertsDataTypes;
use ValidatesAutoBudgetRequest;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -45,6 +45,8 @@ class StoreRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -41,6 +41,8 @@ class UpdateRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -36,6 +36,8 @@ class StoreRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -37,6 +37,8 @@ class UpdateRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -34,6 +34,8 @@ class DestroyRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
public function getDate(): ?Carbon
{
return $this->getCarbonDate('date');

View File

@@ -36,6 +36,8 @@ class StoreByCurrenciesRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
public function getAll(): array
{
return $this->all();

View File

@@ -37,6 +37,8 @@ class StoreByDateRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* @return array<string, mixed>
*/

View File

@@ -36,6 +36,8 @@ class StoreRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
public function getDate(): ?Carbon
{
return $this->getCarbonDate('date');

View File

@@ -34,6 +34,8 @@ class UpdateRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
public function getDate(): ?Carbon
{
return $this->getCarbonDate('date');

View File

@@ -37,6 +37,8 @@ class UpdateRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
public function getUpdateData(): array
{
$fields = ['title' => ['title', 'convertString'], 'order' => ['order', 'convertInteger']];

View File

@@ -42,6 +42,8 @@ class StoreRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -40,6 +40,8 @@ class UpdateRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -49,6 +49,8 @@ class StoreRequest extends FormRequest
use RecurrenceValidation;
use TransactionValidation;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -50,6 +50,8 @@ class UpdateRequest extends FormRequest
use RecurrenceValidation;
use TransactionValidation;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -42,6 +42,8 @@ class StoreRequest extends FormRequest
use ConvertsDataTypes;
use GetRuleConfiguration;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -37,6 +37,8 @@ class TestRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
public function getTestParameters(): array
{
return ['page' => $this->getPage(), 'start' => $this->getDate('start'), 'end' => $this->getDate('end'), 'accounts' => $this->getAccounts()];

View File

@@ -37,6 +37,8 @@ class TriggerRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
public function getTriggerParameters(): array
{
return ['start' => $this->getDate('start'), 'end' => $this->getDate('end'), 'accounts' => $this->getAccounts()];

View File

@@ -43,6 +43,8 @@ class UpdateRequest extends FormRequest
use ConvertsDataTypes;
use GetRuleConfiguration;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -35,6 +35,8 @@ class ValidateExpressionRequest extends FormRequest
{
use ChecksLogin;
protected array $acceptedRoles = [];
public function rules(): array
{
return ['expression' => ['required', new IsValidActionExpression()]];

View File

@@ -37,6 +37,8 @@ class StoreRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -37,6 +37,8 @@ class TestRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
public function getTestParameters(): array
{
return ['start' => $this->getDate('start'), 'end' => $this->getDate('end'), 'accounts' => $this->getAccounts()];

View File

@@ -37,6 +37,8 @@ class TriggerRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
public function getTriggerParameters(): array
{
return ['start' => $this->getDate('start'), 'end' => $this->getDate('end'), 'accounts' => $this->getAccounts()];

View File

@@ -38,6 +38,8 @@ class UpdateRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -39,6 +39,8 @@ class StoreRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -40,6 +40,8 @@ class UpdateRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -54,6 +54,8 @@ class StoreRequest extends FormRequest
use GroupValidation;
use TransactionValidation;
protected array $acceptedRoles = [];
/**
* Get all data. Is pretty complex because of all the ??-statements.
*/

View File

@@ -50,6 +50,8 @@ class UpdateRequest extends FormRequest
use GroupValidation;
use TransactionValidation;
protected array $acceptedRoles = [];
private array $arrayFields;
private array $booleanFields;
private array $dateFields;

View File

@@ -37,6 +37,8 @@ class StoreRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -38,6 +38,8 @@ class UpdateRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -41,6 +41,8 @@ class StoreRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -41,6 +41,8 @@ class UpdateRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -36,6 +36,8 @@ class StoreRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -38,6 +38,8 @@ class UpdateRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Get all data from the request.
*/

View File

@@ -36,6 +36,8 @@ class UpdateRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
public function getData(): array
{
$fields = [

View File

@@ -43,6 +43,8 @@ class CreateRequest extends FormRequest
use ConvertsDataTypes;
use ValidatesWebhooks;
protected array $acceptedRoles = [];
public function getData(): array
{
$fields = ['title' => ['title', 'convertString'], 'active' => ['active', 'boolean'], 'url' => ['url', 'convertString']];

View File

@@ -43,6 +43,8 @@ class UpdateRequest extends FormRequest
use ConvertsDataTypes;
use ValidatesWebhooks;
protected array $acceptedRoles = [];
public function getData(): array
{
$fields = ['title' => ['title', 'convertString'], 'active' => ['active', 'boolean'], 'url' => ['url', 'convertString']];

View File

@@ -37,7 +37,9 @@ class UpdateRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
private array $booleans = [
protected array $acceptedRoles = [];
private array $booleans = [
'configuration.is_demo_site',
'configuration.single_user_mode',
'configuration.enable_exchange_rates',
@@ -46,7 +48,7 @@ class UpdateRequest extends FormRequest
'configuration.enable_external_rates',
'configuration.allow_webhooks',
];
private array $integers = ['configuration.permission_update_check', 'configuration.last_update_check'];
private array $integers = ['configuration.permission_update_check', 'configuration.last_update_check'];
/**
* Get all data from the request.

View File

@@ -37,6 +37,8 @@ class UserStoreRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Logged in + owner
*/

View File

@@ -40,6 +40,8 @@ class UserUpdateRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Logged in + owner
*/

View File

@@ -36,6 +36,8 @@ class PreferenceStoreRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
public function getAll(): array
{
$array = ['name' => $this->convertString('name'), 'data' => $this->get('data')];

View File

@@ -36,6 +36,8 @@ class PreferenceUpdateRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
public function getAll(): array
{
$array = ['name' => $this->convertString('name'), 'data' => $this->get('data')];

View File

@@ -28,6 +28,7 @@ use Carbon\Carbon;
use FireflyIII\Console\Commands\ShowsFriendlyMessages;
use FireflyIII\Support\Facades\FireflyConfig;
use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\QueryException;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Log;
@@ -82,7 +83,7 @@ class ConvertsDatesToUTC extends Command
return;
}
$this->friendlyInfo(sprintf('Converting field "%s" of model "%s" to UTC.', $field, $shortModel));
$items->each(static function ($item) use ($field, $timezoneField): void {
$items->each(static function (Model $item) use ($field, $timezoneField): void {
$date = Carbon::parse($item->{$field}, $item->{$timezoneField});
$date->setTimezone('UTC');
$item->{$field} = $date->format('Y-m-d H:i:s');

View File

@@ -229,12 +229,24 @@ class CorrectsAccountTypes extends Command
private function getDestinationTransaction(TransactionJournal $journal): Transaction
{
return $journal->transactions->firstWhere('amount', '>', 0);
/** @var null|Transaction $res */
$res = $journal->transactions->firstWhere('amount', '>', 0);
if (null === $res) {
throw new FireflyException('Could not find transaction.');
}
return $res;
}
private function getSourceTransaction(TransactionJournal $journal): Transaction
{
return $journal->transactions->firstWhere('amount', '<', 0);
/** @var null|Transaction $res */
$res = $journal->transactions->firstWhere('amount', '<', 0);
if (null === $res) {
throw new FireflyException('Could not find transaction.');
}
return $res;
}
private function giveNewDestinationAccount(TransactionJournal $journal, Account $newDestination): void

View File

@@ -64,10 +64,6 @@ class RemovesDatabaseDecryption extends Command
'journal_links' => ['comment'],
];
/**
* @var string $table
* @var array $fields
*/
foreach ($tables as $table => $fields) {
$this->decryptTable($table, $fields);
}

View File

@@ -94,6 +94,7 @@ class UpgradesToGroups extends Command
return $amount && $identifier;
});
/** @var null|Transaction */
return $set->first();
}

View File

@@ -106,17 +106,20 @@ class UpgradesVariousCurrencyInformation extends Command
break;
case TransactionTypeEnum::WITHDRAWAL->value:
/** @var null|Transaction $lead */
$lead = $journal->transactions()->where('amount', '<', 0)->first();
break;
case TransactionTypeEnum::DEPOSIT->value:
/** @var null|Transaction $lead */
$lead = $journal->transactions()->where('amount', '>', 0)->first();
break;
case TransactionTypeEnum::OPENING_BALANCE->value:
// whichever isn't an initial balance account:
/** @var null|Transaction $lead */
$lead = $journal
->transactions()
->leftJoin('accounts', 'transactions.account_id', '=', 'accounts.id')
@@ -129,6 +132,7 @@ class UpgradesVariousCurrencyInformation extends Command
case TransactionTypeEnum::RECONCILIATION->value:
// whichever isn't the reconciliation account:
/** @var null|Transaction $lead */
$lead = $journal
->transactions()
->leftJoin('accounts', 'transactions.account_id', '=', 'accounts.id')

View File

@@ -158,9 +158,9 @@ class PiggyBankFactory
// event(new ChangedAmount($piggyBank, $diff, null, null));
}
// no amount set, use previous amount or go to ZERO.
$toBeLinked[$account->id] = ['current_amount' => $toBeLinked[$account->id]['current_amount'] ?? '0'];
Log::debug(sprintf('[b] Will link account #%d with amount %s', $account->id, $toBeLinked[$account->id]['current_amount'] ?? '0'));
// no amount set, use previous amount
$toBeLinked[$account->id] = ['current_amount' => $toBeLinked[$account->id]['current_amount']];
Log::debug(sprintf('[b] Will link account #%d with amount %s', $account->id, $toBeLinked[$account->id]['current_amount']));
// create event:
Log::debug('linkToAccountIds: Trigger change for positive amount [b].');

View File

@@ -54,11 +54,10 @@ class DeletedAccountObserver
->pluck('transaction_journal_id')
->toArray()
;
$groupIds = TransactionJournal::whereIn('id', $journalIds)
->get(['transaction_journals.transaction_group_id'])
->pluck('transaction_group_id')
->toArray()
;
$groupIds = array_map(function (array $item) {
return $item['transaction_group_id'];
}, TransactionJournal::whereIn('id', $journalIds)->get(['transaction_journals.transaction_group_id'])->toArray());
if (count($journalIds) > 0) {
Transaction::whereIn('transaction_journal_id', $journalIds)->delete();

View File

@@ -34,7 +34,6 @@ use FireflyIII\Repositories\User\UserRepositoryInterface;
use FireflyIII\Support\Facades\FireflyConfig;
use FireflyIII\Support\Facades\Preferences;
use FireflyIII\User;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\View\Factory;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
@@ -70,9 +69,6 @@ final class UserController extends Controller
$this->externalIdentity = 'web' !== config('firefly.authentication_guard');
}
/**
* @return Application|Factory|Redirector|RedirectResponse|View
*/
public function delete(User $user): Factory|\Illuminate\Contracts\View\View|Redirector|RedirectResponse
{
if ($this->externalIdentity) {

View File

@@ -27,7 +27,6 @@ use Carbon\Carbon;
use FireflyIII\Events\Security\System\UnknownUserTriedLogin;
use FireflyIII\Events\Security\User\UserFailedLoginAttempt;
use FireflyIII\Events\Security\User\UserSuccessfullyLoggedIn;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Http\Controllers\Controller;
use FireflyIII\Providers\RouteServiceProvider;
use FireflyIII\Repositories\User\UserRepositoryInterface;
@@ -48,8 +47,6 @@ use Illuminate\Support\Facades\Cookie;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Validation\ValidationException;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
use Symfony\Component\HttpFoundation\Response as ResponseAlias;
/**
@@ -181,12 +178,6 @@ final class LoginController extends Controller
/**
* Show the application's login form.
*
* @return Application|Factory|Redirector|RedirectResponse|View
*
* @throws FireflyException
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function showLoginForm(Request $request): Factory|Redirector|RedirectResponse|View
{

View File

@@ -38,7 +38,6 @@ use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Routing\Redirector;
use Illuminate\Support\Facades\Log;
use Illuminate\Validation\ValidationException;
use Illuminate\View\View;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
@@ -75,14 +74,6 @@ final class RegisterController extends Controller
}
}
/**
* Handle a registration request for the application.
*
* @return Application|Redirector|RedirectResponse
*
* @throws FireflyException
* @throws ValidationException
*/
public function register(Request $request): Redirector|RedirectResponse
{
$allowRegistration = $this->allowedToRegister();

View File

@@ -224,7 +224,7 @@ final class IndexController extends Controller
Log::debug(sprintf('(getAllBudgets) Start is "%s", end is "%s"', $start->format('Y-m-d H:i:s'), $end->format('Y-m-d H:i:s')));
// complement budget with budget limits in range, and expenses in currency X in range.
/** @var Budget $current */
/** @var Budget $budget */
foreach ($collection as $budget) {
Log::debug(sprintf('Working on budget #%d ("%s")', $budget->id, $budget->name));
$array = $budget->toArray();

View File

@@ -128,10 +128,10 @@ final class ReconcileController extends Controller
Log::debug(sprintf('End balance: "%s"', $endBalance));
Log::debug(sprintf('Cleared amount: "%s"', $clearedAmount));
Log::debug(sprintf('Amount: "%s"', $amount));
$difference = bcadd(bcadd(bcsub($startBalance ?? '0', $endBalance ?? '0'), $clearedAmount), $amount);
$difference = bcadd(bcadd(bcsub($startBalance, $endBalance), $clearedAmount), $amount);
$diffCompare = bccomp($difference, '0');
$countCleared = count($clearedJournals);
$reconSum = bcadd(bcadd($startBalance ?? '0', $amount), $clearedAmount);
$reconSum = bcadd(bcadd($startBalance, $amount), $clearedAmount);
try {
$view = view('accounts.reconcile.overview', [

View File

@@ -29,7 +29,6 @@ use FireflyIII\Http\Requests\ObjectGroupFormRequest;
use FireflyIII\Models\ObjectGroup;
use FireflyIII\Repositories\ObjectGroup\ObjectGroupRepositoryInterface;
use FireflyIII\Support\Facades\Preferences;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\View\Factory;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
@@ -77,8 +76,6 @@ final class EditController extends Controller
/**
* Update a piggy bank.
*
* @return Application|Redirector|RedirectResponse
*/
public function update(ObjectGroupFormRequest $request, ObjectGroup $objectGroup): Redirector|RedirectResponse
{

View File

@@ -38,7 +38,6 @@ use FireflyIII\Support\Http\Controllers\CreateStuff;
use FireflyIII\User;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\View\Factory;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
@@ -342,8 +341,6 @@ final class ProfileController extends Controller
}
/**
* @return Application|Redirector|RedirectResponse
*
* @throws AuthenticationException
*/
public function postLogoutOtherSessions(Request $request): Redirector|RedirectResponse

View File

@@ -24,7 +24,6 @@ declare(strict_types=1);
namespace FireflyIII\Http\Controllers\System;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\Routing\ResponseFactory;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Log;
@@ -34,9 +33,6 @@ use Illuminate\Support\Facades\Log;
*/
final class CronController
{
/**
* @return Application|Response|ResponseFactory
*/
public function cron(): Response|ResponseFactory
{
Log::error('The cron endpoint has moved to GET /api/v1/cron/[token]');

View File

@@ -34,7 +34,6 @@ use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Support\Facades\Preferences;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\View\Factory;
use Illuminate\Http\RedirectResponse;
use Illuminate\Routing\Redirector;
@@ -47,8 +46,7 @@ use Illuminate\View\View;
*/
final class BulkController extends Controller
{
/** @var JournalRepositoryInterface Journals and transactions overview */
private $repository;
private JournalRepositoryInterface $repository;
/**
* BulkController constructor.
@@ -91,8 +89,6 @@ final class BulkController extends Controller
/**
* Update all journals.
*
* @return Application|Redirector|RedirectResponse
*/
public function update(BulkEditJournalRequest $request): Redirector|RedirectResponse
{

View File

@@ -26,6 +26,7 @@ namespace FireflyIII\Http\Controllers\Transaction;
use Carbon\Carbon;
use FireflyIII\Enums\AccountTypeEnum;
use FireflyIII\Enums\TransactionTypeEnum;
use FireflyIII\Events\Model\TransactionGroup\DestroyedSingleTransactionGroup;
use FireflyIII\Events\Model\TransactionGroup\TransactionGroupEventFlags;
use FireflyIII\Events\Model\TransactionGroup\TransactionGroupEventObjects;
use FireflyIII\Events\Model\TransactionGroup\UpdatedSingleTransactionGroup;
@@ -41,7 +42,6 @@ use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Services\Internal\Update\JournalUpdateService;
use FireflyIII\Support\Facades\Preferences;
use FireflyIII\Support\Facades\Steam;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Http\RedirectResponse;
use Illuminate\Routing\Redirector;
use Illuminate\Support\Facades\Log;
@@ -84,16 +84,14 @@ final class MassController extends Controller
return view('transactions.mass.delete', ['journals' => $journals, 'subTitle' => $subTitle]);
}
/**
* Do the mass delete.
*
* @return Application|Redirector|RedirectResponse
*/
public function destroy(MassDeleteJournalRequest $request): Redirector|RedirectResponse
{
Log::debug(sprintf('Now in %s', __METHOD__));
$ids = $request->get('confirm_mass_delete');
$count = 0;
$ids = $request->input('confirm_mass_delete');
$count = 0;
$objects = new TransactionGroupEventObjects();
if (is_array($ids)) {
Log::debug('Array of IDs', $ids);
@@ -104,7 +102,9 @@ final class MassController extends Controller
/** @var null|TransactionJournal $journal */
$journal = $this->repository->find((int) $journalId);
if (null !== $journal && (int) $journalId === $journal->id) {
$objects->appendFromTransactionGroup($journal->transactionGroup);
$this->repository->destroyJournal($journal);
++$count;
Log::debug(sprintf('Deleted transaction journal #%d', $journalId));
@@ -116,6 +116,11 @@ final class MassController extends Controller
Preferences::mark();
session()->flash('success', trans_choice('firefly.mass_deleted_transactions_success', $count));
// trigger just after destruction
$flags = new TransactionGroupEventFlags();
event(new DestroyedSingleTransactionGroup($flags, $objects));
event(new WebhookMessagesRequestSending());
// redirect to previous URL:
return redirect($this->getPreviousUrl('transactions.mass-delete.url'));
}

View File

@@ -27,7 +27,6 @@ namespace FireflyIII\Http\Controllers\Webhooks;
use FireflyIII\Http\Controllers\Controller;
use FireflyIII\Models\Webhook;
use FireflyIII\Support\Facades\FireflyConfig;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\View\Factory;
use Illuminate\Contracts\View\View;
use Illuminate\Support\Facades\Log;
@@ -56,11 +55,6 @@ final class DeleteController extends Controller
});
}
/**
* Delete account screen.
*
* @return Application|Factory|View
*/
public function index(Webhook $webhook): Factory|View
{
if (false === FireflyConfig::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {

View File

@@ -27,7 +27,6 @@ namespace FireflyIII\Http\Controllers\Webhooks;
use FireflyIII\Http\Controllers\Controller;
use FireflyIII\Models\Webhook;
use FireflyIII\Support\Facades\FireflyConfig;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\View\Factory;
use Illuminate\Contracts\View\View;
use Illuminate\Support\Facades\Log;
@@ -55,11 +54,6 @@ final class EditController extends Controller
});
}
/**
* Delete account screen.
*
* @return Application|Factory|View
*/
public function index(Webhook $webhook): Factory|View
{
if (false === FireflyConfig::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {

View File

@@ -27,7 +27,6 @@ namespace FireflyIII\Http\Controllers\Webhooks;
use FireflyIII\Http\Controllers\Controller;
use FireflyIII\Models\Webhook;
use FireflyIII\Support\Facades\FireflyConfig;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\View\Factory;
use Illuminate\Contracts\View\View;
use Illuminate\Support\Facades\Log;
@@ -55,11 +54,6 @@ final class ShowController extends Controller
});
}
/**
* Delete account screen.
*
* @return Application|Factory|View
*/
public function index(Webhook $webhook): Factory|View
{
if (false === FireflyConfig::get('allow_webhooks', config('firefly.allow_webhooks'))->data) {

View File

@@ -37,6 +37,8 @@ class AttachmentFormRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Returns the data required by the controller.
*/

View File

@@ -38,6 +38,8 @@ class BillStoreRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Returns the data required by the controller.
*/

View File

@@ -39,6 +39,8 @@ class BillUpdateRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Returns the data required by the controller.
*/

View File

@@ -40,6 +40,8 @@ class BudgetFormStoreRequest extends FormRequest
use ConvertsDataTypes;
use ValidatesAutoBudgetRequest;
protected array $acceptedRoles = [];
/**
* Returns the data required by the controller.
*/

View File

@@ -41,6 +41,8 @@ class BudgetFormUpdateRequest extends FormRequest
use ConvertsDataTypes;
use ValidatesAutoBudgetRequest;
protected array $acceptedRoles = [];
/**
* Returns the data required by the controller.
*/

View File

@@ -36,6 +36,8 @@ class BudgetIncomeRequest extends FormRequest
{
use ChecksLogin;
protected array $acceptedRoles = [];
/**
* Rules for this request.
*/

View File

@@ -37,6 +37,8 @@ class BulkEditJournalRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Rules for this request.
*/

View File

@@ -38,6 +38,8 @@ class CategoryFormRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Get information for the controller.
*/

View File

@@ -35,6 +35,8 @@ class ConfigurationRequest extends FormRequest
{
use ChecksLogin;
protected array $acceptedRoles = [];
/**
* Returns the data required by the controller.
*/

View File

@@ -38,6 +38,8 @@ class CurrencyFormRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Returns the data required by the controller.
*/

View File

@@ -35,6 +35,8 @@ class DeleteAccountFormRequest extends FormRequest
{
use ChecksLogin;
protected array $acceptedRoles = [];
/**
* Rules for this request.
*/

View File

@@ -37,6 +37,8 @@ class EmailFormRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Rules for this request.
*/

View File

@@ -35,6 +35,8 @@ class ExistingTokenFormRequest extends FormRequest
{
use ChecksLogin;
protected array $acceptedRoles = [];
/**
* Rules for this request.
*/

View File

@@ -38,6 +38,8 @@ class InviteUserFormRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Rules for this request.
*/

View File

@@ -38,6 +38,8 @@ class JournalLinkRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Returns the data required by the controller.
*/

View File

@@ -37,6 +37,8 @@ class LinkTypeFormRequest extends FormRequest
use ChecksLogin;
use ConvertsDataTypes;
protected array $acceptedRoles = [];
/**
* Rules for this request.
*/

Some files were not shown because too many files have changed in this diff Show More