diff --git a/app/controllers/ChartController.php b/app/controllers/ChartController.php
index d6870547f9..20abf95400 100644
--- a/app/controllers/ChartController.php
+++ b/app/controllers/ChartController.php
@@ -1,6 +1,7 @@
_chart = $chart;
+ $this->_accounts = $accounts;
}
/**
* @param Account $account
+ *
* @return mixed
*/
public function homeAccount(Account $account = null)
{
+ // get preferences and accounts (if necessary):
+ $data = [];
+ $start = Session::get('start');
+ $end = Session::get('end');
+ if (is_null($account)) {
+ // get, depending on preferences:
+ /** @var \Firefly\Helper\Preferences\PreferencesHelperInterface $prefs */
+ $prefs = \App::make('Firefly\Helper\Preferences\PreferencesHelperInterface');
+ $pref = $prefs->get('frontpageAccounts', []);
- if (!is_null($account)) {
- $data = $this->_chart->account($account);
+ /** @var \Firefly\Storage\Account\AccountRepositoryInterface $acct */
+ $acct = \App::make('Firefly\Storage\Account\AccountRepositoryInterface');
+ $accounts = $acct->getByIds($pref->data);
} else {
- $data = $this->_chart->accounts();
+ $accounts = [$account];
}
+ // loop and get array data.
+
+ $url = count($accounts) == 1
+ ? 'View more'
+ :
+ 'View more';
+ $data = [
+ 'chart_title' => count($accounts) == 1 ? $accounts[0]->name : 'All accounts',
+ 'subtitle' => $url,
+ 'series' => []
+ ];
+
+ foreach ($accounts as $account) {
+ $data['series'][] = $this->_chart->account($account, $start, $end);
+ }
+
return Response::json($data);
}
@@ -47,120 +77,38 @@ class ChartController extends BaseController
*/
public function homeAccountInfo($name, $day, $month, $year)
{
+
$account = $this->_accounts->findByName($name);
- $result = [];
- $sum = 0;
+ $date = Carbon::createFromDate($year, $month, $day);
if ($account) {
- $date = \Carbon\Carbon::createFromDate($year, $month, $day);
- $journals = $this->_journals->getByAccountAndDate($account, $date);
- // loop all journals:
- foreach ($journals as $journal) {
- foreach ($journal->transactions as $transaction) {
- $name = $transaction->account->name;
- if ($transaction->account->id != $account->id) {
- $result[$name] = isset($result[$name]) ? $result[$name] + floatval($transaction->amount)
- : floatval($transaction->amount);
- $sum += floatval($transaction->amount);
- }
- }
- }
- }
+ $result = $this->_chart->accountDailySummary($account, $date);
- return View::make('charts.info')->with('rows', $result)->with('sum', $sum);
+ return View::make('charts.info')->with('rows', $result['rows'])->with('sum', $result['sum']);
+ } else {
+ return View::make('error')->with('message', 'No account!');
+ }
}
/**
* @return \Illuminate\Http\JsonResponse
- * @throws Firefly\Exception\FireflyException
- */
- public function homeCategories()
- {
- list($start, $end) = $this->_tk->getDateRangeDates();
- $result = [];
- // grab all transaction journals in this period:
- $journals = $this->_journals->getByDateRange($start, $end);
-
- foreach ($journals as $journal) {
- // has to be one:
-
- if (!isset($journal->transactions[0])) {
- throw new FireflyException('Journal #' . $journal->id . ' has ' . count($journal->transactions)
- . ' transactions!');
- }
- $transaction = $journal->transactions[0];
- $amount = floatval($transaction->amount);
-
- // get budget from journal:
- $budget = $journal->categories()->first();
- $budgetName = is_null($budget) ? '(no category)' : $budget->name;
-
- $result[$budgetName] = isset($result[$budgetName]) ? $result[$budgetName] + floatval($amount) : $amount;
-
- }
- unset($journal, $transaction, $budget, $amount);
-
- // sort
- arsort($result);
- $chartData = [
- ];
- foreach ($result as $name => $value) {
- $chartData[] = [$name, $value];
- }
-
-
- return Response::json($chartData);
-
- }
-
- /**
- * @return \Illuminate\Http\JsonResponse
- * @throws Firefly\Exception\FireflyException
*/
public function homeBudgets()
{
- // grab all budgets in the time period, like the index does:
- // get the budgets for this period:
- $data = [];
+ $start = \Session::get('start');
- list($start) = $this->_tk->getDateRangeDates();
- $budgets = $this->_budgets->getWithRepetitionsInPeriod($start, \Session::get('range'));
+ return Response::json($this->_chart->budgets($start));
+ }
- $repeatFreq = Config::get('firefly.range_to_repeat_freq.' . Session::get('range'));
+ /**
+ * @return \Illuminate\Http\JsonResponse
+ */
+ public function homeCategories()
+ {
+ $start = Session::get('start');
+ $end = Session::get('end');
+
+ return Response::json($this->_chart->categories($start, $end));
- $limitInPeriod = 'Envelope for XXX';
- $spentInPeriod = 'Spent in XXX';
-
- $data['series'] = [
- [
- 'name' => $limitInPeriod,
- 'data' => []
- ],
- [
- 'name' => $spentInPeriod,
- 'data' => []
- ],
- ];
-
-
- foreach ($budgets as $budget) {
- if ($budget->count > 0) {
- $data['labels'][] = wordwrap($budget->name, 12, "
");
- }
- foreach ($budget->limits as $limit) {
- foreach ($limit->limitrepetitions as $rep) {
- //0: envelope for period:
- $amount = floatval($rep->amount);
- $spent = $rep->spent;
- $color = $spent > $amount ? '#FF0000' : null;
- $data['series'][0]['data'][] = $amount;
- $data['series'][1]['data'][] = ['y' => $rep->spent, 'color' => $color];
- }
- }
-
-
- }
-
- return Response::json($data);
}
}
\ No newline at end of file
diff --git a/app/lib/Firefly/Database/SingleTableInheritanceEntity.php b/app/lib/Firefly/Database/SingleTableInheritanceEntity.php
index 7a6df521b4..40d31c755b 100644
--- a/app/lib/Firefly/Database/SingleTableInheritanceEntity.php
+++ b/app/lib/Firefly/Database/SingleTableInheritanceEntity.php
@@ -35,6 +35,7 @@ abstract class SingleTableInheritanceEntity extends Ardent
{
$instance = $this->mapData((array)$attributes)->newInstance([], true);
$instance->setRawAttributes((array)$attributes, true);
+
return $instance;
}
@@ -117,6 +118,7 @@ abstract class SingleTableInheritanceEntity extends Ardent
if ($this->subclassField) {
$this->attributes[$this->subclassField] = get_class($this);
}
+
return parent::save($rules, $customMessages, $options, $beforeSave, $afterSave);
}
}
\ No newline at end of file
diff --git a/app/lib/Firefly/Helper/Controllers/Account.php b/app/lib/Firefly/Helper/Controllers/Account.php
index bdc18aff7a..fb79b1a388 100644
--- a/app/lib/Firefly/Helper/Controllers/Account.php
+++ b/app/lib/Firefly/Helper/Controllers/Account.php
@@ -127,8 +127,8 @@ class Account implements AccountInterface
// statistics
$stats['period']['in'] = floatval(
\Transaction::where('account_id', $account->id)->where('amount', '>', 0)->leftJoin(
- 'transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id'
- )->leftJoin(
+ 'transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id'
+ )->leftJoin(
'transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id'
)->whereIn('transaction_types.type', ['Deposit', 'Withdrawal'])->where(
'transaction_journals.date', '>=', $start->format('Y-m-d')
@@ -138,8 +138,8 @@ class Account implements AccountInterface
$stats['period']['out'] = floatval(
\Transaction::where('account_id', $account->id)->where('amount', '<', 0)->leftJoin(
- 'transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id'
- )->leftJoin(
+ 'transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id'
+ )->leftJoin(
'transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id'
)->whereIn('transaction_types.type', ['Deposit', 'Withdrawal'])->where(
'transaction_journals.date', '>=', $start->format('Y-m-d')
@@ -149,8 +149,8 @@ class Account implements AccountInterface
$stats['period']['t_in'] = floatval(
\Transaction::where('account_id', $account->id)->where('amount', '>', 0)->leftJoin(
- 'transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id'
- )->leftJoin(
+ 'transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id'
+ )->leftJoin(
'transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id'
)->where('transaction_types.type', 'Transfer')->where(
'transaction_journals.date', '>=', $start->format('Y-m-d')
@@ -159,8 +159,8 @@ class Account implements AccountInterface
$stats['period']['t_out'] = floatval(
\Transaction::where('account_id', $account->id)->where('amount', '<', 0)->leftJoin(
- 'transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id'
- )->leftJoin(
+ 'transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id'
+ )->leftJoin(
'transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id'
)->where('transaction_types.type', 'Transfer')->where(
'transaction_journals.date', '>=', $start->format('Y-m-d')
diff --git a/app/lib/Firefly/Helper/Controllers/Budget.php b/app/lib/Firefly/Helper/Controllers/Budget.php
index 5aa5b4b78b..b698c12b47 100644
--- a/app/lib/Firefly/Helper/Controllers/Budget.php
+++ b/app/lib/Firefly/Helper/Controllers/Budget.php
@@ -214,7 +214,8 @@ class Budget implements BudgetInterface
}
$paginator = \Paginator::make($items, $totalItems, $perPage);
$result = [0 => ['date' => 'Not in an envelope', 'limit' => null, 'paginated' => true,
- 'journals' => $paginator]];
+ 'journals' => $paginator]];
+
return $result;
}
}
\ No newline at end of file
diff --git a/app/lib/Firefly/Helper/Controllers/BudgetInterface.php b/app/lib/Firefly/Helper/Controllers/BudgetInterface.php
index 99aaf03ff7..6f0051c0f9 100644
--- a/app/lib/Firefly/Helper/Controllers/BudgetInterface.php
+++ b/app/lib/Firefly/Helper/Controllers/BudgetInterface.php
@@ -1,12 +1,15 @@
$account->name,
- 'subtitle' => 'View more',
- 'series' => [$this->_account($account)]
- ];
- return $data;
- }
-
- public function accounts()
- {
- $data = [
- 'chart_title' => 'All accounts',
- 'subtitle' => 'View more',
- 'series' => []
- ];
- /** @var \Firefly\Helper\Preferences\PreferencesHelperInterface $prefs */
- $prefs = \App::make('Firefly\Helper\Preferences\PreferencesHelperInterface');
- $pref = $prefs->get('frontpageAccounts', []);
-
- /** @var \Firefly\Storage\Account\AccountRepositoryInterface $acct */
- $acct = \App::make('Firefly\Storage\Account\AccountRepositoryInterface');
-
- if ($pref->data == []) {
- $accounts = $acct->getActiveDefault();
- } else {
- $accounts = $acct->getByIds($pref->data);
- }
- foreach($accounts as $account) {
- $data['series'][] = $this->_account($account);
- }
- return $data;
-
- }
-
- protected function _account(\Account $account)
- {
- $start = \Session::get('start');
- $end = \Session::get('end');
$current = clone $start;
$today = new Carbon;
$return = ['name' => $account->name, 'id' => $account->id, 'data' => []];
@@ -65,7 +28,189 @@ class Chart implements ChartInterface
$current->addDay();
}
+
return $return;
}
+ public function accountDailySummary(\Account $account, Carbon $date)
+ {
+ $result = [
+ 'rows' => [],
+ 'sum' => 0
+ ];
+ if ($account) {
+ // get journals in range:
+ $journals = \Auth::user()->transactionjournals()->with(
+ [
+ 'transactions',
+ 'transactions.account',
+ 'transactioncurrency',
+ 'transactiontype'
+ ]
+ )
+ ->distinct()
+ ->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
+ ->leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id')
+ ->where('transactions.account_id', $account->id)
+ ->where('transaction_journals.date', $date->format('Y-m-d'))
+ ->orderBy('transaction_journals.date', 'DESC')
+ ->orderBy('transaction_journals.id', 'DESC')
+ ->get(['transaction_journals.*']);
+
+ // loop all journals:
+ foreach ($journals as $journal) {
+ foreach ($journal->transactions as $transaction) {
+ $name = $transaction->account->name;
+ if ($transaction->account->id != $account->id) {
+ $result['rows'][$name] = isset($result[$name]) ? $result[$name] + floatval($transaction->amount)
+ : floatval($transaction->amount);
+ $result['sum'] += floatval($transaction->amount);
+ }
+ }
+ }
+ }
+
+ return $result;
+
+ }
+
+ /**
+ * @return array
+ */
+ public function budgets(Carbon $start)
+ {
+ // grab all budgets in the time period, like the index does:
+ // get the budgets for this period:
+
+ $data = [];
+
+ $budgets = \Auth::user()->budgets()->with(
+ ['limits' => function ($q) {
+ $q->orderBy('limits.startdate', 'ASC');
+ }, 'limits.limitrepetitions' => function ($q) use ($start) {
+ $q->orderBy('limit_repetitions.startdate', 'ASC');
+ $q->where('startdate', $start->format('Y-m-d'));
+ }]
+ )->orderBy('name', 'ASC')->get();
+
+ foreach ($budgets as $budget) {
+ $budget->count = 0;
+ foreach ($budget->limits as $limit) {
+ /** @var $rep \LimitRepetition */
+ foreach ($limit->limitrepetitions as $rep) {
+ $rep->left = $rep->left();
+ // overspent:
+ if ($rep->left < 0) {
+ $rep->spent = ($rep->left * -1) + $rep->amount;
+ $rep->overspent = $rep->left * -1;
+ $total = $rep->spent + $rep->overspent;
+ $rep->spent_pct = round(($rep->spent / $total) * 100);
+ $rep->overspent_pct = 100 - $rep->spent_pct;
+ } else {
+ $rep->spent = $rep->amount - $rep->left;
+ $rep->spent_pct = round(($rep->spent / $rep->amount) * 100);
+ $rep->left_pct = 100 - $rep->spent_pct;
+
+
+ }
+ }
+ $budget->count += count($limit->limitrepetitions);
+ }
+ }
+
+ $limitInPeriod = 'Envelope for XXX';
+ $spentInPeriod = 'Spent in XXX';
+
+ $data['series'] = [
+ [
+ 'name' => $limitInPeriod,
+ 'data' => []
+ ],
+ [
+ 'name' => $spentInPeriod,
+ 'data' => []
+ ],
+ ];
+
+
+ foreach ($budgets as $budget) {
+ if ($budget->count > 0) {
+ $data['labels'][] = wordwrap($budget->name, 12, "
");
+ }
+ foreach ($budget->limits as $limit) {
+ foreach ($limit->limitrepetitions as $rep) {
+ //0: envelope for period:
+ $amount = floatval($rep->amount);
+ $spent = $rep->spent;
+ $color = $spent > $amount ? '#FF0000' : null;
+ $data['series'][0]['data'][] = $amount;
+ $data['series'][1]['data'][] = ['y' => $rep->spent, 'color' => $color];
+ }
+ }
+
+
+ }
+
+ return $data;
+ }
+
+ public function categories(Carbon $start, Carbon $end)
+ {
+
+ $result = [];
+ // grab all transaction journals in this period:
+ $journals = \TransactionJournal::
+ with(
+ ['components', 'transactions' => function ($q) {
+ $q->where('amount', '>', 0);
+ }]
+ )
+ ->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id')
+ ->where('transaction_types.type', 'Withdrawal')
+ ->after($start)->before($end)
+ ->where('completed', 1)
+ ->get(['transaction_journals.*']);
+ foreach ($journals as $journal) {
+ // has to be one:
+
+ if (!isset($journal->transactions[0])) {
+ throw new FireflyException('Journal #' . $journal->id . ' has ' . count($journal->transactions)
+ . ' transactions!');
+ }
+ $transaction = $journal->transactions[0];
+ $amount = floatval($transaction->amount);
+
+ // get budget from journal:
+ $category = $journal->categories()->first();
+ $categoryName = is_null($category) ? '(no category)' : $category->name;
+
+ $result[$categoryName] = isset($result[$categoryName]) ? $result[$categoryName] + floatval($amount)
+ : $amount;
+
+ }
+ unset($journal, $transaction, $category, $amount);
+
+ // sort
+ arsort($result);
+ $chartData = [
+ ];
+ foreach ($result as $name => $value) {
+ $chartData[] = [$name, $value];
+ }
+
+
+ return $chartData;
+ }
+
+ public function accountXX(\Account $account)
+ {
+ $data = [
+ 'chart_title' => $account->name,
+ 'subtitle' => 'View more',
+ 'series' => [$this->_account($account)]
+ ];
+
+ return $data;
+ }
+
}
\ No newline at end of file
diff --git a/app/lib/Firefly/Helper/Controllers/ChartInterface.php b/app/lib/Firefly/Helper/Controllers/ChartInterface.php
index 5ad025d894..3839b546f9 100644
--- a/app/lib/Firefly/Helper/Controllers/ChartInterface.php
+++ b/app/lib/Firefly/Helper/Controllers/ChartInterface.php
@@ -9,9 +9,16 @@
namespace Firefly\Helper\Controllers;
+use Carbon\Carbon;
+
interface ChartInterface
{
- public function account(\Account $account);
- public function accounts();
+ public function account(\Account $account, Carbon $start, Carbon $end);
+
+ public function categories(Carbon $start, Carbon $end);
+
+ public function budgets(Carbon $start);
+
+ public function accountDailySummary(\Account $account, Carbon $date);
}
\ No newline at end of file
diff --git a/app/lib/Firefly/Helper/Form/FormTrigger.php b/app/lib/Firefly/Helper/Form/FormTrigger.php
index 4c95b8b678..16e3636bfd 100644
--- a/app/lib/Firefly/Helper/Form/FormTrigger.php
+++ b/app/lib/Firefly/Helper/Form/FormTrigger.php
@@ -9,17 +9,21 @@
namespace Firefly\Helper\Form;
use Illuminate\Events\Dispatcher;
+
/**
* Class FormTrigger
*
* @package Firefly\Helper\Form
*/
-class FormTrigger {
+class FormTrigger
+{
- public function registerFormExtensions() {
+ public function registerFormExtensions()
+ {
\Form::macro(
'budget', function () {
$helper = new \Firefly\Helper\Form\FormHelper;
+
return $helper->budget();
}
);
diff --git a/app/lib/Firefly/Helper/Migration/MigrationHelper.php b/app/lib/Firefly/Helper/Migration/MigrationHelper.php
index 32416ff4d6..477072829f 100644
--- a/app/lib/Firefly/Helper/Migration/MigrationHelper.php
+++ b/app/lib/Firefly/Helper/Migration/MigrationHelper.php
@@ -35,6 +35,7 @@ class MigrationHelper implements MigrationHelperInterface
// file does not exist:
if (!file_exists($this->path)) {
\Log::error('Migration file ' . $this->path . ' does not exist!');
+
return false;
}
@@ -50,6 +51,7 @@ class MigrationHelper implements MigrationHelperInterface
return false;
}
\Log::info('Migration file ' . $this->path . ' is valid!');
+
return true;
}
@@ -83,11 +85,13 @@ class MigrationHelper implements MigrationHelperInterface
\DB::rollBack();
\Log::error('Rollback because of error!');
\Log::error($e->getMessage());
+
return false;
}
\DB::commit();
\Log::info('Done!');
+
return true;
}
@@ -164,6 +168,7 @@ class MigrationHelper implements MigrationHelperInterface
{
/** @var \Firefly\Storage\Account\AccountRepositoryInterface $accounts */
$accounts = \App::make('Firefly\Storage\Account\AccountRepositoryInterface');
+
return $accounts->store(
[
'name' => $component->name,
@@ -181,6 +186,7 @@ class MigrationHelper implements MigrationHelperInterface
{
/** @var \Firefly\Storage\Component\ComponentRepositoryInterface $components */
$components = \App::make('Firefly\Storage\Component\ComponentRepositoryInterface');
+
return $components->store(['name' => $component->name, 'class' => 'Category']);
}
@@ -193,6 +199,7 @@ class MigrationHelper implements MigrationHelperInterface
{
/** @var \Firefly\Storage\Component\ComponentRepositoryInterface $components */
$components = \App::make('Firefly\Storage\Component\ComponentRepositoryInterface');
+
return $components->store(['name' => $component->name, 'class' => 'Budget']);
}
diff --git a/app/lib/Firefly/Helper/Preferences/PreferencesHelper.php b/app/lib/Firefly/Helper/Preferences/PreferencesHelper.php
index 2dc2fa2f25..e212fca757 100644
--- a/app/lib/Firefly/Helper/Preferences/PreferencesHelper.php
+++ b/app/lib/Firefly/Helper/Preferences/PreferencesHelper.php
@@ -28,6 +28,7 @@ class PreferencesHelper implements PreferencesHelperInterface
// create preference, return that:
return $this->set($name, $default);
}
+
return null;
}
diff --git a/app/lib/Firefly/Helper/Toolkit/Toolkit.php b/app/lib/Firefly/Helper/Toolkit/Toolkit.php
index bfc6b13d8d..b2a102b38f 100644
--- a/app/lib/Firefly/Helper/Toolkit/Toolkit.php
+++ b/app/lib/Firefly/Helper/Toolkit/Toolkit.php
@@ -149,6 +149,7 @@ class Toolkit implements ToolkitInterface
return \Redirect::to($request->url());
}
+
return null;
diff --git a/app/lib/Firefly/Helper/Toolkit/ToolkitInterface.php b/app/lib/Firefly/Helper/Toolkit/ToolkitInterface.php
index d804d5e3de..40263785b9 100644
--- a/app/lib/Firefly/Helper/Toolkit/ToolkitInterface.php
+++ b/app/lib/Firefly/Helper/Toolkit/ToolkitInterface.php
@@ -3,6 +3,7 @@
namespace Firefly\Helper\Toolkit;
use Illuminate\Http\Request;
+
/**
* Interface ToolkitInterface
*
diff --git a/app/lib/Firefly/Storage/Account/AccountRepositoryInterface.php b/app/lib/Firefly/Storage/Account/AccountRepositoryInterface.php
index 9bb8490e59..80e45c868f 100644
--- a/app/lib/Firefly/Storage/Account/AccountRepositoryInterface.php
+++ b/app/lib/Firefly/Storage/Account/AccountRepositoryInterface.php
@@ -77,7 +77,7 @@ interface AccountRepositoryInterface
*
* @return mixed
*/
- public function getByIds($ids);
+ public function getByIds(array $ids);
/**
* @return mixed
diff --git a/app/lib/Firefly/Storage/Account/EloquentAccountRepository.php b/app/lib/Firefly/Storage/Account/EloquentAccountRepository.php
index 35301ff1fa..8f4497e4b1 100644
--- a/app/lib/Firefly/Storage/Account/EloquentAccountRepository.php
+++ b/app/lib/Firefly/Storage/Account/EloquentAccountRepository.php
@@ -19,6 +19,83 @@ class EloquentAccountRepository implements AccountRepositoryInterface
{
}
+ /**
+ * @return mixed
+ */
+ public function count()
+ {
+ return \Auth::user()->accounts()->count();
+
+ }
+
+ /**
+ * @param $name
+ * @param \AccountType $type
+ *
+ * @return \Account|mixed
+ */
+ public function createOrFind($name, \AccountType $type)
+ {
+ $beneficiary = $this->findByName($name);
+ if (!$beneficiary) {
+ $data = [
+ 'name' => $name,
+ 'account_type' => $type
+ ];
+
+ return $this->store($data);
+ }
+
+ return $beneficiary;
+ }
+
+ /**
+ * @param $name
+ *
+ * @return \Account|mixed|null
+ */
+ public function createOrFindBeneficiary($name)
+ {
+ if (is_null($name) || strlen($name) == 0) {
+ return null;
+ }
+ $type = \AccountType::where('description', 'Beneficiary account')->first();
+
+ return $this->createOrFind($name, $type);
+ }
+
+ public function destroy($accountId)
+ {
+ $account = $this->find($accountId);
+ if ($account) {
+ $account->delete();
+
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * @param $accountId
+ *
+ * @return mixed
+ */
+ public function find($accountId)
+ {
+ return \Auth::user()->accounts()->where('id', $accountId)->first();
+ }
+
+ /**
+ * @param $name
+ *
+ * @return mixed
+ */
+ public function findByName($name)
+ {
+ return \Auth::user()->accounts()->where('name', 'like', '%' . $name . '%')->first();
+ }
+
/**
* @return mixed
*/
@@ -27,45 +104,6 @@ class EloquentAccountRepository implements AccountRepositoryInterface
return \Auth::user()->accounts()->with('accounttype')->orderBy('name', 'ASC')->get();
}
- /**
- * @return mixed
- */
- public function getBeneficiaries()
- {
- $list = \Auth::user()->accounts()->leftJoin(
- 'account_types', 'account_types.id', '=', 'accounts.account_type_id'
- )
- ->where('account_types.description', 'Beneficiary account')->where('accounts.active', 1)
-
- ->orderBy('accounts.name', 'ASC')->get(['accounts.*']);
- return $list;
- }
-
- /**
- * @param $ids
- *
- * @return array|mixed
- */
- public function getByIds($ids)
- {
- if (count($ids) > 0) {
- return \Auth::user()->accounts()->with('accounttype')->whereIn('id', $ids)->orderBy('name', 'ASC')->get();
- } else {
- return [];
- }
- }
-
- /**
- * @return mixed
- */
- public function getDefault()
- {
- return \Auth::user()->accounts()->leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id')
- ->where('account_types.description', 'Default account')
-
- ->orderBy('accounts.name', 'ASC')->get(['accounts.*']);
- }
-
/**
* @return mixed
*/
@@ -92,59 +130,60 @@ class EloquentAccountRepository implements AccountRepositoryInterface
foreach ($list as $entry) {
$return[intval($entry->id)] = $entry->name;
}
+
return $return;
}
/**
* @return mixed
*/
- public function count()
+ public function getBeneficiaries()
{
- return \Auth::user()->accounts()->count();
+ $list = \Auth::user()->accounts()->leftJoin(
+ 'account_types', 'account_types.id', '=', 'accounts.account_type_id'
+ )
+ ->where('account_types.description', 'Beneficiary account')->where('accounts.active', 1)
+ ->orderBy('accounts.name', 'ASC')->get(['accounts.*']);
+
+ return $list;
}
/**
- * @param $name
+ * @param $ids
*
- * @return \Account|mixed|null
+ * @return array|mixed
*/
- public function createOrFindBeneficiary($name)
+ public function getByIds(array $ids)
{
- if (is_null($name) || strlen($name) == 0) {
- return null;
+ if (count($ids) > 0) {
+ return \Auth::user()->accounts()->with('accounttype')->whereIn('id', $ids)->orderBy('name', 'ASC')->get();
+ } else {
+ return $this->getActiveDefault();
}
- $type = \AccountType::where('description', 'Beneficiary account')->first();
- return $this->createOrFind($name, $type);
}
/**
- * @param $name
- * @param \AccountType $type
- *
- * @return \Account|mixed
- */
- public function createOrFind($name, \AccountType $type)
- {
- $beneficiary = $this->findByName($name);
- if (!$beneficiary) {
- $data = [
- 'name' => $name,
- 'account_type' => $type
- ];
- return $this->store($data);
- }
- return $beneficiary;
- }
-
- /**
- * @param $name
- *
* @return mixed
*/
- public function findByName($name)
+ public function getCashAccount()
{
- return \Auth::user()->accounts()->where('name', 'like', '%' . $name . '%')->first();
+ $type = \AccountType::where('description', 'Cash account')->first();
+ $cash = \Auth::user()->accounts()->where('account_type_id', $type->id)->first();
+
+ return $cash;
+
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getDefault()
+ {
+ return \Auth::user()->accounts()->leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id')
+ ->where('account_types.description', 'Default account')
+
+ ->orderBy('accounts.name', 'ASC')->get(['accounts.*']);
}
/**
@@ -183,6 +222,35 @@ class EloquentAccountRepository implements AccountRepositoryInterface
return $account;
}
+ /**
+ * @param $data
+ *
+ * @return \Account|void
+ */
+ public function update($data)
+ {
+ $account = $this->find($data['id']);
+ if ($account) {
+ // update account accordingly:
+ $account->name = $data['name'];
+ if ($account->validate()) {
+ $account->save();
+ }
+ // update initial balance if necessary:
+ if ($account->accounttype->description == 'Default account') {
+ $journal = $this->findOpeningBalanceTransaction($account);
+ $journal->date = new Carbon($data['openingbalancedate']);
+ $journal->transactions[0]->amount = floatval($data['openingbalance']) * -1;
+ $journal->transactions[1]->amount = floatval($data['openingbalance']);
+ $journal->transactions[0]->save();
+ $journal->transactions[1]->save();
+ $journal->save();
+ }
+ }
+
+ return $account;
+ }
+
/**
* @param \Account $account
* @param int $amount
@@ -212,67 +280,11 @@ class EloquentAccountRepository implements AccountRepositoryInterface
$transactionJournal->createSimpleJournal(
$initial, $account, 'Initial Balance for ' . $account->name, $amount, $date
);
+
return true;
}
+
return false;
}
- /**
- * @param $data
- *
- * @return \Account|void
- */
- public function update($data)
- {
- $account = $this->find($data['id']);
- if ($account) {
- // update account accordingly:
- $account->name = $data['name'];
- if ($account->validate()) {
- $account->save();
- }
- // update initial balance if necessary:
- if ($account->accounttype->description == 'Default account') {
- $journal = $this->findOpeningBalanceTransaction($account);
- $journal->date = new Carbon($data['openingbalancedate']);
- $journal->transactions[0]->amount = floatval($data['openingbalance']) * -1;
- $journal->transactions[1]->amount = floatval($data['openingbalance']);
- $journal->transactions[0]->save();
- $journal->transactions[1]->save();
- $journal->save();
- }
- }
- return $account;
- }
-
- public function destroy($accountId) {
- $account = $this->find($accountId);
- if($account) {
- $account->delete();
- return true;
- }
- return false;
- }
-
- /**
- * @param $accountId
- *
- * @return mixed
- */
- public function find($accountId)
- {
- return \Auth::user()->accounts()->where('id', $accountId)->first();
- }
-
- /**
- * @return mixed
- */
- public function getCashAccount()
- {
- $type = \AccountType::where('description', 'Cash account')->first();
- $cash = \Auth::user()->accounts()->where('account_type_id', $type->id)->first();
- return $cash;
-
- }
-
}
\ No newline at end of file
diff --git a/app/lib/Firefly/Storage/Budget/BudgetRepositoryInterface.php b/app/lib/Firefly/Storage/Budget/BudgetRepositoryInterface.php
index 0d4fc68d39..9decd1ca5b 100644
--- a/app/lib/Firefly/Storage/Budget/BudgetRepositoryInterface.php
+++ b/app/lib/Firefly/Storage/Budget/BudgetRepositoryInterface.php
@@ -23,6 +23,7 @@ interface BudgetRepositoryInterface
/**
* @param $data
+ *
* @return mixed
*/
public function update($data);
@@ -36,6 +37,7 @@ interface BudgetRepositoryInterface
/**
* @param $data
+ *
* @return mixed
*/
public function destroy($data);
diff --git a/app/lib/Firefly/Storage/Budget/EloquentBudgetRepository.php b/app/lib/Firefly/Storage/Budget/EloquentBudgetRepository.php
index 9b245d1ad3..135f6444dc 100644
--- a/app/lib/Firefly/Storage/Budget/EloquentBudgetRepository.php
+++ b/app/lib/Firefly/Storage/Budget/EloquentBudgetRepository.php
@@ -29,7 +29,7 @@ class EloquentBudgetRepository implements BudgetRepositoryInterface
public function get()
{
$set = \Auth::user()->budgets()->with(
- ['limits' => function ($q) {
+ ['limits' => function ($q) {
$q->orderBy('limits.startdate', 'ASC');
}, 'limits.limitrepetitions' => function ($q) {
$q->orderBy('limit_repetitions.startdate', 'ASC');
@@ -48,9 +48,11 @@ class EloquentBudgetRepository implements BudgetRepositoryInterface
/**
* @param $data
+ *
* @return mixed
*/
- public function update($data) {
+ public function update($data)
+ {
$budget = $this->find($data['id']);
if ($budget) {
// update account accordingly:
@@ -59,15 +61,19 @@ class EloquentBudgetRepository implements BudgetRepositoryInterface
$budget->save();
}
}
+
return $budget;
}
- public function destroy($budgetId) {
+ public function destroy($budgetId)
+ {
$budget = $this->find($budgetId);
- if($budget) {
+ if ($budget) {
$budget->delete();
+
return true;
}
+
return false;
}
@@ -96,41 +102,8 @@ class EloquentBudgetRepository implements BudgetRepositoryInterface
public function getWithRepetitionsInPeriod(Carbon $date, $range)
{
- $set = \Auth::user()->budgets()->with(
- ['limits' => function ($q) use ($date) {
- $q->orderBy('limits.startdate', 'ASC');
- }, 'limits.limitrepetitions' => function ($q) use ($date) {
- $q->orderBy('limit_repetitions.startdate', 'ASC');
- $q->where('startdate', $date->format('Y-m-d'));
- }]
- )->orderBy('name', 'ASC')->get();
- foreach ($set as $budget) {
- $budget->count = 0;
- foreach ($budget->limits as $limit) {
- /** @var $rep \LimitRepetition */
- foreach ($limit->limitrepetitions as $rep) {
- $rep->left = $rep->left();
- // overspent:
- if ($rep->left < 0) {
- $rep->spent = ($rep->left * -1) + $rep->amount;
- $rep->overspent = $rep->left * -1;
- $total = $rep->spent + $rep->overspent;
- $rep->spent_pct = round(($rep->spent / $total) * 100);
- $rep->overspent_pct = 100 - $rep->spent_pct;
- } else {
- $rep->spent = $rep->amount - $rep->left;
- $rep->spent_pct = round(($rep->spent / $rep->amount) * 100);
- $rep->left_pct = 100 - $rep->spent_pct;
-
-
- }
- }
- $budget->count += count($limit->limitrepetitions);
- }
- }
-
- return $set;
+ //return $set;
}
/**
@@ -184,6 +157,7 @@ class EloquentBudgetRepository implements BudgetRepositoryInterface
if ($budget->validate()) {
$budget->save();
}
+
return $budget;
}
diff --git a/app/lib/Firefly/Storage/Category/EloquentCategoryRepository.php b/app/lib/Firefly/Storage/Category/EloquentCategoryRepository.php
index 5fdd144f39..f432d58d0e 100644
--- a/app/lib/Firefly/Storage/Category/EloquentCategoryRepository.php
+++ b/app/lib/Firefly/Storage/Category/EloquentCategoryRepository.php
@@ -28,6 +28,7 @@ class EloquentCategoryRepository implements CategoryRepositoryInterface
if (!$category) {
return $this->store($name);
}
+
return $category;
@@ -40,9 +41,10 @@ class EloquentCategoryRepository implements CategoryRepositoryInterface
*/
public function findByName($name)
{
- if($name == '') {
+ if ($name == '') {
return null;
}
+
return \Auth::user()->categories()->where('name', 'LIKE', '%' . $name . '%')->first();
}
@@ -58,6 +60,7 @@ class EloquentCategoryRepository implements CategoryRepositoryInterface
$category->name = $name;
$category->user()->associate(\Auth::user());
$category->save();
+
return $category;
}
diff --git a/app/lib/Firefly/Storage/Limit/EloquentLimitRepository.php b/app/lib/Firefly/Storage/Limit/EloquentLimitRepository.php
index 96bcc3d607..bb90022b55 100644
--- a/app/lib/Firefly/Storage/Limit/EloquentLimitRepository.php
+++ b/app/lib/Firefly/Storage/Limit/EloquentLimitRepository.php
@@ -37,6 +37,7 @@ class EloquentLimitRepository implements LimitRepositoryInterface
$budget = \Budget::find($data['budget_id']);
if (is_null($budget)) {
\Session::flash('error', 'No such budget.');
+
return new \Limit;
}
// set the date to the correct start period:
@@ -76,6 +77,7 @@ class EloquentLimitRepository implements LimitRepositoryInterface
)->count();
if ($count > 0) {
\Session::flash('error', 'There already is an entry for these parameters.');
+
return new \Limit;
}
// create new limit:
@@ -88,6 +90,7 @@ class EloquentLimitRepository implements LimitRepositoryInterface
if (!$limit->save()) {
Session::flash('error', 'Could not save: ' . $limit->errors()->first());
}
+
return $limit;
}
diff --git a/app/lib/Firefly/Storage/TransactionJournal/EloquentTransactionJournalRepository.php b/app/lib/Firefly/Storage/TransactionJournal/EloquentTransactionJournalRepository.php
index 0b9d0ad1b8..5e37cf683e 100644
--- a/app/lib/Firefly/Storage/TransactionJournal/EloquentTransactionJournalRepository.php
+++ b/app/lib/Firefly/Storage/TransactionJournal/EloquentTransactionJournalRepository.php
@@ -171,6 +171,7 @@ class EloquentTransactionJournalRepository implements TransactionJournalReposito
$journal->completed = true;
$journal->save();
+
return $journal;
}
@@ -209,6 +210,7 @@ class EloquentTransactionJournalRepository implements TransactionJournalReposito
->orderBy('transaction_journals.id', 'DESC')
->take($count)
->get(['transaction_journals.*']);
+
return $query;
}
@@ -234,6 +236,7 @@ class EloquentTransactionJournalRepository implements TransactionJournalReposito
->orderBy('transaction_journals.id', 'DESC')
->take($count)
->paginate($count);
+
return $query;
}
@@ -245,26 +248,7 @@ class EloquentTransactionJournalRepository implements TransactionJournalReposito
*/
public function getByDateRange(Carbon $start, Carbon $end)
{
- // lets make this simple.
- $types = [];
- foreach (\TransactionType::whereIn('type', ['Withdrawal'])->get() as $t) {
- $types[] = $t->id;
- }
- unset($t);
-
- // get all journals, partly filtered:
- $journals = \TransactionJournal::
- with(
- ['components', 'transactions' => function ($q) {
- $q->where('amount', '>', 0);
- }]
- )
- ->after($start)->before($end)
- ->where('completed', 1)
- ->whereIn('transaction_type_id', $types)
- ->get(['transaction_journals.*']);
- unset($types);
- return $journals;
+ die('no impl');
}
/**
@@ -292,6 +276,7 @@ class EloquentTransactionJournalRepository implements TransactionJournalReposito
->orderBy('transaction_journals.date', 'DESC')
->orderBy('transaction_journals.id', 'DESC')
->get(['transaction_journals.*']);
+
return $query;
}
diff --git a/app/lib/Firefly/Storage/User/EloquentUserRepository.php b/app/lib/Firefly/Storage/User/EloquentUserRepository.php
index a63f4046e3..30fac28df2 100644
--- a/app/lib/Firefly/Storage/User/EloquentUserRepository.php
+++ b/app/lib/Firefly/Storage/User/EloquentUserRepository.php
@@ -33,9 +33,11 @@ class EloquentUserRepository implements UserRepositoryInterface
if (!$user->save()) {
\Log::error('Invalid user');
\Session::flash('error', 'Input invalid, please try again: ' . $user->errors()->first());
+
return false;
}
$user->save();
+
return $user;
}
@@ -51,6 +53,7 @@ class EloquentUserRepository implements UserRepositoryInterface
if (\Hash::check($array['password'], $user->password)) {
}
}
+
return false;
}
@@ -87,6 +90,7 @@ class EloquentUserRepository implements UserRepositoryInterface
$user->password = $password;
/** @noinspection PhpUndefinedMethodInspection */
$user->save();
+
return true;
}