See if we can easily generate reports with shared accounts.

This commit is contained in:
James Cole
2015-03-10 19:51:24 +01:00
parent 0b028a8923
commit 17ae4b7d2a
4 changed files with 305 additions and 246 deletions

View File

@@ -23,26 +23,33 @@ class ReportQuery implements ReportQueryInterface
/** /**
* This query retrieves a list of accounts that are active and not shared. * This query retrieves a list of accounts that are active and not shared.
* *
* @param bool $showSharedReports
*
* @return Collection * @return Collection
*/ */
public function accountList() public function accountList($showSharedReports = false)
{ {
return Auth::user()->accounts() $query = Auth::user()->accounts();
->leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id') if ($showSharedReports === false) {
->leftJoin(
$query->leftJoin(
'account_meta', function (JoinClause $join) { 'account_meta', function (JoinClause $join) {
$join->on('account_meta.account_id', '=', 'accounts.id')->where('account_meta.name', '=', "accountRole"); $join->on('account_meta.account_id', '=', 'accounts.id')->where('account_meta.name', '=', "accountRole");
} }
) )->where(
->whereIn('account_types.type', ['Default account', 'Cash account', 'Asset account'])
->where('active', 1)
->where(
function (Builder $query) { function (Builder $query) {
$query->where('account_meta.data', '!=', '"sharedAsset"'); $query->where('account_meta.data', '!=', '"sharedAsset"');
$query->orWhereNull('account_meta.data'); $query->orWhereNull('account_meta.data');
} }
) );
->get(['accounts.*']);
}
$query->leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id')
->whereIn('account_types.type', ['Default account', 'Cash account', 'Asset account'])
->where('active', 1)
->orderBy('accounts.name', 'ASC');
return $query->get(['accounts.*']);
} }
/** /**
@@ -105,7 +112,7 @@ class ReportQuery implements ReportQueryInterface
{ {
$set = $this->balancedTransactionsList($account, $start, $end); $set = $this->balancedTransactionsList($account, $start, $end);
$sum = 0; $sum = 0;
foreach($set as $entry) { foreach ($set as $entry) {
$sum += floatval($entry->amount); $sum += floatval($entry->amount);
} }
@@ -117,26 +124,31 @@ class ReportQuery implements ReportQueryInterface
* *
* @param Carbon $start * @param Carbon $start
* @param Carbon $end * @param Carbon $end
* @param bool $showSharedReports
* *
* @return Collection * @return Collection
*/ */
public function getAllAccounts(Carbon $start, Carbon $end) public function getAllAccounts(Carbon $start, Carbon $end, $showSharedReports = false)
{ {
$set = Auth::user()->accounts()->orderBy('accounts.name', 'ASC') $query = Auth::user()->accounts()->orderBy('accounts.name', 'ASC')
->accountTypeIn(['Default account', 'Asset account', 'Cash account']) ->accountTypeIn(['Default account', 'Asset account', 'Cash account']);
->leftJoin( if ($showSharedReports === false) {
$query->leftJoin(
'account_meta', function (JoinClause $join) { 'account_meta', function (JoinClause $join) {
$join->on('account_meta.account_id', '=', 'accounts.id')->where('account_meta.name', '=', 'accountRole'); $join->on('account_meta.account_id', '=', 'accounts.id')->where('account_meta.name', '=', 'accountRole');
} }
) )
->orderBy('accounts.name','ASC') ->orderBy('accounts.name', 'ASC')
->where( ->where(
function (Builder $query) { function (Builder $query) use ($showSharedReports) {
$query->where('account_meta.data', '!=', '"sharedAsset"'); $query->where('account_meta.data', '!=', '"sharedAsset"');
$query->orWhereNull('account_meta.data'); $query->orWhereNull('account_meta.data');
} }
) );
->get(['accounts.*']); }
$set = $query->get(['accounts.*']);
$set->each( $set->each(
function (Account $account) use ($start, $end) { function (Account $account) use ($start, $end) {
/** @noinspection PhpParamsInspection */ /** @noinspection PhpParamsInspection */
@@ -223,12 +235,13 @@ class ReportQuery implements ReportQueryInterface
* *
* @param Carbon $start * @param Carbon $start
* @param Carbon $end * @param Carbon $end
* @param bool $showSharedReports
* *
* @return Collection * @return Collection
*/ */
public function incomeByPeriod(Carbon $start, Carbon $end) public function incomeByPeriod(Carbon $start, Carbon $end, $showSharedReports = false)
{ {
return TransactionJournal:: $query = TransactionJournal::
leftJoin( leftJoin(
'transactions as t_from', function (JoinClause $join) { 'transactions as t_from', function (JoinClause $join) {
$join->on('t_from.transaction_journal_id', '=', 'transaction_journals.id')->where('t_from.amount', '<', 0); $join->on('t_from.transaction_journal_id', '=', 'transaction_journals.id')->where('t_from.amount', '<', 0);
@@ -251,8 +264,9 @@ class ReportQuery implements ReportQueryInterface
$join->on('ac_to.id', '=', 'acm_to.account_id')->where('acm_to.name', '=', 'accountRole'); $join->on('ac_to.id', '=', 'acm_to.account_id')->where('acm_to.name', '=', 'accountRole');
} }
) )
->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id') ->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id');
->where( if ($showSharedReports === false) {
$query->where(
function ($query) { function ($query) {
$query->where( $query->where(
function ($q) { function ($q) {
@@ -267,11 +281,13 @@ class ReportQuery implements ReportQueryInterface
} }
); );
} }
) );
->before($end)->after($start) }
$query->before($end)->after($start)
->where('transaction_journals.user_id', Auth::user()->id) ->where('transaction_journals.user_id', Auth::user()->id)
->groupBy('t_from.account_id')->orderBy('transaction_journals.date') ->groupBy('t_from.account_id')->orderBy('transaction_journals.date');
->get(
return $query->get(
['transaction_journals.id', ['transaction_journals.id',
'transaction_journals.description', 'transaction_journals.description',
'transaction_journals.encrypted', 'transaction_journals.encrypted',
@@ -288,12 +304,13 @@ class ReportQuery implements ReportQueryInterface
* *
* @param Carbon $start * @param Carbon $start
* @param Carbon $end * @param Carbon $end
* @param bool $showSharedReports
* *
* @return Collection * @return Collection
*/ */
public function journalsByBudget(Carbon $start, Carbon $end) public function journalsByBudget(Carbon $start, Carbon $end, $showSharedReports = false)
{ {
return Auth::user()->transactionjournals() $query = Auth::user()->transactionjournals()
->leftJoin('budget_transaction_journal', 'budget_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id') ->leftJoin('budget_transaction_journal', 'budget_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id')
->leftJoin('budgets', 'budget_transaction_journal.budget_id', '=', 'budgets.id') ->leftJoin('budgets', 'budget_transaction_journal.budget_id', '=', 'budgets.id')
->leftJoin( ->leftJoin(
@@ -301,20 +318,23 @@ class ReportQuery implements ReportQueryInterface
$join->on('transaction_journals.id', '=', 'transactions.transaction_journal_id')->where('transactions.amount', '<', 0); $join->on('transaction_journals.id', '=', 'transactions.transaction_journal_id')->where('transactions.amount', '<', 0);
} }
) )
->leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id') ->leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id');
->leftJoin( if ($showSharedReports === false) {
$query->leftJoin(
'account_meta', function (JoinClause $join) { 'account_meta', function (JoinClause $join) {
$join->on('account_meta.account_id', '=', 'accounts.id')->where('account_meta.name', '=', 'accountRole'); $join->on('account_meta.account_id', '=', 'accounts.id')->where('account_meta.name', '=', 'accountRole');
} }
) )->where('account_meta.data', '!=', '"sharedAsset"');
->leftJoin('transaction_types', 'transaction_journals.transaction_type_id', '=', 'transaction_types.id') }
$query->leftJoin('transaction_types', 'transaction_journals.transaction_type_id', '=', 'transaction_types.id')
->where('transaction_journals.date', '>=', $start->format('Y-m-d')) ->where('transaction_journals.date', '>=', $start->format('Y-m-d'))
->where('transaction_journals.date', '<=', $end->format('Y-m-d')) ->where('transaction_journals.date', '<=', $end->format('Y-m-d'))
->where('account_meta.data', '!=', '"sharedAsset"')
->where('transaction_types.type', 'Withdrawal') ->where('transaction_types.type', 'Withdrawal')
->groupBy('budgets.id') ->groupBy('budgets.id')
->orderBy('budgets.name', 'ASC') ->orderBy('budgets.name', 'ASC');
->get(['budgets.id', 'budgets.name', DB::Raw('SUM(`transactions`.`amount`) AS `spent`')]);
return $query->get(['budgets.id', 'budgets.name', DB::Raw('SUM(`transactions`.`amount`) AS `spent`')]);
} }
/** /**
@@ -323,12 +343,13 @@ class ReportQuery implements ReportQueryInterface
* *
* @param Carbon $start * @param Carbon $start
* @param Carbon $end * @param Carbon $end
* @param bool $showSharedReports
* *
* @return Collection * @return Collection
*/ */
public function journalsByCategory(Carbon $start, Carbon $end) public function journalsByCategory(Carbon $start, Carbon $end, $showSharedReports = false)
{ {
return Auth::user()->transactionjournals() $query = Auth::user()->transactionjournals()
->leftJoin( ->leftJoin(
'category_transaction_journal', 'category_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id' 'category_transaction_journal', 'category_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id'
) )
@@ -338,20 +359,22 @@ class ReportQuery implements ReportQueryInterface
$join->on('transaction_journals.id', '=', 'transactions.transaction_journal_id')->where('transactions.amount', '<', 0); $join->on('transaction_journals.id', '=', 'transactions.transaction_journal_id')->where('transactions.amount', '<', 0);
} }
) )
->leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id') ->leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id');
->leftJoin( if ($showSharedReports === false) {
$query->leftJoin(
'account_meta', function (JoinClause $join) { 'account_meta', function (JoinClause $join) {
$join->on('account_meta.account_id', '=', 'accounts.id')->where('account_meta.name', '=', 'accountRole'); $join->on('account_meta.account_id', '=', 'accounts.id')->where('account_meta.name', '=', 'accountRole');
} }
) )->where('account_meta.data', '!=', '"sharedAsset"');
->leftJoin('transaction_types', 'transaction_journals.transaction_type_id', '=', 'transaction_types.id') }
$query->leftJoin('transaction_types', 'transaction_journals.transaction_type_id', '=', 'transaction_types.id')
->where('transaction_journals.date', '>=', $start->format('Y-m-d')) ->where('transaction_journals.date', '>=', $start->format('Y-m-d'))
->where('transaction_journals.date', '<=', $end->format('Y-m-d')) ->where('transaction_journals.date', '<=', $end->format('Y-m-d'))
->where('account_meta.data', '!=', '"sharedAsset"')
->where('transaction_types.type', 'Withdrawal') ->where('transaction_types.type', 'Withdrawal')
->groupBy('categories.id') ->groupBy('categories.id')
->orderBy('amount') ->orderBy('amount');
->get(['categories.id', 'categories.name', DB::Raw('SUM(`transactions`.`amount`) AS `amount`')]);
return $query->get(['categories.id', 'categories.name', DB::Raw('SUM(`transactions`.`amount`) AS `amount`')]);
} }
@@ -363,18 +386,17 @@ class ReportQuery implements ReportQueryInterface
* *
* @param Carbon $start * @param Carbon $start
* @param Carbon $end * @param Carbon $end
* @param bool $showSharedReports
* *
* @return Collection * @return Collection
*/ */
public function journalsByExpenseAccount(Carbon $start, Carbon $end) public function journalsByExpenseAccount(Carbon $start, Carbon $end, $showSharedReports = false)
{ {
return TransactionJournal:: $query = TransactionJournal::leftJoin(
leftJoin(
'transactions as t_from', function (JoinClause $join) { 'transactions as t_from', function (JoinClause $join) {
$join->on('t_from.transaction_journal_id', '=', 'transaction_journals.id')->where('t_from.amount', '<', 0); $join->on('t_from.transaction_journal_id', '=', 'transaction_journals.id')->where('t_from.amount', '<', 0);
} }
) )->leftJoin('accounts as ac_from', 't_from.account_id', '=', 'ac_from.id')
->leftJoin('accounts as ac_from', 't_from.account_id', '=', 'ac_from.id')
->leftJoin( ->leftJoin(
'account_meta as acm_from', function (JoinClause $join) { 'account_meta as acm_from', function (JoinClause $join) {
$join->on('ac_from.id', '=', 'acm_from.account_id')->where('acm_from.name', '=', 'accountRole'); $join->on('ac_from.id', '=', 'acm_from.account_id')->where('acm_from.name', '=', 'accountRole');
@@ -391,8 +413,10 @@ class ReportQuery implements ReportQueryInterface
$join->on('ac_to.id', '=', 'acm_to.account_id')->where('acm_to.name', '=', 'accountRole'); $join->on('ac_to.id', '=', 'acm_to.account_id')->where('acm_to.name', '=', 'accountRole');
} }
) )
->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id') ->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id');
->where(
if ($showSharedReports === false) {
$query->where(
function ($query) { function ($query) {
$query->where( $query->where(
function ($q) { function ($q) {
@@ -407,13 +431,15 @@ class ReportQuery implements ReportQueryInterface
} }
); );
} }
) );
->before($end) }
$query->before($end)
->after($start) ->after($start)
->where('transaction_journals.user_id', Auth::user()->id) ->where('transaction_journals.user_id', Auth::user()->id)
->groupBy('t_to.account_id') ->groupBy('t_to.account_id')
->orderBy('amount', 'DESC') ->orderBy('amount', 'DESC');
->get(['t_to.account_id as id', 'ac_to.name as name', DB::Raw('SUM(t_to.amount) as `amount`')]);
return $query->get(['t_to.account_id as id', 'ac_to.name as name', DB::Raw('SUM(t_to.amount) as `amount`')]);
} }
/** /**

View File

@@ -17,19 +17,69 @@ interface ReportQueryInterface
/** /**
* This query retrieves a list of accounts that are active and not shared. * This query retrieves a list of accounts that are active and not shared.
* *
* @param bool $showSharedReports
*
* @return Collection * @return Collection
*/ */
public function accountList(); public function accountList($showSharedReports = false);
/**
* This method will get a list of all expenses in a certain time period that have no budget
* and are balanced by a transfer to make up for it.
*
* @param Account $account
* @param Carbon $start
* @param Carbon $end
*
* @return Collection
*/
public function balancedTransactionsList(Account $account, Carbon $start, Carbon $end);
/**
* This method will get the sum of all expenses in a certain time period that have no budget
* and are balanced by a transfer to make up for it.
*
* @param Account $account
* @param Carbon $start
* @param Carbon $end
*
* @return Collection
*/
public function balancedTransactionsSum(Account $account, Carbon $start, Carbon $end);
/** /**
* Get a users accounts combined with various meta-data related to the start and end date. * Get a users accounts combined with various meta-data related to the start and end date.
* *
* @param Carbon $start * @param Carbon $start
* @param Carbon $end * @param Carbon $end
* @param bool $showSharedReports
* *
* @return Collection * @return Collection
*/ */
public function getAllAccounts(Carbon $start, Carbon $end); public function getAllAccounts(Carbon $start, Carbon $end, $showSharedReports = false);
/**
* Grabs a summary of all expenses grouped by budget, related to the account.
*
* @param Account $account
* @param Carbon $start
* @param Carbon $end
*
* @return mixed
*/
public function getBudgetSummary(Account $account, Carbon $start, Carbon $end);
/**
* Get a list of transaction journals that have no budget, filtered for the specified account
* and the specified date range.
*
* @param Account $account
* @param Carbon $start
* @param Carbon $end
*
* @return Collection
*/
public function getTransactionsWithoutBudget(Account $account, Carbon $start, Carbon $end);
/** /**
* This method returns all "income" journals in a certain period, which are both transfers from a shared account * This method returns all "income" journals in a certain period, which are both transfers from a shared account
@@ -38,20 +88,22 @@ interface ReportQueryInterface
* *
* @param Carbon $start * @param Carbon $start
* @param Carbon $end * @param Carbon $end
* @param bool $showSharedReports
* *
* @return Collection * @return Collection
*/ */
public function incomeByPeriod(Carbon $start, Carbon $end); public function incomeByPeriod(Carbon $start, Carbon $end, $showSharedReports = false);
/** /**
* Gets a list of expenses grouped by the budget they were filed under. * Gets a list of expenses grouped by the budget they were filed under.
* *
* @param Carbon $start * @param Carbon $start
* @param Carbon $end * @param Carbon $end
* @param bool $showSharedReports
* *
* @return Collection * @return Collection
*/ */
public function journalsByBudget(Carbon $start, Carbon $end); public function journalsByBudget(Carbon $start, Carbon $end, $showSharedReports = false);
/** /**
* Gets a list of categories and the expenses therein, grouped by the relevant category. * Gets a list of categories and the expenses therein, grouped by the relevant category.
@@ -59,10 +111,11 @@ interface ReportQueryInterface
* *
* @param Carbon $start * @param Carbon $start
* @param Carbon $end * @param Carbon $end
* @param bool $showSharedReports
* *
* @return Collection * @return Collection
*/ */
public function journalsByCategory(Carbon $start, Carbon $end); public function journalsByCategory(Carbon $start, Carbon $end, $showSharedReports = false);
/** /**
* Gets a list of expense accounts and the expenses therein, grouped by that expense account. * Gets a list of expense accounts and the expenses therein, grouped by that expense account.
@@ -72,10 +125,11 @@ interface ReportQueryInterface
* *
* @param Carbon $start * @param Carbon $start
* @param Carbon $end * @param Carbon $end
* @param bool $showSharedReports
* *
* @return Collection * @return Collection
*/ */
public function journalsByExpenseAccount(Carbon $start, Carbon $end); public function journalsByExpenseAccount(Carbon $start, Carbon $end, $showSharedReports = false);
/** /**
* This method returns all deposits into asset accounts, grouped by the revenue account, * This method returns all deposits into asset accounts, grouped by the revenue account,
@@ -108,51 +162,4 @@ interface ReportQueryInterface
* @return Collection * @return Collection
*/ */
public function sharedExpensesByCategory(Carbon $start, Carbon $end); public function sharedExpensesByCategory(Carbon $start, Carbon $end);
/**
* Grabs a summary of all expenses grouped by budget, related to the account.
*
* @param Account $account
* @param Carbon $start
* @param Carbon $end
*
* @return mixed
*/
public function getBudgetSummary(Account $account, Carbon $start, Carbon $end);
/**
* Get a list of transaction journals that have no budget, filtered for the specified account
* and the specified date range.
*
* @param Account $account
* @param Carbon $start
* @param Carbon $end
*
* @return Collection
*/
public function getTransactionsWithoutBudget(Account $account, Carbon $start, Carbon $end);
/**
* This method will get a list of all expenses in a certain time period that have no budget
* and are balanced by a transfer to make up for it.
*
* @param Account $account
* @param Carbon $start
* @param Carbon $end
*
* @return Collection
*/
public function balancedTransactionsList(Account $account, Carbon $start, Carbon $end);
/**
* This method will get the sum of all expenses in a certain time period that have no budget
* and are balanced by a transfer to make up for it.
*
* @param Account $account
* @param Carbon $start
* @param Carbon $end
*
* @return Collection
*/
public function balancedTransactionsSum(Account $account, Carbon $start, Carbon $end);
} }

