gitMerge branch 'develop' of https://github.com/firefly-iii/firefly-iii into develop

This commit is contained in:
James Cole
2024-08-02 16:13:16 +02:00
82 changed files with 1056 additions and 2352 deletions

View File

@@ -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#'

View File

@@ -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();

View File

@@ -102,6 +102,7 @@ class PreferencesController extends Controller
* TODO This endpoint is not documented.
*
* Return a single preference by name.
* @param Collection<int, Preference> $collection
*/
public function showList(Collection $collection): JsonResponse
{

View File

@@ -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);
}

View File

@@ -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...

View File

@@ -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,12 +100,14 @@ 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;
}
@@ -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;
/** @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,11 +198,13 @@ 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();
/** @var Transaction $source */
$source = $journal->transactions()->where('amount', '<', 0)->first();
@@ -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;
}
}
}

View File

@@ -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;
}

View File

@@ -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;
@@ -130,6 +130,7 @@ class OtherCurrenciesCorrections extends Command
$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:
if (!$isMultiCurrency) {
$journal->transaction_currency_id = $currency->id;
}
++$this->count;
$journal->save();
}
@@ -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;
}
}

View File

@@ -268,8 +268,8 @@ class TransactionJournalFactory
// 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
if (null !== $foreignCurrency && $foreignCurrency->id !== $currency->id
&& TransactionType::TRANSFER === $type->type
) {
$transactionFactory->setCurrency($foreignCurrency);
$transactionFactory->setForeignCurrency($currency);

View File

@@ -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');

View File

@@ -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',

View File

@@ -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();
}
}

View File

@@ -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,
];
}

View File

@@ -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()
$repository = AccountRepository::make()
->withServer($this->server)
->withSchema($this)
->withUserGroup($this->userGroup)
;
->withUserGroup($this->userGroup);
Log::debug(sprintf('%s: %s', __METHOD__, get_class($repository)));
return $repository;
}
}

View File

@@ -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,10 +43,13 @@ 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
{
@@ -60,6 +64,9 @@ class AccountQuery extends QueryAll implements HasPagination
// This is necessary when the user wants to sort on specific params.
$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();
@@ -72,11 +79,14 @@ class AccountQuery extends QueryAll implements HasPagination
$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

View File

@@ -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);
}

View File

