/** * * @param \FireflyIII\Models\Account $account * @param \Carbon\Carbon $date * * @return string */ public function balanceIgnoreVirtual(Account $account, Carbon $date) : string { // abuse chart properties: $cache = new CacheProperties(); $cache->addProperty($account->id); $cache->addProperty('balance-no-virtual'); $cache->addProperty($date); if ($cache->has()) { return $cache->get(); } $balance = strval($account->transactions()->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')->where('transaction_journals.date', '<=', $date->format('Y-m-d'))->sum('transactions.amount')); $cache->store($balance); return $balance; }
/** * * @param \FireflyIII\Models\Account $account * @param \Carbon\Carbon $date * @param bool $ignoreVirtualBalance * * @return float */ public function balance(Account $account, Carbon $date, $ignoreVirtualBalance = false) { // abuse chart properties: $cache = new CacheProperties(); $cache->addProperty($account->id); $cache->addProperty('balance'); $cache->addProperty($date); $cache->addProperty($ignoreVirtualBalance); if ($cache->has()) { return $cache->get(); // @codeCoverageIgnore } bcscale(2); $balance = $account->transactions()->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')->where('transaction_journals.date', '<=', $date->format('Y-m-d'))->sum('transactions.amount'); if (!$ignoreVirtualBalance) { $balance = bcadd($balance, $account->virtual_balance); } $cache->store(round($balance, 2)); return round($balance, 2); }
/** * @param Account $account * * @return Carbon */ public function firstUseDate(Account $account) : Carbon { $first = new Carbon('1900-01-01'); /** @var Transaction $first */ $date = $account->transactions()->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')->orderBy('transaction_journals.date', 'ASC')->orderBy('transaction_journals.order', 'DESC')->orderBy('transaction_journals.id', 'ASC')->first(['transaction_journals.date']); if (!is_null($date)) { $first = new Carbon($date->date); } return $first; }
/** * @param Account $account * * @return Carbon|null */ public function getLastActivity(Account $account) { $lastTransaction = $account->transactions()->leftJoin('transaction_journals', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')->orderBy('transaction_journals.date', 'DESC')->first(['transactions.*', 'transaction_journals.date']); if ($lastTransaction) { return $lastTransaction->transactionjournal->date; } return null; }