mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-09-30 10:33:30 +00:00
Refactor references to budget repository.
This commit is contained in:
@@ -98,7 +98,7 @@ class AmountController extends Controller
|
|||||||
$budgetLimit = $this->repository->updateLimitAmount($budget, $start, $end, $amount);
|
$budgetLimit = $this->repository->updateLimitAmount($budget, $start, $end, $amount);
|
||||||
|
|
||||||
// calculate what the user has spent in current period.
|
// calculate what the user has spent in current period.
|
||||||
$spent = $this->repository->spentInPeriod(new Collection([$budget]), new Collection, $start, $end);
|
$spent = $this->opsRepository->spentInPeriod(new Collection([$budget]), new Collection, $start, $end);
|
||||||
|
|
||||||
// given the new budget, this is what they have left (and left per day?)
|
// given the new budget, this is what they have left (and left per day?)
|
||||||
$left = app('amount')->formatAnything($currency, bcadd($amount, $spent), true);
|
$left = app('amount')->formatAnything($currency, bcadd($amount, $spent), true);
|
||||||
|
@@ -27,6 +27,7 @@ namespace FireflyIII\Http\Controllers\Budget;
|
|||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use FireflyIII\Http\Controllers\Controller;
|
use FireflyIII\Http\Controllers\Controller;
|
||||||
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
||||||
|
use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
|
||||||
use FireflyIII\Support\Http\Controllers\DateCalculation;
|
use FireflyIII\Support\Http\Controllers\DateCalculation;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -40,11 +41,14 @@ class IndexController extends Controller
|
|||||||
{
|
{
|
||||||
|
|
||||||
use DateCalculation;
|
use DateCalculation;
|
||||||
|
/** @var OperationsRepositoryInterface */
|
||||||
|
private $opsRepository;
|
||||||
/** @var BudgetRepositoryInterface The budget repository */
|
/** @var BudgetRepositoryInterface The budget repository */
|
||||||
private $repository;
|
private $repository;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* IndexController constructor.
|
* IndexController constructor.
|
||||||
|
*
|
||||||
* @codeCoverageIgnore
|
* @codeCoverageIgnore
|
||||||
*/
|
*/
|
||||||
public function __construct()
|
public function __construct()
|
||||||
@@ -57,7 +61,8 @@ class IndexController extends Controller
|
|||||||
function ($request, $next) {
|
function ($request, $next) {
|
||||||
app('view')->share('title', (string)trans('firefly.budgets'));
|
app('view')->share('title', (string)trans('firefly.budgets'));
|
||||||
app('view')->share('mainTitleIcon', 'fa-tasks');
|
app('view')->share('mainTitleIcon', 'fa-tasks');
|
||||||
$this->repository = app(BudgetRepositoryInterface::class);
|
$this->repository = app(BudgetRepositoryInterface::class);
|
||||||
|
$this->opsRepository = app(OperationsRepositoryInterface::class);
|
||||||
$this->repository->cleanupBudgets();
|
$this->repository->cleanupBudgets();
|
||||||
|
|
||||||
return $next($request);
|
return $next($request);
|
||||||
@@ -110,7 +115,7 @@ class IndexController extends Controller
|
|||||||
$inactive = $this->repository->getInactiveBudgets();
|
$inactive = $this->repository->getInactiveBudgets();
|
||||||
|
|
||||||
// collect budget info to fill bars and so on.
|
// collect budget info to fill bars and so on.
|
||||||
$budgetInformation = $this->repository->collectBudgetInformation($collection, $start, $end);
|
$budgetInformation = $this->opsRepository->collectBudgetInformation($collection, $start, $end);
|
||||||
|
|
||||||
// to display available budget:
|
// to display available budget:
|
||||||
$available = $this->repository->getAvailableBudget($defaultCurrency, $start, $end);
|
$available = $this->repository->getAvailableBudget($defaultCurrency, $start, $end);
|
||||||
|
@@ -31,6 +31,7 @@ use FireflyIII\Models\Budget;
|
|||||||
use FireflyIII\Models\BudgetLimit;
|
use FireflyIII\Models\BudgetLimit;
|
||||||
use FireflyIII\Models\TransactionType;
|
use FireflyIII\Models\TransactionType;
|
||||||
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
||||||
|
use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
|
||||||
use FireflyIII\Support\CacheProperties;
|
use FireflyIII\Support\CacheProperties;
|
||||||
use FireflyIII\Support\Http\Controllers\AugumentData;
|
use FireflyIII\Support\Http\Controllers\AugumentData;
|
||||||
use FireflyIII\Support\Http\Controllers\DateCalculation;
|
use FireflyIII\Support\Http\Controllers\DateCalculation;
|
||||||
@@ -46,12 +47,14 @@ class BudgetController extends Controller
|
|||||||
use DateCalculation, AugumentData;
|
use DateCalculation, AugumentData;
|
||||||
/** @var GeneratorInterface Chart generation methods. */
|
/** @var GeneratorInterface Chart generation methods. */
|
||||||
protected $generator;
|
protected $generator;
|
||||||
|
/** @var OperationsRepositoryInterface */
|
||||||
|
protected $opsRepository;
|
||||||
/** @var BudgetRepositoryInterface The budget repository */
|
/** @var BudgetRepositoryInterface The budget repository */
|
||||||
protected $repository;
|
protected $repository;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BudgetController constructor.
|
* BudgetController constructor.
|
||||||
|
*
|
||||||
* @codeCoverageIgnore
|
* @codeCoverageIgnore
|
||||||
*/
|
*/
|
||||||
public function __construct()
|
public function __construct()
|
||||||
@@ -60,8 +63,9 @@ class BudgetController extends Controller
|
|||||||
|
|
||||||
$this->middleware(
|
$this->middleware(
|
||||||
function ($request, $next) {
|
function ($request, $next) {
|
||||||
$this->generator = app(GeneratorInterface::class);
|
$this->generator = app(GeneratorInterface::class);
|
||||||
$this->repository = app(BudgetRepositoryInterface::class);
|
$this->repository = app(BudgetRepositoryInterface::class);
|
||||||
|
$this->opsRepository = app(OperationsRepositoryInterface::class);
|
||||||
|
|
||||||
return $next($request);
|
return $next($request);
|
||||||
}
|
}
|
||||||
@@ -105,7 +109,7 @@ class BudgetController extends Controller
|
|||||||
if ('1Y' === $step) {
|
if ('1Y' === $step) {
|
||||||
$currentEnd->subDay(); // @codeCoverageIgnore
|
$currentEnd->subDay(); // @codeCoverageIgnore
|
||||||
}
|
}
|
||||||
$spent = $this->repository->spentInPeriod($budgetCollection, new Collection, $current, $currentEnd);
|
$spent = $this->opsRepository->spentInPeriod($budgetCollection, new Collection, $current, $currentEnd);
|
||||||
$label = app('navigation')->periodShow($current, $step);
|
$label = app('navigation')->periodShow($current, $step);
|
||||||
$chartData[$label] = (float)bcmul($spent, '-1');
|
$chartData[$label] = (float)bcmul($spent, '-1');
|
||||||
$current = clone $currentEnd;
|
$current = clone $currentEnd;
|
||||||
@@ -125,7 +129,7 @@ class BudgetController extends Controller
|
|||||||
*
|
*
|
||||||
* TODO this chart is not multi-currency aware.
|
* TODO this chart is not multi-currency aware.
|
||||||
*
|
*
|
||||||
* @param Budget $budget
|
* @param Budget $budget
|
||||||
* @param BudgetLimit $budgetLimit
|
* @param BudgetLimit $budgetLimit
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
@@ -155,7 +159,7 @@ class BudgetController extends Controller
|
|||||||
$amount = $budgetLimit->amount;
|
$amount = $budgetLimit->amount;
|
||||||
$budgetCollection = new Collection([$budget]);
|
$budgetCollection = new Collection([$budget]);
|
||||||
while ($start <= $end) {
|
while ($start <= $end) {
|
||||||
$spent = $this->repository->spentInPeriod($budgetCollection, new Collection, $start, $start);
|
$spent = $this->opsRepository->spentInPeriod($budgetCollection, new Collection, $start, $start);
|
||||||
$amount = bcadd($amount, $spent);
|
$amount = bcadd($amount, $spent);
|
||||||
$format = $start->formatLocalized((string)trans('config.month_and_day'));
|
$format = $start->formatLocalized((string)trans('config.month_and_day'));
|
||||||
$entries[$format] = $amount;
|
$entries[$format] = $amount;
|
||||||
@@ -174,7 +178,7 @@ class BudgetController extends Controller
|
|||||||
*
|
*
|
||||||
* TODO this chart is not multi-currency aware.
|
* TODO this chart is not multi-currency aware.
|
||||||
*
|
*
|
||||||
* @param Budget $budget
|
* @param Budget $budget
|
||||||
* @param BudgetLimit|null $budgetLimit
|
* @param BudgetLimit|null $budgetLimit
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
@@ -223,7 +227,7 @@ class BudgetController extends Controller
|
|||||||
*
|
*
|
||||||
* TODO this chart is not multi-currency aware.
|
* TODO this chart is not multi-currency aware.
|
||||||
*
|
*
|
||||||
* @param Budget $budget
|
* @param Budget $budget
|
||||||
* @param BudgetLimit|null $budgetLimit
|
* @param BudgetLimit|null $budgetLimit
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
@@ -271,7 +275,7 @@ class BudgetController extends Controller
|
|||||||
*
|
*
|
||||||
* TODO this chart is not multi-currency aware.
|
* TODO this chart is not multi-currency aware.
|
||||||
*
|
*
|
||||||
* @param Budget $budget
|
* @param Budget $budget
|
||||||
* @param BudgetLimit|null $budgetLimit
|
* @param BudgetLimit|null $budgetLimit
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
@@ -377,9 +381,9 @@ class BudgetController extends Controller
|
|||||||
*
|
*
|
||||||
* TODO this chart is not multi-currency aware.
|
* TODO this chart is not multi-currency aware.
|
||||||
*
|
*
|
||||||
* @param Budget $budget
|
* @param Budget $budget
|
||||||
* @param Carbon $start
|
* @param Carbon $start
|
||||||
* @param Carbon $end
|
* @param Carbon $end
|
||||||
* @param Collection $accounts
|
* @param Collection $accounts
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
@@ -426,8 +430,8 @@ class BudgetController extends Controller
|
|||||||
* TODO this chart is not multi-currency aware.
|
* TODO this chart is not multi-currency aware.
|
||||||
*
|
*
|
||||||
* @param Collection $accounts
|
* @param Collection $accounts
|
||||||
* @param Carbon $start
|
* @param Carbon $start
|
||||||
* @param Carbon $end
|
* @param Carbon $end
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
|
@@ -33,6 +33,7 @@ use FireflyIII\Models\TransactionType;
|
|||||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\Repositories\Bill\BillRepositoryInterface;
|
use FireflyIII\Repositories\Bill\BillRepositoryInterface;
|
||||||
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
||||||
|
use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
|
||||||
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\Support\CacheProperties;
|
use FireflyIII\Support\CacheProperties;
|
||||||
use FireflyIII\Support\Http\Controllers\RequestInformation;
|
use FireflyIII\Support\Http\Controllers\RequestInformation;
|
||||||
@@ -49,12 +50,16 @@ class BoxController extends Controller
|
|||||||
/**
|
/**
|
||||||
* How much money user has available.
|
* How much money user has available.
|
||||||
*
|
*
|
||||||
* @param BudgetRepositoryInterface $repository
|
|
||||||
*
|
|
||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function available(BudgetRepositoryInterface $repository): JsonResponse
|
public function available(): JsonResponse
|
||||||
{
|
{
|
||||||
|
/** @var BudgetRepositoryInterface $repository */
|
||||||
|
$repository = app(BudgetRepositoryInterface::class);
|
||||||
|
/** @var OperationsRepositoryInterface $opsRepository */
|
||||||
|
$opsRepository = app(OperationsRepositoryInterface::class);
|
||||||
|
|
||||||
|
|
||||||
/** @var Carbon $start */
|
/** @var Carbon $start */
|
||||||
$start = session('start', Carbon::now()->startOfMonth());
|
$start = session('start', Carbon::now()->startOfMonth());
|
||||||
/** @var Carbon $end */
|
/** @var Carbon $end */
|
||||||
@@ -74,7 +79,7 @@ class BoxController extends Controller
|
|||||||
|
|
||||||
// get spent amount:
|
// get spent amount:
|
||||||
$budgets = $repository->getActiveBudgets();
|
$budgets = $repository->getActiveBudgets();
|
||||||
$budgetInformation = $repository->collectBudgetInformation($budgets, $start, $end);
|
$budgetInformation = $opsRepository->collectBudgetInformation($budgets, $start, $end);
|
||||||
$spent = (string)array_sum(array_column($budgetInformation, 'spent'));
|
$spent = (string)array_sum(array_column($budgetInformation, 'spent'));
|
||||||
$left = bcadd($available, $spent);
|
$left = bcadd($available, $spent);
|
||||||
$days = $today->diffInDays($end) + 1;
|
$days = $today->diffInDays($end) + 1;
|
||||||
@@ -121,7 +126,7 @@ class BoxController extends Controller
|
|||||||
$cache->addProperty($end);
|
$cache->addProperty($end);
|
||||||
$cache->addProperty('box-balance');
|
$cache->addProperty('box-balance');
|
||||||
if ($cache->has()) {
|
if ($cache->has()) {
|
||||||
return response()->json($cache->get()); // @codeCoverageIgnore
|
return response()->json($cache->get()); // @codeCoverageIgnore
|
||||||
}
|
}
|
||||||
// prep some arrays:
|
// prep some arrays:
|
||||||
$incomes = [];
|
$incomes = [];
|
||||||
|
@@ -96,52 +96,6 @@ class BudgetRepository implements BudgetRepositoryInterface
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* This method collects various info on budgets, used on the budget page and on the index.
|
|
||||||
*
|
|
||||||
* @param Collection $budgets
|
|
||||||
* @param Carbon $start
|
|
||||||
* @param Carbon $end
|
|
||||||
*
|
|
||||||
* @return array
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public function collectBudgetInformation(Collection $budgets, Carbon $start, Carbon $end): array
|
|
||||||
{
|
|
||||||
// get account information
|
|
||||||
/** @var AccountRepositoryInterface $accountRepository */
|
|
||||||
$accountRepository = app(AccountRepositoryInterface::class);
|
|
||||||
$accounts = $accountRepository->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET]);
|
|
||||||
$defaultCurrency = app('amount')->getDefaultCurrency();
|
|
||||||
$return = [];
|
|
||||||
/** @var Budget $budget */
|
|
||||||
foreach ($budgets as $budget) {
|
|
||||||
$budgetId = $budget->id;
|
|
||||||
$return[$budgetId] = [
|
|
||||||
'spent' => $this->spentInPeriod(new Collection([$budget]), $accounts, $start, $end),
|
|
||||||
'budgeted' => '0',
|
|
||||||
];
|
|
||||||
$budgetLimits = $this->getBudgetLimits($budget, $start, $end);
|
|
||||||
$otherLimits = new Collection;
|
|
||||||
|
|
||||||
// get all the budget limits relevant between start and end and examine them:
|
|
||||||
/** @var BudgetLimit $limit */
|
|
||||||
foreach ($budgetLimits as $limit) {
|
|
||||||
if ($limit->start_date->isSameDay($start) && $limit->end_date->isSameDay($end)
|
|
||||||
) {
|
|
||||||
$return[$budgetId]['currentLimit'] = $limit;
|
|
||||||
$return[$budgetId]['budgeted'] = round($limit->amount, $defaultCurrency->decimal_places);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
// otherwise it's just one of the many relevant repetitions:
|
|
||||||
$otherLimits->push($limit);
|
|
||||||
}
|
|
||||||
$return[$budgetId]['otherLimits'] = $otherLimits;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Budget $budget
|
* @param Budget $budget
|
||||||
*
|
*
|
||||||
@@ -705,30 +659,6 @@ class BudgetRepository implements BudgetRepositoryInterface
|
|||||||
$this->user = $user;
|
$this->user = $user;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param Collection $budgets
|
|
||||||
* @param Collection $accounts
|
|
||||||
* @param Carbon $start
|
|
||||||
* @param Carbon $end
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function spentInPeriod(Collection $budgets, Collection $accounts, Carbon $start, Carbon $end): string
|
|
||||||
{
|
|
||||||
/** @var GroupCollectorInterface $collector */
|
|
||||||
$collector = app(GroupCollectorInterface::class);
|
|
||||||
|
|
||||||
$collector->setUser($this->user);
|
|
||||||
$collector->setRange($start, $end)->setBudgets($budgets)->withBudgetInformation();
|
|
||||||
|
|
||||||
if ($accounts->count() > 0) {
|
|
||||||
$collector->setAccounts($accounts);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $collector->getSum();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Collection $budgets
|
* @param Collection $budgets
|
||||||
* @param Collection $accounts
|
* @param Collection $accounts
|
||||||
|
@@ -41,17 +41,6 @@ interface BudgetRepositoryInterface
|
|||||||
*/
|
*/
|
||||||
public function cleanupBudgets(): bool;
|
public function cleanupBudgets(): bool;
|
||||||
|
|
||||||
/**
|
|
||||||
* This method collects various info on budgets, used on the budget page and on the index.
|
|
||||||
*
|
|
||||||
* @param Collection $budgets
|
|
||||||
* @param Carbon $start
|
|
||||||
* @param Carbon $end
|
|
||||||
*
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function collectBudgetInformation(Collection $budgets, Carbon $start, Carbon $end): array;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Budget $budget
|
* @param Budget $budget
|
||||||
*
|
*
|
||||||
@@ -245,19 +234,6 @@ interface BudgetRepositoryInterface
|
|||||||
*/
|
*/
|
||||||
public function setUser(User $user);
|
public function setUser(User $user);
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO this method is not multi-currency aware.
|
|
||||||
*
|
|
||||||
* @param Collection $budgets
|
|
||||||
* @param Collection $accounts
|
|
||||||
* @param Carbon $start
|
|
||||||
* @param Carbon $end
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function spentInPeriod(Collection $budgets, Collection $accounts, Carbon $start, Carbon $end): string;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return multi-currency spent information.
|
* Return multi-currency spent information.
|
||||||
*
|
*
|
||||||
|
@@ -23,8 +23,14 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace FireflyIII\Repositories\Budget;
|
namespace FireflyIII\Repositories\Budget;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
||||||
|
use FireflyIII\Models\AccountType;
|
||||||
use FireflyIII\Models\Budget;
|
use FireflyIII\Models\Budget;
|
||||||
|
use FireflyIII\Models\BudgetLimit;
|
||||||
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
use Log;
|
use Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -54,6 +60,7 @@ class OperationsRepository implements OperationsRepositoryInterface
|
|||||||
* @param Budget $budget
|
* @param Budget $budget
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
public function budgetedPerDay(Budget $budget): string
|
public function budgetedPerDay(Budget $budget): string
|
||||||
{
|
{
|
||||||
@@ -78,6 +85,53 @@ class OperationsRepository implements OperationsRepositoryInterface
|
|||||||
return $avg;
|
return $avg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method collects various info on budgets, used on the budget page and on the index.
|
||||||
|
*
|
||||||
|
* @param Collection $budgets
|
||||||
|
* @param Carbon $start
|
||||||
|
* @param Carbon $end
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
* @deprecated
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function collectBudgetInformation(Collection $budgets, Carbon $start, Carbon $end): array
|
||||||
|
{
|
||||||
|
// get account information
|
||||||
|
/** @var AccountRepositoryInterface $accountRepository */
|
||||||
|
$accountRepository = app(AccountRepositoryInterface::class);
|
||||||
|
$accounts = $accountRepository->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET]);
|
||||||
|
$defaultCurrency = app('amount')->getDefaultCurrency();
|
||||||
|
$return = [];
|
||||||
|
/** @var Budget $budget */
|
||||||
|
foreach ($budgets as $budget) {
|
||||||
|
$budgetId = $budget->id;
|
||||||
|
$return[$budgetId] = [
|
||||||
|
'spent' => $this->spentInPeriod(new Collection([$budget]), $accounts, $start, $end),
|
||||||
|
'budgeted' => '0',
|
||||||
|
];
|
||||||
|
$budgetLimits = $this->getBudgetLimits($budget, $start, $end);
|
||||||
|
$otherLimits = new Collection;
|
||||||
|
|
||||||
|
// get all the budget limits relevant between start and end and examine them:
|
||||||
|
/** @var BudgetLimit $limit */
|
||||||
|
foreach ($budgetLimits as $limit) {
|
||||||
|
if ($limit->start_date->isSameDay($start) && $limit->end_date->isSameDay($end)
|
||||||
|
) {
|
||||||
|
$return[$budgetId]['currentLimit'] = $limit;
|
||||||
|
$return[$budgetId]['budgeted'] = round($limit->amount, $defaultCurrency->decimal_places);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// otherwise it's just one of the many relevant repetitions:
|
||||||
|
$otherLimits->push($limit);
|
||||||
|
}
|
||||||
|
$return[$budgetId]['otherLimits'] = $otherLimits;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param User $user
|
* @param User $user
|
||||||
*/
|
*/
|
||||||
@@ -85,4 +139,46 @@ class OperationsRepository implements OperationsRepositoryInterface
|
|||||||
{
|
{
|
||||||
$this->user = $user;
|
$this->user = $user;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Collection $budgets
|
||||||
|
* @param Collection $accounts
|
||||||
|
* @param Carbon $start
|
||||||
|
* @param Carbon $end
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
|
public function spentInPeriod(Collection $budgets, Collection $accounts, Carbon $start, Carbon $end): string
|
||||||
|
{
|
||||||
|
/** @var GroupCollectorInterface $collector */
|
||||||
|
$collector = app(GroupCollectorInterface::class);
|
||||||
|
|
||||||
|
$collector->setUser($this->user);
|
||||||
|
$collector->setRange($start, $end)->setBudgets($budgets)->withBudgetInformation();
|
||||||
|
|
||||||
|
if ($accounts->count() > 0) {
|
||||||
|
$collector->setAccounts($accounts);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $collector->getSum();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For now, simply refer to whichever repository holds this function.
|
||||||
|
* TODO might be done better in the future.
|
||||||
|
*
|
||||||
|
* @param Budget $budget
|
||||||
|
* @param Carbon|null $start
|
||||||
|
* @param Carbon|null $end
|
||||||
|
*
|
||||||
|
* @return Collection
|
||||||
|
*/
|
||||||
|
private function getBudgetLimits(Budget $budget, Carbon $start = null, Carbon $end = null): Collection
|
||||||
|
{
|
||||||
|
/** @var BudgetRepositoryInterface $repository */
|
||||||
|
$repository = app(BudgetRepositoryInterface::class);
|
||||||
|
|
||||||
|
return $repository->getBudgetLimits($budget, $start, $end);
|
||||||
|
}
|
||||||
}
|
}
|
@@ -23,8 +23,10 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace FireflyIII\Repositories\Budget;
|
namespace FireflyIII\Repositories\Budget;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
use FireflyIII\Models\Budget;
|
use FireflyIII\Models\Budget;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface OperationsRepositoryInterface
|
* Interface OperationsRepositoryInterface
|
||||||
@@ -46,4 +48,29 @@ interface OperationsRepositoryInterface
|
|||||||
* @deprecated
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
public function budgetedPerDay(Budget $budget): string;
|
public function budgetedPerDay(Budget $budget): string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method collects various info on budgets, used on the budget page and on the index.
|
||||||
|
*
|
||||||
|
* @param Collection $budgets
|
||||||
|
* @param Carbon $start
|
||||||
|
* @param Carbon $end
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
|
public function collectBudgetInformation(Collection $budgets, Carbon $start, Carbon $end): array;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Collection $budgets
|
||||||
|
* @param Collection $accounts
|
||||||
|
* @param Carbon $start
|
||||||
|
* @param Carbon $end
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
|
public function spentInPeriod(Collection $budgets, Collection $accounts, Carbon $start, Carbon $end): string;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@@ -32,6 +32,7 @@ use FireflyIII\Models\BudgetLimit;
|
|||||||
use FireflyIII\Models\TransactionType;
|
use FireflyIII\Models\TransactionType;
|
||||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
||||||
|
use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
|
||||||
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
|
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
|
||||||
use FireflyIII\Support\CacheProperties;
|
use FireflyIII\Support\CacheProperties;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
@@ -356,9 +357,12 @@ trait AugumentData
|
|||||||
/** @var BudgetRepositoryInterface $repository */
|
/** @var BudgetRepositoryInterface $repository */
|
||||||
$repository = app(BudgetRepositoryInterface::class);
|
$repository = app(BudgetRepositoryInterface::class);
|
||||||
|
|
||||||
|
/** @var OperationsRepositoryInterface $opsRepository */
|
||||||
|
$opsRepository = app(OperationsRepositoryInterface::class);
|
||||||
|
|
||||||
$return = [];
|
$return = [];
|
||||||
if (0 === $limits->count()) {
|
if (0 === $limits->count()) {
|
||||||
$spent = $repository->spentInPeriod(new Collection([$budget]), new Collection, $start, $end);
|
$spent = $opsRepository->spentInPeriod(new Collection([$budget]), new Collection, $start, $end);
|
||||||
if (0 !== bccomp($spent, '0')) {
|
if (0 !== bccomp($spent, '0')) {
|
||||||
$return[$budget->name]['spent'] = bcmul($spent, '-1');
|
$return[$budget->name]['spent'] = bcmul($spent, '-1');
|
||||||
$return[$budget->name]['left'] = 0;
|
$return[$budget->name]['left'] = 0;
|
||||||
@@ -400,12 +404,15 @@ trait AugumentData
|
|||||||
/** @var BudgetRepositoryInterface $repository */
|
/** @var BudgetRepositoryInterface $repository */
|
||||||
$repository = app(BudgetRepositoryInterface::class);
|
$repository = app(BudgetRepositoryInterface::class);
|
||||||
|
|
||||||
|
/** @var OperationsRepositoryInterface $opsRepository */
|
||||||
|
$opsRepository = app(OperationsRepositoryInterface::class);
|
||||||
|
|
||||||
$return = [];
|
$return = [];
|
||||||
$format = (string)trans('config.month_and_day');
|
$format = (string)trans('config.month_and_day');
|
||||||
$name = $budget->name;
|
$name = $budget->name;
|
||||||
/** @var BudgetLimit $budgetLimit */
|
/** @var BudgetLimit $budgetLimit */
|
||||||
foreach ($limits as $budgetLimit) {
|
foreach ($limits as $budgetLimit) {
|
||||||
$expenses = $repository->spentInPeriod(new Collection([$budget]), new Collection, $budgetLimit->start_date, $budgetLimit->end_date);
|
$expenses = $opsRepository->spentInPeriod(new Collection([$budget]), new Collection, $budgetLimit->start_date, $budgetLimit->end_date);
|
||||||
$expenses = app('steam')->positive($expenses);
|
$expenses = app('steam')->positive($expenses);
|
||||||
|
|
||||||
if ($limits->count() > 1) {
|
if ($limits->count() > 1) {
|
||||||
@@ -447,6 +454,10 @@ trait AugumentData
|
|||||||
{
|
{
|
||||||
/** @var BudgetRepositoryInterface $repository */
|
/** @var BudgetRepositoryInterface $repository */
|
||||||
$repository = app(BudgetRepositoryInterface::class);
|
$repository = app(BudgetRepositoryInterface::class);
|
||||||
|
|
||||||
|
/** @var OperationsRepositoryInterface $opsRepository */
|
||||||
|
$opsRepository = app(OperationsRepositoryInterface::class);
|
||||||
|
|
||||||
// properties for cache
|
// properties for cache
|
||||||
$cache = new CacheProperties;
|
$cache = new CacheProperties;
|
||||||
$cache->addProperty($start);
|
$cache->addProperty($start);
|
||||||
@@ -463,7 +474,7 @@ trait AugumentData
|
|||||||
|
|
||||||
/** @var BudgetLimit $entry */
|
/** @var BudgetLimit $entry */
|
||||||
foreach ($set as $entry) {
|
foreach ($set as $entry) {
|
||||||
$entry->spent = $repository->spentInPeriod(new Collection([$budget]), new Collection(), $entry->start_date, $entry->end_date);
|
$entry->spent = $opsRepository->spentInPeriod(new Collection([$budget]), new Collection(), $entry->start_date, $entry->end_date);
|
||||||
$limits->push($entry);
|
$limits->push($entry);
|
||||||
}
|
}
|
||||||
$cache->store($limits);
|
$cache->store($limits);
|
||||||
|
Reference in New Issue
Block a user