mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-02-25 18:45:27 -06:00
Some fixing up for #1598
This commit is contained in:
parent
5908c0ce8c
commit
b496ca6a2c
@ -80,24 +80,34 @@ class AmountController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function amount(Request $request, BudgetRepositoryInterface $repository, Budget $budget): JsonResponse
|
public function amount(Request $request, BudgetRepositoryInterface $repository, Budget $budget): JsonResponse
|
||||||
{
|
{
|
||||||
$amount = (string)$request->get('amount');
|
// grab vars from URI
|
||||||
$start = Carbon::createFromFormat('Y-m-d', $request->get('start'));
|
$amount = (string)$request->get('amount');
|
||||||
$end = Carbon::createFromFormat('Y-m-d', $request->get('end'));
|
$start = Carbon::createFromFormat('Y-m-d', $request->get('start'));
|
||||||
$budgetLimit = $this->repository->updateLimitAmount($budget, $start, $end, $amount);
|
$end = Carbon::createFromFormat('Y-m-d', $request->get('end'));
|
||||||
$spent = $repository->spentInPeriod(new Collection([$budget]), new Collection, $start, $end);
|
|
||||||
$currency = app('amount')->getDefaultCurrency();
|
// grab other useful vars
|
||||||
$left = app('amount')->formatAnything($currency, bcadd($amount, $spent), true);
|
$currency = app('amount')->getDefaultCurrency();
|
||||||
$largeDiff = false;
|
$activeDaysLeft = $this->activeDaysLeft($start, $end);
|
||||||
$warnText = '';
|
$periodLength = $start->diffInDays($end) + 1; // absolute period length.
|
||||||
$leftPerDay = null;
|
|
||||||
$periodLength = $start->diffInDays($end);
|
// update limit amount:
|
||||||
$dayDifference = $this->getDayDifference($start, $end);
|
$budgetLimit = $this->repository->updateLimitAmount($budget, $start, $end, $amount);
|
||||||
|
|
||||||
|
// calculate what the user has spent in current period.
|
||||||
|
$spent = $repository->spentInPeriod(new Collection([$budget]), new Collection, $start, $end);
|
||||||
|
|
||||||
|
// given the new budget, this is what they have left (and left per day?)
|
||||||
|
$left = app('amount')->formatAnything($currency, bcadd($amount, $spent), true);
|
||||||
|
$leftPerDay = null; //
|
||||||
|
|
||||||
// If the user budgets ANY amount per day for this budget (anything but zero) Firefly III calculates how much he could spend per day.
|
// If the user budgets ANY amount per day for this budget (anything but zero) Firefly III calculates how much he could spend per day.
|
||||||
if (1 === bccomp(bcadd($amount, $spent), '0')) {
|
if (1 === bccomp(bcadd($amount, $spent), '0')) {
|
||||||
$leftPerDay = app('amount')->formatAnything($currency, bcdiv(bcadd($amount, $spent), (string)$dayDifference), true);
|
$leftPerDay = app('amount')->formatAnything($currency, bcdiv(bcadd($amount, $spent), (string)$activeDaysLeft), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$largeDiff = false;
|
||||||
|
$warnText = '';
|
||||||
|
|
||||||
// Get the average amount of money the user budgets for this budget. And calculate the same for the current amount.
|
// Get the average amount of money the user budgets for this budget. And calculate the same for the current amount.
|
||||||
// If the difference is very large, give the user a notification.
|
// If the difference is very large, give the user a notification.
|
||||||
$average = $this->repository->budgetedPerDay($budget);
|
$average = $this->repository->budgetedPerDay($budget);
|
||||||
@ -116,8 +126,17 @@ class AmountController extends Controller
|
|||||||
app('preferences')->mark();
|
app('preferences')->mark();
|
||||||
|
|
||||||
return response()->json(
|
return response()->json(
|
||||||
['left' => $left, 'name' => $budget->name, 'limit' => $budgetLimit ? $budgetLimit->id : 0, 'amount' => $amount, 'current' => $current,
|
[
|
||||||
'average' => $average, 'large_diff' => $largeDiff, 'left_per_day' => $leftPerDay, 'warn_text' => $warnText,]
|
'left' => $left,
|
||||||
|
'name' => $budget->name,
|
||||||
|
'limit' => $budgetLimit ? $budgetLimit->id : 0,
|
||||||
|
'amount' => $amount,
|
||||||
|
'current' => $current,
|
||||||
|
'average' => $average,
|
||||||
|
'large_diff' => $largeDiff,
|
||||||
|
'left_per_day' => $leftPerDay,
|
||||||
|
'warn_text' => $warnText,
|
||||||
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,6 +58,7 @@ class IndexController extends Controller
|
|||||||
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->repository->cleanupBudgets();
|
||||||
|
|
||||||
return $next($request);
|
return $next($request);
|
||||||
}
|
}
|
||||||
@ -77,17 +78,16 @@ class IndexController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function index(Request $request, string $moment = null)
|
public function index(Request $request, string $moment = null)
|
||||||
{
|
{
|
||||||
/** @var string $range */
|
// collect some basic vars:
|
||||||
$range = app('preferences')->get('viewRange', '1M')->data;
|
$range = app('preferences')->get('viewRange', '1M')->data;
|
||||||
/** @var Carbon $start */
|
$start = session('start', new Carbon);
|
||||||
$start = session('start', new Carbon);
|
$end = session('end', new Carbon);
|
||||||
/** @var Carbon $end */
|
$page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page');
|
||||||
$end = session('end', new Carbon);
|
$pageSize = (int)app('preferences')->get('listPageSize', 50)->data;
|
||||||
$page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page');
|
$moment = $moment ?? '';
|
||||||
$pageSize = (int)app('preferences')->get('listPageSize', 50)->data;
|
$defaultCurrency = app('amount')->getDefaultCurrency();
|
||||||
$moment = $moment ?? '';
|
|
||||||
|
|
||||||
// make date if the data is given.
|
// make a date if the data is given.
|
||||||
if ('' !== (string)$moment) {
|
if ('' !== (string)$moment) {
|
||||||
try {
|
try {
|
||||||
$start = new Carbon($moment);
|
$start = new Carbon($moment);
|
||||||
@ -99,44 +99,49 @@ class IndexController extends Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if today is between start and end, use the diff in days between end and today (days left)
|
// make the next and previous period, and calculate the periods used for period navigation
|
||||||
// otherwise, use diff between start and end.
|
|
||||||
$dayDifference = $this->getDayDifference($start, $end);
|
|
||||||
|
|
||||||
$next = clone $end;
|
$next = clone $end;
|
||||||
$next->addDay();
|
$next->addDay();
|
||||||
$prev = clone $start;
|
$prev = clone $start;
|
||||||
$prev->subDay();
|
$prev->subDay();
|
||||||
$prev = app('navigation')->startOfPeriod($prev, $range);
|
$prev = app('navigation')->startOfPeriod($prev, $range);
|
||||||
$this->repository->cleanupBudgets();
|
$previousLoop = $this->getPreviousPeriods($start, $range);
|
||||||
$daysPassed = $this->getDaysPassedInPeriod($start, $end);
|
$nextLoop = $this->getNextPeriods($end, $range);
|
||||||
$allBudgets = $this->repository->getActiveBudgets();
|
|
||||||
$total = $allBudgets->count();
|
|
||||||
$budgets = $allBudgets->slice(($page - 1) * $pageSize, $pageSize);
|
|
||||||
$inactive = $this->repository->getInactiveBudgets();
|
|
||||||
$periodStart = $start->formatLocalized($this->monthAndDayFormat);
|
|
||||||
$periodEnd = $end->formatLocalized($this->monthAndDayFormat);
|
|
||||||
$budgetInformation = $this->repository->collectBudgetInformation($allBudgets, $start, $end);
|
|
||||||
$defaultCurrency = app('amount')->getDefaultCurrency();
|
|
||||||
$available = $this->repository->getAvailableBudget($defaultCurrency, $start, $end);
|
|
||||||
$spent = array_sum(array_column($budgetInformation, 'spent'));
|
|
||||||
$budgeted = array_sum(array_column($budgetInformation, 'budgeted'));
|
|
||||||
$previousLoop = $this->getPreviousPeriods($start, $range);
|
|
||||||
$nextLoop = $this->getNextPeriods($end, $range);
|
|
||||||
|
|
||||||
// paginate budgets
|
|
||||||
$budgets = new LengthAwarePaginator($budgets, $total, $pageSize, $page);
|
|
||||||
$budgets->setPath(route('budgets.index'));
|
|
||||||
// display info
|
|
||||||
$currentMonth = app('navigation')->periodShow($start, $range);
|
$currentMonth = app('navigation')->periodShow($start, $range);
|
||||||
$nextText = app('navigation')->periodShow($next, $range);
|
$nextText = app('navigation')->periodShow($next, $range);
|
||||||
$prevText = app('navigation')->periodShow($prev, $range);
|
$prevText = app('navigation')->periodShow($prev, $range);
|
||||||
|
|
||||||
|
// number of days for consistent budgeting.
|
||||||
|
$activeDaysPassed = $this->activeDaysPassed($start, $end); // see method description.
|
||||||
|
$activeDaysLeft = $this->activeDaysLeft($start, $end); // see method description.
|
||||||
|
|
||||||
|
// get all budgets, and paginate them into $budgets.
|
||||||
|
$collection = $this->repository->getActiveBudgets();
|
||||||
|
$total = $collection->count();
|
||||||
|
$budgets = $collection->slice(($page - 1) * $pageSize, $pageSize);
|
||||||
|
|
||||||
|
// get all inactive budgets, and simply list them:
|
||||||
|
$inactive = $this->repository->getInactiveBudgets();
|
||||||
|
|
||||||
|
// collect budget info to fill bars and so on.
|
||||||
|
$budgetInformation = $this->repository->collectBudgetInformation($collection, $start, $end);
|
||||||
|
|
||||||
|
// to display available budget:
|
||||||
|
$available = $this->repository->getAvailableBudget($defaultCurrency, $start, $end);
|
||||||
|
$spent = array_sum(array_column($budgetInformation, 'spent'));
|
||||||
|
$budgeted = array_sum(array_column($budgetInformation, 'budgeted'));
|
||||||
|
|
||||||
|
|
||||||
|
// paginate budgets
|
||||||
|
$paginator = new LengthAwarePaginator($budgets, $total, $pageSize, $page);
|
||||||
|
$paginator->setPath(route('budgets.index'));
|
||||||
|
|
||||||
return view(
|
return view(
|
||||||
'budgets.index', compact(
|
'budgets.index', compact(
|
||||||
'available', 'currentMonth', 'next', 'nextText', 'prev', 'allBudgets', 'prevText', 'periodStart', 'periodEnd', 'dayDifference',
|
'available', 'currentMonth', 'next', 'nextText', 'prev', 'paginator',
|
||||||
'page',
|
'prevText',
|
||||||
'budgetInformation', 'daysPassed',
|
'page', 'activeDaysPassed', 'activeDaysLeft',
|
||||||
|
'budgetInformation',
|
||||||
'inactive', 'budgets', 'spent', 'budgeted', 'previousLoop', 'nextLoop', 'start', 'end'
|
'inactive', 'budgets', 'spent', 'budgeted', 'previousLoop', 'nextLoop', 'start', 'end'
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -32,6 +32,52 @@ use Log;
|
|||||||
*/
|
*/
|
||||||
trait DateCalculation
|
trait DateCalculation
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Calculate the number of days passed left until end date, as seen from start date.
|
||||||
|
* If today is between start and end, today will be used instead of end.
|
||||||
|
*
|
||||||
|
* If both are in the past OR both are in the future, simply return the number of days in the period with a minimum of 1
|
||||||
|
*
|
||||||
|
* @param Carbon $start
|
||||||
|
* @param Carbon $end
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function activeDaysLeft(Carbon $start, Carbon $end): int
|
||||||
|
{
|
||||||
|
$difference = $start->diffInDays($end) + 1;
|
||||||
|
$today = Carbon::now()->startOfDay();
|
||||||
|
|
||||||
|
if ($start->lte($today) && $end->gte($today)) {
|
||||||
|
$difference = $today->diffInDays($end);
|
||||||
|
}
|
||||||
|
$difference = 0 === $difference ? 1 : $difference;
|
||||||
|
|
||||||
|
return $difference;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculate the number of days passed between two dates. Will take the current moment into consideration.
|
||||||
|
*
|
||||||
|
* If both are in the past OR both are in the future, simply return the period between them with a minimum of 1
|
||||||
|
*
|
||||||
|
* @param Carbon $start
|
||||||
|
* @param Carbon $end
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
protected function activeDaysPassed(Carbon $start, Carbon $end): int
|
||||||
|
{
|
||||||
|
$difference = $start->diffInDays($end) + 1;
|
||||||
|
$today = Carbon::now()->startOfDay();
|
||||||
|
|
||||||
|
if ($start->lte($today) && $end->gte($today)) {
|
||||||
|
$difference = $start->diffInDays($today) + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $difference;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Carbon $start
|
* @param Carbon $start
|
||||||
* @param Carbon $end
|
* @param Carbon $end
|
||||||
@ -56,62 +102,6 @@ trait DateCalculation
|
|||||||
return $step;
|
return $step;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the number of days between the two given dates.
|
|
||||||
* - If today is within the two dates, give the number of days between today and the end date.
|
|
||||||
* - If they are the same, return 1.
|
|
||||||
*
|
|
||||||
* @param Carbon $start
|
|
||||||
* @param Carbon $end
|
|
||||||
*
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
protected function getDayDifference(Carbon $start, Carbon $end): int
|
|
||||||
{
|
|
||||||
$dayDifference = 0;
|
|
||||||
|
|
||||||
// if today is between start and end, use the diff in days between end and today (days left)
|
|
||||||
// otherwise, use diff between start and end.
|
|
||||||
$today = new Carbon;
|
|
||||||
Log::debug(sprintf('Start is %s, end is %s, today is %s', $start->format('Y-m-d'), $end->format('Y-m-d'), $today->format('Y-m-d')));
|
|
||||||
if ($today->gte($start) && $today->lte($end)) {
|
|
||||||
$dayDifference = $end->diffInDays($today);
|
|
||||||
}
|
|
||||||
if ($today->lte($start) || $today->gte($end)) {
|
|
||||||
$dayDifference = $start->diffInDays($end);
|
|
||||||
}
|
|
||||||
$dayDifference = 0 === $dayDifference ? 1 : $dayDifference;
|
|
||||||
|
|
||||||
return $dayDifference;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the number of days that have passed in this period. If it is zero (start of period)
|
|
||||||
* then return 1.
|
|
||||||
*
|
|
||||||
* @param Carbon $start
|
|
||||||
* @param Carbon $end
|
|
||||||
*
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
protected function getDaysPassedInPeriod(Carbon $start, Carbon $end): int
|
|
||||||
{
|
|
||||||
// if today is between start and end, use the diff in days between end and today (days left)
|
|
||||||
// otherwise, use diff between start and end.
|
|
||||||
$today = new Carbon;
|
|
||||||
$daysPassed = 0;
|
|
||||||
Log::debug(sprintf('Start is %s, end is %s, today is %s', $start->format('Y-m-d'), $end->format('Y-m-d'), $today->format('Y-m-d')));
|
|
||||||
if ($today->gte($start) && $today->lte($end)) {
|
|
||||||
$daysPassed = $start->diffInDays($today);
|
|
||||||
}
|
|
||||||
if ($today->lte($start) || $today->gte($end)) {
|
|
||||||
$daysPassed = $start->diffInDays($end);
|
|
||||||
}
|
|
||||||
$daysPassed = 0 === $daysPassed ? 1 : $daysPassed;
|
|
||||||
|
|
||||||
return $daysPassed;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a list of the periods that will occur after this date. For example,
|
* Get a list of the periods that will occur after this date. For example,
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<div class="col-lg-9 col-md-8 col-sm-12 col-xs-12">
|
<div class="col-lg-9 col-md-8 col-sm-12 col-xs-12">
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<div class="box-header with-border">
|
<div class="box-header with-border">
|
||||||
<h3 class="box-title">{{ periodStart }} — {{ periodEnd }}</h3>
|
<h3 class="box-title">{{ start.formatLocalized(monthAndDayFormat) }} — {{ end.formatLocalized(monthAndDayFormat) }}</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="box-body">
|
<div class="box-body">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@ -17,7 +17,7 @@
|
|||||||
<small>{{ 'budgeted'|_ }}: <span id="budgetedAmount" class="text-success">{{ budgeted|formatAmountPlain }}</span></small>
|
<small>{{ 'budgeted'|_ }}: <span id="budgetedAmount" class="text-success">{{ budgeted|formatAmountPlain }}</span></small>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-9 col-md-9 col-sm-9 col-xs-9" style="text-align:right;margin-bottom:3px;">
|
<div class="col-lg-9 col-md-9 col-sm-9 col-xs-9" style="text-align:right;margin-bottom:3px;">
|
||||||
<small id="availableBar">{{ trans('firefly.available_between',{start : periodStart, end: periodEnd }) }}:
|
<small id="availableBar">{{ trans('firefly.available_between',{start: start.formatLocalized(monthAndDayFormat), end: end.formatLocalized(monthAndDayFormat) }) }}:
|
||||||
<span id="available" data-value="{{ available }}">{{ available|formatAmountPlain }}</span>
|
<span id="available" data-value="{{ available }}">{{ available|formatAmountPlain }}</span>
|
||||||
<a href="#" class="updateIncome btn btn-default btn-xs"><i class="fa fa-pencil"></i></a>
|
<a href="#" class="updateIncome btn btn-default btn-xs"><i class="fa fa-pencil"></i></a>
|
||||||
<a href="#" class="infoIncome btn btn-info btn-xs"><i class="fa fa-info-circle"></i></a>
|
<a href="#" class="infoIncome btn btn-info btn-xs"><i class="fa fa-info-circle"></i></a>
|
||||||
@ -39,7 +39,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row" id="spentBar">
|
<div class="row" id="spentBar">
|
||||||
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
|
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
|
||||||
<small>{{ trans('firefly.spent_between', {start: periodStart, end: periodEnd}) }}: {{ spent|formatAmount }}</small>
|
<small>{{ trans('firefly.spent_between', {start: start.formatLocalized(monthAndDayFormat), end: end.formatLocalized(monthAndDayFormat)}) }}: {{ spent|formatAmount }}</small>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@ -66,12 +66,12 @@
|
|||||||
<div class="box-body">
|
<div class="box-body">
|
||||||
<p>
|
<p>
|
||||||
<a href="{{ route('budgets.no-budget', [start.format('Y-m-d'), end.format('Y-m-d')]) }}">
|
<a href="{{ route('budgets.no-budget', [start.format('Y-m-d'), end.format('Y-m-d')]) }}">
|
||||||
{{ trans('firefly.transactions_no_budget', {start: periodStart, end: periodEnd }) }}
|
{{ trans('firefly.transactions_no_budget', {start: start.formatLocalized(monthAndDayFormat), end: end.formatLocalized(monthAndDayFormat)}) }}
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% if budgets.count > 0 and inactive.count > 0 %}
|
{% if paginator.count > 0 and inactive.count > 0 %}
|
||||||
<div class="box" id="createBudgetBox">
|
<div class="box" id="createBudgetBox">
|
||||||
<div class="box-header with-border">
|
<div class="box-header with-border">
|
||||||
<h3 class="box-title">{{ 'createBudget'|_ }}</h3>
|
<h3 class="box-title">{{ 'createBudget'|_ }}</h3>
|
||||||
@ -83,7 +83,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% if budgets.count == 0 and inactive.count == 0 and page == 1 %}
|
{% if paginator.count == 0 and inactive.count == 0 and page == 1 %}
|
||||||
{% include 'partials.empty' with {what: 'default', type: 'budgets',route: route('budgets.create')} %}
|
{% include 'partials.empty' with {what: 'default', type: 'budgets',route: route('budgets.create')} %}
|
||||||
{# make FF ignore demo for now. #}
|
{# make FF ignore demo for now. #}
|
||||||
{% set shownDemo = true %}
|
{% set shownDemo = true %}
|
||||||
@ -138,7 +138,7 @@
|
|||||||
<a href="{{ route('budgets.create') }}" class="btn btn-success"><i class="fa fa-plus fa-fw"></i> {{ 'createBudget'|_ }}</a>
|
<a href="{{ route('budgets.create') }}" class="btn btn-success"><i class="fa fa-plus fa-fw"></i> {{ 'createBudget'|_ }}</a>
|
||||||
</div>
|
</div>
|
||||||
<div style="padding-left:8px;">
|
<div style="padding-left:8px;">
|
||||||
{{ budgets.render|raw }}
|
{{ paginator.render|raw }}
|
||||||
</div>
|
</div>
|
||||||
<table class="table table-bordered table-striped sortable" id="budgetList">
|
<table class="table table-bordered table-striped sortable" id="budgetList">
|
||||||
<thead>
|
<thead>
|
||||||
@ -152,7 +152,7 @@
|
|||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
{% for budget in budgets %}
|
{% for budget in paginator %}
|
||||||
<tr>
|
<tr>
|
||||||
<td class="hidden-sm hidden-xs">
|
<td class="hidden-sm hidden-xs">
|
||||||
<div class="btn-group btn-group-xs">
|
<div class="btn-group btn-group-xs">
|
||||||
@ -188,13 +188,13 @@
|
|||||||
<td class="hidden-sm hidden-xs spent" data-id="{{ budget.id }}" data-spent="{{ budgetInformation[budget.id]['spent'] }}"
|
<td class="hidden-sm hidden-xs spent" data-id="{{ budget.id }}" data-spent="{{ budgetInformation[budget.id]['spent'] }}"
|
||||||
data-value="{{ budgetInformation[budget.id]['spent'] }}">
|
data-value="{{ budgetInformation[budget.id]['spent'] }}">
|
||||||
{{ budgetInformation[budget.id]['spent']|formatAmount }}
|
{{ budgetInformation[budget.id]['spent']|formatAmount }}
|
||||||
({{ (budgetInformation[budget.id]['spent'] / daysPassed)|formatAmount }})
|
({{ (budgetInformation[budget.id]['spent'] / activeDaysPassed)|formatAmount }})
|
||||||
</td>
|
</td>
|
||||||
<td class="left" data-id="{{ budget.id }}"
|
<td class="left" data-id="{{ budget.id }}"
|
||||||
data-value="{{ (repAmount + budgetInformation[budget.id]['spent']) }}">
|
data-value="{{ (repAmount + budgetInformation[budget.id]['spent']) }}">
|
||||||
{{ (repAmount + budgetInformation[budget.id]['spent'])|formatAmount }}
|
{{ (repAmount + budgetInformation[budget.id]['spent'])|formatAmount }}
|
||||||
{% if repAmount + budgetInformation[budget.id]['spent'] > 0 %}
|
{% if repAmount + budgetInformation[budget.id]['spent'] > 0 %}
|
||||||
({{ ((repAmount + budgetInformation[budget.id]['spent']) / daysPassed)|formatAmount }})
|
({{ ((repAmount + budgetInformation[budget.id]['spent']) / activeDaysLeft)|formatAmount }})
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -202,7 +202,7 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div style="padding-left:8px;">
|
<div style="padding-left:8px;">
|
||||||
{{ budgets.render|raw }}
|
{{ paginator.render|raw }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="box-footer">
|
<div class="box-footer">
|
||||||
|
Loading…
Reference in New Issue
Block a user