View File

@@ -9,6 +9,7 @@ use FireflyIII\Http\Requests;
use FireflyIII\Models\Account; use FireflyIII\Models\Account;
use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionJournal;
use Illuminate\Database\Query\JoinClause; use Illuminate\Database\Query\JoinClause;
use Preferences;
use Session; use Session;
use Steam; use Steam;
use View; use View;
@@ -51,11 +52,16 @@ class ReportController extends Controller
$end->endOfMonth(); $end->endOfMonth();
$start->subDay(); $start->subDay();
// shared accounts preference:
$pref = Preferences::get('showSharedReports', false);
$showSharedReports = $pref->data;
$dayEarly = clone $date; $dayEarly = clone $date;
$subTitle = 'Budget report for ' . $date->format('F Y'); $subTitle = 'Budget report for ' . $date->format('F Y');
$subTitleIcon = 'fa-calendar'; $subTitleIcon = 'fa-calendar';
$dayEarly = $dayEarly->subDay(); $dayEarly = $dayEarly->subDay();
$accounts = $query->getAllAccounts($start, $end); $accounts = $query->getAllAccounts($start, $end, $showSharedReports);
$start->addDay(); $start->addDay();
$accounts->each( $accounts->each(
@@ -89,18 +95,21 @@ class ReportController extends Controller
) )
->get(['budgets.*', 'budget_limits.amount as amount']); ->get(['budgets.*', 'budget_limits.amount as amount']);
$budgets = Steam::makeArray($set); $budgets = Steam::makeArray($set);
$amountSet = $query->journalsByBudget($start, $end); $amountSet = $query->journalsByBudget($start, $end, $showSharedReports);
$amounts = Steam::makeArray($amountSet); $amounts = Steam::makeArray($amountSet);
$budgets = Steam::mergeArrays($budgets, $amounts); $budgets = Steam::mergeArrays($budgets, $amounts);
$budgets[0]['spent'] = isset($budgets[0]['spent']) ? $budgets[0]['spent'] : 0.0; $budgets[0]['spent'] = isset($budgets[0]['spent']) ? $budgets[0]['spent'] : 0.0;
$budgets[0]['amount'] = isset($budgets[0]['amount']) ? $budgets[0]['amount'] : 0.0; $budgets[0]['amount'] = isset($budgets[0]['amount']) ? $budgets[0]['amount'] : 0.0;
$budgets[0]['name'] = 'No budget'; $budgets[0]['name'] = 'No budget';
// find transactions to shared expense accounts, which are without a budget by default: // find transactions to shared asset accounts, which are without a budget by default:
// which is only relevant when shared asset accounts are hidden.
if ($showSharedReports === false) {
$transfers = $query->sharedExpenses($start, $end); $transfers = $query->sharedExpenses($start, $end);
foreach ($transfers as $transfer) { foreach ($transfers as $transfer) {
$budgets[0]['spent'] += floatval($transfer->amount) * -1; $budgets[0]['spent'] += floatval($transfer->amount) * -1;
} }
}
/** /**
* End getBudgetsForMonth DONE * End getBudgetsForMonth DONE
@@ -152,6 +161,14 @@ class ReportController extends Controller
} }
/**
* @param Account $account
* @param string $year
* @param string $month
* @param ReportQueryInterface $query
*
* @return View
*/
public function modalLeftUnbalanced(Account $account, $year = '2014', $month = '1', ReportQueryInterface $query) public function modalLeftUnbalanced(Account $account, $year = '2014', $month = '1', ReportQueryInterface $query)
{ {
try { try {
@@ -217,6 +234,9 @@ class ReportController extends Controller
$subTitleIcon = 'fa-calendar'; $subTitleIcon = 'fa-calendar';
$displaySum = true; // to show sums in report. $displaySum = true; // to show sums in report.
$pref = Preferences::get('showSharedReports', false);
$showSharedReports = $pref->data;
/** /**
* *
@@ -232,14 +252,14 @@ class ReportController extends Controller
/** /**
* Start getIncomeForMonth DONE * Start getIncomeForMonth DONE
*/ */
$income = $query->incomeByPeriod($start, $end); $income = $query->incomeByPeriod($start, $end, $showSharedReports);
/** /**
* End getIncomeForMonth DONE * End getIncomeForMonth DONE
*/ */
/** /**
* Start getExpenseGroupedForMonth DONE * Start getExpenseGroupedForMonth DONE
*/ */
$set = $query->journalsByExpenseAccount($start, $end); $set = $query->journalsByExpenseAccount($start, $end, $showSharedReports);
$expenses = Steam::makeArray($set); $expenses = Steam::makeArray($set);
$expenses = Steam::sortArray($expenses); $expenses = Steam::sortArray($expenses);
$expenses = Steam::limitArray($expenses, 10); $expenses = Steam::limitArray($expenses, 10);
@@ -257,7 +277,7 @@ class ReportController extends Controller
) )
->get(['budgets.*', 'budget_limits.amount as amount']); ->get(['budgets.*', 'budget_limits.amount as amount']);
$budgets = Steam::makeArray($set); $budgets = Steam::makeArray($set);
$amountSet = $query->journalsByBudget($start, $end); $amountSet = $query->journalsByBudget($start, $end, $showSharedReports);
$amounts = Steam::makeArray($amountSet); $amounts = Steam::makeArray($amountSet);
$budgets = Steam::mergeArrays($budgets, $amounts); $budgets = Steam::mergeArrays($budgets, $amounts);
$budgets[0]['spent'] = isset($budgets[0]['spent']) ? $budgets[0]['spent'] : 0.0; $budgets[0]['spent'] = isset($budgets[0]['spent']) ? $budgets[0]['spent'] : 0.0;
@@ -265,10 +285,12 @@ class ReportController extends Controller
$budgets[0]['name'] = 'No budget'; $budgets[0]['name'] = 'No budget';
// find transactions to shared expense accounts, which are without a budget by default: // find transactions to shared expense accounts, which are without a budget by default:
if ($showSharedReports === false) {
$transfers = $query->sharedExpenses($start, $end); $transfers = $query->sharedExpenses($start, $end);
foreach ($transfers as $transfer) { foreach ($transfers as $transfer) {
$budgets[0]['spent'] += floatval($transfer->amount) * -1; $budgets[0]['spent'] += floatval($transfer->amount) * -1;
} }
}
/** /**
* End getBudgetsForMonth DONE * End getBudgetsForMonth DONE
@@ -281,9 +303,13 @@ class ReportController extends Controller
$categories = Steam::makeArray($result); $categories = Steam::makeArray($result);
// all transfers // all transfers
if ($showSharedReports === false) {
$result = $query->sharedExpensesByCategory($start, $end); $result = $query->sharedExpensesByCategory($start, $end);
$transfers = Steam::makeArray($result); $transfers = Steam::makeArray($result);
$merged = Steam::mergeArrays($categories, $transfers); $merged = Steam::mergeArrays($categories, $transfers);
} else {
$merged = $categories;
}
// sort. // sort.
$sorted = Steam::sortNegativeArray($merged); $sorted = Steam::sortNegativeArray($merged);

View File

@@ -138,9 +138,9 @@ class TestDataSeeder extends Seeder
$acc_c = Account::create(['user_id' => $user->id, 'account_type_id' => $assetType->id, 'name' => 'Delete me', 'active' => 1]); $acc_c = Account::create(['user_id' => $user->id, 'account_type_id' => $assetType->id, 'name' => 'Delete me', 'active' => 1]);
// create account meta: // create account meta:
$meta_a = AccountMeta::create(['account_id' => $acc_a->id, 'name' => 'accountRole', 'data' => 'defaultExpense']); $meta_a = AccountMeta::create(['account_id' => $acc_a->id, 'name' => 'accountRole', 'data' => 'defaultAsset']);
$meta_b = AccountMeta::create(['account_id' => $acc_b->id, 'name' => 'accountRole', 'data' => 'defaultExpense']); $meta_b = AccountMeta::create(['account_id' => $acc_b->id, 'name' => 'accountRole', 'data' => 'defaultAsset']);
$meta_c = AccountMeta::create(['account_id' => $acc_c->id, 'name' => 'accountRole', 'data' => 'defaultExpense']); $meta_c = AccountMeta::create(['account_id' => $acc_c->id, 'name' => 'accountRole', 'data' => 'defaultAsset']);
// var_dump($meta_a->toArray()); // var_dump($meta_a->toArray());
// var_dump($meta_b->toArray()); // var_dump($meta_b->toArray());
// var_dump($meta_c->toArray()); // var_dump($meta_c->toArray());