diff --git a/app/Helpers/Report/AccountReportHelper.php b/app/Helpers/Report/AccountReportHelper.php deleted file mode 100644 index 5cf499285c..0000000000 --- a/app/Helpers/Report/AccountReportHelper.php +++ /dev/null @@ -1,87 +0,0 @@ -pluck('id')->toArray(); - $yesterday = clone $start; - $yesterday->subDay(); - $startSet = Steam::balancesById($ids, $yesterday); - $backupSet = Steam::balancesById($ids, $start); - $endSet = Steam::balancesById($ids, $end); - - Log::debug( - sprintf( - 'getAccountReport from %s to %s for %d accounts.', - $start->format('Y-m-d'), - $end->format('Y-m-d'), - $accounts->count() - ) - ); - $accounts->each( - function (Account $account) use ($startSet, $endSet, $backupSet) { - $account->startBalance = $startSet[$account->id] ?? '0'; - $account->endBalance = $endSet[$account->id] ?? '0'; - - // check backup set just in case: - if ($account->startBalance === '0' && isset($backupSet[$account->id])) { - $account->startBalance = $backupSet[$account->id]; - } - } - ); - - // summarize: - foreach ($accounts as $account) { - $startAmount = bcadd($startAmount, $account->startBalance); - $endAmount = bcadd($endAmount, $account->endBalance); - $diff = bcadd($diff, bcsub($account->endBalance, $account->startBalance)); - } - - $object = new AccountCollection; - $object->setStart($startAmount); - $object->setEnd($endAmount); - $object->setDifference($diff); - $object->setAccounts($accounts); - - - return $object; - } -} diff --git a/app/Helpers/Report/AccountReportHelperInterface.php b/app/Helpers/Report/AccountReportHelperInterface.php deleted file mode 100644 index f5703957b2..0000000000 --- a/app/Helpers/Report/AccountReportHelperInterface.php +++ /dev/null @@ -1,40 +0,0 @@ -helper = app(ReportHelperInterface::class); - $this->accountHelper = app(AccountReportHelperInterface::class); + $this->accountTasker = app(AccountTaskerInterface::class); $this->budgetHelper = app(BudgetReportHelperInterface::class); $this->balanceHelper = app(BalanceReportHelperInterface::class); } @@ -253,7 +254,7 @@ class ReportController extends Controller $expenseTopLength = 8; // get report stuff! - $accountReport = $this->accountHelper->getAccountReport($start, $end, $accounts); + $accountReport = $this->accountTasker->getAccountReport($start, $end, $accounts); $incomes = $this->helper->getIncomeReport($start, $end, $accounts); $expenses = $this->helper->getExpenseReport($start, $end, $accounts); $budgets = $this->budgetHelper->getBudgetReport($start, $end, $accounts); @@ -297,7 +298,7 @@ class ReportController extends Controller // list of users stuff: $budgets = app(BudgetRepositoryInterface::class)->getActiveBudgets(); $categories = app(CategoryRepositoryInterface::class)->getCategories(); - $accountReport = $this->accountHelper->getAccountReport($start, $end, $accounts); + $accountReport = $this->accountTasker->getAccountReport($start, $end, $accounts); $incomes = $this->helper->getIncomeReport($start, $end, $accounts); $expenses = $this->helper->getExpenseReport($start, $end, $accounts); $tags = $this->helper->tagReport($start, $end, $accounts); @@ -332,7 +333,7 @@ class ReportController extends Controller $incomeTopLength = 8; $expenseTopLength = 8; - $accountReport = $this->accountHelper->getAccountReport($start, $end, $accounts); + $accountReport = $this->accountTasker->getAccountReport($start, $end, $accounts); $incomes = $this->helper->getIncomeReport($start, $end, $accounts); $expenses = $this->helper->getExpenseReport($start, $end, $accounts); $tags = $this->helper->tagReport($start, $end, $accounts); diff --git a/app/Providers/AccountServiceProvider.php b/app/Providers/AccountServiceProvider.php index dd65e6f5d6..a91cc1ac1d 100644 --- a/app/Providers/AccountServiceProvider.php +++ b/app/Providers/AccountServiceProvider.php @@ -55,5 +55,19 @@ class AccountServiceProvider extends ServiceProvider return app('FireflyIII\Repositories\Account\AccountRepository', $arguments); } ); + + $this->app->bind( + 'FireflyIII\Repositories\Account\AccountTaskerInterface', + function (Application $app, array $arguments) { + if (!isset($arguments[0]) && $app->auth->check()) { + return app('FireflyIII\Repositories\Account\AccountTasker', [auth()->user()]); + } + if (!isset($arguments[0]) && !$app->auth->check()) { + throw new FireflyException('There is no user present.'); + } + + return app('FireflyIII\Repositories\Account\AccountTasker', $arguments); + } + ); } } diff --git a/app/Repositories/Account/AccountTasker.php b/app/Repositories/Account/AccountTasker.php index d7811f9ff5..5beb77c121 100644 --- a/app/Repositories/Account/AccountTasker.php +++ b/app/Repositories/Account/AccountTasker.php @@ -13,7 +13,13 @@ declare(strict_types = 1); namespace FireflyIII\Repositories\Account; +use Carbon\Carbon; +use FireflyIII\Models\Account; use FireflyIII\User; +use Illuminate\Support\Collection; +use FireflyIII\Helpers\Collection\Account as AccountCollection; +use Log; +use Steam; /** * Class AccountTasker @@ -34,4 +40,60 @@ class AccountTasker { $this->user = $user; } + + /** + * @param Carbon $start + * @param Carbon $end + * @param Collection $accounts + * + * @return AccountCollection + */ + public function getAccountReport(Carbon $start, Carbon $end, Collection $accounts): AccountCollection + { + $startAmount = '0'; + $endAmount = '0'; + $diff = '0'; + $ids = $accounts->pluck('id')->toArray(); + $yesterday = clone $start; + $yesterday->subDay(); + $startSet = Steam::balancesById($ids, $yesterday); + $backupSet = Steam::balancesById($ids, $start); + $endSet = Steam::balancesById($ids, $end); + + Log::debug( + sprintf( + 'getAccountReport from %s to %s for %d accounts.', + $start->format('Y-m-d'), + $end->format('Y-m-d'), + $accounts->count() + ) + ); + $accounts->each( + function (Account $account) use ($startSet, $endSet, $backupSet) { + $account->startBalance = $startSet[$account->id] ?? '0'; + $account->endBalance = $endSet[$account->id] ?? '0'; + + // check backup set just in case: + if ($account->startBalance === '0' && isset($backupSet[$account->id])) { + $account->startBalance = $backupSet[$account->id]; + } + } + ); + + // summarize: + foreach ($accounts as $account) { + $startAmount = bcadd($startAmount, $account->startBalance); + $endAmount = bcadd($endAmount, $account->endBalance); + $diff = bcadd($diff, bcsub($account->endBalance, $account->startBalance)); + } + + $object = new AccountCollection; + $object->setStart($startAmount); + $object->setEnd($endAmount); + $object->setDifference($diff); + $object->setAccounts($accounts); + + + return $object; + } } \ No newline at end of file diff --git a/app/Repositories/Account/AccountTaskerInterface.php b/app/Repositories/Account/AccountTaskerInterface.php index 7ca7bd62c8..73be6cb23b 100644 --- a/app/Repositories/Account/AccountTaskerInterface.php +++ b/app/Repositories/Account/AccountTaskerInterface.php @@ -13,6 +13,10 @@ declare(strict_types = 1); namespace FireflyIII\Repositories\Account; +use Carbon\Carbon; +use FireflyIII\Helpers\Collection\Account as AccountCollection; +use Illuminate\Support\Collection; + /** * Interface AccountTaskerInterface * @@ -21,4 +25,13 @@ namespace FireflyIII\Repositories\Account; interface AccountTaskerInterface { + /** + * @param Carbon $start + * @param Carbon $end + * @param Collection $accounts + * + * @return AccountCollection + */ + public function getAccountReport(Carbon $start, Carbon $end, Collection $accounts): AccountCollection; + } \ No newline at end of file