diff --git a/.ci/phpstan.neon b/.ci/phpstan.neon index 7e804a9a43..e454c7fc2a 100644 --- a/.ci/phpstan.neon +++ b/.ci/phpstan.neon @@ -1,9 +1,10 @@ parameters: + scanFiles: + - ../_ide_helper_models.php universalObjectCratesClasses: - Illuminate\Database\Eloquent\Model # TODO: slowly remove these parameters and fix the issues found. reportUnmatchedIgnoredErrors: false - checkGenericClassInNonGenericObjectType: false # remove this rule when all other issues are solved. ignoreErrors: # TODO: slowly remove these exceptions and fix the issues found. - '#Dynamic call to static method#' # all the Laravel ORM things depend on this. @@ -11,6 +12,7 @@ parameters: - '#with no value type specified in iterable type array#' # remove this rule when all other issues are solved. - '#has no value type specified in iterable type array#' # remove this rule when all other issues are solved. - '#is not allowed to extend#' + - '#does not specify its types#' - '#switch is forbidden to use#' - '#is neither abstract nor final#' - '#on left side of \?\?\= always exists and is not nullable#' diff --git a/app/Api/V1/Controllers/Models/TransactionCurrency/UpdateController.php b/app/Api/V1/Controllers/Models/TransactionCurrency/UpdateController.php index d7d2288c9a..531d9ed1f8 100644 --- a/app/Api/V1/Controllers/Models/TransactionCurrency/UpdateController.php +++ b/app/Api/V1/Controllers/Models/TransactionCurrency/UpdateController.php @@ -34,6 +34,7 @@ use FireflyIII\Support\Http\Api\TransactionFilter; use FireflyIII\Transformers\CurrencyTransformer; use FireflyIII\User; use Illuminate\Http\JsonResponse; +use Illuminate\Support\Facades\Log; use League\Fractal\Resource\Item; /** @@ -164,15 +165,22 @@ class UpdateController extends Controller public function update(UpdateRequest $request, TransactionCurrency $currency): JsonResponse { $data = $request->getAll(); + Log::debug(__METHOD__, $data); /** @var User $user */ $user = auth()->user(); + // safety catch on currency disablement. $set = $this->repository->get(); if (array_key_exists('enabled', $data) && false === $data['enabled'] && 1 === count($set) && $set->first()->id === $currency->id) { return response()->json([], 409); } + // second safety catch on currency disable. + if (array_key_exists('enabled', $data) && false === $data['enabled'] && $this->repository->currencyInUse($currency)) { + return response()->json([], 409); + } + $currency = $this->repository->update($currency, $data); app('preferences')->mark(); diff --git a/app/Api/V1/Controllers/User/PreferencesController.php b/app/Api/V1/Controllers/User/PreferencesController.php index e947af858e..8ccfa9f27e 100644 --- a/app/Api/V1/Controllers/User/PreferencesController.php +++ b/app/Api/V1/Controllers/User/PreferencesController.php @@ -102,6 +102,7 @@ class PreferencesController extends Controller * TODO This endpoint is not documented. * * Return a single preference by name. + * @param Collection $collection */ public function showList(Collection $collection): JsonResponse { diff --git a/app/Api/V2/Controllers/Chart/BalanceController.php b/app/Api/V2/Controllers/Chart/BalanceController.php index cc6cb0dc47..582e226d97 100644 --- a/app/Api/V2/Controllers/Chart/BalanceController.php +++ b/app/Api/V2/Controllers/Chart/BalanceController.php @@ -48,7 +48,7 @@ class BalanceController extends Controller private AccountRepositoryInterface $repository; private GroupCollectorInterface $collector; private ChartData $chartData; - private TransactionCurrency $default; + // private TransactionCurrency $default; public function __construct() { @@ -61,7 +61,7 @@ class BalanceController extends Controller $this->repository->setUserGroup($userGroup); $this->collector->setUserGroup($userGroup); $this->chartData = new ChartData(); - $this->default = app('amount')->getDefaultCurrency(); + // $this->default = app('amount')->getDefaultCurrency(); return $next($request); } diff --git a/app/Api/V2/Controllers/JsonApi/AccountController.php b/app/Api/V2/Controllers/JsonApi/AccountController.php index 5b34923741..2e8effdc6b 100644 --- a/app/Api/V2/Controllers/JsonApi/AccountController.php +++ b/app/Api/V2/Controllers/JsonApi/AccountController.php @@ -81,12 +81,13 @@ class AccountController extends Controller */ public function show(AccountSchema $schema, AccountSingleQuery $request, Account $account) { - $model = $schema - ->repository() + Log::debug(__METHOD__); + $model = $schema->repository() ->queryOne($account) ->withRequest($request) ->first() ; + Log::debug(sprintf('%s again!', __METHOD__)); // do something custom... diff --git a/app/Console/Commands/Correction/FixUnevenAmount.php b/app/Console/Commands/Correction/FixUnevenAmount.php index 018a2a5e8b..2124d72e83 100644 --- a/app/Console/Commands/Correction/FixUnevenAmount.php +++ b/app/Console/Commands/Correction/FixUnevenAmount.php @@ -27,7 +27,7 @@ use FireflyIII\Console\Commands\ShowsFriendlyMessages; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionType; -use FireflyIII\Support\Facades\Steam; +use FireflyIII\Support\Models\AccountBalanceCalculator; use Illuminate\Console\Command; use Illuminate\Support\Facades\Log; @@ -48,8 +48,10 @@ class FixUnevenAmount extends Command public function handle(): int { $this->count = 0; + $this->convertOldStyleTransfers(); $this->fixUnevenAmounts(); $this->matchCurrencies(); + AccountBalanceCalculator::forceRecalculateAll(); return 0; } @@ -76,6 +78,7 @@ class FixUnevenAmount extends Command Transaction::where('transaction_journal_id', $journal->id ?? 0)->forceDelete(); TransactionJournal::where('id', $journal->id ?? 0)->forceDelete(); ++$this->count; + return; } @@ -97,16 +100,18 @@ class FixUnevenAmount extends Command Transaction::where('transaction_journal_id', $journal->id ?? 0)->forceDelete(); TransactionJournal::where('id', $journal->id ?? 0)->forceDelete(); ++$this->count; + return; } // may still be able to salvage this journal if it is a transfer with foreign currency info - if($this->isForeignCurrencyTransfer($journal)) { + if ($this->isForeignCurrencyTransfer($journal)) { Log::debug(sprintf('Can skip foreign currency transfer #%d.', $journal->id)); + return; } - $message = sprintf('Sum of journal #%d is not zero, journal is broken and now fixed.', $journal->id); + $message = sprintf('Sum of journal #%d is not zero, journal is broken and now fixed.', $journal->id); $this->friendlyWarning($message); app('log')->warning($message); @@ -167,14 +172,17 @@ class FixUnevenAmount extends Command { $journals = TransactionJournal::leftJoin('transactions', 'transaction_journals.id', 'transactions.transaction_journal_id') ->where('transactions.transaction_currency_id', '!=', \DB::raw('transaction_journals.transaction_currency_id')) - ->get(['transaction_journals.*']); + ->get(['transaction_journals.*']) + ; + + $count = 0; - $count = 0; /** @var TransactionJournal $journal */ foreach ($journals as $journal) { - if(!$this->isForeignCurrencyTransfer($journal)) { + if (!$this->isForeignCurrencyTransfer($journal)) { Transaction::where('transaction_journal_id', $journal->id)->update(['transaction_currency_id' => $journal->transaction_currency_id]); - $count++; + ++$count; + continue; } Log::debug(sprintf('Can skip foreign currency transfer #%d.', $journal->id)); @@ -190,13 +198,15 @@ class FixUnevenAmount extends Command private function isForeignCurrencyTransfer(TransactionJournal $journal): bool { - if(TransactionType::TRANSFER !== $journal->transactionType->type) { + if (TransactionType::TRANSFER !== $journal->transactionType->type) { return false; } + /** @var Transaction $destination */ - $destination = $journal->transactions()->where('amount', '>', 0)->first(); + $destination = $journal->transactions()->where('amount', '>', 0)->first(); + /** @var Transaction $source */ - $source = $journal->transactions()->where('amount', '<', 0)->first(); + $source = $journal->transactions()->where('amount', '<', 0)->first(); // safety catch on NULL should not be necessary, we just had that catch. // source amount = dest foreign amount @@ -204,19 +214,79 @@ class FixUnevenAmount extends Command // dest amount = 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('[b] %s', bccomp(app('steam')->positive($destination->amount), app('steam')->positive($source->foreign_amount)))); -// 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('[a] %s', bccomp(app('steam')->positive($source->amount), app('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('[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))); - if(0 === bccomp(app('steam')->positive($source->amount), app('steam')->positive($destination->foreign_amount)) && - $source->transaction_currency_id === $destination->foreign_currency_id && - 0 === bccomp(app('steam')->positive($destination->amount), app('steam')->positive($source->foreign_amount)) && - (int) $destination->transaction_currency_id === (int) $source->foreign_currency_id + if (0 === bccomp(app('steam')->positive($source->amount), app('steam')->positive($destination->foreign_amount)) + && $source->transaction_currency_id === $destination->foreign_currency_id + && 0 === bccomp(app('steam')->positive($destination->amount), app('steam')->positive($source->foreign_amount)) + && (int) $destination->transaction_currency_id === (int) $source->foreign_currency_id ) { return true; } - return false; + return false; + } + + private function convertOldStyleTransfers(): void + { + Log::debug('convertOldStyleTransfers()'); + // select transactions with a foreign amount and a foreign currency. and it's a transfer. and they are different. + $transactions = Transaction::distinct() + ->whereNotNull('foreign_currency_id') + ->whereNotNull('foreign_amount')->get(['transactions.transaction_journal_id']) + ; + $count = 0; + + Log::debug(sprintf('Found %d potential journal(s)', $transactions->count())); + + /** @var Transaction $transaction */ + foreach ($transactions as $transaction) { + /** @var null|TransactionJournal $journal */ + $journal = TransactionJournal::find($transaction->transaction_journal_id); + if (null === $journal) { + Log::debug('Found no journal, continue.'); + + continue; + } + // needs to be a transfer. + if (TransactionType::TRANSFER !== $journal->transactionType->type) { + Log::debug('Must be a transfer, continue.'); + + continue; + } + + /** @var null|Transaction $destination */ + $destination = $journal->transactions()->where('amount', '>', 0)->first(); + + /** @var null|Transaction $source */ + $source = $journal->transactions()->where('amount', '<', 0)->first(); + if (null === $destination || null === $source) { + Log::debug('Source or destination transaction is NULL, continue.'); + + // will be picked up later. + continue; + } + if ($source->transaction_currency_id === $destination->transaction_currency_id) { + Log::debug('Ready to swap data between transactions.'); + $destination->foreign_currency_id = $source->transaction_currency_id; + $destination->foreign_amount = app('steam')->positive($source->amount); + $destination->transaction_currency_id = $source->foreign_currency_id; + $destination->amount = app('steam')->positive($source->foreign_amount); + $destination->balance_dirty = true; + $source->balance_dirty = true; + $destination->save(); + $source->save(); + $this->friendlyWarning(sprintf('Corrected foreign amounts of transfer #%d.', $journal->id)); + ++$count; + } + } + if (0 === $count) { + $this->friendlyPositive('No "old style" foreign currency transfers.'); + + return; + } } } diff --git a/app/Console/Commands/Upgrade/CorrectAccountBalance.php b/app/Console/Commands/Upgrade/CorrectAccountBalance.php index 043b7ca538..75227d8f8c 100644 --- a/app/Console/Commands/Upgrade/CorrectAccountBalance.php +++ b/app/Console/Commands/Upgrade/CorrectAccountBalance.php @@ -44,9 +44,10 @@ class CorrectAccountBalance extends Command return 0; } - $this->correctBalanceAmounts(); + $this->friendlyWarning('This command has been disabled.'); $this->markAsExecuted(); + // $this->correctBalanceAmounts(); return 0; } diff --git a/app/Console/Commands/Upgrade/OtherCurrenciesCorrections.php b/app/Console/Commands/Upgrade/OtherCurrenciesCorrections.php index a6dba4b748..475b7e7f0b 100644 --- a/app/Console/Commands/Upgrade/OtherCurrenciesCorrections.php +++ b/app/Console/Commands/Upgrade/OtherCurrenciesCorrections.php @@ -43,8 +43,8 @@ class OtherCurrenciesCorrections extends Command use ShowsFriendlyMessages; public const string CONFIG_NAME = '480_other_currencies'; - protected $description = 'Update all journal currency information.'; - protected $signature = 'firefly-iii:other-currencies {--F|force : Force the execution of this command.}'; + protected $description = 'Update all journal currency information.'; + protected $signature = 'firefly-iii:other-currencies {--F|force : Force the execution of this command.}'; private array $accountCurrencies; private AccountRepositoryInterface $accountRepos; private JournalCLIRepositoryInterface $cliRepos; @@ -90,7 +90,7 @@ class OtherCurrenciesCorrections extends Command { $configVar = app('fireflyconfig')->get(self::CONFIG_NAME, false); if (null !== $configVar) { - return (bool)$configVar->data; + return (bool) $configVar->data; } return false; @@ -120,7 +120,7 @@ class OtherCurrenciesCorrections extends Command $this->journalRepos->setUser($journal->user); $this->cliRepos->setUser($journal->user); - $leadTransaction = $this->getLeadTransaction($journal); + $leadTransaction = $this->getLeadTransaction($journal); if (null === $leadTransaction) { $this->friendlyError(sprintf('Could not reliably determine which transaction is in the lead for transaction journal #%d.', $journal->id)); @@ -128,8 +128,9 @@ class OtherCurrenciesCorrections extends Command return; } - $account = $leadTransaction->account; - $currency = $this->getCurrency($account); + $account = $leadTransaction->account; + $currency = $this->getCurrency($account); + $isMultiCurrency = $this->isMultiCurrency($account); if (null === $currency) { $this->friendlyError( sprintf( @@ -145,14 +146,14 @@ class OtherCurrenciesCorrections extends Command } // fix each transaction: $journal->transactions->each( - static function (Transaction $transaction) use ($currency): void { + static function (Transaction $transaction) use ($currency, $isMultiCurrency): void { if (null === $transaction->transaction_currency_id) { $transaction->transaction_currency_id = $currency->id; $transaction->save(); } // when mismatch in transaction: - if ($transaction->transaction_currency_id !== $currency->id) { + if ($transaction->transaction_currency_id !== $currency->id && !$isMultiCurrency) { $transaction->foreign_currency_id = $transaction->transaction_currency_id; $transaction->foreign_amount = $transaction->amount; $transaction->transaction_currency_id = $currency->id; @@ -161,7 +162,9 @@ class OtherCurrenciesCorrections extends Command } ); // also update the journal, of course: - $journal->transaction_currency_id = $currency->id; + if (!$isMultiCurrency) { + $journal->transaction_currency_id = $currency->id; + } ++$this->count; $journal->save(); } @@ -217,14 +220,14 @@ class OtherCurrenciesCorrections extends Command private function getCurrency(Account $account): ?TransactionCurrency { - $accountId = $account->id; + $accountId = $account->id; if (array_key_exists($accountId, $this->accountCurrencies) && 0 === $this->accountCurrencies[$accountId]) { return null; } if (array_key_exists($accountId, $this->accountCurrencies) && $this->accountCurrencies[$accountId] instanceof TransactionCurrency) { return $this->accountCurrencies[$accountId]; } - $currency = $this->accountRepos->getAccountCurrency($account); + $currency = $this->accountRepos->getAccountCurrency($account); if (null === $currency) { $this->accountCurrencies[$accountId] = 0; @@ -239,4 +242,13 @@ class OtherCurrenciesCorrections extends Command { app('fireflyconfig')->set(self::CONFIG_NAME, true); } + + private function isMultiCurrency(Account $account): bool + { + $value = $this->accountRepos->getMetaValue($account, 'is_multi_currency', false); + if (false === $value || null === $value) { + return false; + } + return '1' === $value; + } } diff --git a/app/Factory/TransactionJournalFactory.php b/app/Factory/TransactionJournalFactory.php index 063ce5eeb4..0ec07b2ba4 100644 --- a/app/Factory/TransactionJournalFactory.php +++ b/app/Factory/TransactionJournalFactory.php @@ -266,17 +266,17 @@ class TransactionJournalFactory // Firefly III will save the foreign currency information in such a way that both // asset accounts can look at the "amount" and "transaction_currency_id" column and // see the currency they expect to see. - $amount = (string)$row['amount']; - $foreignAmount = (string)$row['foreign_amount']; - if(null !== $foreignCurrency && $foreignCurrency->id !== $currency->id && - TransactionType::TRANSFER === $type->type + $amount = (string)$row['amount']; + $foreignAmount = (string)$row['foreign_amount']; + if (null !== $foreignCurrency && $foreignCurrency->id !== $currency->id + && TransactionType::TRANSFER === $type->type ) { $transactionFactory->setCurrency($foreignCurrency); $transactionFactory->setForeignCurrency($currency); - $amount = (string)$row['foreign_amount']; + $amount = (string)$row['foreign_amount']; $foreignAmount = (string)$row['amount']; Log::debug('Swap native/foreign amounts in transfer for new save method.'); - } + } try { $transactionFactory->createPositive($amount, $foreignAmount); diff --git a/app/Http/Controllers/DebugController.php b/app/Http/Controllers/DebugController.php index 0e7111094d..896afc947f 100644 --- a/app/Http/Controllers/DebugController.php +++ b/app/Http/Controllers/DebugController.php @@ -30,6 +30,7 @@ use FireflyIII\Http\Middleware\IsDemoUser; use FireflyIII\Models\AccountType; use FireflyIII\Models\TransactionType; use FireflyIII\Support\Http\Controllers\GetConfigurationData; +use FireflyIII\Support\Models\AccountBalanceCalculator; use FireflyIII\User; use Illuminate\Contracts\View\Factory; use Illuminate\Http\RedirectResponse; @@ -94,6 +95,7 @@ class DebugController extends Controller // also do some recalculations. Artisan::call('firefly-iii:trigger-credit-recalculation'); + AccountBalanceCalculator::forceRecalculateAll(); try { Artisan::call('twig:clean'); diff --git a/app/JsonApi/V2/Accounts/AccountCollectionQuery.php b/app/JsonApi/V2/Accounts/AccountCollectionQuery.php index 2cb3d072cc..464256fe4a 100644 --- a/app/JsonApi/V2/Accounts/AccountCollectionQuery.php +++ b/app/JsonApi/V2/Accounts/AccountCollectionQuery.php @@ -6,6 +6,8 @@ namespace FireflyIII\JsonApi\V2\Accounts; use FireflyIII\Models\Account; use FireflyIII\Rules\IsAllowedGroupAction; +use FireflyIII\Rules\IsDateOrTime; +use FireflyIII\Rules\IsValidDateRange; use Illuminate\Support\Facades\Log; use LaravelJsonApi\Laravel\Http\Requests\ResourceQuery; use LaravelJsonApi\Validation\Rule as JsonApiRule; @@ -25,11 +27,23 @@ class AccountCollectionQuery extends ResourceQuery 'array', JsonApiRule::fieldSets(), ], - 'user_group_id' => [ + 'userGroupId' => [ 'nullable', 'integer', new IsAllowedGroupAction(Account::class, request()->method()), ], + 'startPeriod' => [ + 'nullable', + 'date', + new IsDateOrTime(), + new isValidDateRange(), + ], + 'endPeriod' => [ + 'nullable', + 'date', + new IsDateOrTime(), + new isValidDateRange(), + ], 'filter' => [ 'nullable', 'array', @@ -45,6 +59,15 @@ class AccountCollectionQuery extends ResourceQuery 'array', JsonApiRule::page(), ], + 'page.number' => [ + 'integer', + 'min:1', + ], + + 'page.size' => [ + 'integer', + 'min:1', + ], 'sort' => [ 'nullable', 'string', diff --git a/app/JsonApi/V2/Accounts/AccountRepository.php b/app/JsonApi/V2/Accounts/AccountRepository.php index 98bc73cc24..a6366d9ab0 100644 --- a/app/JsonApi/V2/Accounts/AccountRepository.php +++ b/app/JsonApi/V2/Accounts/AccountRepository.php @@ -29,8 +29,10 @@ use FireflyIII\Support\JsonApi\Enrichments\AccountEnrichment; use Illuminate\Support\Facades\Log; use LaravelJsonApi\Contracts\Store\CreatesResources; use LaravelJsonApi\Contracts\Store\QueriesAll; +use LaravelJsonApi\Contracts\Store\QueryOneBuilder; use LaravelJsonApi\NonEloquent\AbstractRepository; use LaravelJsonApi\NonEloquent\Capabilities\CrudRelations; +use LaravelJsonApi\NonEloquent\Capabilities\CrudResource; use LaravelJsonApi\NonEloquent\Concerns\HasCrudCapability; use LaravelJsonApi\NonEloquent\Concerns\HasRelationsCapability; @@ -55,17 +57,21 @@ class AccountRepository extends AbstractRepository implements QueriesAll, Create /** * SiteRepository constructor. */ - public function __construct() {} + public function __construct() { + Log::debug(__METHOD__); + } public function exists(string $resourceId): bool { - Log::debug(__METHOD__); + $result = null !== Account::find((int) $resourceId); + Log::debug(sprintf('%s: %s',__METHOD__, var_export($result, true))); - return null !== Account::find((int) $resourceId); + return $result; } public function find(string $resourceId): ?object { + die(__METHOD__); Log::debug(__METHOD__); // throw new \RuntimeException('trace me'); $account = Account::find((int) $resourceId); @@ -91,11 +97,13 @@ class AccountRepository extends AbstractRepository implements QueriesAll, Create protected function crud(): Capabilities\CrudAccount { + Log::debug(__METHOD__); return Capabilities\CrudAccount::make(); } protected function relations(): CrudRelations { + Log::debug(__METHOD__); return Capabilities\CrudAccountRelations::make(); } } diff --git a/app/JsonApi/V2/Accounts/AccountResource.php b/app/JsonApi/V2/Accounts/AccountResource.php index bbdd2133bb..14553433b5 100644 --- a/app/JsonApi/V2/Accounts/AccountResource.php +++ b/app/JsonApi/V2/Accounts/AccountResource.php @@ -19,9 +19,10 @@ class AccountResource extends JsonApiResource */ public function id(): string { - Log::debug(__METHOD__); + $id = (string) $this->resource->id; + Log::debug(sprintf('%s: "%s"', __METHOD__, $id)); - return (string) $this->resource->id; + return $id; } /** @@ -39,24 +40,37 @@ class AccountResource extends JsonApiResource 'name' => $this->resource->name, 'active' => $this->resource->active, 'order' => $this->resource->order, + 'iban' => $this->resource->iban, 'type' => $this->resource->account_type_string, 'account_role' => $this->resource->account_role, 'account_number' => '' === $this->resource->account_number ? null : $this->resource->account_number, - // currency + // currency (if the account has a currency setting, otherwise NULL). 'currency_id' => $this->resource->currency_id, 'currency_name' => $this->resource->currency_name, 'currency_code' => $this->resource->currency_code, 'currency_symbol' => $this->resource->currency_symbol, 'currency_decimal_places' => $this->resource->currency_decimal_places, + 'is_multi_currency' => '1' === $this->resource->is_multi_currency, + + // balances + 'balance' => $this->resource->balance, + 'native_balance' => $this->resource->native_balance, // liability things 'liability_direction' => $this->resource->liability_direction, 'interest' => $this->resource->interest, 'interest_period' => $this->resource->interest_period, - 'current_debt' => $this->resource->current_debt, + 'current_debt' => $this->resource->current_debt, // TODO may be removed in the future. + // other things 'last_activity' => $this->resource->last_activity, + + + // object group + 'object_group_id' => $this->resource->object_group_id, + 'object_group_title' => $this->resource->object_group_title, + 'object_group_order' => $this->resource->object_group_order, ]; } diff --git a/app/JsonApi/V2/Accounts/AccountSchema.php b/app/JsonApi/V2/Accounts/AccountSchema.php index b604bb8081..7dfca106e0 100644 --- a/app/JsonApi/V2/Accounts/AccountSchema.php +++ b/app/JsonApi/V2/Accounts/AccountSchema.php @@ -27,7 +27,7 @@ class AccountSchema extends Schema */ public function fields(): array { - Log::debug(__METHOD__); + // Log::debug(__METHOD__); return [ ID::make(), @@ -38,6 +38,7 @@ class AccountSchema extends Schema Attribute::make('name'), Attribute::make('active'), Attribute::make('order'), + Attribute::make('iban'), Attribute::make('type'), Attribute::make('account_role'), Attribute::make('account_number'), @@ -48,6 +49,11 @@ class AccountSchema extends Schema Attribute::make('currency_code'), Attribute::make('currency_symbol'), Attribute::make('currency_decimal_places'), + Attribute::make('is_multi_currency'), + + // balance + Attribute::make('balance'), + Attribute::make('native_balance'), // liability things Attribute::make('liability_direction'), @@ -58,6 +64,12 @@ class AccountSchema extends Schema // dynamic data Attribute::make('last_activity'), + // group + Attribute::make('object_group_id'), + Attribute::make('object_group_title'), + Attribute::make('object_group_order'), + + // relations. HasOne::make('user')->readOnly(), ]; } @@ -67,7 +79,7 @@ class AccountSchema extends Schema */ public function filters(): array { - Log::debug(__METHOD__); + // Log::debug(__METHOD__); return [ Filter::make('id'), @@ -76,13 +88,12 @@ class AccountSchema extends Schema public function repository(): AccountRepository { - Log::debug(__METHOD__); $this->setUserGroup($this->server->getUsergroup()); - - return AccountRepository::make() - ->withServer($this->server) - ->withSchema($this) - ->withUserGroup($this->userGroup) - ; + $repository = AccountRepository::make() + ->withServer($this->server) + ->withSchema($this) + ->withUserGroup($this->userGroup); + Log::debug(sprintf('%s: %s', __METHOD__, get_class($repository))); + return $repository; } } diff --git a/app/JsonApi/V2/Accounts/Capabilities/AccountQuery.php b/app/JsonApi/V2/Accounts/Capabilities/AccountQuery.php index 7afcca2a7e..a0c40474d3 100644 --- a/app/JsonApi/V2/Accounts/Capabilities/AccountQuery.php +++ b/app/JsonApi/V2/Accounts/Capabilities/AccountQuery.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace FireflyIII\JsonApi\V2\Accounts\Capabilities; +use FireflyIII\Support\JsonApi\CollectsCustomParameters; use FireflyIII\Support\JsonApi\Concerns\UsergroupAware; use FireflyIII\Support\JsonApi\Enrichments\AccountEnrichment; use FireflyIII\Support\JsonApi\ExpandsQuery; @@ -42,26 +43,32 @@ class AccountQuery extends QueryAll implements HasPagination use SortsCollection; use UsergroupAware; use ValidateSortParameters; + use CollectsCustomParameters; #[\Override] /** * This method returns all accounts, given a bunch of filters and sort fields, together with pagination. + * + * It is only used on the index, and nowhere else. */ public function get(): iterable { Log::debug(__METHOD__); // collect filters - $filters = $this->queryParameters->filter(); + $filters = $this->queryParameters->filter(); // collect sort options - $sort = $this->queryParameters->sortFields(); + $sort = $this->queryParameters->sortFields(); // collect pagination based on the page $pagination = $this->filtersPagination($this->queryParameters->page()); // check if we need all accounts, regardless of pagination // This is necessary when the user wants to sort on specific params. - $needsAll = $this->needsFullDataset('account', $sort); + $needsAll = $this->needsFullDataset('account', $sort); + + // params that were not recognised, may be my own custom stuff. + $otherParams = $this->getOtherParams($this->queryParameters->unrecognisedParameters()); // start the query - $query = $this->userGroup->accounts(); + $query = $this->userGroup->accounts(); // add pagination to the query, limiting the results. if (!$needsAll) { @@ -69,14 +76,17 @@ class AccountQuery extends QueryAll implements HasPagination } // add sort and filter parameters to the query. - $query = $this->addSortParams($query, $sort); - $query = $this->addFilterParams('account', $query, $filters); + $query = $this->addSortParams($query, $sort); + $query = $this->addFilterParams('account', $query, $filters); + // collect the result. $collection = $query->get(['accounts.*']); // enrich the collected data $enrichment = new AccountEnrichment(); + $enrichment->setStart($otherParams['start'] ?? null); + $enrichment->setEnd($otherParams['end'] ?? null); $collection = $enrichment->enrich($collection); // TODO add filters after the query, if there are filters that cannot be applied to the database but only diff --git a/app/JsonApi/V2/Accounts/Capabilities/CrudAccount.php b/app/JsonApi/V2/Accounts/Capabilities/CrudAccount.php index 79ebb51af4..01ac1db16b 100644 --- a/app/JsonApi/V2/Accounts/Capabilities/CrudAccount.php +++ b/app/JsonApi/V2/Accounts/Capabilities/CrudAccount.php @@ -24,19 +24,31 @@ declare(strict_types=1); namespace FireflyIII\JsonApi\V2\Accounts\Capabilities; use FireflyIII\Models\Account; +use FireflyIII\Support\JsonApi\CollectsCustomParameters; use FireflyIII\Support\JsonApi\Enrichments\AccountEnrichment; +use Illuminate\Support\Facades\Log; use LaravelJsonApi\NonEloquent\Capabilities\CrudResource; class CrudAccount extends CrudResource { + use CollectsCustomParameters; + /** * Read the supplied site. */ public function read(Account $account): ?Account { + $otherParams = $this->getOtherParams($this->request->query->all()); + + Log::debug(__METHOD__); // enrich the collected data $enrichment = new AccountEnrichment(); + // set start and date, if present. + $enrichment->setStart($otherParams['start'] ?? null); + $enrichment->setEnd($otherParams['end'] ?? null); + + return $enrichment->enrichSingle($account); } diff --git a/app/JsonApi/V2/Server.php b/app/JsonApi/V2/Server.php index d386615961..e175deb8ef 100644 --- a/app/JsonApi/V2/Server.php +++ b/app/JsonApi/V2/Server.php @@ -42,7 +42,7 @@ class Server extends BaseServer */ protected function allSchemas(): array { - Log::debug(__METHOD__); + // Log::debug(__METHOD__); return [ AccountSchema::class, diff --git a/app/Models/Account.php b/app/Models/Account.php index 727c5a8832..4f6930cad9 100644 --- a/app/Models/Account.php +++ b/app/Models/Account.php @@ -23,15 +23,12 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; use GeneaLabs\LaravelModelCaching\Traits\Cachable; use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Eloquent\Casts\Attribute; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -39,83 +36,10 @@ use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\MorphMany; use Illuminate\Database\Eloquent\Relations\MorphToMany; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Database\Query\Builder; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * Class Account - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property int $user_id - * @property int $account_type_id - * @property string $account_type_string - * @property string $name - * @property string $virtual_balance - * @property null|string $iban - * @property bool $active - * @property bool $encrypted - * @property int $order - * @property AccountMeta[]|Collection $accountMeta - * @property null|int $account_meta_count - * @property AccountType $accountType - * @property Attachment[]|Collection $attachments - * @property null|int $attachments_count - * @property string $account_number - * @property string $edit_name - * @property Collection|Location[] $locations - * @property null|int $locations_count - * @property Collection|Note[] $notes - * @property null|int $notes_count - * @property Collection|ObjectGroup[] $objectGroups - * @property null|int $object_groups_count - * @property Collection|PiggyBank[] $piggyBanks - * @property null|int $piggy_banks_count - * @property Collection|Transaction[] $transactions - * @property null|int $transactions_count - * @property User $user - * @property string $last_activity - * - * @method static EloquentBuilder|Account accountTypeIn($types) - * @method static EloquentBuilder|Account newModelQuery() - * @method static EloquentBuilder|Account newQuery() - * @method static Builder|Account onlyTrashed() - * @method static EloquentBuilder|Account query() - * @method static EloquentBuilder|Account whereAccountTypeId($value) - * @method static EloquentBuilder|Account whereActive($value) - * @method static EloquentBuilder|Account whereCreatedAt($value) - * @method static EloquentBuilder|Account whereDeletedAt($value) - * @method static EloquentBuilder|Account whereEncrypted($value) - * @method static EloquentBuilder|Account whereIban($value) - * @method static EloquentBuilder|Account whereId($value) - * @method static EloquentBuilder|Account whereName($value) - * @method static EloquentBuilder|Account whereOrder($value) - * @method static EloquentBuilder|Account whereUpdatedAt($value) - * @method static EloquentBuilder|Account whereUserId($value) - * @method static EloquentBuilder|Account whereVirtualBalance($value) - * @method static Builder|Account withTrashed() - * @method static Builder|Account withoutTrashed() - * - * @property Carbon $lastActivityDate - * @property string $startBalance - * @property string $endBalance - * @property string $difference - * @property string $interest - * @property string $interestPeriod - * @property string $accountTypeString - * @property Location $location - * @property string $liability_direction - * @property string $current_debt - * @property int $user_group_id - * - * @method static EloquentBuilder|Account whereUserGroupId($value) - * - * @property null|UserGroup $userGroup - * @property mixed $account_id - * - * @mixin Eloquent + * @mixin IdeHelperAccount */ class Account extends Model { diff --git a/app/Models/AccountBalance.php b/app/Models/AccountBalance.php index dedd75be4d..f89fa8de68 100644 --- a/app/Models/AccountBalance.php +++ b/app/Models/AccountBalance.php @@ -8,6 +8,9 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; +/** + * @mixin IdeHelperAccountBalance + */ class AccountBalance extends Model { use HasFactory; diff --git a/app/Models/AccountMeta.php b/app/Models/AccountMeta.php index a3c37ed271..4beb609874 100644 --- a/app/Models/AccountMeta.php +++ b/app/Models/AccountMeta.php @@ -23,35 +23,12 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; -use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; /** - * Class AccountMeta - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property int $account_id - * @property string $name - * @property mixed $data - * @property Account $account - * - * @method static Builder|AccountMeta newModelQuery() - * @method static Builder|AccountMeta newQuery() - * @method static Builder|AccountMeta query() - * @method static Builder|AccountMeta whereAccountId($value) - * @method static Builder|AccountMeta whereCreatedAt($value) - * @method static Builder|AccountMeta whereData($value) - * @method static Builder|AccountMeta whereId($value) - * @method static Builder|AccountMeta whereName($value) - * @method static Builder|AccountMeta whereUpdatedAt($value) - * - * @mixin Eloquent + * @mixin IdeHelperAccountMeta */ class AccountMeta extends Model { diff --git a/app/Models/AccountType.php b/app/Models/AccountType.php index c2a942460a..81cfbdc197 100644 --- a/app/Models/AccountType.php +++ b/app/Models/AccountType.php @@ -23,33 +23,12 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; -use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; /** - * FireflyIII\Models\AccountType - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property string $type - * @property Account[]|Collection $accounts - * @property null|int $accounts_count - * - * @method static Builder|AccountType newModelQuery() - * @method static Builder|AccountType newQuery() - * @method static Builder|AccountType query() - * @method static Builder|AccountType whereCreatedAt($value) - * @method static Builder|AccountType whereId($value) - * @method static Builder|AccountType whereType($value) - * @method static Builder|AccountType whereUpdatedAt($value) - * - * @mixin Eloquent + * @mixin IdeHelperAccountType */ class AccountType extends Model { diff --git a/app/Models/Attachment.php b/app/Models/Attachment.php index e2ef680150..21552e0a19 100644 --- a/app/Models/Attachment.php +++ b/app/Models/Attachment.php @@ -23,71 +23,19 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; use Illuminate\Database\Eloquent\Casts\Attribute; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\MorphMany; use Illuminate\Database\Eloquent\Relations\MorphTo; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Database\Query\Builder; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * FireflyIII\Models\Attachment - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property int $user_id - * @property int $attachable_id - * @property string $attachable_type - * @property bool $file_exists - * @property string $md5 - * @property string $filename - * @property null|string $title - * @property null|string $description - * @property string $mime - * @property int|string $size - * @property bool $uploaded - * @property string $notes_text - * @property \Eloquent|Model $attachable - * @property Collection|Note[] $notes - * @property null|int $notes_count - * @property User $user - * - * @method static \Illuminate\Database\Eloquent\Builder|Attachment newModelQuery() - * @method static \Illuminate\Database\Eloquent\Builder|Attachment newQuery() - * @method static Builder|Attachment onlyTrashed() - * @method static \Illuminate\Database\Eloquent\Builder|Attachment query() - * @method static \Illuminate\Database\Eloquent\Builder|Attachment whereAttachableId($value) - * @method static \Illuminate\Database\Eloquent\Builder|Attachment whereAttachableType($value) - * @method static \Illuminate\Database\Eloquent\Builder|Attachment whereCreatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|Attachment whereDeletedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|Attachment whereDescription($value) - * @method static \Illuminate\Database\Eloquent\Builder|Attachment whereFilename($value) - * @method static \Illuminate\Database\Eloquent\Builder|Attachment whereId($value) - * @method static \Illuminate\Database\Eloquent\Builder|Attachment whereMd5($value) - * @method static \Illuminate\Database\Eloquent\Builder|Attachment whereMime($value) - * @method static \Illuminate\Database\Eloquent\Builder|Attachment whereSize($value) - * @method static \Illuminate\Database\Eloquent\Builder|Attachment whereTitle($value) - * @method static \Illuminate\Database\Eloquent\Builder|Attachment whereUpdatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|Attachment whereUploaded($value) - * @method static \Illuminate\Database\Eloquent\Builder|Attachment whereUserId($value) - * @method static Builder|Attachment withTrashed() - * @method static Builder|Attachment withoutTrashed() - * - * @property int $user_group_id - * - * @method static \Illuminate\Database\Eloquent\Builder|Attachment whereUserGroupId($value) - * - * @mixin Eloquent + * @mixin IdeHelperAttachment */ class Attachment extends Model { diff --git a/app/Models/AuditLogEntry.php b/app/Models/AuditLogEntry.php index cc2a93b2e4..9490d7302e 100644 --- a/app/Models/AuditLogEntry.php +++ b/app/Models/AuditLogEntry.php @@ -24,53 +24,14 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; -use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\MorphTo; use Illuminate\Database\Eloquent\SoftDeletes; /** - * Class AuditLogEntry - * - * @property \Eloquent|Model $auditable - * @property \Eloquent|Model $changer - * - * @method static Builder|AuditLogEntry newModelQuery() - * @method static Builder|AuditLogEntry newQuery() - * @method static \Illuminate\Database\Query\Builder|AuditLogEntry onlyTrashed() - * @method static Builder|AuditLogEntry query() - * @method static \Illuminate\Database\Query\Builder|AuditLogEntry withTrashed() - * @method static \Illuminate\Database\Query\Builder|AuditLogEntry withoutTrashed() - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property int $auditable_id - * @property string $auditable_type - * @property int $changer_id - * @property string $changer_type - * @property string $action - * @property null|array $before - * @property null|array $after - * - * @method static Builder|AuditLogEntry whereAction($value) - * @method static Builder|AuditLogEntry whereAfter($value) - * @method static Builder|AuditLogEntry whereAuditableId($value) - * @method static Builder|AuditLogEntry whereAuditableType($value) - * @method static Builder|AuditLogEntry whereBefore($value) - * @method static Builder|AuditLogEntry whereChangerId($value) - * @method static Builder|AuditLogEntry whereChangerType($value) - * @method static Builder|AuditLogEntry whereCreatedAt($value) - * @method static Builder|AuditLogEntry whereDeletedAt($value) - * @method static Builder|AuditLogEntry whereId($value) - * @method static Builder|AuditLogEntry whereUpdatedAt($value) - * - * @mixin Eloquent + * @mixin IdeHelperAuditLogEntry */ class AuditLogEntry extends Model { diff --git a/app/Models/AutoBudget.php b/app/Models/AutoBudget.php index ba274a2f32..a61eaa6a1f 100644 --- a/app/Models/AutoBudget.php +++ b/app/Models/AutoBudget.php @@ -24,47 +24,14 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Database\Query\Builder; /** - * FireflyIII\Models\AutoBudget - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property int $budget_id - * @property int $transaction_currency_id - * @property int|string $auto_budget_type - * @property string $amount - * @property string $period - * @property Budget $budget - * @property TransactionCurrency $transactionCurrency - * - * @method static \Illuminate\Database\Eloquent\Builder|AutoBudget newModelQuery() - * @method static \Illuminate\Database\Eloquent\Builder|AutoBudget newQuery() - * @method static Builder|AutoBudget onlyTrashed() - * @method static \Illuminate\Database\Eloquent\Builder|AutoBudget query() - * @method static \Illuminate\Database\Eloquent\Builder|AutoBudget whereAmount($value) - * @method static \Illuminate\Database\Eloquent\Builder|AutoBudget whereAutoBudgetType($value) - * @method static \Illuminate\Database\Eloquent\Builder|AutoBudget whereBudgetId($value) - * @method static \Illuminate\Database\Eloquent\Builder|AutoBudget whereCreatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|AutoBudget whereDeletedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|AutoBudget whereId($value) - * @method static \Illuminate\Database\Eloquent\Builder|AutoBudget wherePeriod($value) - * @method static \Illuminate\Database\Eloquent\Builder|AutoBudget whereTransactionCurrencyId($value) - * @method static \Illuminate\Database\Eloquent\Builder|AutoBudget whereUpdatedAt($value) - * @method static Builder|AutoBudget withTrashed() - * @method static Builder|AutoBudget withoutTrashed() - * - * @mixin Eloquent + * @mixin IdeHelperAutoBudget */ class AutoBudget extends Model { diff --git a/app/Models/AvailableBudget.php b/app/Models/AvailableBudget.php index 8a3d8c7e91..682e9ee650 100644 --- a/app/Models/AvailableBudget.php +++ b/app/Models/AvailableBudget.php @@ -23,8 +23,6 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; @@ -32,45 +30,10 @@ use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Database\Query\Builder; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * FireflyIII\Models\AvailableBudget - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property int $user_id - * @property int $transaction_currency_id - * @property string $amount - * @property Carbon $start_date - * @property Carbon $end_date - * @property TransactionCurrency $transactionCurrency - * @property User $user - * - * @method static \Illuminate\Database\Eloquent\Builder|AvailableBudget newModelQuery() - * @method static \Illuminate\Database\Eloquent\Builder|AvailableBudget newQuery() - * @method static Builder|AvailableBudget onlyTrashed() - * @method static \Illuminate\Database\Eloquent\Builder|AvailableBudget query() - * @method static \Illuminate\Database\Eloquent\Builder|AvailableBudget whereAmount($value) - * @method static \Illuminate\Database\Eloquent\Builder|AvailableBudget whereCreatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|AvailableBudget whereDeletedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|AvailableBudget whereEndDate($value) - * @method static \Illuminate\Database\Eloquent\Builder|AvailableBudget whereId($value) - * @method static \Illuminate\Database\Eloquent\Builder|AvailableBudget whereStartDate($value) - * @method static \Illuminate\Database\Eloquent\Builder|AvailableBudget whereTransactionCurrencyId($value) - * @method static \Illuminate\Database\Eloquent\Builder|AvailableBudget whereUpdatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|AvailableBudget whereUserId($value) - * @method static Builder|AvailableBudget withTrashed() - * @method static Builder|AvailableBudget withoutTrashed() - * - * @property int $user_group_id - * - * @method static \Illuminate\Database\Eloquent\Builder|AvailableBudget whereUserGroupId($value) - * - * @mixin Eloquent + * @mixin IdeHelperAvailableBudget */ class AvailableBudget extends Model { diff --git a/app/Models/Bill.php b/app/Models/Bill.php index 5b7e65ce61..4a120765f8 100644 --- a/app/Models/Bill.php +++ b/app/Models/Bill.php @@ -23,88 +23,20 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; use Illuminate\Database\Eloquent\Casts\Attribute; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\MorphMany; use Illuminate\Database\Eloquent\Relations\MorphToMany; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Database\Query\Builder; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * FireflyIII\Models\Bill - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property int $user_id - * @property int $transaction_currency_id - * @property string $name - * @property string $match - * @property string $amount_min - * @property string $amount_max - * @property Carbon $date - * @property null|Carbon $end_date - * @property null|Carbon $extension_date - * @property string $repeat_freq - * @property int $skip - * @property bool $automatch - * @property bool $active - * @property bool $name_encrypted - * @property bool $match_encrypted - * @property int $order - * @property Attachment[]|Collection $attachments - * @property null|int $attachments_count - * @property Collection|Note[] $notes - * @property null|int $notes_count - * @property Collection|ObjectGroup[] $objectGroups - * @property null|int $object_groups_count - * @property null|TransactionCurrency $transactionCurrency - * @property Collection|TransactionJournal[] $transactionJournals - * @property null|int $transaction_journals_count - * @property User $user - * - * @method static \Illuminate\Database\Eloquent\Builder|Bill newModelQuery() - * @method static \Illuminate\Database\Eloquent\Builder|Bill newQuery() - * @method static Builder|Bill onlyTrashed() - * @method static \Illuminate\Database\Eloquent\Builder|Bill query() - * @method static \Illuminate\Database\Eloquent\Builder|Bill whereActive($value) - * @method static \Illuminate\Database\Eloquent\Builder|Bill whereAmountMax($value) - * @method static \Illuminate\Database\Eloquent\Builder|Bill whereAmountMin($value) - * @method static \Illuminate\Database\Eloquent\Builder|Bill whereAutomatch($value) - * @method static \Illuminate\Database\Eloquent\Builder|Bill whereCreatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|Bill whereDate($value) - * @method static \Illuminate\Database\Eloquent\Builder|Bill whereDeletedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|Bill whereEndDate($value) - * @method static \Illuminate\Database\Eloquent\Builder|Bill whereExtensionDate($value) - * @method static \Illuminate\Database\Eloquent\Builder|Bill whereId($value) - * @method static \Illuminate\Database\Eloquent\Builder|Bill whereMatch($value) - * @method static \Illuminate\Database\Eloquent\Builder|Bill whereMatchEncrypted($value) - * @method static \Illuminate\Database\Eloquent\Builder|Bill whereName($value) - * @method static \Illuminate\Database\Eloquent\Builder|Bill whereNameEncrypted($value) - * @method static \Illuminate\Database\Eloquent\Builder|Bill whereOrder($value) - * @method static \Illuminate\Database\Eloquent\Builder|Bill whereRepeatFreq($value) - * @method static \Illuminate\Database\Eloquent\Builder|Bill whereSkip($value) - * @method static \Illuminate\Database\Eloquent\Builder|Bill whereTransactionCurrencyId($value) - * @method static \Illuminate\Database\Eloquent\Builder|Bill whereUpdatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|Bill whereUserId($value) - * @method static Builder|Bill withTrashed() - * @method static Builder|Bill withoutTrashed() - * - * @property int $user_group_id - * - * @method static \Illuminate\Database\Eloquent\Builder|Bill whereUserGroupId($value) - * - * @mixin Eloquent + * @mixin IdeHelperBill */ class Bill extends Model { diff --git a/app/Models/Budget.php b/app/Models/Budget.php index 3c13dba221..6293c5de8e 100644 --- a/app/Models/Budget.php +++ b/app/Models/Budget.php @@ -23,71 +23,20 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; use Illuminate\Database\Eloquent\Casts\Attribute; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\MorphMany; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Database\Query\Builder; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * FireflyIII\Models\Budget - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property int $user_id - * @property string $name - * @property bool $active - * @property bool $encrypted - * @property int $order - * @property Attachment[]|Collection $attachments - * @property null|int $attachments_count - * @property AutoBudget[]|Collection $autoBudgets - * @property null|int $auto_budgets_count - * @property BudgetLimit[]|Collection $budgetlimits - * @property null|int $budgetlimits_count - * @property Collection|TransactionJournal[] $transactionJournals - * @property null|int $transaction_journals_count - * @property Collection|Transaction[] $transactions - * @property null|int $transactions_count - * @property User $user - * - * @method static \Illuminate\Database\Eloquent\Builder|Budget newModelQuery() - * @method static \Illuminate\Database\Eloquent\Builder|Budget newQuery() - * @method static Builder|Budget onlyTrashed() - * @method static \Illuminate\Database\Eloquent\Builder|Budget query() - * @method static \Illuminate\Database\Eloquent\Builder|Budget whereActive($value) - * @method static \Illuminate\Database\Eloquent\Builder|Budget whereCreatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|Budget whereDeletedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|Budget whereEncrypted($value) - * @method static \Illuminate\Database\Eloquent\Builder|Budget whereId($value) - * @method static \Illuminate\Database\Eloquent\Builder|Budget whereName($value) - * @method static \Illuminate\Database\Eloquent\Builder|Budget whereOrder($value) - * @method static \Illuminate\Database\Eloquent\Builder|Budget whereUpdatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|Budget whereUserId($value) - * @method static Builder|Budget withTrashed() - * @method static Builder|Budget withoutTrashed() - * - * @property string $email - * @property int $user_group_id - * - * @method static \Illuminate\Database\Eloquent\Builder|Budget whereUserGroupId($value) - * - * @property Collection|Note[] $notes - * @property null|int $notes_count - * - * @mixin Eloquent + * @mixin IdeHelperBudget */ class Budget extends Model { diff --git a/app/Models/BudgetLimit.php b/app/Models/BudgetLimit.php index 58bc881614..379f095dfa 100644 --- a/app/Models/BudgetLimit.php +++ b/app/Models/BudgetLimit.php @@ -23,50 +23,17 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Events\Model\BudgetLimit\Created; use FireflyIII\Events\Model\BudgetLimit\Deleted; use FireflyIII\Events\Model\BudgetLimit\Updated; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; -use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * FireflyIII\Models\BudgetLimit - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property int $budget_id - * @property int $transaction_currency_id - * @property Carbon $start_date - * @property null|Carbon $end_date - * @property string $amount - * @property string $spent - * @property null|string $period - * @property int|string $generated - * @property Budget $budget - * @property null|TransactionCurrency $transactionCurrency - * - * @method static Builder|BudgetLimit newModelQuery() - * @method static Builder|BudgetLimit newQuery() - * @method static Builder|BudgetLimit query() - * @method static Builder|BudgetLimit whereAmount($value) - * @method static Builder|BudgetLimit whereBudgetId($value) - * @method static Builder|BudgetLimit whereCreatedAt($value) - * @method static Builder|BudgetLimit whereEndDate($value) - * @method static Builder|BudgetLimit whereGenerated($value) - * @method static Builder|BudgetLimit whereId($value) - * @method static Builder|BudgetLimit wherePeriod($value) - * @method static Builder|BudgetLimit whereStartDate($value) - * @method static Builder|BudgetLimit whereTransactionCurrencyId($value) - * @method static Builder|BudgetLimit whereUpdatedAt($value) - * - * @mixin Eloquent + * @mixin IdeHelperBudgetLimit */ class BudgetLimit extends Model { diff --git a/app/Models/Category.php b/app/Models/Category.php index 007d95d0f5..ec192fe49e 100644 --- a/app/Models/Category.php +++ b/app/Models/Category.php @@ -23,60 +23,18 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\MorphMany; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Database\Query\Builder; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * FireflyIII\Models\Category - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property int $user_id - * @property string $name - * @property Carbon $lastActivity - * @property bool $encrypted - * @property Attachment[]|Collection $attachments - * @property null|int $attachments_count - * @property Collection|Note[] $notes - * @property null|int $notes_count - * @property Collection|TransactionJournal[] $transactionJournals - * @property null|int $transaction_journals_count - * @property Collection|Transaction[] $transactions - * @property null|int $transactions_count - * @property User $user - * - * @method static \Illuminate\Database\Eloquent\Builder|Category newModelQuery() - * @method static \Illuminate\Database\Eloquent\Builder|Category newQuery() - * @method static Builder|Category onlyTrashed() - * @method static \Illuminate\Database\Eloquent\Builder|Category query() - * @method static \Illuminate\Database\Eloquent\Builder|Category whereCreatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|Category whereDeletedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|Category whereEncrypted($value) - * @method static \Illuminate\Database\Eloquent\Builder|Category whereId($value) - * @method static \Illuminate\Database\Eloquent\Builder|Category whereName($value) - * @method static \Illuminate\Database\Eloquent\Builder|Category whereUpdatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|Category whereUserId($value) - * @method static Builder|Category withTrashed() - * @method static Builder|Category withoutTrashed() - * - * @property int $user_group_id - * - * @method static \Illuminate\Database\Eloquent\Builder|Category whereUserGroupId($value) - * - * @mixin Eloquent + * @mixin IdeHelperCategory */ class Category extends Model { diff --git a/app/Models/Configuration.php b/app/Models/Configuration.php index 9d07d927f0..dafa629ea5 100644 --- a/app/Models/Configuration.php +++ b/app/Models/Configuration.php @@ -23,37 +23,12 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Database\Query\Builder; /** - * FireflyIII\Models\Configuration - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property string $name - * @property mixed $data - * - * @method static \Illuminate\Database\Eloquent\Builder|Configuration newModelQuery() - * @method static \Illuminate\Database\Eloquent\Builder|Configuration newQuery() - * @method static Builder|Configuration onlyTrashed() - * @method static \Illuminate\Database\Eloquent\Builder|Configuration query() - * @method static \Illuminate\Database\Eloquent\Builder|Configuration whereCreatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|Configuration whereData($value) - * @method static \Illuminate\Database\Eloquent\Builder|Configuration whereDeletedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|Configuration whereId($value) - * @method static \Illuminate\Database\Eloquent\Builder|Configuration whereName($value) - * @method static \Illuminate\Database\Eloquent\Builder|Configuration whereUpdatedAt($value) - * @method static Builder|Configuration withTrashed() - * @method static Builder|Configuration withoutTrashed() - * - * @mixin Eloquent + * @mixin IdeHelperConfiguration */ class Configuration extends Model { diff --git a/app/Models/CurrencyExchangeRate.php b/app/Models/CurrencyExchangeRate.php index 85e1f32252..f451c82da6 100644 --- a/app/Models/CurrencyExchangeRate.php +++ b/app/Models/CurrencyExchangeRate.php @@ -23,56 +23,16 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; -use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\SoftDeletes; /** - * Class CurrencyExchangeRate - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|string $deleted_at - * @property int $user_id - * @property int $from_currency_id - * @property int $to_currency_id - * @property Carbon $date - * @property string $rate - * @property string $user_rate - * @property TransactionCurrency $fromCurrency - * @property TransactionCurrency $toCurrency - * @property User $user - * - * @method static Builder|CurrencyExchangeRate newModelQuery() - * @method static Builder|CurrencyExchangeRate newQuery() - * @method static Builder|CurrencyExchangeRate query() - * @method static Builder|CurrencyExchangeRate whereCreatedAt($value) - * @method static Builder|CurrencyExchangeRate whereDate($value) - * @method static Builder|CurrencyExchangeRate whereDeletedAt($value) - * @method static Builder|CurrencyExchangeRate whereFromCurrencyId($value) - * @method static Builder|CurrencyExchangeRate whereId($value) - * @method static Builder|CurrencyExchangeRate whereRate($value) - * @method static Builder|CurrencyExchangeRate whereToCurrencyId($value) - * @method static Builder|CurrencyExchangeRate whereUpdatedAt($value) - * @method static Builder|CurrencyExchangeRate whereUserId($value) - * @method static Builder|CurrencyExchangeRate whereUserRate($value) - * - * @property int $user_group_id - * - * @method static Builder|CurrencyExchangeRate whereUserGroupId($value) - * @method static Builder|CurrencyExchangeRate onlyTrashed() - * @method static Builder|CurrencyExchangeRate withTrashed() - * @method static Builder|CurrencyExchangeRate withoutTrashed() - * - * @mixin Eloquent + * @mixin IdeHelperCurrencyExchangeRate */ class CurrencyExchangeRate extends Model { diff --git a/app/Models/GroupMembership.php b/app/Models/GroupMembership.php index add3a01472..208476f09d 100644 --- a/app/Models/GroupMembership.php +++ b/app/Models/GroupMembership.php @@ -24,42 +24,15 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; -use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; /** - * Class GroupMembership - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|string $deleted_at - * @property int $user_id - * @property int $user_group_id - * @property int $user_role_id - * @property User $user - * @property UserGroup $userGroup - * @property UserRole $userRole - * - * @method static Builder|GroupMembership newModelQuery() - * @method static Builder|GroupMembership newQuery() - * @method static Builder|GroupMembership query() - * @method static Builder|GroupMembership whereCreatedAt($value) - * @method static Builder|GroupMembership whereDeletedAt($value) - * @method static Builder|GroupMembership whereId($value) - * @method static Builder|GroupMembership whereUpdatedAt($value) - * @method static Builder|GroupMembership whereUserGroupId($value) - * @method static Builder|GroupMembership whereUserId($value) - * @method static Builder|GroupMembership whereUserRoleId($value) - * - * @mixin Eloquent + * @mixin IdeHelperGroupMembership */ class GroupMembership extends Model { diff --git a/app/Models/InvitedUser.php b/app/Models/InvitedUser.php index 583f6b0a20..edc06b8f2b 100644 --- a/app/Models/InvitedUser.php +++ b/app/Models/InvitedUser.php @@ -24,46 +24,15 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; -use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * Class InvitedUser - * - * @property User $user - * - * @method static Builder|InvitedUser newModelQuery() - * @method static Builder|InvitedUser newQuery() - * @method static Builder|InvitedUser query() - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property int $user_id - * @property string $email - * @property string $invite_code - * @property Carbon $expires - * @property bool $redeemed - * - * @method static Builder|InvitedUser whereCreatedAt($value) - * @method static Builder|InvitedUser whereEmail($value) - * @method static Builder|InvitedUser whereExpires($value) - * @method static Builder|InvitedUser whereId($value) - * @method static Builder|InvitedUser whereInviteCode($value) - * @method static Builder|InvitedUser whereRedeemed($value) - * @method static Builder|InvitedUser whereUpdatedAt($value) - * @method static Builder|InvitedUser whereUserId($value) - * - * @property mixed $user_group_id - * - * @mixin Eloquent + * @mixin IdeHelperInvitedUser */ class InvitedUser extends Model { diff --git a/app/Models/LinkType.php b/app/Models/LinkType.php index eb3f5f9f15..23f4982e08 100644 --- a/app/Models/LinkType.php +++ b/app/Models/LinkType.php @@ -23,47 +23,14 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Database\Query\Builder; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * FireflyIII\Models\LinkType - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property string $name - * @property string $outward - * @property string $inward - * @property int $journalCount - * @property bool $editable - * @property Collection|TransactionJournalLink[] $transactionJournalLinks - * @property null|int $transaction_journal_links_count - * - * @method static \Illuminate\Database\Eloquent\Builder|LinkType newModelQuery() - * @method static \Illuminate\Database\Eloquent\Builder|LinkType newQuery() - * @method static Builder|LinkType onlyTrashed() - * @method static \Illuminate\Database\Eloquent\Builder|LinkType query() - * @method static \Illuminate\Database\Eloquent\Builder|LinkType whereCreatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|LinkType whereDeletedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|LinkType whereEditable($value) - * @method static \Illuminate\Database\Eloquent\Builder|LinkType whereId($value) - * @method static \Illuminate\Database\Eloquent\Builder|LinkType whereInward($value) - * @method static \Illuminate\Database\Eloquent\Builder|LinkType whereName($value) - * @method static \Illuminate\Database\Eloquent\Builder|LinkType whereOutward($value) - * @method static \Illuminate\Database\Eloquent\Builder|LinkType whereUpdatedAt($value) - * @method static Builder|LinkType withTrashed() - * @method static Builder|LinkType withoutTrashed() - * - * @mixin Eloquent + * @mixin IdeHelperLinkType */ class LinkType extends Model { diff --git a/app/Models/Location.php b/app/Models/Location.php index 10962cb375..fc5d4639c3 100644 --- a/app/Models/Location.php +++ b/app/Models/Location.php @@ -24,49 +24,14 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; -use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Casts\Attribute; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\MorphMany; use Illuminate\Database\Eloquent\Relations\MorphTo; /** - * FireflyIII\Models\Location - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property int $locatable_id - * @property string $locatable_type - * @property null|float $latitude - * @property null|float $longitude - * @property null|int $zoom_level - * @property Account[]|Collection $accounts - * @property null|int $accounts_count - * @property \Eloquent|Model $locatable - * - * @method static Builder|Location newModelQuery() - * @method static Builder|Location newQuery() - * @method static Builder|Location query() - * @method static Builder|Location whereCreatedAt($value) - * @method static Builder|Location whereDeletedAt($value) - * @method static Builder|Location whereId($value) - * @method static Builder|Location whereLatitude($value) - * @method static Builder|Location whereLocatableId($value) - * @method static Builder|Location whereLocatableType($value) - * @method static Builder|Location whereLongitude($value) - * @method static Builder|Location whereUpdatedAt($value) - * @method static Builder|Location whereZoomLevel($value) - * - * @property Collection $transactionJournals - * @property null|int $transaction_journals_count - * - * @mixin Eloquent + * @mixin IdeHelperLocation */ class Location extends Model { diff --git a/app/Models/Note.php b/app/Models/Note.php index d1fb218940..5afbfbed76 100644 --- a/app/Models/Note.php +++ b/app/Models/Note.php @@ -23,44 +23,14 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\MorphTo; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Database\Query\Builder; /** - * FireflyIII\Models\Note - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property int $noteable_id - * @property string $noteable_type - * @property null|string $title - * @property null|string $text - * @property \Eloquent|Model $noteable - * - * @method static \Illuminate\Database\Eloquent\Builder|Note newModelQuery() - * @method static \Illuminate\Database\Eloquent\Builder|Note newQuery() - * @method static Builder|Note onlyTrashed() - * @method static \Illuminate\Database\Eloquent\Builder|Note query() - * @method static \Illuminate\Database\Eloquent\Builder|Note whereCreatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|Note whereDeletedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|Note whereId($value) - * @method static \Illuminate\Database\Eloquent\Builder|Note whereNoteableId($value) - * @method static \Illuminate\Database\Eloquent\Builder|Note whereNoteableType($value) - * @method static \Illuminate\Database\Eloquent\Builder|Note whereText($value) - * @method static \Illuminate\Database\Eloquent\Builder|Note whereTitle($value) - * @method static \Illuminate\Database\Eloquent\Builder|Note whereUpdatedAt($value) - * @method static Builder|Note withTrashed() - * @method static Builder|Note withoutTrashed() - * - * @mixin Eloquent + * @mixin IdeHelperNote */ class Note extends Model { diff --git a/app/Models/ObjectGroup.php b/app/Models/ObjectGroup.php index 776ed7b244..7ec9a91ad3 100644 --- a/app/Models/ObjectGroup.php +++ b/app/Models/ObjectGroup.php @@ -24,53 +24,17 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; -use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Casts\Attribute; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\MorphToMany; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * FireflyIII\Models\ObjectGroup - * - * @property int $id - * @property int $user_id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property string $title - * @property int $order - * @property Account[]|Collection $accounts - * @property null|int $accounts_count - * @property Bill[]|Collection $bills - * @property null|int $bills_count - * @property Collection|PiggyBank[] $piggyBanks - * @property null|int $piggy_banks_count - * @property User $user - * - * @method static Builder|ObjectGroup newModelQuery() - * @method static Builder|ObjectGroup newQuery() - * @method static Builder|ObjectGroup query() - * @method static Builder|ObjectGroup whereCreatedAt($value) - * @method static Builder|ObjectGroup whereDeletedAt($value) - * @method static Builder|ObjectGroup whereId($value) - * @method static Builder|ObjectGroup whereOrder($value) - * @method static Builder|ObjectGroup whereTitle($value) - * @method static Builder|ObjectGroup whereUpdatedAt($value) - * @method static Builder|ObjectGroup whereUserId($value) - * - * @property int $user_group_id - * - * @method static Builder|ObjectGroup whereUserGroupId($value) - * - * @mixin Eloquent + * @mixin IdeHelperObjectGroup */ class ObjectGroup extends Model { diff --git a/app/Models/PiggyBank.php b/app/Models/PiggyBank.php index 0ae5b7432d..7410d2138d 100644 --- a/app/Models/PiggyBank.php +++ b/app/Models/PiggyBank.php @@ -23,67 +23,18 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Casts\Attribute; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\MorphMany; use Illuminate\Database\Eloquent\Relations\MorphToMany; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Database\Query\Builder; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * FireflyIII\Models\PiggyBank - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property int $account_id - * @property string $name - * @property string $targetamount - * @property null|Carbon $startdate - * @property null|Carbon $targetdate - * @property int $order - * @property bool $active - * @property bool $encrypted - * @property Account $account - * @property Attachment[]|Collection $attachments - * @property null|int $attachments_count - * @property Collection|Note[] $notes - * @property null|int $notes_count - * @property Collection|ObjectGroup[] $objectGroups - * @property null|int $object_groups_count - * @property Collection|PiggyBankEvent[] $piggyBankEvents - * @property null|int $piggy_bank_events_count - * @property Collection|PiggyBankRepetition[] $piggyBankRepetitions - * @property null|int $piggy_bank_repetitions_count - * - * @method static \Illuminate\Database\Eloquent\Builder|PiggyBank newModelQuery() - * @method static \Illuminate\Database\Eloquent\Builder|PiggyBank newQuery() - * @method static Builder|PiggyBank onlyTrashed() - * @method static \Illuminate\Database\Eloquent\Builder|PiggyBank query() - * @method static \Illuminate\Database\Eloquent\Builder|PiggyBank whereAccountId($value) - * @method static \Illuminate\Database\Eloquent\Builder|PiggyBank whereActive($value) - * @method static \Illuminate\Database\Eloquent\Builder|PiggyBank whereCreatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|PiggyBank whereDeletedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|PiggyBank whereEncrypted($value) - * @method static \Illuminate\Database\Eloquent\Builder|PiggyBank whereId($value) - * @method static \Illuminate\Database\Eloquent\Builder|PiggyBank whereName($value) - * @method static \Illuminate\Database\Eloquent\Builder|PiggyBank whereOrder($value) - * @method static \Illuminate\Database\Eloquent\Builder|PiggyBank whereStartdate($value) - * @method static \Illuminate\Database\Eloquent\Builder|PiggyBank whereTargetamount($value) - * @method static \Illuminate\Database\Eloquent\Builder|PiggyBank whereTargetdate($value) - * @method static \Illuminate\Database\Eloquent\Builder|PiggyBank whereUpdatedAt($value) - * @method static Builder|PiggyBank withTrashed() - * @method static Builder|PiggyBank withoutTrashed() - * - * @mixin Eloquent + * @mixin IdeHelperPiggyBank */ class PiggyBank extends Model { diff --git a/app/Models/PiggyBankEvent.php b/app/Models/PiggyBankEvent.php index 0fc4268c03..2e06cb55a4 100644 --- a/app/Models/PiggyBankEvent.php +++ b/app/Models/PiggyBankEvent.php @@ -23,39 +23,13 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; -use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; /** - * FireflyIII\Models\PiggyBankEvent - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property int $piggy_bank_id - * @property null|int $transaction_journal_id - * @property Carbon $date - * @property string $amount - * @property PiggyBank $piggyBank - * @property null|TransactionJournal $transactionJournal - * - * @method static Builder|PiggyBankEvent newModelQuery() - * @method static Builder|PiggyBankEvent newQuery() - * @method static Builder|PiggyBankEvent query() - * @method static Builder|PiggyBankEvent whereAmount($value) - * @method static Builder|PiggyBankEvent whereCreatedAt($value) - * @method static Builder|PiggyBankEvent whereDate($value) - * @method static Builder|PiggyBankEvent whereId($value) - * @method static Builder|PiggyBankEvent wherePiggyBankId($value) - * @method static Builder|PiggyBankEvent whereTransactionJournalId($value) - * @method static Builder|PiggyBankEvent whereUpdatedAt($value) - * - * @mixin Eloquent + * @mixin IdeHelperPiggyBankEvent */ class PiggyBankEvent extends Model { diff --git a/app/Models/PiggyBankRepetition.php b/app/Models/PiggyBankRepetition.php index 5ef34f96ad..b85e494b73 100644 --- a/app/Models/PiggyBankRepetition.php +++ b/app/Models/PiggyBankRepetition.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace FireflyIII\Models; use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Eloquent\Casts\Attribute; @@ -32,31 +31,7 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; /** - * FireflyIII\Models\PiggyBankRepetition - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property int $piggy_bank_id - * @property null|Carbon $startdate - * @property null|Carbon $targetdate - * @property string $currentamount - * @property PiggyBank $piggyBank - * - * @method static EloquentBuilder|PiggyBankRepetition newModelQuery() - * @method static EloquentBuilder|PiggyBankRepetition newQuery() - * @method static EloquentBuilder|PiggyBankRepetition onDates(Carbon $start, Carbon $target) - * @method static EloquentBuilder|PiggyBankRepetition query() - * @method static EloquentBuilder|PiggyBankRepetition relevantOnDate(Carbon $date) - * @method static EloquentBuilder|PiggyBankRepetition whereCreatedAt($value) - * @method static EloquentBuilder|PiggyBankRepetition whereCurrentamount($value) - * @method static EloquentBuilder|PiggyBankRepetition whereId($value) - * @method static EloquentBuilder|PiggyBankRepetition wherePiggyBankId($value) - * @method static EloquentBuilder|PiggyBankRepetition whereStartdate($value) - * @method static EloquentBuilder|PiggyBankRepetition whereTargetdate($value) - * @method static EloquentBuilder|PiggyBankRepetition whereUpdatedAt($value) - * - * @mixin Eloquent + * @mixin IdeHelperPiggyBankRepetition */ class PiggyBankRepetition extends Model { diff --git a/app/Models/Preference.php b/app/Models/Preference.php index 06fe401c83..233d11dc79 100644 --- a/app/Models/Preference.php +++ b/app/Models/Preference.php @@ -23,40 +23,15 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; -use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * FireflyIII\Models\Preference - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property int $user_id - * @property string $name - * @property null|array|bool|int|string $data - * @property User $user - * - * @method static Builder|Preference newModelQuery() - * @method static Builder|Preference newQuery() - * @method static Builder|Preference query() - * @method static Builder|Preference whereCreatedAt($value) - * @method static Builder|Preference whereData($value) - * @method static Builder|Preference whereId($value) - * @method static Builder|Preference whereName($value) - * @method static Builder|Preference whereUpdatedAt($value) - * @method static Builder|Preference whereUserId($value) - * - * @property mixed $user_group_id - * - * @mixin Eloquent + * @mixin IdeHelperPreference */ class Preference extends Model { diff --git a/app/Models/Recurrence.php b/app/Models/Recurrence.php index e6a1d8fed1..b4cc775bd4 100644 --- a/app/Models/Recurrence.php +++ b/app/Models/Recurrence.php @@ -23,78 +23,19 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; use Illuminate\Database\Eloquent\Casts\Attribute; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\MorphMany; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Database\Query\Builder; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * FireflyIII\Models\Recurrence - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property int $user_id - * @property int $transaction_type_id - * @property string $title - * @property string $description - * @property null|Carbon $first_date - * @property null|Carbon $repeat_until - * @property null|Carbon $latest_date - * @property int|string $repetitions - * @property bool $apply_rules - * @property bool $active - * @property Attachment[]|Collection $attachments - * @property null|int $attachments_count - * @property Collection|Note[] $notes - * @property null|int $notes_count - * @property Collection|RecurrenceMeta[] $recurrenceMeta - * @property null|int $recurrence_meta_count - * @property Collection|RecurrenceRepetition[] $recurrenceRepetitions - * @property null|int $recurrence_repetitions_count - * @property Collection|RecurrenceTransaction[] $recurrenceTransactions - * @property null|int $recurrence_transactions_count - * @property TransactionCurrency $transactionCurrency - * @property TransactionType $transactionType - * @property User $user - * - * @method static \Illuminate\Database\Eloquent\Builder|Recurrence newModelQuery() - * @method static \Illuminate\Database\Eloquent\Builder|Recurrence newQuery() - * @method static Builder|Recurrence onlyTrashed() - * @method static \Illuminate\Database\Eloquent\Builder|Recurrence query() - * @method static \Illuminate\Database\Eloquent\Builder|Recurrence whereActive($value) - * @method static \Illuminate\Database\Eloquent\Builder|Recurrence whereApplyRules($value) - * @method static \Illuminate\Database\Eloquent\Builder|Recurrence whereCreatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|Recurrence whereDeletedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|Recurrence whereDescription($value) - * @method static \Illuminate\Database\Eloquent\Builder|Recurrence whereFirstDate($value) - * @method static \Illuminate\Database\Eloquent\Builder|Recurrence whereId($value) - * @method static \Illuminate\Database\Eloquent\Builder|Recurrence whereLatestDate($value) - * @method static \Illuminate\Database\Eloquent\Builder|Recurrence whereRepeatUntil($value) - * @method static \Illuminate\Database\Eloquent\Builder|Recurrence whereRepetitions($value) - * @method static \Illuminate\Database\Eloquent\Builder|Recurrence whereTitle($value) - * @method static \Illuminate\Database\Eloquent\Builder|Recurrence whereTransactionTypeId($value) - * @method static \Illuminate\Database\Eloquent\Builder|Recurrence whereUpdatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|Recurrence whereUserId($value) - * @method static Builder|Recurrence withTrashed() - * @method static Builder|Recurrence withoutTrashed() - * - * @property int $user_group_id - * - * @method static \Illuminate\Database\Eloquent\Builder|Recurrence whereUserGroupId($value) - * - * @mixin Eloquent + * @mixin IdeHelperRecurrence */ class Recurrence extends Model { diff --git a/app/Models/RecurrenceMeta.php b/app/Models/RecurrenceMeta.php index d3d34abf10..84b5caf309 100644 --- a/app/Models/RecurrenceMeta.php +++ b/app/Models/RecurrenceMeta.php @@ -23,42 +23,14 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Database\Query\Builder; /** - * FireflyIII\Models\RecurrenceMeta - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property int $recurrence_id - * @property string $name - * @property mixed $value - * @property Recurrence $recurrence - * - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceMeta newModelQuery() - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceMeta newQuery() - * @method static Builder|RecurrenceMeta onlyTrashed() - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceMeta query() - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceMeta whereCreatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceMeta whereDeletedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceMeta whereId($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceMeta whereName($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceMeta whereRecurrenceId($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceMeta whereUpdatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceMeta whereValue($value) - * @method static Builder|RecurrenceMeta withTrashed() - * @method static Builder|RecurrenceMeta withoutTrashed() - * - * @mixin Eloquent + * @mixin IdeHelperRecurrenceMeta */ class RecurrenceMeta extends Model { diff --git a/app/Models/RecurrenceRepetition.php b/app/Models/RecurrenceRepetition.php index c63a456434..e669ed02a3 100644 --- a/app/Models/RecurrenceRepetition.php +++ b/app/Models/RecurrenceRepetition.php @@ -23,46 +23,14 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Database\Query\Builder; /** - * FireflyIII\Models\RecurrenceRepetition - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property int $recurrence_id - * @property string $repetition_type - * @property string $repetition_moment - * @property int $repetition_skip - * @property int $weekend - * @property Recurrence $recurrence - * - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceRepetition newModelQuery() - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceRepetition newQuery() - * @method static Builder|RecurrenceRepetition onlyTrashed() - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceRepetition query() - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceRepetition whereCreatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceRepetition whereDeletedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceRepetition whereId($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceRepetition whereRecurrenceId($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceRepetition whereRepetitionMoment($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceRepetition whereRepetitionSkip($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceRepetition whereRepetitionType($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceRepetition whereUpdatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceRepetition whereWeekend($value) - * @method static Builder|RecurrenceRepetition withTrashed() - * @method static Builder|RecurrenceRepetition withoutTrashed() - * - * @mixin Eloquent + * @mixin IdeHelperRecurrenceRepetition */ class RecurrenceRepetition extends Model { diff --git a/app/Models/RecurrenceTransaction.php b/app/Models/RecurrenceTransaction.php index d201f679f1..90870e737f 100644 --- a/app/Models/RecurrenceTransaction.php +++ b/app/Models/RecurrenceTransaction.php @@ -23,67 +23,15 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Casts\Attribute; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Database\Query\Builder; /** - * FireflyIII\Models\RecurrenceTransaction - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property int $recurrence_id - * @property int $transaction_currency_id - * @property null|int|string $foreign_currency_id - * @property int $source_id - * @property int $destination_id - * @property string $amount - * @property string $foreign_amount - * @property string $description - * @property Account $destinationAccount - * @property null|TransactionCurrency $foreignCurrency - * @property Recurrence $recurrence - * @property Collection|RecurrenceTransactionMeta[] $recurrenceTransactionMeta - * @property null|int $recurrence_transaction_meta_count - * @property Account $sourceAccount - * @property TransactionCurrency $transactionCurrency - * - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransaction newModelQuery() - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransaction newQuery() - * @method static Builder|RecurrenceTransaction onlyTrashed() - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransaction query() - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransaction whereAmount($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransaction whereCreatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransaction whereDeletedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransaction whereDescription($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransaction whereDestinationId($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransaction whereForeignAmount($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransaction whereForeignCurrencyId($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransaction whereId($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransaction whereRecurrenceId($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransaction whereSourceId($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransaction whereTransactionCurrencyId($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransaction whereUpdatedAt($value) - * @method static Builder|RecurrenceTransaction withTrashed() - * @method static Builder|RecurrenceTransaction withoutTrashed() - * - * @property null|int $transaction_type_id - * - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransaction whereTransactionTypeId($value) - * - * @property null|TransactionType $transactionType - * @property mixed $user_id - * - * @mixin Eloquent + * @mixin IdeHelperRecurrenceTransaction */ class RecurrenceTransaction extends Model { diff --git a/app/Models/RecurrenceTransactionMeta.php b/app/Models/RecurrenceTransactionMeta.php index 6bb4eea372..9cb8c0c0d6 100644 --- a/app/Models/RecurrenceTransactionMeta.php +++ b/app/Models/RecurrenceTransactionMeta.php @@ -23,42 +23,14 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Database\Query\Builder; /** - * FireflyIII\Models\RecurrenceTransactionMeta - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property int|string $rt_id - * @property string $name - * @property mixed $value - * @property RecurrenceTransaction $recurrenceTransaction - * - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransactionMeta newModelQuery() - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransactionMeta newQuery() - * @method static Builder|RecurrenceTransactionMeta onlyTrashed() - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransactionMeta query() - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransactionMeta whereCreatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransactionMeta whereDeletedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransactionMeta whereId($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransactionMeta whereName($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransactionMeta whereRtId($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransactionMeta whereUpdatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransactionMeta whereValue($value) - * @method static Builder|RecurrenceTransactionMeta withTrashed() - * @method static Builder|RecurrenceTransactionMeta withoutTrashed() - * - * @mixin Eloquent + * @mixin IdeHelperRecurrenceTransactionMeta */ class RecurrenceTransactionMeta extends Model { diff --git a/app/Models/Role.php b/app/Models/Role.php index 39a6216f1f..b491a5de91 100644 --- a/app/Models/Role.php +++ b/app/Models/Role.php @@ -23,38 +23,13 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\User; -use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsToMany; /** - * FireflyIII\Models\Role - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property string $name - * @property null|string $display_name - * @property null|string $description - * @property Collection|User[] $users - * @property null|int $users_count - * - * @method static Builder|Role newModelQuery() - * @method static Builder|Role newQuery() - * @method static Builder|Role query() - * @method static Builder|Role whereCreatedAt($value) - * @method static Builder|Role whereDescription($value) - * @method static Builder|Role whereDisplayName($value) - * @method static Builder|Role whereId($value) - * @method static Builder|Role whereName($value) - * @method static Builder|Role whereUpdatedAt($value) - * - * @mixin Eloquent + * @mixin IdeHelperRole */ class Role extends Model { diff --git a/app/Models/Rule.php b/app/Models/Rule.php index befb9640b1..804772e1de 100644 --- a/app/Models/Rule.php +++ b/app/Models/Rule.php @@ -23,69 +23,18 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; use Illuminate\Database\Eloquent\Casts\Attribute; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Database\Query\Builder; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * FireflyIII\Models\Rule - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property int $user_id - * @property int $rule_group_id - * @property string $title - * @property null|string $description - * @property int $order - * @property bool $active - * @property bool $stop_processing - * @property bool $strict - * @property string $action_value - * @property Collection|RuleAction[] $ruleActions - * @property null|int $rule_actions_count - * @property RuleGroup $ruleGroup - * @property Collection|RuleTrigger[] $ruleTriggers - * @property null|int $rule_triggers_count - * @property User $user - * - * @method static \Illuminate\Database\Eloquent\Builder|Rule newModelQuery() - * @method static \Illuminate\Database\Eloquent\Builder|Rule newQuery() - * @method static Builder|Rule onlyTrashed() - * @method static \Illuminate\Database\Eloquent\Builder|Rule query() - * @method static \Illuminate\Database\Eloquent\Builder|Rule whereActive($value) - * @method static \Illuminate\Database\Eloquent\Builder|Rule whereCreatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|Rule whereDeletedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|Rule whereDescription($value) - * @method static \Illuminate\Database\Eloquent\Builder|Rule whereId($value) - * @method static \Illuminate\Database\Eloquent\Builder|Rule whereOrder($value) - * @method static \Illuminate\Database\Eloquent\Builder|Rule whereRuleGroupId($value) - * @method static \Illuminate\Database\Eloquent\Builder|Rule whereStopProcessing($value) - * @method static \Illuminate\Database\Eloquent\Builder|Rule whereStrict($value) - * @method static \Illuminate\Database\Eloquent\Builder|Rule whereTitle($value) - * @method static \Illuminate\Database\Eloquent\Builder|Rule whereUpdatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|Rule whereUserId($value) - * @method static Builder|Rule withTrashed() - * @method static Builder|Rule withoutTrashed() - * - * @property int $user_group_id - * - * @method static \Illuminate\Database\Eloquent\Builder|Rule whereUserGroupId($value) - * - * @property null|UserGroup $userGroup - * - * @mixin Eloquent + * @mixin IdeHelperRule */ class Rule extends Model { diff --git a/app/Models/RuleAction.php b/app/Models/RuleAction.php index 2991bf99b2..6e63d55374 100644 --- a/app/Models/RuleAction.php +++ b/app/Models/RuleAction.php @@ -23,11 +23,8 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\TransactionRules\Expressions\ActionExpression; -use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -35,33 +32,7 @@ use Illuminate\Support\Facades\Log; use Symfony\Component\ExpressionLanguage\SyntaxError; /** - * FireflyIII\Models\RuleAction - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property int $rule_id - * @property null|string $action_type - * @property null|string $action_value - * @property int $order - * @property bool $active - * @property bool $stop_processing - * @property Rule $rule - * - * @method static Builder|RuleAction newModelQuery() - * @method static Builder|RuleAction newQuery() - * @method static Builder|RuleAction query() - * @method static Builder|RuleAction whereActionType($value) - * @method static Builder|RuleAction whereActionValue($value) - * @method static Builder|RuleAction whereActive($value) - * @method static Builder|RuleAction whereCreatedAt($value) - * @method static Builder|RuleAction whereId($value) - * @method static Builder|RuleAction whereOrder($value) - * @method static Builder|RuleAction whereRuleId($value) - * @method static Builder|RuleAction whereStopProcessing($value) - * @method static Builder|RuleAction whereUpdatedAt($value) - * - * @mixin Eloquent + * @mixin IdeHelperRuleAction */ class RuleAction extends Model { diff --git a/app/Models/RuleGroup.php b/app/Models/RuleGroup.php index a363e72919..0e5df95266 100644 --- a/app/Models/RuleGroup.php +++ b/app/Models/RuleGroup.php @@ -23,59 +23,18 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; use Illuminate\Database\Eloquent\Casts\Attribute; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Database\Query\Builder; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * FireflyIII\Models\RuleGroup - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property int $user_id - * @property null|string $title - * @property null|string $description - * @property int $order - * @property bool $active - * @property bool $stop_processing - * @property Collection|Rule[] $rules - * @property null|int $rules_count - * @property User $user - * - * @method static \Illuminate\Database\Eloquent\Builder|RuleGroup newModelQuery() - * @method static \Illuminate\Database\Eloquent\Builder|RuleGroup newQuery() - * @method static Builder|RuleGroup onlyTrashed() - * @method static \Illuminate\Database\Eloquent\Builder|RuleGroup query() - * @method static \Illuminate\Database\Eloquent\Builder|RuleGroup whereActive($value) - * @method static \Illuminate\Database\Eloquent\Builder|RuleGroup whereCreatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|RuleGroup whereDeletedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|RuleGroup whereDescription($value) - * @method static \Illuminate\Database\Eloquent\Builder|RuleGroup whereId($value) - * @method static \Illuminate\Database\Eloquent\Builder|RuleGroup whereOrder($value) - * @method static \Illuminate\Database\Eloquent\Builder|RuleGroup whereStopProcessing($value) - * @method static \Illuminate\Database\Eloquent\Builder|RuleGroup whereTitle($value) - * @method static \Illuminate\Database\Eloquent\Builder|RuleGroup whereUpdatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|RuleGroup whereUserId($value) - * @method static Builder|RuleGroup withTrashed() - * @method static Builder|RuleGroup withoutTrashed() - * - * @property int $user_group_id - * - * @method static \Illuminate\Database\Eloquent\Builder|RuleGroup whereUserGroupId($value) - * - * @mixin Eloquent + * @mixin IdeHelperRuleGroup */ class RuleGroup extends Model { diff --git a/app/Models/RuleTrigger.php b/app/Models/RuleTrigger.php index 6d14358ebd..3a83d72246 100644 --- a/app/Models/RuleTrigger.php +++ b/app/Models/RuleTrigger.php @@ -23,42 +23,13 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; -use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; /** - * FireflyIII\Models\RuleTrigger - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property int $rule_id - * @property null|string $trigger_type - * @property null|string $trigger_value - * @property int $order - * @property bool $active - * @property bool $stop_processing - * @property Rule $rule - * - * @method static Builder|RuleTrigger newModelQuery() - * @method static Builder|RuleTrigger newQuery() - * @method static Builder|RuleTrigger query() - * @method static Builder|RuleTrigger whereActive($value) - * @method static Builder|RuleTrigger whereCreatedAt($value) - * @method static Builder|RuleTrigger whereId($value) - * @method static Builder|RuleTrigger whereOrder($value) - * @method static Builder|RuleTrigger whereRuleId($value) - * @method static Builder|RuleTrigger whereStopProcessing($value) - * @method static Builder|RuleTrigger whereTriggerType($value) - * @method static Builder|RuleTrigger whereTriggerValue($value) - * @method static Builder|RuleTrigger whereUpdatedAt($value) - * - * @mixin Eloquent + * @mixin IdeHelperRuleTrigger */ class RuleTrigger extends Model { diff --git a/app/Models/Tag.php b/app/Models/Tag.php index c5fa90814f..b8f19ad4e3 100644 --- a/app/Models/Tag.php +++ b/app/Models/Tag.php @@ -23,67 +23,18 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\MorphMany; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Database\Query\Builder; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * FireflyIII\Models\Tag - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property int $user_id - * @property string $tag - * @property string $tagMode - * @property null|Carbon $date - * @property null|string $description - * @property null|float $latitude - * @property null|float $longitude - * @property null|int $zoomLevel - * @property Attachment[]|Collection $attachments - * @property null|int $attachments_count - * @property Collection|Location[] $locations - * @property null|int $locations_count - * @property Collection|TransactionJournal[] $transactionJournals - * @property null|int $transaction_journals_count - * @property User $user - * - * @method static \Illuminate\Database\Eloquent\Builder|Tag newModelQuery() - * @method static \Illuminate\Database\Eloquent\Builder|Tag newQuery() - * @method static Builder|Tag onlyTrashed() - * @method static \Illuminate\Database\Eloquent\Builder|Tag query() - * @method static \Illuminate\Database\Eloquent\Builder|Tag whereCreatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|Tag whereDate($value) - * @method static \Illuminate\Database\Eloquent\Builder|Tag whereDeletedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|Tag whereDescription($value) - * @method static \Illuminate\Database\Eloquent\Builder|Tag whereId($value) - * @method static \Illuminate\Database\Eloquent\Builder|Tag whereLatitude($value) - * @method static \Illuminate\Database\Eloquent\Builder|Tag whereLongitude($value) - * @method static \Illuminate\Database\Eloquent\Builder|Tag whereTag($value) - * @method static \Illuminate\Database\Eloquent\Builder|Tag whereTagMode($value) - * @method static \Illuminate\Database\Eloquent\Builder|Tag whereUpdatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|Tag whereUserId($value) - * @method static \Illuminate\Database\Eloquent\Builder|Tag whereZoomLevel($value) - * @method static Builder|Tag withTrashed() - * @method static Builder|Tag withoutTrashed() - * - * @property int $user_group_id - * - * @method static \Illuminate\Database\Eloquent\Builder|Tag whereUserGroupId($value) - * - * @mixin Eloquent + * @mixin IdeHelperTag */ class Tag extends Model { diff --git a/app/Models/Transaction.php b/app/Models/Transaction.php index 2b8a00c0d6..87f7b139e2 100644 --- a/app/Models/Transaction.php +++ b/app/Models/Transaction.php @@ -24,12 +24,10 @@ declare(strict_types=1); namespace FireflyIII\Models; use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use GeneaLabs\LaravelModelCaching\Traits\Cachable; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Casts\Attribute; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -37,60 +35,7 @@ use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\SoftDeletes; /** - * FireflyIII\Models\Transaction - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property bool $reconciled - * @property int $account_id - * @property int $transaction_journal_id - * @property null|string $description - * @property null|int $transaction_currency_id - * @property null|int|string $modified - * @property null|int|string $modified_foreign - * @property string $date - * @property string $max_date - * @property string $amount - * @property null|string $foreign_amount - * @property null|int $foreign_currency_id - * @property int $identifier - * @property Account $account - * @property Budget[]|Collection $budgets - * @property null|int $budgets_count - * @property Category[]|Collection $categories - * @property null|int $categories_count - * @property null|TransactionCurrency $foreignCurrency - * @property null|TransactionCurrency $transactionCurrency - * @property TransactionJournal $transactionJournal - * - * @method static Builder|Transaction after(Carbon $date) - * @method static Builder|Transaction before(Carbon $date) - * @method static Builder|Transaction newModelQuery() - * @method static Builder|Transaction newQuery() - * @method static \Illuminate\Database\Query\Builder|Transaction onlyTrashed() - * @method static Builder|Transaction query() - * @method static Builder|Transaction transactionTypes($types) - * @method static Builder|Transaction whereAccountId($value) - * @method static Builder|Transaction whereAmount($value) - * @method static Builder|Transaction whereCreatedAt($value) - * @method static Builder|Transaction whereDeletedAt($value) - * @method static Builder|Transaction whereDescription($value) - * @method static Builder|Transaction whereForeignAmount($value) - * @method static Builder|Transaction whereForeignCurrencyId($value) - * @method static Builder|Transaction whereId($value) - * @method static Builder|Transaction whereIdentifier($value) - * @method static Builder|Transaction whereReconciled($value) - * @method static Builder|Transaction whereTransactionCurrencyId($value) - * @method static Builder|Transaction whereTransactionJournalId($value) - * @method static Builder|Transaction whereUpdatedAt($value) - * @method static \Illuminate\Database\Query\Builder|Transaction withTrashed() - * @method static \Illuminate\Database\Query\Builder|Transaction withoutTrashed() - * - * @property int|string $the_count - * - * @mixin Eloquent + * @mixin IdeHelperTransaction */ class Transaction extends Model { @@ -108,7 +53,7 @@ class Transaction extends Model 'encrypted' => 'boolean', // model does not have these fields though 'bill_name_encrypted' => 'boolean', 'reconciled' => 'boolean', - 'balance_dirty' => 'boolean', + 'balance_dirty' => 'boolean', 'date' => 'datetime', ]; @@ -237,7 +182,7 @@ class Transaction extends Model protected function balanceDirty(): Attribute { return Attribute::make( - get: static fn ($value) => (int)$value === 1, + get: static fn ($value) => 1 === (int)$value, ); } diff --git a/app/Models/TransactionCurrency.php b/app/Models/TransactionCurrency.php index 8d0c58d319..96c8a8ea5b 100644 --- a/app/Models/TransactionCurrency.php +++ b/app/Models/TransactionCurrency.php @@ -23,62 +23,17 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\User; use Illuminate\Database\Eloquent\Casts\Attribute; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Database\Query\Builder; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * FireflyIII\Models\TransactionCurrency - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property bool $enabled - * @property null|bool $userGroupDefault - * @property null|bool $userGroupEnabled - * @property string $code - * @property string $name - * @property string $symbol - * @property int $decimal_places - * @property BudgetLimit[]|Collection $budgetLimits - * @property null|int $budget_limits_count - * @property Collection|TransactionJournal[] $transactionJournals - * @property null|int $transaction_journals_count - * @property Collection|Transaction[] $transactions - * @property null|int $transactions_count - * - * @method static \Illuminate\Database\Eloquent\Builder|TransactionCurrency newModelQuery() - * @method static \Illuminate\Database\Eloquent\Builder|TransactionCurrency newQuery() - * @method static Builder|TransactionCurrency onlyTrashed() - * @method static \Illuminate\Database\Eloquent\Builder|TransactionCurrency query() - * @method static \Illuminate\Database\Eloquent\Builder|TransactionCurrency whereCode($value) - * @method static \Illuminate\Database\Eloquent\Builder|TransactionCurrency whereCreatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|TransactionCurrency whereDecimalPlaces($value) - * @method static \Illuminate\Database\Eloquent\Builder|TransactionCurrency whereDeletedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|TransactionCurrency whereEnabled($value) - * @method static \Illuminate\Database\Eloquent\Builder|TransactionCurrency whereId($value) - * @method static \Illuminate\Database\Eloquent\Builder|TransactionCurrency whereName($value) - * @method static \Illuminate\Database\Eloquent\Builder|TransactionCurrency whereSymbol($value) - * @method static \Illuminate\Database\Eloquent\Builder|TransactionCurrency whereUpdatedAt($value) - * @method static Builder|TransactionCurrency withTrashed() - * @method static Builder|TransactionCurrency withoutTrashed() - * - * @property Collection $userGroups - * @property null|int $user_groups_count - * @property Collection $users - * @property null|int $users_count - * - * @mixin Eloquent + * @mixin IdeHelperTransactionCurrency */ class TransactionCurrency extends Model { diff --git a/app/Models/TransactionGroup.php b/app/Models/TransactionGroup.php index 6922513c49..36022272df 100644 --- a/app/Models/TransactionGroup.php +++ b/app/Models/TransactionGroup.php @@ -23,52 +23,17 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Database\Query\Builder; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * FireflyIII\Models\TransactionGroup - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property int $user_id - * @property null|string $title - * @property Collection|TransactionJournal[] $transactionJournals - * @property null|int $transaction_journals_count - * @property User $user - * - * @method static \Illuminate\Database\Eloquent\Builder|TransactionGroup newModelQuery() - * @method static \Illuminate\Database\Eloquent\Builder|TransactionGroup newQuery() - * @method static Builder|TransactionGroup onlyTrashed() - * @method static \Illuminate\Database\Eloquent\Builder|TransactionGroup query() - * @method static \Illuminate\Database\Eloquent\Builder|TransactionGroup whereCreatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|TransactionGroup whereDeletedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|TransactionGroup whereId($value) - * @method static \Illuminate\Database\Eloquent\Builder|TransactionGroup whereTitle($value) - * @method static \Illuminate\Database\Eloquent\Builder|TransactionGroup whereUpdatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|TransactionGroup whereUserId($value) - * @method static Builder|TransactionGroup withTrashed() - * @method static Builder|TransactionGroup withoutTrashed() - * - * @property int $user_group_id - * - * @method static \Illuminate\Database\Eloquent\Builder|TransactionGroup whereUserGroupId($value) - * - * @property null|UserGroup $userGroup - * - * @mixin Eloquent + * @mixin IdeHelperTransactionGroup */ class TransactionGroup extends Model { diff --git a/app/Models/TransactionJournal.php b/app/Models/TransactionJournal.php index fd26fbcc05..83f3d47df8 100644 --- a/app/Models/TransactionJournal.php +++ b/app/Models/TransactionJournal.php @@ -24,14 +24,12 @@ declare(strict_types=1); namespace FireflyIII\Models; use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Eloquent\Casts\Attribute; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -42,92 +40,7 @@ use Illuminate\Database\Eloquent\SoftDeletes; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * FireflyIII\Models\TransactionJournal - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property int $user_id - * @property int $transaction_type_id - * @property null|int|string $transaction_group_id - * @property null|int|string $bill_id - * @property null|int|string $transaction_currency_id - * @property null|string $description - * @property Carbon $date - * @property null|Carbon $interest_date - * @property null|Carbon $book_date - * @property null|Carbon $process_date - * @property int $order - * @property int $tag_count - * @property string $transaction_type_type - * @property bool $encrypted - * @property bool $completed - * @property Attachment[]|Collection $attachments - * @property null|int $attachments_count - * @property null|Bill $bill - * @property Budget[]|Collection $budgets - * @property null|int $budgets_count - * @property Category[]|Collection $categories - * @property null|int $categories_count - * @property Collection|TransactionJournalLink[] $destJournalLinks - * @property null|int $dest_journal_links_count - * @property Collection|Note[] $notes - * @property null|int $notes_count - * @property Collection|PiggyBankEvent[] $piggyBankEvents - * @property null|int $piggy_bank_events_count - * @property Collection|TransactionJournalLink[] $sourceJournalLinks - * @property null|int $source_journal_links_count - * @property Collection|Tag[] $tags - * @property null|int $tags_count - * @property null|TransactionCurrency $transactionCurrency - * @property null|TransactionGroup $transactionGroup - * @property Collection|TransactionJournalMeta[] $transactionJournalMeta - * @property null|int $transaction_journal_meta_count - * @property TransactionType $transactionType - * @property Collection|Transaction[] $transactions - * @property null|int $transactions_count - * @property User $user - * - * @method static EloquentBuilder|TransactionJournal after(Carbon $date) - * @method static EloquentBuilder|TransactionJournal before(Carbon $date) - * @method static EloquentBuilder|TransactionJournal newModelQuery() - * @method static EloquentBuilder|TransactionJournal newQuery() - * @method static \Illuminate\Database\Query\Builder|TransactionJournal onlyTrashed() - * @method static EloquentBuilder|TransactionJournal query() - * @method static EloquentBuilder|TransactionJournal transactionTypes($types) - * @method static EloquentBuilder|TransactionJournal whereBillId($value) - * @method static EloquentBuilder|TransactionJournal whereBookDate($value) - * @method static EloquentBuilder|TransactionJournal whereCompleted($value) - * @method static EloquentBuilder|TransactionJournal whereCreatedAt($value) - * @method static EloquentBuilder|TransactionJournal whereDate($value) - * @method static EloquentBuilder|TransactionJournal whereDeletedAt($value) - * @method static EloquentBuilder|TransactionJournal whereDescription($value) - * @method static EloquentBuilder|TransactionJournal whereEncrypted($value) - * @method static EloquentBuilder|TransactionJournal whereId($value) - * @method static EloquentBuilder|TransactionJournal whereInterestDate($value) - * @method static EloquentBuilder|TransactionJournal whereOrder($value) - * @method static EloquentBuilder|TransactionJournal whereProcessDate($value) - * @method static EloquentBuilder|TransactionJournal whereTagCount($value) - * @method static EloquentBuilder|TransactionJournal whereTransactionCurrencyId($value) - * @method static EloquentBuilder|TransactionJournal whereTransactionGroupId($value) - * @method static EloquentBuilder|TransactionJournal whereTransactionTypeId($value) - * @method static EloquentBuilder|TransactionJournal whereUpdatedAt($value) - * @method static EloquentBuilder|TransactionJournal whereUserId($value) - * @method static \Illuminate\Database\Query\Builder|TransactionJournal withTrashed() - * @method static \Illuminate\Database\Query\Builder|TransactionJournal withoutTrashed() - * - * @property Collection|Location[] $locations - * @property null|int $locations_count - * @property int|string $the_count - * @property int $user_group_id - * - * @method static EloquentBuilder|TransactionJournal whereUserGroupId($value) - * - * @property Collection $auditLogEntries - * @property null|int $audit_log_entries_count - * - * @mixin Eloquent + * @mixin IdeHelperTransactionJournal */ class TransactionJournal extends Model { diff --git a/app/Models/TransactionJournalLink.php b/app/Models/TransactionJournalLink.php index 01923e8318..c50a422b7a 100644 --- a/app/Models/TransactionJournalLink.php +++ b/app/Models/TransactionJournalLink.php @@ -23,47 +23,15 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; -use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Casts\Attribute; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\MorphMany; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * FireflyIII\Models\TransactionJournalLink - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property int $link_type_id - * @property int $source_id - * @property int $destination_id - * @property null|string $comment - * @property TransactionJournal $destination - * @property LinkType $linkType - * @property Collection|Note[] $notes - * @property null|int $notes_count - * @property TransactionJournal $source - * @property string $inward - * @property string $outward - * - * @method static Builder|TransactionJournalLink newModelQuery() - * @method static Builder|TransactionJournalLink newQuery() - * @method static Builder|TransactionJournalLink query() - * @method static Builder|TransactionJournalLink whereComment($value) - * @method static Builder|TransactionJournalLink whereCreatedAt($value) - * @method static Builder|TransactionJournalLink whereDestinationId($value) - * @method static Builder|TransactionJournalLink whereId($value) - * @method static Builder|TransactionJournalLink whereLinkTypeId($value) - * @method static Builder|TransactionJournalLink whereSourceId($value) - * @method static Builder|TransactionJournalLink whereUpdatedAt($value) - * - * @mixin Eloquent + * @mixin IdeHelperTransactionJournalLink */ class TransactionJournalLink extends Model { diff --git a/app/Models/TransactionJournalMeta.php b/app/Models/TransactionJournalMeta.php index 767eccd314..cd7608a8e4 100644 --- a/app/Models/TransactionJournalMeta.php +++ b/app/Models/TransactionJournalMeta.php @@ -23,44 +23,14 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Database\Query\Builder; /** - * FireflyIII\Models\TransactionJournalMeta - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property int $transaction_journal_id - * @property string $name - * @property mixed $data - * @property string $hash - * @property null|Carbon $deleted_at - * @property TransactionJournal $transactionJournal - * - * @method static \Illuminate\Database\Eloquent\Builder|TransactionJournalMeta newModelQuery() - * @method static \Illuminate\Database\Eloquent\Builder|TransactionJournalMeta newQuery() - * @method static Builder|TransactionJournalMeta onlyTrashed() - * @method static \Illuminate\Database\Eloquent\Builder|TransactionJournalMeta query() - * @method static \Illuminate\Database\Eloquent\Builder|TransactionJournalMeta whereCreatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|TransactionJournalMeta whereData($value) - * @method static \Illuminate\Database\Eloquent\Builder|TransactionJournalMeta whereDeletedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|TransactionJournalMeta whereHash($value) - * @method static \Illuminate\Database\Eloquent\Builder|TransactionJournalMeta whereId($value) - * @method static \Illuminate\Database\Eloquent\Builder|TransactionJournalMeta whereName($value) - * @method static \Illuminate\Database\Eloquent\Builder|TransactionJournalMeta whereTransactionJournalId($value) - * @method static \Illuminate\Database\Eloquent\Builder|TransactionJournalMeta whereUpdatedAt($value) - * @method static Builder|TransactionJournalMeta withTrashed() - * @method static Builder|TransactionJournalMeta withoutTrashed() - * - * @mixin Eloquent + * @mixin IdeHelperTransactionJournalMeta */ class TransactionJournalMeta extends Model { diff --git a/app/Models/TransactionType.php b/app/Models/TransactionType.php index 4a11767b1b..5f9b5f7111 100644 --- a/app/Models/TransactionType.php +++ b/app/Models/TransactionType.php @@ -23,40 +23,14 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Database\Query\Builder; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * FireflyIII\Models\TransactionType - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property string $type - * @property Collection|TransactionJournal[] $transactionJournals - * @property null|int $transaction_journals_count - * - * @method static \Illuminate\Database\Eloquent\Builder|TransactionType newModelQuery() - * @method static \Illuminate\Database\Eloquent\Builder|TransactionType newQuery() - * @method static Builder|TransactionType onlyTrashed() - * @method static \Illuminate\Database\Eloquent\Builder|TransactionType query() - * @method static \Illuminate\Database\Eloquent\Builder|TransactionType whereCreatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|TransactionType whereDeletedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|TransactionType whereId($value) - * @method static \Illuminate\Database\Eloquent\Builder|TransactionType whereType($value) - * @method static \Illuminate\Database\Eloquent\Builder|TransactionType whereUpdatedAt($value) - * @method static Builder|TransactionType withTrashed() - * @method static Builder|TransactionType withoutTrashed() - * - * @mixin Eloquent + * @mixin IdeHelperTransactionType */ class TransactionType extends Model { diff --git a/app/Models/UserGroup.php b/app/Models/UserGroup.php index 34cf18f84e..e161c89c4b 100644 --- a/app/Models/UserGroup.php +++ b/app/Models/UserGroup.php @@ -24,13 +24,9 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Enums\UserRoleEnum; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\User; -use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\HasMany; @@ -38,61 +34,7 @@ use Illuminate\Database\Eloquent\Relations\HasManyThrough; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * Class UserGroup - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|string $deleted_at - * @property string $title - * @property Collection|GroupMembership[] $groupMemberships - * @property null|int $group_memberships_count - * - * @method static Builder|UserGroup newModelQuery() - * @method static Builder|UserGroup newQuery() - * @method static Builder|UserGroup query() - * @method static Builder|UserGroup whereCreatedAt($value) - * @method static Builder|UserGroup whereDeletedAt($value) - * @method static Builder|UserGroup whereId($value) - * @method static Builder|UserGroup whereTitle($value) - * @method static Builder|UserGroup whereUpdatedAt($value) - * - * @property Collection $accounts - * @property null|int $accounts_count - * @property Collection $availableBudgets - * @property null|int $available_budgets_count - * @property Collection $bills - * @property null|int $bills_count - * @property Collection $budgets - * @property null|int $budgets_count - * @property Collection $piggyBanks - * @property null|int $piggy_banks_count - * @property Collection $transactionJournals - * @property null|int $transaction_journals_count - * @property Collection $attachments - * @property null|int $attachments_count - * @property Collection $categories - * @property null|int $categories_count - * @property Collection $currencyExchangeRates - * @property null|int $currency_exchange_rates_count - * @property Collection $objectGroups - * @property null|int $object_groups_count - * @property Collection $recurrences - * @property null|int $recurrences_count - * @property Collection $ruleGroups - * @property null|int $rule_groups_count - * @property Collection $rules - * @property null|int $rules_count - * @property Collection $tags - * @property null|int $tags_count - * @property Collection $transactionGroups - * @property null|int $transaction_groups_count - * @property Collection $webhooks - * @property null|int $webhooks_count - * @property Collection $currencies - * @property null|int $currencies_count - * - * @mixin Eloquent + * @mixin IdeHelperUserGroup */ class UserGroup extends Model { diff --git a/app/Models/UserRole.php b/app/Models/UserRole.php index 3b18b0262d..84ef0ab124 100644 --- a/app/Models/UserRole.php +++ b/app/Models/UserRole.php @@ -24,35 +24,12 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; -use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; /** - * Class UserRole - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|string $deleted_at - * @property string $title - * @property Collection|GroupMembership[] $groupMemberships - * @property null|int $group_memberships_count - * - * @method static Builder|UserRole newModelQuery() - * @method static Builder|UserRole newQuery() - * @method static Builder|UserRole query() - * @method static Builder|UserRole whereCreatedAt($value) - * @method static Builder|UserRole whereDeletedAt($value) - * @method static Builder|UserRole whereId($value) - * @method static Builder|UserRole whereTitle($value) - * @method static Builder|UserRole whereUpdatedAt($value) - * - * @mixin Eloquent + * @mixin IdeHelperUserRole */ class UserRole extends Model { diff --git a/app/Models/Webhook.php b/app/Models/Webhook.php index 8fdbe68d2f..11bceb0f04 100644 --- a/app/Models/Webhook.php +++ b/app/Models/Webhook.php @@ -23,16 +23,12 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Enums\WebhookDelivery; use FireflyIII\Enums\WebhookResponse; use FireflyIII\Enums\WebhookTrigger; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; -use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; @@ -40,50 +36,7 @@ use Illuminate\Database\Eloquent\SoftDeletes; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * FireflyIII\Models\Webhook - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|Carbon $deleted_at - * @property int $user_id - * @property bool $active - * @property int $trigger - * @property int $response - * @property int $delivery - * @property string $url - * @property User $user - * @property Collection|WebhookMessage[] $webhookMessages - * @property null|int $webhook_messages_count - * - * @method static Builder|Webhook newModelQuery() - * @method static Builder|Webhook newQuery() - * @method static \Illuminate\Database\Query\Builder|Webhook onlyTrashed() - * @method static Builder|Webhook query() - * @method static Builder|Webhook whereActive($value) - * @method static Builder|Webhook whereCreatedAt($value) - * @method static Builder|Webhook whereDeletedAt($value) - * @method static Builder|Webhook whereDelivery($value) - * @method static Builder|Webhook whereId($value) - * @method static Builder|Webhook whereResponse($value) - * @method static Builder|Webhook whereTrigger($value) - * @method static Builder|Webhook whereUpdatedAt($value) - * @method static Builder|Webhook whereUrl($value) - * @method static Builder|Webhook whereUserId($value) - * @method static \Illuminate\Database\Query\Builder|Webhook withTrashed() - * @method static \Illuminate\Database\Query\Builder|Webhook withoutTrashed() - * - * @property string $title - * @property string $secret - * - * @method static Builder|Webhook whereSecret($value) - * @method static Builder|Webhook whereTitle($value) - * - * @property int $user_group_id - * - * @method static Builder|Webhook whereUserGroupId($value) - * - * @mixin Eloquent + * @mixin IdeHelperWebhook */ class Webhook extends Model { diff --git a/app/Models/WebhookAttempt.php b/app/Models/WebhookAttempt.php index 76d1a110b4..69f4d7e5d3 100644 --- a/app/Models/WebhookAttempt.php +++ b/app/Models/WebhookAttempt.php @@ -23,46 +23,16 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\User; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Database\Query\Builder; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * Class WebhookAttempt - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|string $deleted_at - * @property int $webhook_message_id - * @property int|string $status_code - * @property null|string $logs - * @property null|string $response - * @property WebhookMessage $webhookMessage - * - * @method static \Illuminate\Database\Eloquent\Builder|WebhookAttempt newModelQuery() - * @method static \Illuminate\Database\Eloquent\Builder|WebhookAttempt newQuery() - * @method static \Illuminate\Database\Eloquent\Builder|WebhookAttempt query() - * @method static \Illuminate\Database\Eloquent\Builder|WebhookAttempt whereCreatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|WebhookAttempt whereDeletedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|WebhookAttempt whereId($value) - * @method static \Illuminate\Database\Eloquent\Builder|WebhookAttempt whereLogs($value) - * @method static \Illuminate\Database\Eloquent\Builder|WebhookAttempt whereResponse($value) - * @method static \Illuminate\Database\Eloquent\Builder|WebhookAttempt whereStatusCode($value) - * @method static \Illuminate\Database\Eloquent\Builder|WebhookAttempt whereUpdatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|WebhookAttempt whereWebhookMessageId($value) - * @method static Builder|WebhookAttempt onlyTrashed() - * @method static Builder|WebhookAttempt withTrashed() - * @method static Builder|WebhookAttempt withoutTrashed() - * - * @mixin Eloquent + * @mixin IdeHelperWebhookAttempt */ class WebhookAttempt extends Model { diff --git a/app/Models/WebhookMessage.php b/app/Models/WebhookMessage.php index 8b27dde551..35f4ebedd7 100644 --- a/app/Models/WebhookMessage.php +++ b/app/Models/WebhookMessage.php @@ -23,53 +23,16 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\User; -use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Casts\Attribute; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * FireflyIII\Models\WebhookMessage - * - * @property int $id - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|string $deleted_at - * @property int $webhook_id - * @property bool $sent - * @property bool $errored - * @property int $attempts - * @property string $uuid - * @property array $message - * @property null|array $logs - * @property Webhook $webhook - * - * @method static Builder|WebhookMessage newModelQuery() - * @method static Builder|WebhookMessage newQuery() - * @method static Builder|WebhookMessage query() - * @method static Builder|WebhookMessage whereAttempts($value) - * @method static Builder|WebhookMessage whereCreatedAt($value) - * @method static Builder|WebhookMessage whereDeletedAt($value) - * @method static Builder|WebhookMessage whereErrored($value) - * @method static Builder|WebhookMessage whereId($value) - * @method static Builder|WebhookMessage whereLogs($value) - * @method static Builder|WebhookMessage whereMessage($value) - * @method static Builder|WebhookMessage whereSent($value) - * @method static Builder|WebhookMessage whereUpdatedAt($value) - * @method static Builder|WebhookMessage whereUuid($value) - * @method static Builder|WebhookMessage whereWebhookId($value) - * - * @property Collection|WebhookAttempt[] $webhookAttempts - * @property null|int $webhook_attempts_count - * - * @mixin Eloquent + * @mixin IdeHelperWebhookMessage */ class WebhookMessage extends Model { diff --git a/app/Providers/FireflyServiceProvider.php b/app/Providers/FireflyServiceProvider.php index 681670511d..752fb21309 100644 --- a/app/Providers/FireflyServiceProvider.php +++ b/app/Providers/FireflyServiceProvider.php @@ -58,6 +58,7 @@ use FireflyIII\Services\Password\Verifier; use FireflyIII\Services\Webhook\StandardWebhookSender; use FireflyIII\Services\Webhook\WebhookSenderInterface; use FireflyIII\Support\Amount; +use FireflyIII\Support\Balance; use FireflyIII\Support\ExpandedForm; use FireflyIII\Support\FireflyConfig; use FireflyIII\Support\Form\AccountForm; @@ -133,6 +134,12 @@ class FireflyServiceProvider extends ServiceProvider return new Steam(); } ); + $this->app->bind( + 'balance', + static function () { + return new Balance(); + } + ); $this->app->bind( 'expandedform', static function () { diff --git a/app/Repositories/UserGroups/Currency/CurrencyRepository.php b/app/Repositories/UserGroups/Currency/CurrencyRepository.php index 5f66f4dd0d..147829355a 100644 --- a/app/Repositories/UserGroups/Currency/CurrencyRepository.php +++ b/app/Repositories/UserGroups/Currency/CurrencyRepository.php @@ -84,6 +84,14 @@ class CurrencyRepository implements CurrencyRepositoryInterface return 'account_meta'; } + // second search using integer check. + $meta = AccountMeta::where('name', 'currency_id')->where('data', json_encode((int)$currency->id))->count(); + if ($meta > 0) { + app('log')->info(sprintf('Used in %d accounts as currency_id, return true. ', $meta)); + + return 'account_meta'; + } + // is being used in bills: $bills = Bill::where('transaction_currency_id', $currency->id)->count(); if ($bills > 0) { diff --git a/app/Rules/IsValidDateRange.php b/app/Rules/IsValidDateRange.php new file mode 100644 index 0000000000..92f2fc249d --- /dev/null +++ b/app/Rules/IsValidDateRange.php @@ -0,0 +1,79 @@ +translate(); + + return; + } + $other = 'startPeriod'; + if ('startPeriod' === $attribute) { + $other = 'endPeriod'; + } + $otherValue = request()->get($other); + // parse date, twice. + try { + $left = Carbon::parse($value); + $right = Carbon::parse($otherValue); + } catch (InvalidDateException $e) { // @phpstan-ignore-line + app('log')->error(sprintf('"%s" or "%s" is not a valid date or time: %s', $value, $otherValue, $e->getMessage())); + + $fail('validation.date_or_time')->translate(); + + return; + } catch (InvalidFormatException $e) { + app('log')->error(sprintf('"%s" or "%s" is of an invalid format: %s', $value, $otherValue, $e->getMessage())); + + $fail('validation.date_or_time')->translate(); + + return; + } + // start must be before end. + if ('startPeriod' === $attribute) { + if ($left->gt($right)) { + $fail('validation.date_after')->translate(); + } + return; + } + // end must be after start + if ($left->lt($right)) { + $fail('validation.date_after')->translate(); + } + } +} + diff --git a/app/Services/Internal/Update/JournalUpdateService.php b/app/Services/Internal/Update/JournalUpdateService.php index a2692dd71b..cd52a9d92e 100644 --- a/app/Services/Internal/Update/JournalUpdateService.php +++ b/app/Services/Internal/Update/JournalUpdateService.php @@ -168,6 +168,7 @@ class JournalUpdateService app('preferences')->mark(); $this->transactionJournal->refresh(); + Log::debug('Done with update journal routine'); } private function hasValidAccounts(): bool @@ -333,7 +334,7 @@ class JournalUpdateService } $sourceInfo = [ - 'id' => (int)($this->data['source_id'] ?? null), + 'id' => (int) ($this->data['source_id'] ?? null), 'name' => $this->data['source_name'] ?? null, 'iban' => $this->data['source_iban'] ?? null, 'number' => $this->data['source_number'] ?? null, @@ -397,7 +398,7 @@ class JournalUpdateService } $destInfo = [ - 'id' => (int)($this->data['destination_id'] ?? null), + 'id' => (int) ($this->data['destination_id'] ?? null), 'name' => $this->data['destination_name'] ?? null, 'iban' => $this->data['destination_iban'] ?? null, 'number' => $this->data['destination_number'] ?? null, @@ -463,8 +464,8 @@ class JournalUpdateService ) && TransactionType::WITHDRAWAL === $type ) { - $billId = (int)($this->data['bill_id'] ?? 0); - $billName = (string)($this->data['bill_name'] ?? ''); + $billId = (int) ($this->data['bill_id'] ?? 0); + $billName = (string) ($this->data['bill_name'] ?? ''); $bill = $this->billRepository->findBill($billId, $billName); $this->transactionJournal->bill_id = $bill?->id; app('log')->debug('Updated bill ID'); @@ -476,7 +477,7 @@ class JournalUpdateService */ private function updateField(string $fieldName): void { - if (array_key_exists($fieldName, $this->data) && '' !== (string)$this->data[$fieldName]) { + if (array_key_exists($fieldName, $this->data) && '' !== (string) $this->data[$fieldName]) { $value = $this->data[$fieldName]; if ('date' === $fieldName) { @@ -548,7 +549,7 @@ class JournalUpdateService { // update notes. if ($this->hasFields(['notes'])) { - $notes = '' === (string)$this->data['notes'] ? null : $this->data['notes']; + $notes = '' === (string) $this->data['notes'] ? null : $this->data['notes']; $this->storeNotes($this->transactionJournal, $notes); } } @@ -596,7 +597,7 @@ class JournalUpdateService foreach ($this->metaDate as $field) { if ($this->hasFields([$field])) { try { - $value = '' === (string)$this->data[$field] ? null : new Carbon($this->data[$field]); + $value = '' === (string) $this->data[$field] ? null : new Carbon($this->data[$field]); } catch (InvalidDateException|InvalidFormatException $e) { // @phpstan-ignore-line app('log')->debug(sprintf('%s is not a valid date value: %s', $this->data[$field], $e->getMessage())); @@ -647,7 +648,7 @@ class JournalUpdateService return; } - $value = $this->data['amount'] ?? ''; + $value = $this->data['amount'] ?? ''; app('log')->debug(sprintf('Amount is now "%s"', $value)); try { @@ -657,11 +658,14 @@ class JournalUpdateService return; } - $origSourceTransaction = $this->getSourceTransaction(); - $origSourceTransaction->amount = app('steam')->negative($amount); + + $origSourceTransaction = $this->getSourceTransaction(); + $origSourceTransaction->amount = app('steam')->negative($amount); + $origSourceTransaction->balance_dirty = true; $origSourceTransaction->save(); - $destTransaction = $this->getDestinationTransaction(); - $destTransaction->amount = app('steam')->positive($amount); + $destTransaction = $this->getDestinationTransaction(); + $destTransaction->amount = app('steam')->positive($amount); + $destTransaction->balance_dirty = true; $destTransaction->save(); // refresh transactions. $this->sourceTransaction->refresh(); @@ -705,18 +709,16 @@ class JournalUpdateService // the correct fields to update in the destination transaction are NOT the foreign amount and currency // but rather the normal amount and currency. This is new behavior. - if(TransactionType::TRANSFER === $this->transactionJournal->transactionType->type) { + if (TransactionType::TRANSFER === $this->transactionJournal->transactionType->type) { Log::debug('Switch amounts, store in amount and not foreign_amount'); - $dest->transaction_currency_id = $foreignCurrency->id; - $dest->amount = app('steam')->positive($foreignAmount); + $dest->transaction_currency_id = $foreignCurrency->id; + $dest->amount = app('steam')->positive($foreignAmount); } - if(TransactionType::TRANSFER !== $this->transactionJournal->transactionType->type) { - $dest->foreign_currency_id = $foreignCurrency->id; - $dest->foreign_amount = app('steam')->positive($foreignAmount); + if (TransactionType::TRANSFER !== $this->transactionJournal->transactionType->type) { + $dest->foreign_currency_id = $foreignCurrency->id; + $dest->foreign_amount = app('steam')->positive($foreignAmount); } - - $dest->save(); app('log')->debug( @@ -751,8 +753,5 @@ class JournalUpdateService $this->destinationTransaction->refresh(); } - private function collectCurrency(): TransactionCurrency - { - - } + private function collectCurrency(): TransactionCurrency {} } diff --git a/app/Support/Amount.php b/app/Support/Amount.php index 74226531f7..52ca3bf42a 100644 --- a/app/Support/Amount.php +++ b/app/Support/Amount.php @@ -45,6 +45,11 @@ class Amount return $this->formatFlat($format->symbol, $format->decimal_places, $amount, $coloured); } + public function formatByCurrencyId(int $currencyId, string $amount, ?bool $coloured = null): string { + $format = TransactionCurrency::find($currencyId); + return $this->formatFlat($format->symbol, $format->decimal_places, $amount, $coloured); + } + /** * This method will properly format the given number, in color or "black and white", * as a currency, given two things: the currency required and the current locale. diff --git a/app/Support/Balance.php b/app/Support/Balance.php new file mode 100644 index 0000000000..3864957e52 --- /dev/null +++ b/app/Support/Balance.php @@ -0,0 +1,79 @@ +, "%s")', $date->format('Y-m-d'))); + $return = []; + $currencies = []; + $cache = new CacheProperties(); + $cache->addProperty($accounts->pluck('id')->toArray()); + $cache->addProperty('getAccountBalances'); + $cache->addProperty($date); + if ($cache->has()) { + return $cache->get(); + } + + $query = Transaction:: + whereIn('transactions.account_id', $accounts->pluck('id')->toArray()) + ->leftJoin('transaction_journals', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') + ->orderBy('transaction_journals.date', 'desc') + ->orderBy('transaction_journals.order', 'asc') + ->orderBy('transaction_journals.description', 'desc') + ->orderBy('transactions.amount', 'desc') + ->where('transaction_journals.date', '<=', $date); + + $result = $query->get(['transactions.account_id', 'transactions.transaction_currency_id', 'transactions.balance_after']); + foreach ($result as $entry) { + $accountId = (int) $entry->account_id; + $currencyId = (int) $entry->transaction_currency_id; + $currencies[$currencyId] ??= TransactionCurrency::find($currencyId); + $return[$accountId] ??= []; + if (array_key_exists($currencyId, $return[$accountId])) { + continue; + } + $return[$accountId][$currencyId] = ['currency' => $currencies[$currencyId], 'balance' => $entry->balance_after, 'date' => clone $date]; + } + return $return; + + } +} diff --git a/app/Support/Facades/Balance.php b/app/Support/Facades/Balance.php new file mode 100644 index 0000000000..a281f83b1a --- /dev/null +++ b/app/Support/Facades/Balance.php @@ -0,0 +1,37 @@ +enabled()) { Log::debug('ExchangeRateConverter: disabled, return amount as is.'); return $amount; @@ -64,7 +70,7 @@ class ExchangeRateConverter */ public function getCurrencyRate(TransactionCurrency $from, TransactionCurrency $to, Carbon $date): string { - if (false === config('cer.enabled')) { + if (false === $this->enabled()) { Log::debug('ExchangeRateConverter: disabled, return "1".'); return '1'; @@ -79,8 +85,8 @@ class ExchangeRateConverter */ private function getRate(TransactionCurrency $from, TransactionCurrency $to, Carbon $date): string { - $key = $this->getCacheKey($from, $to, $date); - $res = Cache::get($key, null); + $key = $this->getCacheKey($from, $to, $date); + $res = Cache::get($key, null); // find in cache if (null !== $res) { @@ -90,7 +96,7 @@ class ExchangeRateConverter } // find in database - $rate = $this->getFromDB($from->id, $to->id, $date->format('Y-m-d')); + $rate = $this->getFromDB($from->id, $to->id, $date->format('Y-m-d')); if (null !== $rate) { Cache::forever($key, $rate); Log::debug(sprintf('ExchangeRateConverter: Return DB rate from #%d to #%d on %s.', $from->id, $to->id, $date->format('Y-m-d'))); @@ -99,7 +105,7 @@ class ExchangeRateConverter } // find reverse in database - $rate = $this->getFromDB($to->id, $from->id, $date->format('Y-m-d')); + $rate = $this->getFromDB($to->id, $from->id, $date->format('Y-m-d')); if (null !== $rate) { $rate = bcdiv('1', $rate); Cache::forever($key, $rate); @@ -132,7 +138,7 @@ class ExchangeRateConverter if ($from === $to) { return '1'; } - $key = sprintf('cer-%d-%d-%s', $from, $to, $date); + $key = sprintf('cer-%d-%d-%s', $from, $to, $date); // perhaps the rate has been cached during this particular run $preparedRate = $this->prepared[$date][$from][$to] ?? null; @@ -142,7 +148,7 @@ class ExchangeRateConverter return $preparedRate; } - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($key); if ($cache->has()) { $rate = $cache->get(); @@ -155,16 +161,15 @@ class ExchangeRateConverter } /** @var null|CurrencyExchangeRate $result */ - $result = auth()->user() - ->currencyExchangeRates() - ->where('from_currency_id', $from) - ->where('to_currency_id', $to) - ->where('date', '<=', $date) - ->orderBy('date', 'DESC') - ->first() - ; + $result = auth()->user() + ->currencyExchangeRates() + ->where('from_currency_id', $from) + ->where('to_currency_id', $to) + ->where('date', '<=', $date) + ->orderBy('date', 'DESC') + ->first(); ++$this->queryCount; - $rate = (string) $result?->rate; + $rate = (string) $result?->rate; if ('' === $rate) { app('log')->debug(sprintf('ExchangeRateConverter: Found no rate for #%d->#%d (%s) in the DB.', $from, $to, $date)); @@ -204,13 +209,13 @@ class ExchangeRateConverter if ($euroId === $currency->id) { return '1'; } - $rate = $this->getFromDB($currency->id, $euroId, $date->format('Y-m-d')); + $rate = $this->getFromDB($currency->id, $euroId, $date->format('Y-m-d')); if (null !== $rate) { // app('log')->debug(sprintf('Rate for %s to EUR is %s.', $currency->code, $rate)); return $rate; } - $rate = $this->getFromDB($euroId, $currency->id, $date->format('Y-m-d')); + $rate = $this->getFromDB($euroId, $currency->id, $date->format('Y-m-d')); if (null !== $rate) { return bcdiv('1', $rate); // app('log')->debug(sprintf('Inverted rate for %s to EUR is %s.', $currency->code, $rate)); @@ -239,7 +244,7 @@ class ExchangeRateConverter if ($cache->has()) { return (int) $cache->get(); } - $euro = TransactionCurrency::whereCode('EUR')->first(); + $euro = TransactionCurrency::whereCode('EUR')->first(); ++$this->queryCount; if (null === $euro) { throw new FireflyException('Cannot find EUR in system, cannot do currency conversion.'); @@ -254,21 +259,20 @@ class ExchangeRateConverter */ public function prepare(TransactionCurrency $from, TransactionCurrency $to, Carbon $start, Carbon $end): void { - if (false === config('cer.enabled')) { + if (false === $this->enabled()) { return; } Log::debug('prepare()'); $start->startOfDay(); $end->endOfDay(); Log::debug(sprintf('Preparing for %s to %s between %s and %s', $from->code, $to->code, $start->format('Y-m-d'), $end->format('Y-m-d'))); - $set = auth()->user() - ->currencyExchangeRates() - ->where('from_currency_id', $from->id) - ->where('to_currency_id', $to->id) - ->where('date', '<=', $end->format('Y-m-d')) - ->where('date', '>=', $start->format('Y-m-d')) - ->orderBy('date', 'DESC')->get() - ; + $set = auth()->user() + ->currencyExchangeRates() + ->where('from_currency_id', $from->id) + ->where('to_currency_id', $to->id) + ->where('date', '<=', $end->format('Y-m-d')) + ->where('date', '>=', $start->format('Y-m-d')) + ->orderBy('date', 'DESC')->get(); ++$this->queryCount; if (0 === $set->count()) { Log::debug('No prepared rates found in this period, use the fallback'); @@ -282,10 +286,10 @@ class ExchangeRateConverter $this->isPrepared = true; // so there is a fallback just in case. Now loop the set of rates we DO have. - $temp = []; - $count = 0; + $temp = []; + $count = 0; foreach ($set as $rate) { - $date = $rate->date->format('Y-m-d'); + $date = $rate->date->format('Y-m-d'); $temp[$date] ??= [ $from->id => [ $to->id => $rate->rate, @@ -294,11 +298,11 @@ class ExchangeRateConverter ++$count; } Log::debug(sprintf('Found %d rates in this period.', $count)); - $currentStart = clone $start; + $currentStart = clone $start; while ($currentStart->lte($end)) { - $currentDate = $currentStart->format('Y-m-d'); + $currentDate = $currentStart->format('Y-m-d'); $this->prepared[$currentDate] ??= []; - $fallback = $temp[$currentDate][$from->id][$to->id] ?? $this->fallback[$from->id][$to->id] ?? '0'; + $fallback = $temp[$currentDate][$from->id][$to->id] ?? $this->fallback[$from->id][$to->id] ?? '0'; if (0 === count($this->prepared[$currentDate]) && 0 !== bccomp('0', $fallback)) { // fill from temp or fallback or from temp (see before) $this->prepared[$currentDate][$from->id][$to->id] = $fallback; @@ -329,7 +333,7 @@ class ExchangeRateConverter public function summarize(): void { - if (false === config('cer.enabled')) { + if (false === $this->enabled()) { return; } Log::debug(sprintf('ExchangeRateConverter ran %d queries.', $this->queryCount)); diff --git a/app/Support/Http/Controllers/PeriodOverview.php b/app/Support/Http/Controllers/PeriodOverview.php index 850b575757..1c4b1a04c9 100644 --- a/app/Support/Http/Controllers/PeriodOverview.php +++ b/app/Support/Http/Controllers/PeriodOverview.php @@ -441,7 +441,7 @@ trait PeriodOverview $cache->addProperty('tag-period-entries'); $cache->addProperty($tag->id); if ($cache->has()) { - // return $cache->get(); + return $cache->get(); } /** @var array $dates */ diff --git a/app/Support/JsonApi/CollectsCustomParameters.php b/app/Support/JsonApi/CollectsCustomParameters.php new file mode 100644 index 0000000000..c45cffc1af --- /dev/null +++ b/app/Support/JsonApi/CollectsCustomParameters.php @@ -0,0 +1,43 @@ +repository = app(AccountRepositoryInterface::class); $this->currencyRepository = app(CurrencyRepositoryInterface::class); + $this->start = null; + $this->end = null; } #[\Override] @@ -60,14 +71,19 @@ class AccountEnrichment implements EnrichmentInterface { Log::debug(sprintf('Now doing account enrichment for %d account(s)', $collection->count())); // prep local fields - $this->collection = $collection; - $this->currencies = []; + $this->collection = $collection; + $this->default = app('amount')->getDefaultCurrency(); + $this->currencies = []; + $this->balances = []; + $this->objectGroups = []; + $this->grouped = []; // do everything here: $this->getLastActivity(); $this->collectAccountTypes(); $this->collectMetaData(); - // $this->getMetaBalances(); + $this->getMetaBalances(); + $this->getObjectGroups(); // $this->collection->transform(function (Account $account) { // $account->user_array = ['id' => 1, 'bla bla' => 'bla']; @@ -94,22 +110,75 @@ class AccountEnrichment implements EnrichmentInterface } } - /** - * TODO this method refers to a single-use method inside Steam that could be moved here. - */ private function getMetaBalances(): void { - try { - $array = app('steam')->balancesByAccountsConverted($this->collection, today()); - } catch (FireflyException $e) { - Log::error(sprintf('Could not load balances: %s', $e->getMessage())); + $this->balances = Balance::getAccountBalances($this->collection, today()); + $balances = $this->balances; + $default = $this->default; - return; + // get start and end, so the balance difference can be generated. + $start = null; + $end = null; + if (null !== $this->start) { + $start = Balance::getAccountBalances($this->collection, $this->start); } - foreach ($array as $accountId => $row) { - $this->collection->where('id', $accountId)->first()->balance = $row['balance']; - $this->collection->where('id', $accountId)->first()->native_balance = $row['native_balance']; + if (null !== $this->end) { + $end = Balance::getAccountBalances($this->collection, $this->end); } + + $this->collection->transform(function (Account $account) use ($balances, $default, $start, $end) { + $converter = new ExchangeRateConverter(); + $native = [ + 'currency_id' => $this->default->id, + 'currency_name' => $this->default->name, + 'currency_code' => $this->default->code, + 'currency_symbol' => $this->default->symbol, + 'currency_decimal_places' => $this->default->decimal_places, + 'balance' => '0', + 'period_start_balance' => null, + 'period_end_balance' => null, + 'balance_difference' => null, + ]; + if (array_key_exists($account->id, $balances)) { + $set = []; + foreach ($balances[$account->id] as $currencyId => $entry) { + $left = $start[$account->id][$currencyId]['balance'] ?? null; + $right = $end[$account->id][$currencyId]['balance'] ?? null; + $diff = null; + if (null !== $left && null !== $right) { + $diff = bcsub($right, $left); + } + + $item = [ + 'currency_id' => $entry['currency']->id, + 'currency_name' => $entry['currency']->name, + 'currency_code' => $entry['currency']->code, + 'currency_symbol' => $entry['currency']->symbol, + 'currency_decimal_places' => $entry['currency']->decimal_places, + 'balance' => $entry['balance'], + 'period_start_balance' => $left, + 'period_end_balance' => $right, + 'balance_difference' => $diff, + ]; + $set[] = $item; + if ($converter->enabled()) { + $native['balance'] = bcadd($native['balance'], $converter->convert($entry['currency'], $default, today(), $entry['balance'])); + if (null !== $diff) { + $native['period_start_balance'] = $converter->convert($entry['currency'], $default, today(), $item['period_start_balance']); + $native['period_end_balance'] = $converter->convert($entry['currency'], $default, today(), $item['period_end_balance']); + $native['balance_difference'] = bcsub($native['period_end_balance'], $native['period_start_balance']); + } + } + } + $account->balance = $set; + if ($converter->enabled()) { + $account->native_balance = $native; + } + } + + + return $account; + }); } /** @@ -133,10 +202,10 @@ class AccountEnrichment implements EnrichmentInterface private function collectMetaData(): void { - $metaFields = $this->repository->getMetaValues($this->collection, ['currency_id', 'account_role', 'account_number', 'liability_direction', 'interest', 'interest_period', 'current_debt']); + $metaFields = $this->repository->getMetaValues($this->collection, ['is_multi_currency', 'currency_id', 'account_role', 'account_number', 'liability_direction', 'interest', 'interest_period', 'current_debt']); $currencyIds = $metaFields->where('name', 'currency_id')->pluck('data')->toArray(); - $currencies = []; + $currencies = []; foreach ($this->currencyRepository->getByIds($currencyIds) as $currency) { $id = $currency->id; $currencies[$id] = $currency; @@ -160,7 +229,7 @@ class AccountEnrichment implements EnrichmentInterface } #[\Override] - public function enrichSingle(Model $model): Model + public function enrichSingle(Model $model): Account { Log::debug(__METHOD__); $collection = new Collection([$model]); @@ -168,4 +237,44 @@ class AccountEnrichment implements EnrichmentInterface return $collection->first(); } + + public function setStart(?Carbon $start): void + { + $this->start = $start; + } + + public function setEnd(?Carbon $end): void + { + $this->end = $end; + } + + private function getObjectGroups(): void + { + $set = \DB::table('object_groupables') + ->where('object_groupable_type', Account::class) + ->whereIn('object_groupable_id', $this->collection->pluck('id')->toArray()) + ->distinct() + ->get(['object_groupables.object_groupable_id', 'object_groupables.object_group_id']); + // get the groups: + $groupIds = $set->pluck('object_group_id')->toArray(); + $groups = ObjectGroup::whereIn('id', $groupIds)->get(); + /** @var ObjectGroup $group */ + foreach ($groups as $group) { + $this->objectGroups[$group->id] = $group; + } + /** @var \stdClass $entry */ + foreach ($set as $entry) { + $this->grouped[(int) $entry->object_groupable_id] = (int) $entry->object_group_id; + } + $this->collection->transform(function (Account $account) { + $account->object_group_id = $this->grouped[$account->id] ?? null; + if(null !== $account->object_group_id) { + $account->object_group_title = $this->objectGroups[$account->object_group_id]->title; + $account->object_group_order = $this->objectGroups[$account->object_group_id]->order; + } + return $account; + }); + } + + } diff --git a/app/Support/Models/AccountBalanceCalculator.php b/app/Support/Models/AccountBalanceCalculator.php index 16b9db16d2..162e010ccf 100644 --- a/app/Support/Models/AccountBalanceCalculator.php +++ b/app/Support/Models/AccountBalanceCalculator.php @@ -31,6 +31,13 @@ use FireflyIII\Models\TransactionJournal; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Log; +/** + * Class AccountBalanceCalculator + * + * This class started as a piece of code to create and calculate "account balance" objects, but they + * are at the moment unused. Instead, each transaction gets a before/after balance and an indicator if this + * balance is up-to-date. This class now contains some methods to recalculate those amounts. + */ class AccountBalanceCalculator { private function __construct() @@ -39,43 +46,42 @@ class AccountBalanceCalculator } /** - * Recalculate all balances for a given account. - * - * Je moet toch altijd wel alles doen want je weet niet waar een transaction journal invloed op heeft. - * Dus dit aantikken per transaction journal is zinloos, beide accounts moeten gedaan worden. + * Recalculate all balances. + */ + public static function forceRecalculateAll(): void + { + Transaction::whereNull('deleted_at')->update(['balance_dirty' => true]); + $object = new self(); + $object->optimizedCalculation(new Collection()); + } + + /** + * Recalculate all balances. */ public static function recalculateAll(): void { $object = new self(); - //$object->recalculateLatest(null); $object->optimizedCalculation(new Collection()); - // $object->recalculateJournals(null, null); } public static function recalculateForJournal(TransactionJournal $transactionJournal): void { - $object = new self(); - - // new optimized code, currently UNUSED: - // recalculate everything ON or AFTER the moment of this transaction. -// Transaction -// ::leftjoin('transaction_journals','transaction_journals.id','=','transactions.transaction_journal_id') -// ->where('transaction_journals.user_id', $transactionJournal->user_id) -// ->where('transaction_journals.date', '>=', $transactionJournal->date) -// ->update(['transactions.balance_dirty' => true]); -// $object->optimizedCalculation(new Collection()); + Log::debug(__METHOD__); + $object = new self(); + // recalculate the involved accounts: + $accounts = new Collection(); foreach ($transactionJournal->transactions as $transaction) { - $object->recalculateLatest($transaction->account); - //$object->recalculateJournals($transaction->account, $transactionJournal); + $accounts->push($transaction->account); } + $object->optimizedCalculation($accounts); } private function getAccountBalanceByAccount(int $account, int $currency): AccountBalance { - $query = AccountBalance::where('title', 'balance')->where('account_id', $account)->where('transaction_currency_id', $currency); + $query = AccountBalance::where('title', 'balance')->where('account_id', $account)->where('transaction_currency_id', $currency); - $entry = $query->first(); + $entry = $query->first(); if (null !== $entry) { // Log::debug(sprintf('Found account balance "balance" for account #%d and currency #%d: %s', $account, $currency, $entry->balance)); @@ -92,11 +98,6 @@ class AccountBalanceCalculator return $entry; } - /** - * @param Collection $accounts - * - * @return void - */ private function optimizedCalculation(Collection $accounts): void { Log::debug('start of optimizedCalculation'); @@ -107,18 +108,20 @@ class AccountBalanceCalculator $balances = []; $count = 0; $query = Transaction::leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - + ->whereNull('transactions.deleted_at') + ->whereNull('transaction_journals.deleted_at') // this order is the same as GroupCollector, but in the exact reverse. ->orderBy('transaction_journals.date', 'asc') ->orderBy('transaction_journals.order', 'desc') ->orderBy('transaction_journals.id', 'asc') ->orderBy('transaction_journals.description', 'asc') - ->orderBy('transactions.amount', 'asc'); - if (count($accounts) > 0) { + ->orderBy('transactions.amount', 'asc') + ; + if ($accounts->count() > 0) { $query->whereIn('transactions.account_id', $accounts->pluck('id')->toArray()); } - $set = $query->get(['transactions.id', 'transactions.balance_dirty', 'transactions.transaction_currency_id', 'transaction_journals.date', 'transactions.account_id', 'transactions.amount']); + $set = $query->get(['transactions.id', 'transactions.balance_dirty', 'transactions.transaction_currency_id', 'transaction_journals.date', 'transactions.account_id', 'transactions.amount']); /** @var Transaction $entry */ foreach ($set as $entry) { @@ -127,15 +130,15 @@ class AccountBalanceCalculator $balances[$entry->account_id][$entry->transaction_currency_id] ??= '0'; // before and after are easy: - $before = $balances[$entry->account_id][$entry->transaction_currency_id]; - $after = bcadd($before, $entry->amount); - if (true === $entry->balance_dirty) { + $before = $balances[$entry->account_id][$entry->transaction_currency_id]; + $after = bcadd($before, $entry->amount); + if (true === $entry->balance_dirty || $accounts->count() > 0) { // update the transaction: $entry->balance_before = $before; $entry->balance_after = $after; $entry->balance_dirty = false; $entry->saveQuietly(); // do not observe this change, or we get stuck in a loop. - $count++; + ++$count; } // then update the array: @@ -149,9 +152,9 @@ class AccountBalanceCalculator private function getAccountBalanceByJournal(string $title, int $account, int $journal, int $currency): AccountBalance { - $query = AccountBalance::where('title', $title)->where('account_id', $account)->where('transaction_journal_id', $journal)->where('transaction_currency_id', $currency); + $query = AccountBalance::where('title', $title)->where('account_id', $account)->where('transaction_journal_id', $journal)->where('transaction_currency_id', $currency); - $entry = $query->first(); + $entry = $query->first(); if (null !== $entry) { return $entry; } @@ -168,7 +171,7 @@ class AccountBalanceCalculator private function recalculateLatest(?Account $account): void { - $query = Transaction::groupBy(['transactions.account_id', 'transactions.transaction_currency_id', 'transactions.foreign_currency_id']); + $query = Transaction::groupBy(['transactions.account_id', 'transactions.transaction_currency_id', 'transactions.foreign_currency_id']); if (null !== $account) { $query->where('transactions.account_id', $account->id); @@ -189,11 +192,11 @@ class AccountBalanceCalculator $sumForeignAmount = '' === $sumForeignAmount ? '0' : $sumForeignAmount; // at this point SQLite may return scientific notation because why not. Terrible. - $sumAmount = app('steam')->floatalize($sumAmount); - $sumForeignAmount = app('steam')->floatalize($sumForeignAmount); + $sumAmount = app('steam')->floatalize($sumAmount); + $sumForeignAmount = app('steam')->floatalize($sumForeignAmount); // first create for normal currency: - $entry = $this->getAccountBalanceByAccount($account, $transactionCurrency); + $entry = $this->getAccountBalanceByAccount($account, $transactionCurrency); try { $entry->balance = bcadd((string) $entry->balance, $sumAmount); @@ -248,7 +251,7 @@ class AccountBalanceCalculator */ private function recalculateJournals(?Account $account, ?TransactionJournal $transactionJournal): void { - $query = Transaction::groupBy(['transactions.account_id', 'transaction_journals.id', 'transactions.transaction_currency_id', 'transactions.foreign_currency_id']); + $query = Transaction::groupBy(['transactions.account_id', 'transaction_journals.id', 'transactions.transaction_currency_id', 'transactions.foreign_currency_id']); $query->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id'); $query->orderBy('transaction_journals.date', 'asc'); $amounts = []; @@ -259,28 +262,28 @@ class AccountBalanceCalculator $query->where('transaction_journals.date', '>=', $transactionJournal->date); $amounts = $this->getStartAmounts($account, $transactionJournal); } - $result = $query->get(['transactions.account_id', 'transaction_journals.id', 'transactions.transaction_currency_id', 'transactions.foreign_currency_id', \DB::raw('SUM(transactions.amount) as sum_amount'), \DB::raw('SUM(transactions.foreign_amount) as sum_foreign_amount')]); + $result = $query->get(['transactions.account_id', 'transaction_journals.id', 'transactions.transaction_currency_id', 'transactions.foreign_currency_id', \DB::raw('SUM(transactions.amount) as sum_amount'), \DB::raw('SUM(transactions.foreign_amount) as sum_foreign_amount')]); /** @var \stdClass $row */ foreach ($result as $row) { - $account = (int) $row->account_id; - $transactionCurrency = (int) $row->transaction_currency_id; - $foreignCurrency = (int) $row->foreign_currency_id; - $sumAmount = (string) $row->sum_amount; - $sumForeignAmount = (string) $row->sum_foreign_amount; - $journalId = (int) $row->id; + $account = (int) $row->account_id; + $transactionCurrency = (int) $row->transaction_currency_id; + $foreignCurrency = (int) $row->foreign_currency_id; + $sumAmount = (string) $row->sum_amount; + $sumForeignAmount = (string) $row->sum_foreign_amount; + $journalId = (int) $row->id; // check for empty strings - $sumAmount = '' === $sumAmount ? '0' : $sumAmount; - $sumForeignAmount = '' === $sumForeignAmount ? '0' : $sumForeignAmount; + $sumAmount = '' === $sumAmount ? '0' : $sumAmount; + $sumForeignAmount = '' === $sumForeignAmount ? '0' : $sumForeignAmount; // new amounts: $amounts[$account][$transactionCurrency] = bcadd($amounts[$account][$transactionCurrency] ?? '0', $sumAmount); $amounts[$account][$foreignCurrency] = bcadd($amounts[$account][$foreignCurrency] ?? '0', $sumForeignAmount); // first create for normal currency: - $entry = self::getAccountBalanceByJournal('balance_after_journal', $account, $journalId, $transactionCurrency); - $entry->balance = $amounts[$account][$transactionCurrency]; + $entry = self::getAccountBalanceByJournal('balance_after_journal', $account, $journalId, $transactionCurrency); + $entry->balance = $amounts[$account][$transactionCurrency]; $entry->save(); // then do foreign amount, if present: diff --git a/app/Support/Steam.php b/app/Support/Steam.php index 3e13ed18de..00b50458f6 100644 --- a/app/Support/Steam.php +++ b/app/Support/Steam.php @@ -25,7 +25,6 @@ namespace FireflyIII\Support; use Carbon\Carbon; use Carbon\Exceptions\InvalidFormatException; -use Exception; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Account; use FireflyIII\Models\Transaction; @@ -40,29 +39,31 @@ use Illuminate\Support\Facades\Log; */ class Steam { + /** + * @deprecated + */ public function balanceIgnoreVirtual(Account $account, Carbon $date): string { + Log::warning(sprintf('Deprecated method %s, do not use.', __METHOD__)); /** @var AccountRepositoryInterface $repository */ - $repository = app(AccountRepositoryInterface::class); + $repository = app(AccountRepositoryInterface::class); $repository->setUser($account->user); - $currencyId = (int)$repository->getMetaValue($account, 'currency_id'); - $transactions = $account->transactions() - ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) - ->where('transactions.transaction_currency_id', $currencyId) - ->get(['transactions.amount'])->toArray() - ; - $nativeBalance = $this->sumTransactions($transactions, 'amount'); + $currencyId = (int) $repository->getMetaValue($account, 'currency_id'); + $transactions = $account->transactions() + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) + ->where('transactions.transaction_currency_id', $currencyId) + ->get(['transactions.amount'])->toArray(); + $nativeBalance = $this->sumTransactions($transactions, 'amount'); // get all balances in foreign currency: - $transactions = $account->transactions() - ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) - ->where('transactions.foreign_currency_id', $currencyId) - ->where('transactions.transaction_currency_id', '!=', $currencyId) - ->get(['transactions.foreign_amount'])->toArray() - ; + $transactions = $account->transactions() + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) + ->where('transactions.foreign_currency_id', $currencyId) + ->where('transactions.transaction_currency_id', '!=', $currencyId) + ->get(['transactions.foreign_amount'])->toArray(); $foreignBalance = $this->sumTransactions($transactions, 'foreign_amount'); @@ -75,7 +76,7 @@ class Steam /** @var array $transaction */ foreach ($transactions as $transaction) { - $value = (string)($transaction[$key] ?? '0'); + $value = (string) ($transaction[$key] ?? '0'); $value = '' === $value ? '0' : $value; $sum = bcadd($sum, $value); } @@ -92,7 +93,8 @@ class Steam */ public function balanceInRange(Account $account, Carbon $start, Carbon $end, ?TransactionCurrency $currency = null): array { - $cache = new CacheProperties(); + Log::warning(sprintf('Deprecated method %s, do not use.', __METHOD__)); + $cache = new CacheProperties(); $cache->addProperty($account->id); $cache->addProperty('balance-in-range'); $cache->addProperty(null !== $currency ? $currency->id : 0); @@ -104,54 +106,53 @@ class Steam $start->subDay(); $end->addDay(); - $balances = []; - $formatted = $start->format('Y-m-d'); - $startBalance = $this->balance($account, $start, $currency); + $balances = []; + $formatted = $start->format('Y-m-d'); + $startBalance = $this->balance($account, $start, $currency); $balances[$formatted] = $startBalance; if (null === $currency) { $repository = app(AccountRepositoryInterface::class); $repository->setUser($account->user); - $currency = $repository->getAccountCurrency($account) ?? app('amount')->getDefaultCurrencyByUserGroup($account->user->userGroup); + $currency = $repository->getAccountCurrency($account) ?? app('amount')->getDefaultCurrencyByUserGroup($account->user->userGroup); } - $currencyId = $currency->id; + $currencyId = $currency->id; $start->addDay(); // query! - $set = $account->transactions() - ->leftJoin('transaction_journals', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') - ->where('transaction_journals.date', '>=', $start->format('Y-m-d 00:00:00')) - ->where('transaction_journals.date', '<=', $end->format('Y-m-d 23:59:59')) - ->groupBy('transaction_journals.date') - ->groupBy('transactions.transaction_currency_id') - ->groupBy('transactions.foreign_currency_id') - ->orderBy('transaction_journals.date', 'ASC') - ->whereNull('transaction_journals.deleted_at') - ->get( - [ // @phpstan-ignore-line - 'transaction_journals.date', - 'transactions.transaction_currency_id', - \DB::raw('SUM(transactions.amount) AS modified'), - 'transactions.foreign_currency_id', - \DB::raw('SUM(transactions.foreign_amount) AS modified_foreign'), - ] - ) - ; + $set = $account->transactions() + ->leftJoin('transaction_journals', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') + ->where('transaction_journals.date', '>=', $start->format('Y-m-d 00:00:00')) + ->where('transaction_journals.date', '<=', $end->format('Y-m-d 23:59:59')) + ->groupBy('transaction_journals.date') + ->groupBy('transactions.transaction_currency_id') + ->groupBy('transactions.foreign_currency_id') + ->orderBy('transaction_journals.date', 'ASC') + ->whereNull('transaction_journals.deleted_at') + ->get( + [ // @phpstan-ignore-line + 'transaction_journals.date', + 'transactions.transaction_currency_id', + \DB::raw('SUM(transactions.amount) AS modified'), + 'transactions.foreign_currency_id', + \DB::raw('SUM(transactions.foreign_amount) AS modified_foreign'), + ] + ); - $currentBalance = $startBalance; + $currentBalance = $startBalance; /** @var Transaction $entry */ foreach ($set as $entry) { // normal amount and foreign amount - $modified = (string)(null === $entry->modified ? '0' : $entry->modified); - $foreignModified = (string)(null === $entry->modified_foreign ? '0' : $entry->modified_foreign); + $modified = (string) (null === $entry->modified ? '0' : $entry->modified); + $foreignModified = (string) (null === $entry->modified_foreign ? '0' : $entry->modified_foreign); $amount = '0'; - if ($currencyId === (int)$entry->transaction_currency_id || 0 === $currencyId) { + if ($currencyId === (int) $entry->transaction_currency_id || 0 === $currencyId) { // use normal amount: $amount = $modified; } - if ($currencyId === (int)$entry->foreign_currency_id) { + if ($currencyId === (int) $entry->foreign_currency_id) { // use foreign amount: $amount = $foreignModified; } @@ -167,6 +168,45 @@ class Steam return $balances; } + public function balanceByTransactions(Account $account, Carbon $date, ?TransactionCurrency $currency): array + { + $cache = new CacheProperties(); + $cache->addProperty($account->id); + $cache->addProperty('balance-by-transactions'); + $cache->addProperty($date); + $cache->addProperty(null !== $currency ? $currency->id : 0); + if ($cache->has()) { + return $cache->get(); + } + + $query = $account->transactions() + ->leftJoin('transaction_journals', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') + ->orderBy('transaction_journals.date', 'desc') + ->orderBy('transaction_journals.order', 'asc') + ->orderBy('transaction_journals.description', 'desc') + ->orderBy('transactions.amount', 'desc'); + if (null !== $currency) { + $query->where('transactions.transaction_currency_id', $currency->id); + $query->limit(1); + $result = $query->get(['transactions.transaction_currency_id', 'transactions.balance_after'])->first(); + $key = (int) $result->transaction_currency_id; + $return = [$key => $result->balance_after]; + $cache->store($return); + return $return; + } + + $return = []; + $result = $query->get(['transactions.transaction_currency_id', 'transactions.balance_after']); + foreach ($result as $entry) { + $key = (int) $entry->transaction_currency_id; + if (array_key_exists($key, $return)) { + continue; + } + $return[$key] = $entry->balance_after; + } + return $return; + } + /** * Gets balance at the end of current month by default * @@ -174,8 +214,9 @@ class Steam */ public function balance(Account $account, Carbon $date, ?TransactionCurrency $currency = null): string { + Log::warning(sprintf('Deprecated method %s, do not use.', __METHOD__)); // abuse chart properties: - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($account->id); $cache->addProperty('balance'); $cache->addProperty($date); @@ -185,26 +226,24 @@ class Steam } /** @var AccountRepositoryInterface $repository */ - $repository = app(AccountRepositoryInterface::class); + $repository = app(AccountRepositoryInterface::class); if (null === $currency) { $currency = $repository->getAccountCurrency($account) ?? app('amount')->getDefaultCurrencyByUserGroup($account->user->userGroup); } // first part: get all balances in own currency: - $transactions = $account->transactions() - ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) - ->where('transactions.transaction_currency_id', $currency->id) - ->get(['transactions.amount'])->toArray() - ; - $nativeBalance = $this->sumTransactions($transactions, 'amount'); + $transactions = $account->transactions() + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) + ->where('transactions.transaction_currency_id', $currency->id) + ->get(['transactions.amount'])->toArray(); + $nativeBalance = $this->sumTransactions($transactions, 'amount'); // get all balances in foreign currency: $transactions = $account->transactions() - ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) - ->where('transactions.foreign_currency_id', $currency->id) - ->where('transactions.transaction_currency_id', '!=', $currency->id) - ->get(['transactions.foreign_amount'])->toArray() - ; + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) + ->where('transactions.foreign_currency_id', $currency->id) + ->where('transactions.transaction_currency_id', '!=', $currency->id) + ->get(['transactions.foreign_amount'])->toArray(); $foreignBalance = $this->sumTransactions($transactions, 'foreign_amount'); $balance = bcadd($nativeBalance, $foreignBalance); $virtual = null === $account->virtual_balance ? '0' : $account->virtual_balance; @@ -222,7 +261,8 @@ class Steam */ public function balanceInRangeConverted(Account $account, Carbon $start, Carbon $end, TransactionCurrency $native): array { - $cache = new CacheProperties(); + Log::warning(sprintf('Deprecated method %s, do not use.', __METHOD__)); + $cache = new CacheProperties(); $cache->addProperty($account->id); $cache->addProperty('balance-in-range-converted'); $cache->addProperty($native->id); @@ -242,35 +282,34 @@ class Steam Log::debug(sprintf('Start balance on %s is %s', $formatted, $startBalance)); Log::debug(sprintf('Created new ExchangeRateConverter in %s', __METHOD__)); - $converter = new ExchangeRateConverter(); + $converter = new ExchangeRateConverter(); // not sure why this is happening: $start->addDay(); // grab all transactions between start and end: - $set = $account->transactions() - ->leftJoin('transaction_journals', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') - ->where('transaction_journals.date', '>=', $start->format('Y-m-d 00:00:00')) - ->where('transaction_journals.date', '<=', $end->format('Y-m-d 23:59:59')) - ->orderBy('transaction_journals.date', 'ASC') - ->whereNull('transaction_journals.deleted_at') - ->get( - [ - 'transaction_journals.date', - 'transactions.transaction_currency_id', - 'transactions.amount', - 'transactions.foreign_currency_id', - 'transactions.foreign_amount', - ] - )->toArray() - ; + $set = $account->transactions() + ->leftJoin('transaction_journals', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') + ->where('transaction_journals.date', '>=', $start->format('Y-m-d 00:00:00')) + ->where('transaction_journals.date', '<=', $end->format('Y-m-d 23:59:59')) + ->orderBy('transaction_journals.date', 'ASC') + ->whereNull('transaction_journals.deleted_at') + ->get( + [ + 'transaction_journals.date', + 'transactions.transaction_currency_id', + 'transactions.amount', + 'transactions.foreign_currency_id', + 'transactions.foreign_amount', + ] + )->toArray(); // loop the set and convert if necessary: - $currentBalance = $startBalance; + $currentBalance = $startBalance; /** @var Transaction $transaction */ foreach ($set as $transaction) { - $day = false; + $day = false; try { $day = Carbon::parse($transaction['date'], config('app.timezone')); @@ -280,9 +319,9 @@ class Steam if (false === $day) { $day = today(config('app.timezone')); } - $format = $day->format('Y-m-d'); + $format = $day->format('Y-m-d'); // if the transaction is in the expected currency, change nothing. - if ((int)$transaction['transaction_currency_id'] === $native->id) { + if ((int) $transaction['transaction_currency_id'] === $native->id) { // change the current balance, set it to today, continue the loop. $currentBalance = bcadd($currentBalance, $transaction['amount']); $balances[$format] = $currentBalance; @@ -291,7 +330,7 @@ class Steam continue; } // if foreign currency is in the expected currency, do nothing: - if ((int)$transaction['foreign_currency_id'] === $native->id) { + if ((int) $transaction['foreign_currency_id'] === $native->id) { $currentBalance = bcadd($currentBalance, $transaction['foreign_amount']); $balances[$format] = $currentBalance; Log::debug(sprintf('%s: transaction in %s (foreign), new balance is %s.', $format, $native->code, $currentBalance)); @@ -299,25 +338,25 @@ class Steam continue; } // otherwise, convert 'amount' to the necessary currency: - $currencyId = (int)$transaction['transaction_currency_id']; + $currencyId = (int) $transaction['transaction_currency_id']; $currency = $currencies[$currencyId] ?? TransactionCurrency::find($currencyId); $currencies[$currencyId] = $currency; - $rate = $converter->getCurrencyRate($currency, $native, $day); - $convertedAmount = bcmul($transaction['amount'], $rate); - $currentBalance = bcadd($currentBalance, $convertedAmount); - $balances[$format] = $currentBalance; + $rate = $converter->getCurrencyRate($currency, $native, $day); + $convertedAmount = bcmul($transaction['amount'], $rate); + $currentBalance = bcadd($currentBalance, $convertedAmount); + $balances[$format] = $currentBalance; Log::debug(sprintf( - '%s: transaction in %s(!). Conversion rate is %s. %s %s = %s %s', - $format, - $currency->code, - $rate, - $currency->code, - $transaction['amount'], - $native->code, - $convertedAmount - )); + '%s: transaction in %s(!). Conversion rate is %s. %s %s = %s %s', + $format, + $currency->code, + $rate, + $currency->code, + $transaction['amount'], + $native->code, + $convertedAmount + )); } $cache->store($balances); @@ -347,8 +386,9 @@ class Steam */ public function balanceConverted(Account $account, Carbon $date, TransactionCurrency $native): string { + Log::warning(sprintf('Deprecated method %s, do not use.', __METHOD__)); Log::debug(sprintf('Now in balanceConverted (%s) for account #%d, converting to %s', $date->format('Y-m-d'), $account->id, $native->code)); - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($account->id); $cache->addProperty('balance'); $cache->addProperty($date); @@ -356,7 +396,7 @@ class Steam if ($cache->has()) { Log::debug('Cached!'); - // return $cache->get(); + return $cache->get(); } /** @var AccountRepositoryInterface $repository */ @@ -369,72 +409,66 @@ class Steam return $this->balance($account, $date); } - $new = []; - $existing = []; - $new[] = $account->transactions() // 1 - ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) - ->where('transactions.transaction_currency_id', $currency->id) - ->whereNull('transactions.foreign_currency_id') - ->get(['transaction_journals.date', 'transactions.amount'])->toArray() - ; + $new = []; + $existing = []; + $new[] = $account->transactions() // 1 + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) + ->where('transactions.transaction_currency_id', $currency->id) + ->whereNull('transactions.foreign_currency_id') + ->get(['transaction_journals.date', 'transactions.amount'])->toArray(); Log::debug(sprintf('%d transaction(s) in set #1', count($new[0]))); $existing[] = $account->transactions() // 2 - ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) - ->where('transactions.transaction_currency_id', $native->id) - ->whereNull('transactions.foreign_currency_id') - ->get(['transactions.amount'])->toArray() - ; + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) + ->where('transactions.transaction_currency_id', $native->id) + ->whereNull('transactions.foreign_currency_id') + ->get(['transactions.amount'])->toArray(); Log::debug(sprintf('%d transaction(s) in set #2', count($existing[0]))); - $new[] = $account->transactions() // 3 - ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) - ->where('transactions.transaction_currency_id', '!=', $currency->id) - ->where('transactions.transaction_currency_id', '!=', $native->id) - ->whereNull('transactions.foreign_currency_id') - ->get(['transaction_journals.date', 'transactions.amount'])->toArray() - ; + $new[] = $account->transactions() // 3 + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) + ->where('transactions.transaction_currency_id', '!=', $currency->id) + ->where('transactions.transaction_currency_id', '!=', $native->id) + ->whereNull('transactions.foreign_currency_id') + ->get(['transaction_journals.date', 'transactions.amount'])->toArray(); Log::debug(sprintf('%d transactions in set #3', count($new[1]))); $existing[] = $account->transactions() // 4 - ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) - ->where('transactions.foreign_currency_id', $native->id) - ->whereNotNull('transactions.foreign_amount') - ->get(['transactions.foreign_amount'])->toArray() - ; + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) + ->where('transactions.foreign_currency_id', $native->id) + ->whereNotNull('transactions.foreign_amount') + ->get(['transactions.foreign_amount'])->toArray(); Log::debug(sprintf('%d transactions in set #4', count($existing[1]))); - $new[] = $account->transactions()// 5 - ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) - ->where('transactions.transaction_currency_id', $currency->id) - ->where('transactions.foreign_currency_id', '!=', $native->id) - ->whereNotNull('transactions.foreign_amount') - ->get(['transaction_journals.date', 'transactions.amount'])->toArray() - ; + $new[] = $account->transactions()// 5 + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) + ->where('transactions.transaction_currency_id', $currency->id) + ->where('transactions.foreign_currency_id', '!=', $native->id) + ->whereNotNull('transactions.foreign_amount') + ->get(['transaction_journals.date', 'transactions.amount'])->toArray(); Log::debug(sprintf('%d transactions in set #5', count($new[2]))); - $new[] = $account->transactions()// 6 - ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) - ->where('transactions.transaction_currency_id', '!=', $currency->id) - ->where('transactions.foreign_currency_id', '!=', $native->id) - ->whereNotNull('transactions.foreign_amount') - ->get(['transaction_journals.date', 'transactions.amount'])->toArray() - ; + $new[] = $account->transactions()// 6 + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) + ->where('transactions.transaction_currency_id', '!=', $currency->id) + ->where('transactions.foreign_currency_id', '!=', $native->id) + ->whereNotNull('transactions.foreign_amount') + ->get(['transaction_journals.date', 'transactions.amount'])->toArray(); Log::debug(sprintf('%d transactions in set #6', count($new[3]))); // process both sets of transactions. Of course, no need to convert set "existing". - $balance = $this->sumTransactions($existing[0], 'amount'); - $balance = bcadd($balance, $this->sumTransactions($existing[1], 'foreign_amount')); + $balance = $this->sumTransactions($existing[0], 'amount'); + $balance = bcadd($balance, $this->sumTransactions($existing[1], 'foreign_amount')); Log::debug(sprintf('Balance from set #2 and #4 is %f', $balance)); // need to convert the others. All sets use the "amount" value as their base (that's easy) // but we need to convert each transaction separately because the date difference may // incur huge currency changes. Log::debug(sprintf('Created new ExchangeRateConverter in %s', __METHOD__)); - $start = clone $date; - $end = clone $date; - $converter = new ExchangeRateConverter(); + $start = clone $date; + $end = clone $date; + $converter = new ExchangeRateConverter(); foreach ($new as $set) { foreach ($set as $transaction) { $currentDate = false; @@ -457,7 +491,7 @@ class Steam foreach ($new as $set) { foreach ($set as $transaction) { - $currentDate = false; + $currentDate = false; try { $currentDate = Carbon::parse($transaction['date'], config('app.timezone')); @@ -474,9 +508,9 @@ class Steam } // add virtual balance (also needs conversion) - $virtual = null === $account->virtual_balance ? '0' : $account->virtual_balance; - $virtual = $converter->convert($currency, $native, $account->created_at, $virtual); - $balance = bcadd($balance, $virtual); + $virtual = null === $account->virtual_balance ? '0' : $account->virtual_balance; + $virtual = $converter->convert($currency, $native, $account->created_at, $virtual); + $balance = bcadd($balance, $virtual); $converter->summarize(); $cache->store($balance); @@ -492,9 +526,10 @@ class Steam */ public function balancesByAccounts(Collection $accounts, Carbon $date): array { - $ids = $accounts->pluck('id')->toArray(); + Log::warning(sprintf('Deprecated method %s, do not use.', __METHOD__)); + $ids = $accounts->pluck('id')->toArray(); // cache this property. - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($ids); $cache->addProperty('balances'); $cache->addProperty($date); @@ -522,14 +557,15 @@ class Steam */ public function balancesByAccountsConverted(Collection $accounts, Carbon $date): array { - $ids = $accounts->pluck('id')->toArray(); + Log::warning(sprintf('Deprecated method %s, do not use.', __METHOD__)); + $ids = $accounts->pluck('id')->toArray(); // cache this property. - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($ids); $cache->addProperty('balances-converted'); $cache->addProperty($date); if ($cache->has()) { - // return $cache->get(); + return $cache->get(); } // need to do this per account. @@ -540,9 +576,9 @@ class Steam $default = app('amount')->getDefaultCurrencyByUserGroup($account->user->userGroup); $result[$account->id] = [ - 'balance' => $this->balance($account, $date), - 'native_balance' => $this->balanceConverted($account, $date, $default), - ]; + 'balance' => $this->balance($account, $date), + 'native_balance' => $this->balanceConverted($account, $date, $default), + ]; } $cache->store($result); @@ -555,9 +591,10 @@ class Steam */ public function balancesPerCurrencyByAccounts(Collection $accounts, Carbon $date): array { - $ids = $accounts->pluck('id')->toArray(); + Log::warning(sprintf('Deprecated method %s, do not use.', __METHOD__)); + $ids = $accounts->pluck('id')->toArray(); // cache this property. - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($ids); $cache->addProperty('balances-per-currency'); $cache->addProperty($date); @@ -580,8 +617,9 @@ class Steam public function balancePerCurrency(Account $account, Carbon $date): array { + Log::warning(sprintf('Deprecated method %s, do not use.', __METHOD__)); // abuse chart properties: - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($account->id); $cache->addProperty('balance-per-currency'); $cache->addProperty($date); @@ -589,16 +627,15 @@ class Steam return $cache->get(); } $query = $account->transactions() - ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) - ->groupBy('transactions.transaction_currency_id') - ; + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) + ->groupBy('transactions.transaction_currency_id'); $balances = $query->get(['transactions.transaction_currency_id', \DB::raw('SUM(transactions.amount) as sum_for_currency')]); // @phpstan-ignore-line $return = []; /** @var \stdClass $entry */ foreach ($balances as $entry) { - $return[(int)$entry->transaction_currency_id] = (string)$entry->sum_for_currency; + $return[(int) $entry->transaction_currency_id] = (string) $entry->sum_for_currency; } $cache->store($return); @@ -624,10 +661,10 @@ class Steam // Log::debug(sprintf('Trying bcround("%s",%d)', $number, $precision)); if (str_contains($number, '.')) { 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; @@ -703,22 +740,22 @@ class Steam throw new FireflyException($e->getMessage(), 0, $e); } - return (string)$hostName; + return (string) $hostName; } public function getLastActivities(array $accounts): array { $list = []; - $set = auth()->user()->transactions() - ->whereIn('transactions.account_id', $accounts) - ->groupBy(['transactions.account_id', 'transaction_journals.user_id']) - ->get(['transactions.account_id', \DB::raw('MAX(transaction_journals.date) AS max_date')]) // @phpstan-ignore-line + $set = auth()->user()->transactions() + ->whereIn('transactions.account_id', $accounts) + ->groupBy(['transactions.account_id', 'transaction_journals.user_id']) + ->get(['transactions.account_id', \DB::raw('MAX(transaction_journals.date) AS max_date')]) // @phpstan-ignore-line ; /** @var Transaction $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')); $list[$entry->account_id] = $date; } @@ -738,7 +775,7 @@ class Steam if ('equal' === $locale) { $locale = $this->getLanguage(); } - $locale = (string)$locale; + $locale = (string) $locale; // Check for Windows to replace the locale correctly. if ('WIN' === strtoupper(substr(PHP_OS, 0, 3))) { @@ -793,9 +830,9 @@ class Steam public function getSafeUrl(string $unknownUrl, string $safeUrl): string { // Log::debug(sprintf('getSafeUrl(%s, %s)', $unknownUrl, $safeUrl)); - $returnUrl = $safeUrl; - $unknownHost = parse_url($unknownUrl, PHP_URL_HOST); - $safeHost = parse_url($safeUrl, PHP_URL_HOST); + $returnUrl = $safeUrl; + $unknownHost = parse_url($unknownUrl, PHP_URL_HOST); + $safeHost = parse_url($safeUrl, PHP_URL_HOST); if (null !== $unknownHost && $unknownHost === $safeHost) { $returnUrl = $unknownUrl; @@ -832,26 +869,26 @@ class Steam */ public function floatalize(string $value): string { - $value = strtoupper($value); + $value = strtoupper($value); if (!str_contains($value, 'E')) { return $value; } Log::debug(sprintf('Floatalizing %s', $value)); - $number = substr($value, 0, (int)strpos($value, 'E')); + $number = substr($value, 0, (int) strpos($value, 'E')); if (str_contains($number, '.')) { - $post = strlen(substr($number, (int)strpos($number, '.') + 1)); - $mantis = substr($value, (int)strpos($value, 'E') + 1); + $post = strlen(substr($number, (int) strpos($number, '.') + 1)); + $mantis = substr($value, (int) strpos($value, 'E') + 1); if ($mantis < 0) { - $post += abs((int)$mantis); + $post += abs((int) $mantis); } // TODO careless float could break financial math. - return number_format((float)$value, $post, '.', ''); + return number_format((float) $value, $post, '.', ''); } // TODO careless float could break financial math. - return number_format((float)$value, 0, '.', ''); + return number_format((float) $value, 0, '.', ''); } public function opposite(?string $amount = null): ?string @@ -871,24 +908,24 @@ class Steam // has a K in it, remove the K and multiply by 1024. $bytes = bcmul(rtrim($string, 'k'), '1024'); - return (int)$bytes; + return (int) $bytes; } if (false !== stripos($string, 'm')) { // has a M in it, remove the M and multiply by 1048576. $bytes = bcmul(rtrim($string, 'm'), '1048576'); - return (int)$bytes; + return (int) $bytes; } if (false !== stripos($string, 'g')) { // has a G in it, remove the G and multiply by (1024)^3. $bytes = bcmul(rtrim($string, 'g'), '1073741824'); - return (int)$bytes; + return (int) $bytes; } - return (int)$string; + return (int) $string; } public function positive(string $amount): string diff --git a/app/Support/Twig/General.php b/app/Support/Twig/General.php index f1f31767f9..03e291bc16 100644 --- a/app/Support/Twig/General.php +++ b/app/Support/Twig/General.php @@ -64,8 +64,14 @@ class General extends AbstractExtension /** @var Carbon $date */ $date = session('end', today(config('app.timezone'))->endOfMonth()); + $info = app('steam')->balanceByTransactions($account, $date, null); - return app('steam')->balance($account, $date); + $strings = []; + foreach($info as $currencyId => $balance) { + $strings[] = app('amount')->formatByCurrencyId($currencyId, $balance, false); + } + return implode(', ', $strings); + //return app('steam')->balance($account, $date); } ); } diff --git a/app/User.php b/app/User.php index 3c58550c92..deb0b896ab 100644 --- a/app/User.php +++ b/app/User.php @@ -24,8 +24,6 @@ declare(strict_types=1); namespace FireflyIII; -use Carbon\Carbon; -use Eloquent; use FireflyIII\Enums\UserRoleEnum; use FireflyIII\Events\RequestedNewPassword; use FireflyIII\Exceptions\FireflyException; @@ -56,129 +54,21 @@ use FireflyIII\Notifications\Admin\TestNotification; use FireflyIII\Notifications\Admin\UserInvitation; use FireflyIII\Notifications\Admin\UserRegistration; use FireflyIII\Notifications\Admin\VersionCheckResult; -use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasManyThrough; use Illuminate\Foundation\Auth\User as Authenticatable; -use Illuminate\Notifications\DatabaseNotification; -use Illuminate\Notifications\DatabaseNotificationCollection; use Illuminate\Notifications\Notifiable; use Illuminate\Notifications\Notification; use Illuminate\Support\Collection; use Illuminate\Support\Str; -use Laravel\Passport\Client; use Laravel\Passport\HasApiTokens; use Laravel\Passport\Token; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * Class User. - * - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) - * - * @property int|string $id - * @property string $email - * @property bool $isAdmin - * @property bool $has2FA - * @property array $prefs - * @property string $password - * @property string $mfa_secret - * @property Collection $roles - * @property string $blocked_code - * @property bool $blocked - * @property null|Carbon $created_at - * @property null|Carbon $updated_at - * @property null|string $remember_token - * @property null|string $reset - * @property Account[]|\Illuminate\Database\Eloquent\Collection $accounts - * @property Attachment[]|\Illuminate\Database\Eloquent\Collection $attachments - * @property AvailableBudget[]|\Illuminate\Database\Eloquent\Collection $availableBudgets - * @property Bill[]|\Illuminate\Database\Eloquent\Collection $bills - * @property Budget[]|\Illuminate\Database\Eloquent\Collection $budgets - * @property Category[]|\Illuminate\Database\Eloquent\Collection $categories - * @property Client[]|\Illuminate\Database\Eloquent\Collection $clients - * @property CurrencyExchangeRate[]|\Illuminate\Database\Eloquent\Collection $currencyExchangeRates - * @property DatabaseNotification[]|DatabaseNotificationCollection $notifications - * @property \Illuminate\Database\Eloquent\Collection|PiggyBank[] $piggyBanks - * @property \Illuminate\Database\Eloquent\Collection|Preference[] $preferences - * @property \Illuminate\Database\Eloquent\Collection|Recurrence[] $recurrences - * @property \Illuminate\Database\Eloquent\Collection|RuleGroup[] $ruleGroups - * @property \Illuminate\Database\Eloquent\Collection|Rule[] $rules - * @property \Illuminate\Database\Eloquent\Collection|Tag[] $tags - * @property \Illuminate\Database\Eloquent\Collection|Token[] $tokens - * @property \Illuminate\Database\Eloquent\Collection|TransactionGroup[] $transactionGroups - * @property \Illuminate\Database\Eloquent\Collection|TransactionJournal[] $transactionJournals - * @property \Illuminate\Database\Eloquent\Collection|Transaction[] $transactions - * - * @method static Builder|User newModelQuery() - * @method static Builder|User newQuery() - * @method static Builder|User query() - * @method static Builder|User whereBlocked($value) - * @method static Builder|User whereBlockedCode($value) - * @method static Builder|User whereCreatedAt($value) - * @method static Builder|User whereEmail($value) - * @method static Builder|User whereId($value) - * @method static Builder|User wherePassword($value) - * @method static Builder|User whereRememberToken($value) - * @method static Builder|User whereReset($value) - * @method static Builder|User whereUpdatedAt($value) - * - * @property null|string $objectguid - * @property null|int $accounts_count - * @property null|int $attachments_count - * @property null|int $available_budgets_count - * @property null|int $bills_count - * @property null|int $budgets_count - * @property null|int $categories_count - * @property null|int $clients_count - * @property null|int $currency_exchange_rates_count - * @property null|int $notifications_count - * @property null|int $piggy_banks_count - * @property null|int $preferences_count - * @property null|int $recurrences_count - * @property null|int $roles_count - * @property null|int $rule_groups_count - * @property null|int $rules_count - * @property null|int $tags_count - * @property null|int $tokens_count - * @property null|int $transaction_groups_count - * @property null|int $transaction_journals_count - * @property null|int $transactions_count - * - * @method static Builder|User whereMfaSecret($value) - * @method static Builder|User whereObjectguid($value) - * - * @property null|string $provider - * - * @method static Builder|User whereProvider($value) - * - * @property \Illuminate\Database\Eloquent\Collection|ObjectGroup[] $objectGroups - * @property null|int $object_groups_count - * @property \Illuminate\Database\Eloquent\Collection|Webhook[] $webhooks - * @property null|int $webhooks_count - * @property null|string $two_factor_secret - * @property null|string $two_factor_recovery_codes - * @property null|string $guid - * @property null|string $domain - * - * @method static Builder|User whereDomain($value) - * @method static Builder|User whereGuid($value) - * @method static Builder|User whereTwoFactorRecoveryCodes($value) - * @method static Builder|User whereTwoFactorSecret($value) - * - * @property null|int $user_group_id - * @property GroupMembership[]|\Illuminate\Database\Eloquent\Collection $groupMemberships - * @property null|int $group_memberships_count - * @property null|UserGroup $userGroup - * - * @method static Builder|User whereUserGroupId($value) - * - * @property \Illuminate\Database\Eloquent\Collection $currencies - * @property null|int $currencies_count - * - * @mixin Eloquent + * @mixin IdeHelperUser */ class User extends Authenticatable { diff --git a/composer.lock b/composer.lock index c6cfda6949..810ee5d0e3 100644 --- a/composer.lock +++ b/composer.lock @@ -2410,16 +2410,16 @@ }, { "name": "laravel/framework", - "version": "v11.18.1", + "version": "v11.19.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "b19ba518c56852567e99fbae9321bc436c2cc5a8" + "reference": "5e103d499e9ee5bcfc184412d034c4e516b87085" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/b19ba518c56852567e99fbae9321bc436c2cc5a8", - "reference": "b19ba518c56852567e99fbae9321bc436c2cc5a8", + "url": "https://api.github.com/repos/laravel/framework/zipball/5e103d499e9ee5bcfc184412d034c4e516b87085", + "reference": "5e103d499e9ee5bcfc184412d034c4e516b87085", "shasum": "" }, "require": { @@ -2612,7 +2612,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-07-26T10:39:29+00:00" + "time": "2024-07-30T15:22:41+00:00" }, { "name": "laravel/passport", @@ -11700,16 +11700,16 @@ }, { "name": "phpunit/phpunit", - "version": "10.5.28", + "version": "10.5.29", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "ff7fb85cdf88131b83e721fb2a327b664dbed275" + "reference": "8e9e80872b4e8064401788ee8a32d40b4455318f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ff7fb85cdf88131b83e721fb2a327b664dbed275", - "reference": "ff7fb85cdf88131b83e721fb2a327b664dbed275", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8e9e80872b4e8064401788ee8a32d40b4455318f", + "reference": "8e9e80872b4e8064401788ee8a32d40b4455318f", "shasum": "" }, "require": { @@ -11781,7 +11781,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.28" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.29" }, "funding": [ { @@ -11797,7 +11797,7 @@ "type": "tidelift" } ], - "time": "2024-07-18T14:54:16+00:00" + "time": "2024-07-30T11:08:00+00:00" }, { "name": "sebastian/cli-parser", diff --git a/database/migrations/2024_07_28_145631_add_running_balance.php b/database/migrations/2024_07_28_145631_add_running_balance.php index d1fe92cbc6..c8c07f3cc8 100644 --- a/database/migrations/2024_07_28_145631_add_running_balance.php +++ b/database/migrations/2024_07_28_145631_add_running_balance.php @@ -1,12 +1,13 @@ error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } + try { Schema::table( 'transactions', @@ -38,6 +40,7 @@ return new class extends Migration app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } + try { Schema::table( 'transactions', @@ -71,6 +74,7 @@ return new class extends Migration app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } + try { Schema::table( 'transactions', @@ -84,6 +88,7 @@ return new class extends Migration app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } + try { Schema::table( 'transactions', diff --git a/resources/views/index.twig b/resources/views/index.twig index 15dcffb703..e9334c9370 100644 --- a/resources/views/index.twig +++ b/resources/views/index.twig @@ -105,7 +105,7 @@