@@ -42,7 +42,7 @@ class Server extends BaseServer
*/
protected function allSchemas(): array
{
Log::debug(__METHOD__);
// Log::debug(__METHOD__);
return [
AccountSchema::class,

View File

@@ -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
{

View File

@@ -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;

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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<int, TransactionJournal> $transactionJournals
* @property null|int $transaction_journals_count
*
* @mixin Eloquent
* @mixin IdeHelperLocation
*/
class Location extends Model
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{
@@ -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,
);
}

View File

@@ -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<int, UserGroup> $userGroups
* @property null|int $user_groups_count
* @property Collection<int, User> $users
* @property null|int $users_count
*
* @mixin Eloquent
* @mixin IdeHelperTransactionCurrency
*/
class TransactionCurrency extends Model
{

View File

@@ -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
{

View File

@@ -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<int, AuditLogEntry> $auditLogEntries
* @property null|int $audit_log_entries_count
*
* @mixin Eloquent
* @mixin IdeHelperTransactionJournal
*/
class TransactionJournal extends Model
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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<int, Account> $accounts
* @property null|int $accounts_count
* @property Collection<int, AvailableBudget> $availableBudgets
* @property null|int $available_budgets_count
* @property Collection<int, Bill> $bills
* @property null|int $bills_count
* @property Collection<int, Budget> $budgets
* @property null|int $budgets_count
* @property Collection<int, PiggyBank> $piggyBanks
* @property null|int $piggy_banks_count
* @property Collection<int, TransactionJournal> $transactionJournals
* @property null|int $transaction_journals_count
* @property Collection<int, Attachment> $attachments
* @property null|int $attachments_count
* @property Collection<int, Category> $categories
* @property null|int $categories_count
* @property Collection<int, CurrencyExchangeRate> $currencyExchangeRates
* @property null|int $currency_exchange_rates_count
* @property Collection<int, ObjectGroup> $objectGroups
* @property null|int $object_groups_count
* @property Collection<int, Recurrence> $recurrences
* @property null|int $recurrences_count
* @property Collection<int, RuleGroup> $ruleGroups
* @property null|int $rule_groups_count
* @property Collection<int, Rule> $rules
* @property null|int $rules_count
* @property Collection<int, Tag> $tags
* @property null|int $tags_count
* @property Collection<int, TransactionGroup> $transactionGroups
* @property null|int $transaction_groups_count
* @property Collection<int, Webhook> $webhooks
* @property null|int $webhooks_count
* @property Collection<int, TransactionCurrency> $currencies
* @property null|int $currencies_count
*
* @mixin Eloquent
* @mixin IdeHelperUserGroup
*/
class UserGroup extends Model
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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 () {

View File

@@ -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) {

View File

@@ -0,0 +1,79 @@
<?php
/*
* IsValidDateRange.php
* Copyright (c) 2024 james@firefly-iii.org.
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see https://www.gnu.org/licenses/.
*/
declare(strict_types=1);
namespace FireflyIII\Rules;
use Carbon\Carbon;
use Carbon\Exceptions\InvalidDateException;
use Carbon\Exceptions\InvalidFormatException;
use Illuminate\Contracts\Validation\ValidationRule;
class IsValidDateRange implements ValidationRule
{
/**
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function validate(string $attribute, mixed $value, \Closure $fail): void
{
$value = (string) $value;
if ('' === $value) {
$fail('validation.date_or_time')->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();
}
}
}

View File

@@ -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()));
@@ -657,11 +658,14 @@ class JournalUpdateService
return;
}
$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->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);
}
if(TransactionType::TRANSFER !== $this->transactionJournal->transactionType->type) {
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 {}
}

View File

@@ -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.

79
app/Support/Balance.php Normal file
View File

@@ -0,0 +1,79 @@
<?php
/*
* Balance.php
* Copyright (c) 2024 james@firefly-iii.org.
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see https://www.gnu.org/licenses/.
*/
declare(strict_types=1);
namespace FireflyIII\Support;
use Carbon\Carbon;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionCurrency;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Log;
class Balance
{
/**
* Returns the accounts balances as an array, on the account ID.
*
* @param Collection $accounts
* @param Carbon $date
*
* @return array
*/
public function getAccountBalances(Collection $accounts, Carbon $date): array
{
Log::debug(sprintf('getAccountBalances(<collection>, "%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;
}
}

View File

@@ -0,0 +1,37 @@
<?php
/*
* Balance.php
* Copyright (c) 2024 james@firefly-iii.org.
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see https://www.gnu.org/licenses/.
*/
declare(strict_types=1);
namespace FireflyIII\Support\Facades;
use Illuminate\Support\Facades\Facade;
class Balance extends Facade
{
/**
* Get the registered name of the component.
*/
protected static function getFacadeAccessor(): string
{
return 'balance';
}
}

View File

@@ -44,12 +44,18 @@ class ExchangeRateConverter
private array $prepared = [];
private int $queryCount = 0;
public function enabled(): bool
{
return false !== config('cer.enabled');
}
/**
* @throws FireflyException
*/
public function convert(TransactionCurrency $from, TransactionCurrency $to, Carbon $date, string $amount): string
{
if (false === config('cer.enabled')) {
if (false === $this->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';
@@ -161,8 +167,7 @@ class ExchangeRateConverter
->where('to_currency_id', $to)
->where('date', '<=', $date)
->orderBy('date', 'DESC')
->first()
;
->first();
++$this->queryCount;
$rate = (string) $result?->rate;
@@ -254,7 +259,7 @@ 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()');
@@ -267,8 +272,7 @@ class ExchangeRateConverter
->where('to_currency_id', $to->id)
->where('date', '<=', $end->format('Y-m-d'))
->where('date', '>=', $start->format('Y-m-d'))
->orderBy('date', 'DESC')->get()
;
->orderBy('date', 'DESC')->get();
++$this->queryCount;
if (0 === $set->count()) {
Log::debug('No prepared rates found in this period, use the 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));

View File

@@ -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 */

View File

@@ -0,0 +1,43 @@
<?php
/*
* CollectsCustomParameters.php
* Copyright (c) 2024 james@firefly-iii.org.
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see https://www.gnu.org/licenses/.
*/
declare(strict_types=1);
namespace FireflyIII\Support\JsonApi;
use Carbon\Carbon;
trait CollectsCustomParameters
{
protected function getOtherParams(array $params): array
{
$return = [];
if (array_key_exists('startPeriod', $params)) {
$return['start'] = Carbon::parse($params['startPeriod']);
}
if (array_key_exists('endPeriod', $params)) {
$return['end'] = Carbon::parse($params['endPeriod']);
}
return $return;
}
}

View File

@@ -24,11 +24,14 @@ declare(strict_types=1);
namespace FireflyIII\Support\JsonApi\Enrichments;
use Carbon\Carbon;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Account;
use FireflyIII\Models\AccountType;
use FireflyIII\Models\ObjectGroup;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
use FireflyIII\Support\Facades\Balance;
use FireflyIII\Support\Http\Api\ExchangeRateConverter;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Log;
@@ -42,6 +45,12 @@ class AccountEnrichment implements EnrichmentInterface
{
private Collection $collection;
private array $currencies;
private array $objectGroups;
private array $grouped;
private array $balances;
private TransactionCurrency $default;
private ?Carbon $start;
private ?Carbon $end;
private AccountRepositoryInterface $repository;
private CurrencyRepositoryInterface $currencyRepository;
@@ -50,6 +59,8 @@ class AccountEnrichment implements EnrichmentInterface
{
$this->repository = app(AccountRepositoryInterface::class);
$this->currencyRepository = app(CurrencyRepositoryInterface::class);
$this->start = null;
$this->end = null;
}
#[\Override]
@@ -61,13 +72,18 @@ class AccountEnrichment implements EnrichmentInterface
Log::debug(sprintf('Now doing account enrichment for %d account(s)', $collection->count()));
// prep local fields
$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,7 +202,7 @@ 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 = [];
@@ -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;
});
}
}

View File

@@ -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,36 +46,35 @@ 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
{
Log::debug(__METHOD__);
$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());
// 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
@@ -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,14 +108,16 @@ 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());
}
@@ -129,13 +132,13 @@ class AccountBalanceCalculator
// before and after are easy:
$before = $balances[$entry->account_id][$entry->transaction_currency_id];
$after = bcadd($before, $entry->amount);
if (true === $entry->balance_dirty) {
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:

View File

@@ -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,19 +39,22 @@ 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->setUser($account->user);
$currencyId = (int)$repository->getMetaValue($account, 'currency_id');
$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()
;
->get(['transactions.amount'])->toArray();
$nativeBalance = $this->sumTransactions($transactions, 'amount');
// get all balances in foreign currency:
@@ -61,8 +63,7 @@ class Steam
->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()
;
->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,6 +93,7 @@ class Steam
*/
public function balanceInRange(Account $account, Carbon $start, Carbon $end, ?TransactionCurrency $currency = null): array
{
Log::warning(sprintf('Deprecated method %s, do not use.', __METHOD__));
$cache = new CacheProperties();
$cache->addProperty($account->id);
$cache->addProperty('balance-in-range');
@@ -136,22 +138,21 @@ class Steam
'transactions.foreign_currency_id',
\DB::raw('SUM(transactions.foreign_amount) AS modified_foreign'),
]
)
;
);
$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,6 +214,7 @@ 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->addProperty($account->id);
@@ -194,8 +235,7 @@ class Steam
->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()
;
->get(['transactions.amount'])->toArray();
$nativeBalance = $this->sumTransactions($transactions, 'amount');
// get all balances in foreign currency:
$transactions = $account->transactions()
@@ -203,8 +243,7 @@ class Steam
->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()
;
->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,6 +261,7 @@ class Steam
*/
public function balanceInRangeConverted(Account $account, Carbon $start, Carbon $end, TransactionCurrency $native): array
{
Log::warning(sprintf('Deprecated method %s, do not use.', __METHOD__));
$cache = new CacheProperties();
$cache->addProperty($account->id);
$cache->addProperty('balance-in-range-converted');
@@ -262,8 +302,7 @@ class Steam
'transactions.foreign_currency_id',
'transactions.foreign_amount',
]
)->toArray()
;
)->toArray();
// loop the set and convert if necessary:
$currentBalance = $startBalance;
@@ -282,7 +321,7 @@ class Steam
}
$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,7 +338,7 @@ 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;
@@ -347,6 +386,7 @@ 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->addProperty($account->id);
@@ -356,7 +396,7 @@ class Steam
if ($cache->has()) {
Log::debug('Cached!');
// return $cache->get();
return $cache->get();
}
/** @var AccountRepositoryInterface $repository */
@@ -376,16 +416,14 @@ class Steam
->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()
;
->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()
;
->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')
@@ -393,16 +431,14 @@ class Steam
->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()
;
->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()
;
->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')
@@ -410,8 +446,7 @@ class Steam
->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()
;
->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')
@@ -419,8 +454,7 @@ class Steam
->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()
;
->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".
@@ -492,6 +526,7 @@ class Steam
*/
public function balancesByAccounts(Collection $accounts, Carbon $date): array
{
Log::warning(sprintf('Deprecated method %s, do not use.', __METHOD__));
$ids = $accounts->pluck('id')->toArray();
// cache this property.
$cache = new CacheProperties();
@@ -522,6 +557,7 @@ class Steam
*/
public function balancesByAccountsConverted(Collection $accounts, Carbon $date): array
{
Log::warning(sprintf('Deprecated method %s, do not use.', __METHOD__));
$ids = $accounts->pluck('id')->toArray();
// cache this property.
$cache = new CacheProperties();
@@ -529,7 +565,7 @@ class Steam
$cache->addProperty('balances-converted');
$cache->addProperty($date);
if ($cache->has()) {
// return $cache->get();
return $cache->get();
}
// need to do this per account.
@@ -555,6 +591,7 @@ class Steam
*/
public function balancesPerCurrencyByAccounts(Collection $accounts, Carbon $date): array
{
Log::warning(sprintf('Deprecated method %s, do not use.', __METHOD__));
$ids = $accounts->pluck('id')->toArray();
// cache this property.
$cache = new CacheProperties();
@@ -580,6 +617,7 @@ 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->addProperty($account->id);
@@ -591,14 +629,13 @@ class Steam
$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')
;
->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,7 +740,7 @@ class Steam
throw new FireflyException($e->getMessage(), 0, $e);
}
return (string)$hostName;
return (string) $hostName;
}
public function getLastActivities(array $accounts): array
@@ -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))) {
@@ -838,20 +875,20 @@ class Steam
}
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

View File

@@ -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);
}
);
}

View File

@@ -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<int, TransactionCurrency> $currencies
* @property null|int $currencies_count
*
* @mixin Eloquent
* @mixin IdeHelperUser
*/
class User extends Authenticatable
{

22
composer.lock generated
View File

@@ -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",

View File

@@ -1,12 +1,13 @@
<?php
declare(strict_types=1);
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\QueryException;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
return new class () extends Migration {
/**
* Run the migrations.
*/
@@ -25,6 +26,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',
@@ -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',

View File

@@ -105,7 +105,7 @@
<div class="btn-group">
<a type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false"
href="{{ route('accounts.show', [data.account.id]) }}">{{ formatAmountByAccount(data.account, data.account|balance, false) }}
href="{{ route('accounts.show', [data.account.id]) }}">{{ data.account|balance }}
<span class="caret"></span>
</a>
<ul class="dropdown-menu">