Moved JSON money boxes to individual functions.

This commit is contained in:
James Cole
2015-04-11 07:24:07 +02:00
parent d8d92f147f
commit 1802bb967a
3 changed files with 145 additions and 120 deletions

View File

@@ -11,7 +11,6 @@ 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 Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Input;
use Preferences; use Preferences;
use Response; use Response;
use Session; use Session;
@@ -25,34 +24,79 @@ use Steam;
class JsonController extends Controller class JsonController extends Controller
{ {
/** /**
* @param BillRepositoryInterface $repository
* *
* @return \Symfony\Component\HttpFoundation\Response
*/ */
public function box(BillRepositoryInterface $repository, ReportQueryInterface $reportQuery, AccountRepositoryInterface $accountRepository) public function boxBillsPaid(BillRepositoryInterface $repository, AccountRepositoryInterface $accountRepository)
{ {
$amount = 0;
$start = Session::get('start'); $start = Session::get('start');
$end = Session::get('end'); $end = Session::get('end');
$box = 'empty'; $amount = 0;
switch (Input::get('box')) {
case 'in':
$box = Input::get('box');
$set = $reportQuery->incomeByPeriod($start, $end, true);
foreach ($set as $entry) {
$amount += $entry->queryAmount;
}
break;
case 'out':
$box = Input::get('box');
$set = $reportQuery->journalsByExpenseAccount($start, $end, true);
foreach ($set as $entry) { // these two functions are the same as the chart TODO
$amount += $entry->queryAmount; $bills = Auth::user()->bills()->where('active', 1)->get();
/** @var Bill $bill */
foreach ($bills as $bill) {
$ranges = $repository->getRanges($bill, $start, $end);
foreach ($ranges as $range) {
// paid a bill in this range?
$count = $bill->transactionjournals()->before($range['end'])->after($range['start'])->count();
if ($count != 0) {
// TODO this only gets the first match, may be more than one.
$journal = $bill->transactionjournals()->with('transactions')->before($range['end'])->after($range['start'])->first();
$amount += $journal->amount;
} }
break; }
case 'bills-unpaid': }
$box = 'bills-unpaid';
/**
* Find credit card accounts and possibly unpaid credit card bills.
*/
$creditCards = $accountRepository->getCreditCards();
// if the balance is not zero, the monthly payment is still underway.
/** @var Account $creditCard */
foreach ($creditCards as $creditCard) {
$balance = Steam::balance($creditCard, null, true);
if ($balance == 0) {
// find a transfer TO the credit card which should account for
// anything paid. If not, the CC is not yet used.
$transactions = $creditCard->transactions()
->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
->before($end)->after($start)->get();
if ($transactions->count() > 0) {
/** @var Transaction $transaction */
foreach ($transactions as $transaction) {
$journal = $transaction->transactionJournal;
if ($journal->transactionType->type == 'Transfer') {
$amount += floatval($transaction->amount);
}
}
}
}
}
return Response::json(['box' => 'bills-paid', 'amount' => Amount::format($amount, false), 'amount_raw' => $amount]);
}
/**
* @param BillRepositoryInterface $repository
* @param AccountRepositoryInterface $accountRepository
*
* @return \Symfony\Component\HttpFoundation\Response
*/
public function boxBillsUnpaid(BillRepositoryInterface $repository, AccountRepositoryInterface $accountRepository)
{
$start = Session::get('start');
$end = Session::get('end');
$amount = 0;
$bills = $repository->getActiveBills(); $bills = $repository->getActiveBills();
$unpaid = new Collection; // bills $unpaid = new Collection; // bills
@@ -90,68 +134,46 @@ class JsonController extends Controller
$amount += $current; $amount += $current;
} }
break; return Response::json(['box' => 'bills-unpaid', 'amount' => Amount::format($amount, false), 'amount_raw' => $amount]);
case 'bills-paid':
$box = 'bills-paid';
// these two functions are the same as the chart TODO
$bills = Auth::user()->bills()->where('active', 1)->get();
/** @var Bill $bill */
foreach ($bills as $bill) {
$ranges = $repository->getRanges($bill, $start, $end);
foreach ($ranges as $range) {
// paid a bill in this range?
$count = $bill->transactionjournals()->before($range['end'])->after($range['start'])->count();
if ($count != 0) {
// TODO this only gets the first match, may be more than one.
$journal = $bill->transactionjournals()->with('transactions')->before($range['end'])->after($range['start'])->first();
$amount += $journal->amount;
} }
}
}
/** /**
* Find credit card accounts and possibly unpaid credit card bills. * @param ReportQueryInterface $reportQuery
*
* @return \Symfony\Component\HttpFoundation\Response
*/ */
$creditCards = Auth::user()->accounts() public function boxIn(ReportQueryInterface $reportQuery)
->hasMetaValue('accountRole', 'ccAsset') {
->hasMetaValue('ccType', 'monthlyFull') $start = Session::get('start');
->get( $end = Session::get('end');
[ $amount = 0;
'accounts.*',
'ccType.data as ccType', $set = $reportQuery->incomeByPeriod($start, $end, true);
'accountRole.data as accountRole' foreach ($set as $entry) {
] $amount += $entry->queryAmount;
);
// if the balance is not zero, the monthly payment is still underway.
/** @var Account $creditCard */
foreach ($creditCards as $creditCard) {
$balance = Steam::balance($creditCard, null, true);
if ($balance == 0) {
// find a transfer TO the credit card which should account for
// anything paid. If not, the CC is not yet used.
$transactions = $creditCard->transactions()
->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
->before($end)->after($start)->get();
if ($transactions->count() > 0) {
/** @var Transaction $transaction */
foreach ($transactions as $transaction) {
$journal = $transaction->transactionJournal;
if ($journal->transactionType->type == 'Transfer') {
$amount += floatval($transaction->amount);
}
}
}
}
}
break;
} }
return Response::json(['box' => 'in', 'amount' => Amount::format($amount, false), 'amount_raw' => $amount]);
}
return Response::json(['box' => $box, 'amount' => Amount::format($amount, false), 'amount_raw' => $amount]); /**
* @param ReportQueryInterface $reportQuery
*
* @return \Symfony\Component\HttpFoundation\Response
*/
public function boxOut(ReportQueryInterface $reportQuery)
{
$start = Session::get('start');
$end = Session::get('end');
$amount = 0;
$set = $reportQuery->journalsByExpenseAccount($start, $end, true);
foreach ($set as $entry) {
$amount += $entry->queryAmount;
}
return Response::json(['box' => 'out', 'amount' => Amount::format($amount, false), 'amount_raw' => $amount]);
} }
/** /**

View File

@@ -245,7 +245,10 @@ Route::group(
Route::get('/json/expense-accounts', ['uses' => 'JsonController@expenseAccounts', 'as' => 'json.expense-accounts']); Route::get('/json/expense-accounts', ['uses' => 'JsonController@expenseAccounts', 'as' => 'json.expense-accounts']);
Route::get('/json/revenue-accounts', ['uses' => 'JsonController@revenueAccounts', 'as' => 'json.revenue-accounts']); Route::get('/json/revenue-accounts', ['uses' => 'JsonController@revenueAccounts', 'as' => 'json.revenue-accounts']);
Route::get('/json/categories', ['uses' => 'JsonController@categories', 'as' => 'json.categories']); Route::get('/json/categories', ['uses' => 'JsonController@categories', 'as' => 'json.categories']);
Route::get('/json/box', ['uses' => 'JsonController@box', 'as' => 'json.box']); Route::get('/json/box/in', ['uses' => 'JsonController@boxIn', 'as' => 'json.box.in']);
Route::get('/json/box/out', ['uses' => 'JsonController@boxOut', 'as' => 'json.box.out']);
Route::get('/json/box/bills-unpaid', ['uses' => 'JsonController@boxBillsUnpaid', 'as' => 'json.box.paid']);
Route::get('/json/box/bills-paid', ['uses' => 'JsonController@boxBillsPaid', 'as' => 'json.box.unpaid']);
Route::get('/json/show-shared-reports', 'JsonController@showSharedReports'); Route::get('/json/show-shared-reports', 'JsonController@showSharedReports');
Route::get('/json/transaction-journals/{what}', 'JsonController@transactionJournals'); Route::get('/json/transaction-journals/{what}', 'JsonController@transactionJournals');
Route::get('/json/show-shared-reports/set', 'JsonController@setSharedReports'); Route::get('/json/show-shared-reports/set', 'JsonController@setSharedReports');

View File

@@ -13,7 +13,7 @@ function getBoxAmounts() {
var boxes = ['in', 'out', 'bills-unpaid', 'bills-paid']; var boxes = ['in', 'out', 'bills-unpaid', 'bills-paid'];
for (x in boxes) { for (x in boxes) {
var box = boxes[x]; var box = boxes[x];
$.getJSON('/json/box', {box: box}).success(function (data) { $.getJSON('/json/box/' + box).success(function (data) {
if (data.amount_raw != 0) { if (data.amount_raw != 0) {
$('#box-' + data.box).html(data.amount); $('#box-' + data.box).html(data.amount);
} }