mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-02-25 18:45:27 -06:00
Expand view of report and make multi currency
This commit is contained in:
parent
1e9f354a81
commit
ce06fb73b1
@ -81,6 +81,16 @@ class PopupReport implements PopupReportInterface
|
|||||||
*/
|
*/
|
||||||
public function balanceForNoBudget(Account $account, array $attributes): array
|
public function balanceForNoBudget(Account $account, array $attributes): array
|
||||||
{
|
{
|
||||||
|
// filter by currency, if set.
|
||||||
|
$currencyId = $attributes['currencyId'] ?? null;
|
||||||
|
$currency = null;
|
||||||
|
if (null !== $currencyId) {
|
||||||
|
/** @var CurrencyRepositoryInterface $repos */
|
||||||
|
$repos = app(CurrencyRepositoryInterface::class);
|
||||||
|
$currency = $repos->find((int)$currencyId);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/** @var GroupCollectorInterface $collector */
|
/** @var GroupCollectorInterface $collector */
|
||||||
$collector = app(GroupCollectorInterface::class);
|
$collector = app(GroupCollectorInterface::class);
|
||||||
$collector
|
$collector
|
||||||
@ -91,6 +101,10 @@ class PopupReport implements PopupReportInterface
|
|||||||
->setRange($attributes['startDate'], $attributes['endDate'])
|
->setRange($attributes['startDate'], $attributes['endDate'])
|
||||||
->withoutBudget();
|
->withoutBudget();
|
||||||
|
|
||||||
|
if (null !== $currency) {
|
||||||
|
$collector->setCurrency($currency);
|
||||||
|
}
|
||||||
|
|
||||||
return $collector->getExtractedJournals();
|
return $collector->getExtractedJournals();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,12 +153,12 @@ class PopupReport implements PopupReportInterface
|
|||||||
/**
|
/**
|
||||||
* Collect journals by a category.
|
* Collect journals by a category.
|
||||||
*
|
*
|
||||||
* @param Category $category
|
* @param Category|null $category
|
||||||
* @param array $attributes
|
* @param array $attributes
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function byCategory(Category $category, array $attributes): array
|
public function byCategory(?Category $category, array $attributes): array
|
||||||
{
|
{
|
||||||
// filter by currency, if set.
|
// filter by currency, if set.
|
||||||
$currencyId = $attributes['currencyId'] ?? null;
|
$currencyId = $attributes['currencyId'] ?? null;
|
||||||
@ -163,8 +177,15 @@ class PopupReport implements PopupReportInterface
|
|||||||
->withAccountInformation()
|
->withAccountInformation()
|
||||||
->withBudgetInformation()
|
->withBudgetInformation()
|
||||||
->withCategoryInformation()
|
->withCategoryInformation()
|
||||||
->setRange($attributes['startDate'], $attributes['endDate'])->withAccountInformation()
|
->setRange($attributes['startDate'], $attributes['endDate'])->withAccountInformation();
|
||||||
->setCategory($category);
|
|
||||||
|
if(null!== $category) {
|
||||||
|
$collector->setCategory($category);
|
||||||
|
}
|
||||||
|
if(null === $category) {
|
||||||
|
$collector->withoutCategory();
|
||||||
|
}
|
||||||
|
|
||||||
if (null !== $currency) {
|
if (null !== $currency) {
|
||||||
$collector->setCurrency($currency);
|
$collector->setCurrency($currency);
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,7 @@ use Illuminate\Support\Collection;
|
|||||||
*/
|
*/
|
||||||
interface PopupReportInterface
|
interface PopupReportInterface
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get balances for budget.
|
* Get balances for budget.
|
||||||
*
|
*
|
||||||
@ -66,12 +67,12 @@ interface PopupReportInterface
|
|||||||
/**
|
/**
|
||||||
* Group by category.
|
* Group by category.
|
||||||
*
|
*
|
||||||
* @param Category $category
|
* @param Category|null $category
|
||||||
* @param array $attributes
|
* @param array $attributes
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function byCategory(Category $category, array $attributes): array;
|
public function byCategory(?Category $category, array $attributes): array;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Do something with expense. Sorry, I am not very inspirational here.
|
* Do something with expense. Sorry, I am not very inspirational here.
|
||||||
|
@ -30,9 +30,6 @@ use FireflyIII\Http\Controllers\Controller;
|
|||||||
use FireflyIII\Models\AvailableBudget;
|
use FireflyIII\Models\AvailableBudget;
|
||||||
use FireflyIII\Models\TransactionCurrency;
|
use FireflyIII\Models\TransactionCurrency;
|
||||||
use FireflyIII\Repositories\Budget\AvailableBudgetRepositoryInterface;
|
use FireflyIII\Repositories\Budget\AvailableBudgetRepositoryInterface;
|
||||||
use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface;
|
|
||||||
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
|
||||||
use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
|
|
||||||
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Log;
|
use Log;
|
||||||
@ -46,14 +43,8 @@ class AvailableBudgetController extends Controller
|
|||||||
|
|
||||||
/** @var AvailableBudgetRepositoryInterface */
|
/** @var AvailableBudgetRepositoryInterface */
|
||||||
private $abRepository;
|
private $abRepository;
|
||||||
/** @var BudgetLimitRepositoryInterface */
|
|
||||||
private $blRepository;
|
|
||||||
/** @var CurrencyRepositoryInterface */
|
/** @var CurrencyRepositoryInterface */
|
||||||
private $currencyRepos;
|
private $currencyRepos;
|
||||||
/** @var OperationsRepositoryInterface */
|
|
||||||
private $opsRepository;
|
|
||||||
/** @var BudgetRepositoryInterface The budget repository */
|
|
||||||
private $repository;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* AmountController constructor.
|
* AmountController constructor.
|
||||||
@ -68,10 +59,7 @@ class AvailableBudgetController 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->opsRepository = app(OperationsRepositoryInterface::class);
|
|
||||||
$this->abRepository = app(AvailableBudgetRepositoryInterface::class);
|
$this->abRepository = app(AvailableBudgetRepositoryInterface::class);
|
||||||
$this->blRepository = app(BudgetLimitRepositoryInterface::class);
|
|
||||||
$this->currencyRepos = app(CurrencyRepositoryInterface::class);
|
$this->currencyRepos = app(CurrencyRepositoryInterface::class);
|
||||||
|
|
||||||
return $next($request);
|
return $next($request);
|
||||||
@ -83,6 +71,13 @@ class AvailableBudgetController extends Controller
|
|||||||
* Create will always assume the user's default currency, if it's not set.
|
* Create will always assume the user's default currency, if it's not set.
|
||||||
*
|
*
|
||||||
* This method will check if there is no AB, and refuse to continue if it exists.
|
* This method will check if there is no AB, and refuse to continue if it exists.
|
||||||
|
*
|
||||||
|
* @param Request $request
|
||||||
|
* @param Carbon $start
|
||||||
|
* @param Carbon $end
|
||||||
|
* @param TransactionCurrency|null $currency
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector|\Illuminate\View\View
|
||||||
*/
|
*/
|
||||||
public function create(Request $request, Carbon $start, Carbon $end, ?TransactionCurrency $currency = null)
|
public function create(Request $request, Carbon $start, Carbon $end, ?TransactionCurrency $currency = null)
|
||||||
{
|
{
|
||||||
@ -106,10 +101,16 @@ class AvailableBudgetController extends Controller
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* createAlternative will show a list of enabled currencies so the user can pick one.
|
* createAlternative will show a list of enabled currencies so the user can pick one.
|
||||||
|
*
|
||||||
|
* @param Request $request
|
||||||
|
* @param Carbon $start
|
||||||
|
* @param Carbon $end
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||||
*/
|
*/
|
||||||
public function createAlternative(Request $request, Carbon $start, Carbon $end)
|
public function createAlternative(Request $request, Carbon $start, Carbon $end)
|
||||||
{
|
{
|
||||||
$currencies = $this->currencyRepos->getEnabled();
|
$currencies = $this->currencyRepos->getEnabled();
|
||||||
$availableBudgets = $this->abRepository->get($start, $end);
|
$availableBudgets = $this->abRepository->get($start, $end);
|
||||||
|
|
||||||
// remove already budgeted currencies:
|
// remove already budgeted currencies:
|
||||||
@ -121,12 +122,14 @@ class AvailableBudgetController extends Controller
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
$page = (int)($request->get('page') ?? 1);
|
$page = (int)($request->get('page') ?? 1);
|
||||||
|
|
||||||
return view('budgets.available-budgets.create-alternative', compact('start', 'end', 'page', 'currencies'));
|
return view('budgets.available-budgets.create-alternative', compact('start', 'end', 'page', 'currencies'));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,6 +148,8 @@ class AvailableBudgetController extends Controller
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param AvailableBudget $availableBudget
|
* @param AvailableBudget $availableBudget
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||||
*/
|
*/
|
||||||
public function edit(AvailableBudget $availableBudget)
|
public function edit(AvailableBudget $availableBudget)
|
||||||
{
|
{
|
||||||
@ -153,6 +158,8 @@ class AvailableBudgetController extends Controller
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
|
||||||
*/
|
*/
|
||||||
public function store(Request $request)
|
public function store(Request $request)
|
||||||
{
|
{
|
||||||
@ -197,6 +204,8 @@ class AvailableBudgetController extends Controller
|
|||||||
/**
|
/**
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
* @param AvailableBudget $availableBudget
|
* @param AvailableBudget $availableBudget
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
|
||||||
*/
|
*/
|
||||||
public function update(Request $request, AvailableBudget $availableBudget)
|
public function update(Request $request, AvailableBudget $availableBudget)
|
||||||
{
|
{
|
||||||
|
@ -31,7 +31,6 @@ use FireflyIII\Models\AvailableBudget;
|
|||||||
use FireflyIII\Models\Budget;
|
use FireflyIII\Models\Budget;
|
||||||
use FireflyIII\Models\BudgetLimit;
|
use FireflyIII\Models\BudgetLimit;
|
||||||
use FireflyIII\Models\TransactionCurrency;
|
use FireflyIII\Models\TransactionCurrency;
|
||||||
use FireflyIII\Repositories\Budget\AvailableBudgetRepositoryInterface;
|
|
||||||
use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface;
|
use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface;
|
||||||
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
||||||
use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
|
use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
|
||||||
@ -50,8 +49,6 @@ class BudgetLimitController extends Controller
|
|||||||
{
|
{
|
||||||
use DateCalculation;
|
use DateCalculation;
|
||||||
|
|
||||||
/** @var AvailableBudgetRepositoryInterface */
|
|
||||||
private $abRepository;
|
|
||||||
/** @var BudgetLimitRepositoryInterface */
|
/** @var BudgetLimitRepositoryInterface */
|
||||||
private $blRepository;
|
private $blRepository;
|
||||||
/** @var CurrencyRepositoryInterface */
|
/** @var CurrencyRepositoryInterface */
|
||||||
@ -73,7 +70,6 @@ class BudgetLimitController extends Controller
|
|||||||
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->opsRepository = app(OperationsRepositoryInterface::class);
|
||||||
$this->abRepository = app(AvailableBudgetRepositoryInterface::class);
|
|
||||||
$this->blRepository = app(BudgetLimitRepositoryInterface::class);
|
$this->blRepository = app(BudgetLimitRepositoryInterface::class);
|
||||||
$this->currencyRepos = app(CurrencyRepositoryInterface::class);
|
$this->currencyRepos = app(CurrencyRepositoryInterface::class);
|
||||||
|
|
||||||
|
@ -68,6 +68,9 @@ class ReportController extends Controller
|
|||||||
case 'category-entry':
|
case 'category-entry':
|
||||||
$html = $this->categoryEntry($attributes);
|
$html = $this->categoryEntry($attributes);
|
||||||
break;
|
break;
|
||||||
|
case 'budget-entry':
|
||||||
|
$html = $this->budgetEntry($attributes);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return response()->json(['html' => $html]);
|
return response()->json(['html' => $html]);
|
||||||
|
@ -75,6 +75,38 @@ trait RenderPartialViews
|
|||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* View for transactions in a budget for an account.
|
||||||
|
*
|
||||||
|
* @param array $attributes
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected function budgetEntry(array $attributes): string // generate view for report.
|
||||||
|
{
|
||||||
|
/** @var PopupReportInterface $popupHelper */
|
||||||
|
$popupHelper = app(PopupReportInterface::class);
|
||||||
|
|
||||||
|
/** @var BudgetRepositoryInterface $budgetRepository */
|
||||||
|
$budgetRepository = app(BudgetRepositoryInterface::class);
|
||||||
|
$budget = $budgetRepository->findNull((int)$attributes['budgetId']);
|
||||||
|
|
||||||
|
$accountRepos = app(AccountRepositoryInterface::class);
|
||||||
|
$account = $accountRepos->findNull((int)$attributes['accountId']);
|
||||||
|
|
||||||
|
$journals = $popupHelper->balanceForBudget($budget, $account, $attributes);
|
||||||
|
// @codeCoverageIgnoreStart
|
||||||
|
try {
|
||||||
|
$view = view('popup.report.balance-amount', compact('journals', 'budget','account'))->render();
|
||||||
|
} catch (Throwable $e) {
|
||||||
|
Log::error(sprintf('Could not render: %s', $e->getMessage()));
|
||||||
|
$view = 'Firefly III could not render the view. Please see the log files.';
|
||||||
|
}
|
||||||
|
|
||||||
|
// @codeCoverageIgnoreEnd
|
||||||
|
|
||||||
|
return $view;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get options for budget report.
|
* Get options for budget report.
|
||||||
@ -126,6 +158,7 @@ trait RenderPartialViews
|
|||||||
Log::error(sprintf('Could not render: %s', $e->getMessage()));
|
Log::error(sprintf('Could not render: %s', $e->getMessage()));
|
||||||
$view = 'Firefly III could not render the view. Please see the log files.';
|
$view = 'Firefly III could not render the view. Please see the log files.';
|
||||||
}
|
}
|
||||||
|
|
||||||
// @codeCoverageIgnoreEnd
|
// @codeCoverageIgnoreEnd
|
||||||
|
|
||||||
return $view;
|
return $view;
|
||||||
@ -146,12 +179,7 @@ trait RenderPartialViews
|
|||||||
/** @var CategoryRepositoryInterface $categoryRepository */
|
/** @var CategoryRepositoryInterface $categoryRepository */
|
||||||
$categoryRepository = app(CategoryRepositoryInterface::class);
|
$categoryRepository = app(CategoryRepositoryInterface::class);
|
||||||
$category = $categoryRepository->findNull((int)$attributes['categoryId']);
|
$category = $categoryRepository->findNull((int)$attributes['categoryId']);
|
||||||
|
$journals = $popupHelper->byCategory($category, $attributes);
|
||||||
if (null === $category) {
|
|
||||||
return 'This is an unknown category. Apologies.';
|
|
||||||
}
|
|
||||||
|
|
||||||
$journals = $popupHelper->byCategory($category, $attributes);
|
|
||||||
// @codeCoverageIgnoreStart
|
// @codeCoverageIgnoreStart
|
||||||
try {
|
try {
|
||||||
$view = view('popup.report.category-entry', compact('journals', 'category'))->render();
|
$view = view('popup.report.category-entry', compact('journals', 'category'))->render();
|
||||||
@ -159,6 +187,7 @@ trait RenderPartialViews
|
|||||||
Log::error(sprintf('Could not render: %s', $e->getMessage()));
|
Log::error(sprintf('Could not render: %s', $e->getMessage()));
|
||||||
$view = 'Firefly III could not render the view. Please see the log files.';
|
$view = 'Firefly III could not render the view. Please see the log files.';
|
||||||
}
|
}
|
||||||
|
|
||||||
// @codeCoverageIgnoreEnd
|
// @codeCoverageIgnoreEnd
|
||||||
|
|
||||||
return $view;
|
return $view;
|
||||||
@ -216,6 +245,7 @@ trait RenderPartialViews
|
|||||||
Log::error(sprintf('Could not render: %s', $e->getMessage()));
|
Log::error(sprintf('Could not render: %s', $e->getMessage()));
|
||||||
$view = 'Firefly III could not render the view. Please see the log files.';
|
$view = 'Firefly III could not render the view. Please see the log files.';
|
||||||
}
|
}
|
||||||
|
|
||||||
// @codeCoverageIgnoreEnd
|
// @codeCoverageIgnoreEnd
|
||||||
|
|
||||||
return $view;
|
return $view;
|
||||||
@ -314,7 +344,7 @@ trait RenderPartialViews
|
|||||||
|
|
||||||
/** @var PopupReportInterface $popupHelper */
|
/** @var PopupReportInterface $popupHelper */
|
||||||
$popupHelper = app(PopupReportInterface::class);
|
$popupHelper = app(PopupReportInterface::class);
|
||||||
$account = $accountRepository->findNull((int)$attributes['accountId']);
|
$account = $accountRepository->findNull((int)$attributes['accountId']);
|
||||||
|
|
||||||
if (null === $account) {
|
if (null === $account) {
|
||||||
return 'This is an unknown category. Apologies.';
|
return 'This is an unknown category. Apologies.';
|
||||||
@ -328,6 +358,7 @@ trait RenderPartialViews
|
|||||||
Log::error(sprintf('Could not render: %s', $e->getMessage()));
|
Log::error(sprintf('Could not render: %s', $e->getMessage()));
|
||||||
$view = 'Firefly III could not render the view. Please see the log files.';
|
$view = 'Firefly III could not render the view. Please see the log files.';
|
||||||
}
|
}
|
||||||
|
|
||||||
// @codeCoverageIgnoreEnd
|
// @codeCoverageIgnoreEnd
|
||||||
|
|
||||||
return $view;
|
return $view;
|
||||||
|
@ -1,31 +0,0 @@
|
|||||||
<div class="modal-dialog">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<button type="button" class="close" data-dismiss="modal"><span>×</span><span class="sr-only">{{ 'close'|_ }}</span>
|
|
||||||
</button>
|
|
||||||
<h4 class="modal-title">
|
|
||||||
{{ trans('firefly.update_budget_amount_range',
|
|
||||||
{start: start.formatLocalized(monthAndDayFormat), end: end.formatLocalized(monthAndDayFormat)}) }}
|
|
||||||
</h4>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<form style="display: inline;" id="income" action="{{ route('budgets.income.post') }}" method="POST">
|
|
||||||
<div class="modal-body">
|
|
||||||
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
|
|
||||||
<input type="hidden" name="start" value="{{ start.format('Y-m-d') }}"/>
|
|
||||||
<input type="hidden" name="end" value="{{ end.format('Y-m-d') }}"/>
|
|
||||||
<input type="hidden" name="page" value="{{ page }}" />
|
|
||||||
|
|
||||||
<div class="input-group">
|
|
||||||
<div class="input-group-addon">{{ defaultCurrency.symbol|raw }}</div>
|
|
||||||
<input step="any" class="form-control" id="amount" value="{{ available }}" autocomplete="off" name="amount" type="number"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">{{ 'close'|_ }}</button>
|
|
||||||
<button type="submit" class="btn btn-primary">{{ 'update_amount'|_ }}</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
@ -1,53 +0,0 @@
|
|||||||
<div class="modal-dialog">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<button type="button" class="close" data-dismiss="modal"><span>×</span><span class="sr-only">{{ 'close'|_ }}</span>
|
|
||||||
</button>
|
|
||||||
<h4 class="modal-title">
|
|
||||||
{{ trans('firefly.info_on_available_amount') }}
|
|
||||||
</h4>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="modal-body">
|
|
||||||
<p>
|
|
||||||
{{ 'available_amount_indication'|_ }}
|
|
||||||
</p>
|
|
||||||
<table class="table table-bordered table-striped">
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
{{ 'budgeted'|_ }}
|
|
||||||
<small><br/>
|
|
||||||
{{ trans('firefly.average_between', {start:searchBegin.formatLocalized(monthAndDayFormat), end:searchEnd.formatLocalized(monthAndDayFormat)}) }}
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<span class="pull-right">{{ result.available|formatAmount }}</span>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>{{ 'earned'|_ }}
|
|
||||||
<small><br/>
|
|
||||||
{{ trans('firefly.average_between', {start:searchBegin.formatLocalized(monthAndDayFormat), end:searchEnd.formatLocalized(monthAndDayFormat)}) }}
|
|
||||||
</small>
|
|
||||||
</td>
|
|
||||||
<td><span class="pull-right">{{ result.earned|formatAmount }}</span></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>{{ 'spent'|_ }}
|
|
||||||
<small><br/>
|
|
||||||
{{ trans('firefly.average_between', {start:searchBegin.formatLocalized(monthAndDayFormat), end:searchEnd.formatLocalized(monthAndDayFormat)}) }}
|
|
||||||
</small>
|
|
||||||
</td>
|
|
||||||
<td><span class="pull-right">{{ result.spent|formatAmount }}</span></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><strong>{{ 'suggested'|_ }}</strong></td>
|
|
||||||
<td><span class="pull-right">{{ result.suggested|formatAmount }}</span></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">{{ 'close'|_ }}</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
@ -16,8 +16,6 @@
|
|||||||
{{ trans('firefly.chart_all_journals_for_budget', {name:budget.name}) }}
|
{{ trans('firefly.chart_all_journals_for_budget', {name:budget.name}) }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
|
|
||||||
<div class="box-tools pull-right">
|
<div class="box-tools pull-right">
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
<button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown"><i class="fa fa-ellipsis-v"></i></button>
|
<button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown"><i class="fa fa-ellipsis-v"></i></button>
|
||||||
|
@ -4,7 +4,8 @@
|
|||||||
<th>{{ 'budgets'|_ }}</th>
|
<th>{{ 'budgets'|_ }}</th>
|
||||||
{% for account in report.accounts %}
|
{% for account in report.accounts %}
|
||||||
{% if account.sum != 0 %}
|
{% if account.sum != 0 %}
|
||||||
<th class="hidden-xs" style="text-align: right;"><a href="{{ route('accounts.show',account.id) }}" title="{{ account.iban|default(account.name) }}">{{ account.name }}</a></th>
|
<th class="hidden-xs" style="text-align: right;"><a href="{{ route('accounts.show',account.id) }}"
|
||||||
|
title="{{ account.iban|default(account.name) }}">{{ account.name }}</a></th>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<th style="text-align: right;">{{ 'sum'|_ }}</th>
|
<th style="text-align: right;">{{ 'sum'|_ }}</th>
|
||||||
@ -14,31 +15,34 @@
|
|||||||
|
|
||||||
{% for budget in report.budgets %}
|
{% for budget in report.budgets %}
|
||||||
{% if budget.spent|length > 0 %}
|
{% if budget.spent|length > 0 %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<a href="{{ route('budgets.show', [budget.budget_id]) }}">{{ budget.budget_name }}</a>
|
<a href="{{ route('budgets.show', [budget.budget_id]) }}">{{ budget.budget_name }}</a>
|
||||||
</td>
|
|
||||||
{% for account in report.accounts %}
|
|
||||||
{% if budget.spent[account.id] %}
|
|
||||||
<td style="text-align: right;">
|
|
||||||
{{ formatAmountBySymbol(budget.spent[account.id].spent, budget.spent[account.id].currency_symbol, budget.spent[account.id].currency_decimal_places) }}
|
|
||||||
<i class="fa fa-fw fa-info-circle text-muted"></i>
|
|
||||||
{# TODO #}
|
|
||||||
{#data-location="category-entry" data-category-id="{{ category.id }}" data-currency-id="{{ category.currency_id }}"-->#}
|
|
||||||
</td>
|
</td>
|
||||||
{% else %}
|
{% for account in report.accounts %}
|
||||||
{% if report.accounts[account.id].sum != 0 %}
|
{% if budget.spent[account.id] %}
|
||||||
<td> </td>
|
<td style="text-align: right;">
|
||||||
{% endif %}
|
{{ formatAmountBySymbol(budget.spent[account.id].spent, budget.spent[account.id].currency_symbol, budget.spent[account.id].currency_decimal_places) }}
|
||||||
{% endif %}
|
<i data-location="budget-entry"
|
||||||
|
data-budget-id="{{ budget.budget_id }}"
|
||||||
|
data-account-id="{{ account.id }}"
|
||||||
|
data-currency-id="{{ budget.spent[account.id].currency_id }}"
|
||||||
|
class="fa fa-fw fa-info-circle text-muted firefly-info-button"></i>
|
||||||
|
</td>
|
||||||
|
{% else %}
|
||||||
|
{% if report.accounts[account.id].sum != 0 %}
|
||||||
|
<td> </td>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<td style="text-align: right;">
|
<td style="text-align: right;">
|
||||||
{% for sum in report.sums[budget.budget_id] %}
|
{% for sum in report.sums[budget.budget_id] %}
|
||||||
{{ formatAmountBySymbol(sum.sum, sum.currency_symbol, sum.currency_decimal_places) }} <i class="fa fa-fw fa-info-circle text-muted"></i><br />
|
{{ formatAmountBySymbol(sum.sum, sum.currency_symbol, sum.currency_decimal_places) }} <i class="fa fa-fw fa-info-circle text-muted"></i>
|
||||||
{% endfor %}
|
<br/>
|
||||||
</td>
|
{% endfor %}
|
||||||
</tr>
|
</td>
|
||||||
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
@ -47,9 +51,9 @@
|
|||||||
<td><em>{{ 'sum'|_ }}</em></td>
|
<td><em>{{ 'sum'|_ }}</em></td>
|
||||||
{% for account in report.accounts %}
|
{% for account in report.accounts %}
|
||||||
{% if account.sum != 0 %}
|
{% if account.sum != 0 %}
|
||||||
<td style="text-align: right;">
|
<td style="text-align: right;">
|
||||||
{{ formatAmountBySymbol(account.sum, account.currency_symbol, account.currency_decimal_places) }}
|
{{ formatAmountBySymbol(account.sum, account.currency_symbol, account.currency_decimal_places) }}
|
||||||
</td>
|
</td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -29,7 +29,6 @@
|
|||||||
{% else %}
|
{% else %}
|
||||||
<td data-value="0" style="text-align: right;">
|
<td data-value="0" style="text-align: right;">
|
||||||
{{ formatAmountBySymbol(0, info.currency_symbol, info.currency_decimal_places) }}
|
{{ formatAmountBySymbol(0, info.currency_symbol, info.currency_decimal_places) }}
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
@ -22,8 +22,7 @@
|
|||||||
<td style="text-align: right;">{{ formatAmountBySymbol(category.earned, category.currency_symbol, category.currency_decimal_places, true) }}</td>
|
<td style="text-align: right;">{{ formatAmountBySymbol(category.earned, category.currency_symbol, category.currency_decimal_places, true) }}</td>
|
||||||
<td style="text-align: right;">{{ formatAmountBySymbol(category.sum, category.currency_symbol, category.currency_decimal_places, true) }}</td>
|
<td style="text-align: right;">{{ formatAmountBySymbol(category.sum, category.currency_symbol, category.currency_decimal_places, true) }}</td>
|
||||||
<td style="width:20px;">
|
<td style="width:20px;">
|
||||||
<i class="fa fa-fw fa-info-circle text-muted firefly-info-button"
|
<i class="fa fa-fw fa-info-circle text-muted firefly-info-button" data-location="category-entry" data-category-id="{{ category.id }}" data-currency-id="{{ category.currency_id }}"
|
||||||
data-location="category-entry" data-category-id="{{ category.id }}" data-currency-id="{{ category.currency_id }}"
|
|
||||||
></i>
|
></i>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -229,7 +229,7 @@ Route::group(
|
|||||||
*/
|
*/
|
||||||
Route::group(
|
Route::group(
|
||||||
['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'available-budgets', 'as' => 'available-budgets.'],
|
['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'available-budgets', 'as' => 'available-budgets.'],
|
||||||
static function () {s
|
static function () {
|
||||||
|
|
||||||
// create
|
// create
|
||||||
Route::get('create/{start_date}/{end_date}/{currency?}', ['uses' => 'Budget\AvailableBudgetController@create', 'as' => 'create']);
|
Route::get('create/{start_date}/{end_date}/{currency?}', ['uses' => 'Budget\AvailableBudgetController@create', 'as' => 'create']);
|
||||||
|
Loading…
Reference in New Issue
Block a user