diff --git a/app/Http/Controllers/Chart/AccountController.php b/app/Http/Controllers/Chart/AccountController.php index e3889993fc..c6b2984728 100644 --- a/app/Http/Controllers/Chart/AccountController.php +++ b/app/Http/Controllers/Chart/AccountController.php @@ -345,6 +345,9 @@ class AccountController extends Controller } $accounts = $repository->getAccountsById($frontpageArray); + // move to end of day for $end. + $end->endOfDay(); + return response()->json($this->accountBalanceChart($accounts, $start, $end)); } diff --git a/app/Support/Http/Controllers/ChartGeneration.php b/app/Support/Http/Controllers/ChartGeneration.php index 93c2a238eb..9c82e37238 100644 --- a/app/Support/Http/Controllers/ChartGeneration.php +++ b/app/Support/Http/Controllers/ChartGeneration.php @@ -33,6 +33,7 @@ use FireflyIII\Support\CacheProperties; use FireflyIII\Support\Facades\Amount; use FireflyIII\Support\Facades\Steam; use Illuminate\Support\Collection; +use Illuminate\Support\Facades\Log; /** * Trait ChartGeneration @@ -69,8 +70,11 @@ trait ChartGeneration $default = app('amount')->getNativeCurrency(); $chartData = []; + Log::debug(sprintf('Start of accountBalanceChart(list, %s, %s)', $start->format('Y-m-d H:i:s'), $end->format('Y-m-d H:i:s'))); + /** @var Account $account */ foreach ($accounts as $account) { + Log::debug(sprintf('Now at account #%d ("%s)', $account->id, $account->name)); $currency = $accountRepos->getAccountCurrency($account) ?? $default; $useNative = $convertToNative && $default->id !== $currency->id; $field = $useNative ? 'native_balance' : 'balance'; @@ -82,7 +86,7 @@ trait ChartGeneration ]; $currentStart = clone $start; - $range = Steam::finalAccountBalanceInRange($account, $start, clone $end, $this->convertToNative); + $range = Steam::finalAccountBalanceInRange($account, clone $start, clone $end, $this->convertToNative); $previous = array_values($range)[0]; while ($currentStart <= $end) { $format = $currentStart->format('Y-m-d'); diff --git a/app/Support/Steam.php b/app/Support/Steam.php index 2d4cc21547..89b2f924e0 100644 --- a/app/Support/Steam.php +++ b/app/Support/Steam.php @@ -59,8 +59,8 @@ class Steam public function finalAccountBalanceInRange(Account $account, Carbon $start, Carbon $end, bool $convertToNative): array { // expand period. - $start->subDay()->startOfDay(); - $end->addDay()->endOfDay(); + $start->subDay()->endOfDay(); // go to END of day to get the balance at the END of the day. + $end->addDay()->startOfDay(); // go to START of day to get the balance at the END of the previous day (see ahead). Log::debug(sprintf('finalAccountBalanceInRange(#%d, %s, %s)', $account->id, $start->format('Y-m-d H:i:s'), $end->format('Y-m-d H:i:s'))); // set up cache @@ -102,8 +102,8 @@ class Steam // sums up the balance changes per day. $set = $account->transactions() ->leftJoin('transaction_journals', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') - ->where('transaction_journals.date', '>=', $start->format('Y-m-d H:i:s')) - ->where('transaction_journals.date', '<=', $end->format('Y-m-d H:i:s')) + ->where('transaction_journals.date', '>', $start->format('Y-m-d H:i:s')) + ->where('transaction_journals.date', '<', $end->format('Y-m-d H:i:s')) ->groupBy('transaction_journals.date') ->groupBy('transactions.transaction_currency_id') ->orderBy('transaction_journals.date', 'ASC') @@ -125,6 +125,7 @@ class Steam foreach ($set as $entry) { // get date object $carbon = new Carbon($entry->date, $entry->date_tz); + $carbonKey = $carbon->format('Y-m-d'); // make sure sum is a string: $sumOfDay = (string) (null === $entry->sum_of_day ? '0' : $entry->sum_of_day); @@ -135,7 +136,7 @@ class Steam /** @var TransactionCurrency $entryCurrency */ $entryCurrency = $currencies[$entry->transaction_currency_id]; - Log::debug(sprintf('Processing transaction(s) on date %s', $carbon->format('Y-m-d H:i:s'))); + Log::debug(sprintf('Processing transaction(s) on moment %s', $carbon->format('Y-m-d H:i:s'))); $currentBalance[$entryCurrency->code] ??= '0'; $currentBalance[$entryCurrency->code] = bcadd($sumOfDay, $currentBalance[$entryCurrency->code]); @@ -148,9 +149,9 @@ class Steam $nativeSumOfDay = $converter->convert($entryCurrency, $nativeCurrency, $carbon, $sumOfDay); $currentBalance['native_balance'] = bcadd($currentBalance['native_balance'], $nativeSumOfDay); } - // add final $currentBalance array to the big one. - $balances[$carbon->format('Y-m-d')] = $currentBalance; - Log::debug('Updated entry', $currentBalance); + // just set it. + $balances[$carbonKey] = $currentBalance; + Log::debug(sprintf('Updated entry [%s]', $carbonKey), $currentBalance); } $cache->store($balances); Log::debug('End of method'); @@ -268,14 +269,15 @@ class Steam */ public function finalAccountBalance(Account $account, Carbon $date): array { + $cache = new CacheProperties(); $cache->addProperty($account->id); $cache->addProperty($date); if ($cache->has()) { - return $cache->get(); +// Log::debug(sprintf('CACHED finalAccountBalance(#%d, %s)', $account->id, $date->format('Y-m-d H:i:s'))); +// return $cache->get(); } - - Log::debug(sprintf('Now in finalAccountBalance(#%d, "%s", "%s")', $account->id, $account->name, $date->format('Y-m-d H:i:s'))); + Log::debug(sprintf('finalAccountBalance(#%d, %s)', $account->id, $date->format('Y-m-d H:i:s'))); $native = Amount::getNativeCurrencyByUserGroup($account->user->userGroup); $convertToNative = Amount::convertToNative($account->user);