Moar updates.

This commit is contained in:
James Cole
2014-09-02 17:27:28 +02:00
parent f472a01a80
commit 4d7f5238dd
36 changed files with 756 additions and 397 deletions

View File

@@ -101,6 +101,12 @@ interface AccountRepositoryInterface
*/
public function getDefault();
/**
* @param \User $user
* @return mixed
*/
public function overruleUser(\User $user);
/**
* @param $data
*

View File

@@ -12,11 +12,15 @@ use Carbon\Carbon;
*/
class EloquentAccountRepository implements AccountRepositoryInterface
{
protected $_user = null;
/**
*
*/
public function __construct()
{
$this->_user = \Auth::user();
}
/**
@@ -24,7 +28,7 @@ class EloquentAccountRepository implements AccountRepositoryInterface
*/
public function count()
{
return \Auth::user()->accounts()->count();
return $this->_user->accounts()->count();
}
@@ -86,8 +90,8 @@ class EloquentAccountRepository implements AccountRepositoryInterface
$accountIDs = array_unique($accountIDs);
if (count($accountIDs) > 0) {
// find the "initial balance" type accounts in this list. Should be just 1.
$query = \Auth::user()->accounts()->accountTypeIn(['Initial balance account'])
->whereIn('accounts.id', $accountIDs);
$query = $this->_user->accounts()->accountTypeIn(['Initial balance account'])
->whereIn('accounts.id', $accountIDs);
if ($query->count() == 1) {
$iba = $query->first(['accounts.*']);
$iba->delete();
@@ -111,7 +115,16 @@ class EloquentAccountRepository implements AccountRepositoryInterface
*/
public function find($accountId)
{
return \Auth::user()->accounts()->where('id', $accountId)->first();
return $this->_user->accounts()->where('id', $accountId)->first();
}
/**
* @param $type
* @return mixed
*/
public function findAccountType($type)
{
return \AccountType::where('type', $type)->first();
}
/**
@@ -124,9 +137,23 @@ class EloquentAccountRepository implements AccountRepositoryInterface
{
$type = is_null($type) ? \AccountType::where('type', 'Default account')->first() : $type;
return \Auth::user()->accounts()->where('account_type_id', $type->id)
->where('name', 'like', '%' . $name . '%')
->first();
return $this->_user->accounts()->where('account_type_id', $type->id)
->where('name', 'like', '%' . $name . '%')
->first();
}
/**
* Used for import
*
* @param $name
*
* @return mixed
*/
public function findByNameAny($name)
{
return $this->_user->accounts()
->where('name', 'like', '%' . $name . '%')
->first();
}
/**
@@ -134,7 +161,7 @@ class EloquentAccountRepository implements AccountRepositoryInterface
*/
public function get()
{
return \Auth::user()->accounts()->with('accounttype')->orderBy('name', 'ASC')->get();
return $this->_user->accounts()->with('accounttype')->orderBy('name', 'ASC')->get();
}
/**
@@ -142,18 +169,10 @@ class EloquentAccountRepository implements AccountRepositoryInterface
*/
public function getActiveDefault()
{
return \Auth::user()->accounts()->leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id')
->where('account_types.type', 'Default account')->where('accounts.active', 1)
return $this->_user->accounts()->leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id')
->where('account_types.type', 'Default account')->where('accounts.active', 1)
->get(['accounts.*']);
}
/**
* @param $type
* @return mixed
*/
public function findAccountType($type) {
return \AccountType::where('type',$type)->first();
->get(['accounts.*']);
}
/**
@@ -161,12 +180,12 @@ class EloquentAccountRepository implements AccountRepositoryInterface
*/
public function getActiveDefaultAsSelectList()
{
$list = \Auth::user()->accounts()->leftJoin(
'account_types', 'account_types.id', '=', 'accounts.account_type_id'
$list = $this->_user->accounts()->leftJoin(
'account_types', 'account_types.id', '=', 'accounts.account_type_id'
)
->where('account_types.type', 'Default account')->where('accounts.active', 1)
->where('account_types.type', 'Default account')->where('accounts.active', 1)
->orderBy('accounts.name', 'ASC')->get(['accounts.*']);
->orderBy('accounts.name', 'ASC')->get(['accounts.*']);
$return = [];
foreach ($list as $entry) {
$return[intval($entry->id)] = $entry->name;
@@ -180,12 +199,12 @@ class EloquentAccountRepository implements AccountRepositoryInterface
*/
public function getBeneficiaries()
{
$list = \Auth::user()->accounts()->leftJoin(
'account_types', 'account_types.id', '=', 'accounts.account_type_id'
$list = $this->_user->accounts()->leftJoin(
'account_types', 'account_types.id', '=', 'accounts.account_type_id'
)
->where('account_types.type', 'Beneficiary account')->where('accounts.active', 1)
->where('account_types.type', 'Beneficiary account')->where('accounts.active', 1)
->orderBy('accounts.name', 'ASC')->get(['accounts.*']);
->orderBy('accounts.name', 'ASC')->get(['accounts.*']);
return $list;
}
@@ -198,7 +217,7 @@ class EloquentAccountRepository implements AccountRepositoryInterface
public function getByIds(array $ids)
{
if (count($ids) > 0) {
return \Auth::user()->accounts()->with('accounttype')->whereIn('id', $ids)->orderBy('name', 'ASC')->get();
return $this->_user->accounts()->with('accounttype')->whereIn('id', $ids)->orderBy('name', 'ASC')->get();
} else {
return $this->getActiveDefault();
}
@@ -210,12 +229,12 @@ class EloquentAccountRepository implements AccountRepositoryInterface
public function getCashAccount()
{
$type = \AccountType::where('type', 'Cash account')->first();
$cash = \Auth::user()->accounts()->where('account_type_id', $type->id)->first();
if(is_null($cash)) {
$cash = $this->_user->accounts()->where('account_type_id', $type->id)->first();
if (is_null($cash)) {
$cash = new \Account;
$cash->accountType()->associate($type);
$cash->user()->associate(\Auth::user());
$cash->name = 'Cash account';
$cash->user()->associate($this->_user);
$cash->name = 'Cash account';
$cash->active = 1;
$cash->save();
}
@@ -229,10 +248,20 @@ class EloquentAccountRepository implements AccountRepositoryInterface
*/
public function getDefault()
{
return \Auth::user()->accounts()->leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id')
->where('account_types.type', 'Default account')
return $this->_user->accounts()->leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id')
->where('account_types.type', 'Default account')
->orderBy('accounts.name', 'ASC')->get(['accounts.*']);
->orderBy('accounts.name', 'ASC')->get(['accounts.*']);
}
/**
* @param \User $user
* @return mixed|void
*/
public function overruleUser(\User $user)
{
$this->_user = $user;
return true;
}
/**
@@ -262,11 +291,7 @@ class EloquentAccountRepository implements AccountRepositoryInterface
*/
$account = new \Account;
$account->accountType()->associate($accountType);
if (\Auth::check()) {
$account->user()->associate(\Auth::user());
} else {
$account->user_id = $data['user_id'];
}
$account->user()->associate($this->_user);
$account->name = $data['name'];
$account->active
@@ -328,20 +353,6 @@ class EloquentAccountRepository implements AccountRepositoryInterface
return $account;
}
/**
* Used for import
*
* @param $name
*
* @return mixed
*/
public function findByNameAny($name)
{
return \Auth::user()->accounts()
->where('name', 'like', '%' . $name . '%')
->first();
}
/**
* @param \Account $account
* @param int $amount
@@ -358,7 +369,7 @@ class EloquentAccountRepository implements AccountRepositoryInterface
// create new account:
$initial = new \Account;
$initial->accountType()->associate($initialBalanceAT);
$initial->user()->associate(\Auth::user());
$initial->user()->associate($this->_user);
$initial->name = $account->name . ' initial balance';
$initial->active = 0;
if ($initial->validate()) {

View File

@@ -30,6 +30,12 @@ interface BudgetRepositoryInterface
*/
public function findByName($budgetName);
/**
* @param \User $user
* @return mixed
*/
public function overruleUser(\User $user);
/**
* @return mixed
*/

View File

@@ -11,6 +11,15 @@ use Carbon\Carbon;
*/
class EloquentBudgetRepository implements BudgetRepositoryInterface
{
protected $_user = null;
/**
*
*/
public function __construct()
{
$this->_user = \Auth::user();
}
/**
* @param \Budget $budget
@@ -32,13 +41,13 @@ class EloquentBudgetRepository implements BudgetRepositoryInterface
public function find($budgetId)
{
return \Auth::user()->budgets()->find($budgetId);
return $this->_user->budgets()->find($budgetId);
}
public function findByName($budgetName)
{
return \Auth::user()->budgets()->whereName($budgetName)->first();
return $this->_user->budgets()->whereName($budgetName)->first();
}
/**
@@ -46,12 +55,12 @@ class EloquentBudgetRepository implements BudgetRepositoryInterface
*/
public function get()
{
$set = \Auth::user()->budgets()->with(
['limits' => function ($q) {
$q->orderBy('limits.startdate', 'DESC');
}, 'limits.limitrepetitions' => function ($q) {
$q->orderBy('limit_repetitions.startdate', 'ASC');
}]
$set = $this->_user->budgets()->with(
['limits' => function ($q) {
$q->orderBy('limits.startdate', 'DESC');
}, 'limits.limitrepetitions' => function ($q) {
$q->orderBy('limit_repetitions.startdate', 'ASC');
}]
)->orderBy('name', 'ASC')->get();
foreach ($set as $budget) {
foreach ($budget->limits as $limit) {
@@ -69,8 +78,8 @@ class EloquentBudgetRepository implements BudgetRepositoryInterface
*/
public function getAsSelectList()
{
$list = \Auth::user()->budgets()->with(
['limits', 'limits.limitrepetitions']
$list = $this->_user->budgets()->with(
['limits', 'limits.limitrepetitions']
)->orderBy('name', 'ASC')->get();
$return = [];
foreach ($list as $entry) {
@@ -88,9 +97,9 @@ class EloquentBudgetRepository implements BudgetRepositoryInterface
*/
public function store($data)
{
$budget = new \Budget;
$budget = new \Budget;
$budget->name = $data['name'];
$budget->user()->associate(\Auth::user());
$budget->user()->associate($this->_user);
$budget->save();
// if limit, create limit (repetition itself will be picked up elsewhere).
@@ -121,9 +130,9 @@ class EloquentBudgetRepository implements BudgetRepositoryInterface
$startDate->startOfYear();
break;
}
$limit->startdate = $startDate;
$limit->amount = $data['amount'];
$limit->repeats = isset($data['repeats']) ? $data['repeats'] : 0;
$limit->startdate = $startDate;
$limit->amount = $data['amount'];
$limit->repeats = isset($data['repeats']) ? $data['repeats'] : 0;
$limit->repeat_freq = $data['repeat_freq'];
if ($limit->validate()) {
$limit->save();
@@ -154,4 +163,14 @@ class EloquentBudgetRepository implements BudgetRepositoryInterface
return $budget;
}
/**
* @param \User $user
* @return mixed|void
*/
public function overruleUser(\User $user)
{
$this->_user = $user;
return true;
}
}

View File

@@ -29,6 +29,12 @@ interface CategoryRepositoryInterface
*/
public function createOrFind($name);
/**
* @param \User $user
* @return mixed
*/
public function overruleUser(\User $user);
/**
* @param $name
*

View File

@@ -9,6 +9,16 @@ namespace Firefly\Storage\Category;
*/
class EloquentCategoryRepository implements CategoryRepositoryInterface
{
protected $_user = null;
/**
*
*/
public function __construct()
{
$this->_user = \Auth::user();
}
/**
* @param $name
*
@@ -48,7 +58,7 @@ class EloquentCategoryRepository implements CategoryRepositoryInterface
*/
public function find($categoryId)
{
return \Auth::user()->categories()->find($categoryId);
return $this->_user->categories()->find($categoryId);
}
/**
@@ -62,7 +72,7 @@ class EloquentCategoryRepository implements CategoryRepositoryInterface
return null;
}
return \Auth::user()->categories()->where('name', 'LIKE', '%' . $name . '%')->first();
return $this->_user->categories()->where('name', 'LIKE', '%' . $name . '%')->first();
}
@@ -71,7 +81,7 @@ class EloquentCategoryRepository implements CategoryRepositoryInterface
*/
public function get()
{
return \Auth::user()->categories()->orderBy('name', 'ASC')->get();
return $this->_user->categories()->orderBy('name', 'ASC')->get();
}
/**
@@ -81,10 +91,10 @@ class EloquentCategoryRepository implements CategoryRepositoryInterface
*/
public function store($data)
{
$category = new \Category;
$category = new \Category;
$category->name = $data['name'];
$category->user()->associate(\Auth::user());
$category->user()->associate($this->_user);
$category->save();
return $category;
@@ -106,4 +116,14 @@ class EloquentCategoryRepository implements CategoryRepositoryInterface
return $category;
}
/**
* @param \User $user
* @return mixed|void
*/
public function overruleUser(\User $user)
{
$this->_user = $user;
return true;
}
}

View File

@@ -28,4 +28,10 @@ interface ComponentRepositoryInterface
*/
public function store($data);
/**
* @param \User $user
* @return mixed
*/
public function overruleUser(\User $user);
}

View File

@@ -14,12 +14,14 @@ use Illuminate\Database\QueryException;
class EloquentComponentRepository implements ComponentRepositoryInterface
{
public $validator;
protected $_user = null;
/**
*
*/
public function __construct()
{
$this->_user = \Auth::user();
}
/**
@@ -27,7 +29,7 @@ class EloquentComponentRepository implements ComponentRepositoryInterface
*/
public function count()
{
return \Auth::user()->components()->count();
return $this->_user->components()->count();
}
@@ -40,6 +42,16 @@ class EloquentComponentRepository implements ComponentRepositoryInterface
throw new FireflyException('No implementation.');
}
/**
* @param \User $user
* @return mixed|void
*/
public function overruleUser(\User $user)
{
$this->_user = $user;
return true;
}
/**
* @param $data
*
@@ -62,7 +74,7 @@ class EloquentComponentRepository implements ComponentRepositoryInterface
}
$component->name = $data['name'];
$component->user()->associate(\Auth::user());
$component->user()->associate($this->_user);
try {
$component->save();
} catch (QueryException $e) {

View File

@@ -5,6 +5,15 @@ namespace Firefly\Storage\Import;
class EloquentImportRepository implements ImportRepositoryInterface
{
protected $_user = null;
/**
*
*/
public function __construct()
{
$this->_user = \Auth::user();
}
public function findImportComponentMap(\Importmap $map, $oldComponentId)
{
@@ -26,6 +35,16 @@ class EloquentImportRepository implements ImportRepositoryInterface
return \Importmap::find($id);
}
/**
* @param \User $user
* @return mixed|void
*/
public function overruleUser(\User $user)
{
$this->_user = $user;
return true;
}
public function store(\Importmap $map, $class, $oldID, $newID)
{
$entry = new \Importentry;

View File

@@ -24,4 +24,10 @@ interface ImportRepositoryInterface
public function findImportEntry(\Importmap $map, $class, $oldID);
public function findImportComponentMap(\Importmap $map, $oldComponentId);
/**
* @param \User $user
* @return mixed
*/
public function overruleUser(\User $user);
}

View File

@@ -12,9 +12,14 @@ use Carbon\Carbon;
*/
class EloquentLimitRepository implements LimitRepositoryInterface
{
protected $_user = null;
public function findByBudgetAndDate(\Budget $budget, Carbon $date) {
return \Limit::whereComponentId($budget->id)->where('startdate',$date->format('Y-m-d'))->first();
/**
*
*/
public function __construct()
{
$this->_user = \Auth::user();
}
/**
@@ -29,24 +34,6 @@ class EloquentLimitRepository implements LimitRepositoryInterface
return true;
}
/**
* @param \Limit $limit
* @param $data
*
* @return mixed|void
*/
public function update(\Limit $limit, $data)
{
$limit->startdate = new Carbon($data['startdate']);
$limit->repeat_freq = $data['period'];
$limit->repeats = isset($data['repeats']) && $data['repeats'] == '1' ? 1 : 0;
$limit->amount = floatval($data['amount']);
$limit->save();
return $limit;
}
/**
* @param $limitId
*
@@ -55,15 +42,20 @@ class EloquentLimitRepository implements LimitRepositoryInterface
public function find($limitId)
{
return \Limit::with('limitrepetitions')->where('limits.id', $limitId)->leftJoin(
'components', 'components.id', '=', 'limits.component_id'
'components', 'components.id', '=', 'limits.component_id'
)
->where('components.user_id', \Auth::user()->id)->first(['limits.*']);
->where('components.user_id', $this->_user->id)->first(['limits.*']);
}
public function findByBudgetAndDate(\Budget $budget, Carbon $date)
{
return \Limit::whereComponentId($budget->id)->where('startdate', $date->format('Y-m-d'))->first();
}
/**
* @param \Budget $budget
* @param Carbon $start
* @param Carbon $end
* @param Carbon $start
* @param Carbon $end
*
* @return mixed
*/
@@ -75,6 +67,16 @@ class EloquentLimitRepository implements LimitRepositoryInterface
}
/**
* @param \User $user
* @return mixed|void
*/
public function overruleUser(\User $user)
{
$this->_user = $user;
return true;
}
/**
* @param $data
*
@@ -119,9 +121,9 @@ class EloquentLimitRepository implements LimitRepositoryInterface
// find existing:
$count = \Limit::
leftJoin('components', 'components.id', '=', 'limits.component_id')->where(
'components.user_id', \Auth::user()->id
'components.user_id', $this->_user->id
)->where('startdate', $date->format('Y-m-d'))->where('component_id', $data['budget_id'])->where(
'repeat_freq', $data['period']
'repeat_freq', $data['period']
)->count();
if ($count > 0) {
\Session::flash('error', 'There already is an entry for these parameters.');
@@ -131,9 +133,9 @@ class EloquentLimitRepository implements LimitRepositoryInterface
// create new limit:
$limit = new \Limit;
$limit->budget()->associate($budget);
$limit->startdate = $date;
$limit->amount = floatval($data['amount']);
$limit->repeats = isset($data['repeats']) ? intval($data['repeats']) : 0;
$limit->startdate = $date;
$limit->amount = floatval($data['amount']);
$limit->repeats = isset($data['repeats']) ? intval($data['repeats']) : 0;
$limit->repeat_freq = $data['period'];
if (!$limit->save()) {
\Session::flash('error', 'Could not save: ' . $limit->errors()->first());
@@ -142,4 +144,22 @@ class EloquentLimitRepository implements LimitRepositoryInterface
return $limit;
}
/**
* @param \Limit $limit
* @param $data
*
* @return mixed|void
*/
public function update(\Limit $limit, $data)
{
$limit->startdate = new Carbon($data['startdate']);
$limit->repeat_freq = $data['period'];
$limit->repeats = isset($data['repeats']) && $data['repeats'] == '1' ? 1 : 0;
$limit->amount = floatval($data['amount']);
$limit->save();
return $limit;
}
}

View File

@@ -56,4 +56,10 @@ interface LimitRepositoryInterface
* @return mixed
*/
public function update(\Limit $limit, $data);
/**
* @param \User $user
* @return mixed
*/
public function overruleUser(\User $user);
}

View File

@@ -14,6 +14,15 @@ use Firefly\Exception\FireflyException;
class EloquentPiggybankRepository implements PiggybankRepositoryInterface
{
protected $_user = null;
/**
*
*/
public function __construct()
{
$this->_user = \Auth::user();
}
/**
* @return mixed
@@ -21,14 +30,14 @@ class EloquentPiggybankRepository implements PiggybankRepositoryInterface
public function count()
{
return \Piggybank::leftJoin('accounts', 'accounts.id', '=', 'piggybanks.account_id')->where(
'accounts.user_id', \Auth::user()->id
'accounts.user_id', $this->_user->id
)->count();
}
public function countNonrepeating()
{
return \Piggybank::leftJoin('accounts', 'accounts.id', '=', 'piggybanks.account_id')->where(
'accounts.user_id', \Auth::user()->id
'accounts.user_id', $this->_user->id
)->where('repeats', 0)->count();
}
@@ -36,7 +45,7 @@ class EloquentPiggybankRepository implements PiggybankRepositoryInterface
public function countRepeating()
{
return \Piggybank::leftJoin('accounts', 'accounts.id', '=', 'piggybanks.account_id')->where(
'accounts.user_id', \Auth::user()->id
'accounts.user_id', $this->_user->id
)->where('repeats', 1)->count();
}
@@ -60,14 +69,14 @@ class EloquentPiggybankRepository implements PiggybankRepositoryInterface
public function find($piggyBankId)
{
return \Piggybank::leftJoin('accounts', 'accounts.id', '=', 'piggybanks.account_id')->where(
'accounts.user_id', \Auth::user()->id
'accounts.user_id', $this->_user->id
)->where('piggybanks.id', $piggyBankId)->first(['piggybanks.*']);
}
public function findByName($piggyBankName)
{
return \Piggybank::leftJoin('accounts', 'accounts.id', '=', 'piggybanks.account_id')->where(
'accounts.user_id', \Auth::user()->id
'accounts.user_id', $this->_user->id
)->where('piggybanks.name', $piggyBankName)->first(['piggybanks.*']);
}
@@ -76,7 +85,7 @@ class EloquentPiggybankRepository implements PiggybankRepositoryInterface
*/
public function get()
{
$piggies = \Auth::user()->piggybanks()->with(['account', 'piggybankrepetitions'])->get();
$piggies = $this->_user->piggybanks()->with(['account', 'piggybankrepetitions'])->get();
foreach ($piggies as $pig) {
$pig->leftInAccount = $this->leftOnAccount($pig->account);
@@ -102,7 +111,6 @@ class EloquentPiggybankRepository implements PiggybankRepositoryInterface
}
/**
* @param \Piggybank $piggyBank
* @param $amount
@@ -122,6 +130,16 @@ class EloquentPiggybankRepository implements PiggybankRepositoryInterface
}
/**
* @param \User $user
* @return mixed|void
*/
public function overruleUser(\User $user)
{
$this->_user = $user;
return true;
}
/**
* @param $data
*
@@ -141,6 +159,7 @@ class EloquentPiggybankRepository implements PiggybankRepositoryInterface
/** @var \Firefly\Storage\Account\AccountRepositoryInterface $accounts */
$accounts = \App::make('Firefly\Storage\Account\AccountRepositoryInterface');
$accounts->overruleUser($this->_user);
$account = isset($data['account_id']) ? $accounts->find($data['account_id']) : null;
@@ -221,6 +240,7 @@ class EloquentPiggybankRepository implements PiggybankRepositoryInterface
{
/** @var \Firefly\Storage\Account\AccountRepositoryInterface $accounts */
$accounts = \App::make('Firefly\Storage\Account\AccountRepositoryInterface');
$accounts->overruleUser($this->_user);
$account = isset($data['account_id']) ? $accounts->find($data['account_id']) : null;
if (!is_null($account)) {

View File

@@ -39,7 +39,9 @@ interface PiggybankRepositoryInterface
* @return mixed
*/
public function find($piggyBankId);
public function findByName($piggyBankName);
/**
* @return mixed
*/
@@ -77,5 +79,11 @@ interface PiggybankRepositoryInterface
*/
public function update(\Piggybank $piggy, $data);
/**
* @param \User $user
* @return mixed
*/
public function overruleUser(\User $user);
}

View File

@@ -12,6 +12,27 @@ use Carbon\Carbon;
*/
class EloquentRecurringTransactionRepository implements RecurringTransactionRepositoryInterface
{
/**
* @param \User $user
* @return mixed|void
*/
public function overruleUser(\User $user)
{
$this->_user = $user;
return true;
}
protected $_user = null;
/**
*
*/
public function __construct()
{
$this->_user = \Auth::user();
}
/**
* @param \RecurringTransaction $recurringTransaction
*
@@ -26,7 +47,7 @@ class EloquentRecurringTransactionRepository implements RecurringTransactionRepo
public function findByName($name)
{
return \Auth::user()->recurringtransactions()->where('name', 'LIKE', '%' . $name . '%')->first();
return $this->_user->recurringtransactions()->where('name', 'LIKE', '%' . $name . '%')->first();
}
/**
@@ -34,7 +55,7 @@ class EloquentRecurringTransactionRepository implements RecurringTransactionRepo
*/
public function get()
{
return \Auth::user()->recurringtransactions()->get();
return $this->_user->recurringtransactions()->get();
}
/**
@@ -45,7 +66,7 @@ class EloquentRecurringTransactionRepository implements RecurringTransactionRepo
public function store($data)
{
$recurringTransaction = new \RecurringTransaction;
$recurringTransaction->user()->associate(\Auth::user());
$recurringTransaction->user()->associate($this->_user);
$recurringTransaction->name = $data['name'];
$recurringTransaction->match = join(' ', explode(',', $data['match']));
$recurringTransaction->amount_max = floatval($data['amount_max']);

View File

@@ -44,5 +44,11 @@ interface RecurringTransactionRepositoryInterface
*/
public function update(\RecurringTransaction $recurringTransaction, $data);
/**
* @param \User $user
* @return mixed
*/
public function overruleUser(\User $user);
}

View File

@@ -12,6 +12,26 @@ use Carbon\Carbon;
*/
class EloquentReminderRepository implements ReminderRepositoryInterface
{
/**
* @param \User $user
* @return mixed|void
*/
public function overruleUser(\User $user)
{
$this->_user = $user;
return true;
}
protected $_user = null;
/**
*
*/
public function __construct()
{
$this->_user = \Auth::user();
}
/**
* @param \Reminder $reminder
*
@@ -42,7 +62,7 @@ class EloquentReminderRepository implements ReminderRepositoryInterface
{
$today = new Carbon;
return \Auth::user()->reminders()->validOn($today)->get();
return $this->_user->reminders()->validOn($today)->get();
}
/**
@@ -52,8 +72,8 @@ class EloquentReminderRepository implements ReminderRepositoryInterface
{
$today = new Carbon;
return \Auth::user()->reminders()->with('recurringtransaction')->validOn($today)->where(
'class', 'RecurringTransactionReminder'
return $this->_user->reminders()->with('recurringtransaction')->validOn($today)->where(
'class', 'RecurringTransactionReminder'
)->get();
}

View File

@@ -39,4 +39,10 @@ interface ReminderRepositoryInterface
public function getCurrentRecurringReminders();
/**
* @param \User $user
* @return mixed
*/
public function overruleUser(\User $user);
}

View File

@@ -9,5 +9,24 @@ namespace Firefly\Storage\Transaction;
*/
class EloquentTransactionRepository implements TransactionRepositoryInterface
{
protected $_user = null;
/**
*
*/
public function __construct()
{
$this->_user = \Auth::user();
}
/**
* @param \User $user
* @return mixed|void
*/
public function overruleUser(\User $user)
{
$this->_user = $user;
return true;
}
}

View File

@@ -9,6 +9,11 @@ namespace Firefly\Storage\Transaction;
*/
interface TransactionRepositoryInterface
{
/**
* @param \User $user
* @return mixed
*/
public function overruleUser(\User $user);
}

View File

@@ -14,6 +14,16 @@ use Firefly\Exception\FireflyException;
class EloquentTransactionJournalRepository implements TransactionJournalRepositoryInterface
{
protected $_user = null;
/**
*
*/
public function __construct()
{
$this->_user = \Auth::user();
}
/**
*
* We're building this thinking the money goes from A to B.
@@ -34,8 +44,8 @@ class EloquentTransactionJournalRepository implements TransactionJournalReposito
* A gains 200 (200). * -1
* B loses 200 (-200). * 1
*
* @param \Account $from
* @param \Account $toAccount
* @param \Account $from
* @param \Account $toAccount
* @param $description
* @param $amount
* @param \Carbon\Carbon $date
@@ -48,7 +58,7 @@ class EloquentTransactionJournalRepository implements TransactionJournalReposito
$journal = new \TransactionJournal;
$amountFrom = $amount * -1;
$amountTo = $amount;
$amountTo = $amount;
if (round(floatval($amount), 2) == 0.00) {
$journal->errors()->add('amount', 'Amount must not be zero.');
@@ -64,7 +74,7 @@ class EloquentTransactionJournalRepository implements TransactionJournalReposito
}
// account types for both:
$toAT = $toAccount->accountType->type;
$toAT = $toAccount->accountType->type;
$fromAT = $from->accountType->type;
$journalType = null;
@@ -105,10 +115,10 @@ class EloquentTransactionJournalRepository implements TransactionJournalReposito
$journal->transactionType()->associate($journalType);
$journal->transactionCurrency()->associate($currency);
$journal->user()->associate(\Auth::user());
$journal->completed = false;
$journal->user()->associate($this->_user);
$journal->completed = false;
$journal->description = $description;
$journal->date = $date;
$journal->date = $date;
if (!$journal->validate()) {
return $journal;
}
@@ -119,10 +129,10 @@ class EloquentTransactionJournalRepository implements TransactionJournalReposito
$fromTransaction->account()->associate($from);
$fromTransaction->transactionJournal()->associate($journal);
$fromTransaction->description = null;
$fromTransaction->amount = $amountFrom;
$fromTransaction->amount = $amountFrom;
if (!$fromTransaction->validate()) {
throw new FireflyException('Cannot create valid transaction (from): ' . $fromTransaction->errors()->first(
));
throw new FireflyException('Cannot create valid transaction (from): ' . $fromTransaction->errors()
->first());
}
$fromTransaction->save();
@@ -130,7 +140,7 @@ class EloquentTransactionJournalRepository implements TransactionJournalReposito
$toTransaction->account()->associate($toAccount);
$toTransaction->transactionJournal()->associate($journal);
$toTransaction->description = null;
$toTransaction->amount = $amountTo;
$toTransaction->amount = $amountTo;
if (!$toTransaction->validate()) {
throw new FireflyException('Cannot create valid transaction (to): ' . $toTransaction->errors()->first());
}
@@ -149,13 +159,13 @@ class EloquentTransactionJournalRepository implements TransactionJournalReposito
*/
public function find($journalId)
{
return \Auth::user()->transactionjournals()->with(
['transactions' => function ($q) {
return $q->orderBy('amount', 'ASC');
}, 'transactioncurrency', 'transactiontype', 'components', 'transactions.account',
'transactions.account.accounttype']
return $this->_user->transactionjournals()->with(
['transactions' => function ($q) {
return $q->orderBy('amount', 'ASC');
}, 'transactioncurrency', 'transactiontype', 'components', 'transactions.account',
'transactions.account.accounttype']
)
->where('id', $journalId)->first();
->where('id', $journalId)->first();
}
/**
@@ -168,64 +178,76 @@ class EloquentTransactionJournalRepository implements TransactionJournalReposito
/**
* @param \Account $account
* @param Carbon $date
* @param Carbon $date
*
* @return mixed
*/
public function getByAccountAndDate(\Account $account, Carbon $date)
{
$accountID = $account->id;
$query = \Auth::user()->transactionjournals()->with(
[
'transactions',
'transactions.account',
'transactioncurrency',
'transactiontype'
]
$query = $this->_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', $accountID)
->where('transaction_journals.date', $date->format('Y-m-d'))
->orderBy('transaction_journals.date', 'DESC')
->orderBy('transaction_journals.id', 'DESC')
->get(['transaction_journals.*']);
->distinct()
->leftJoin('transactions', 'transactions.transaction_journal_id', '=',
'transaction_journals.id')
->leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id')
->where('transactions.account_id', $accountID)
->where('transaction_journals.date', $date->format('Y-m-d'))
->orderBy('transaction_journals.date', 'DESC')
->orderBy('transaction_journals.id', 'DESC')
->get(['transaction_journals.*']);
return $query;
}
/**
* @param \Account $account
* @param int $count
* @param Carbon $start
* @param Carbon $end
* @param int $count
* @param Carbon $start
* @param Carbon $end
*
* @return mixed
*/
public function getByAccountInDateRange(\Account $account, $count = 25, Carbon $start, Carbon $end)
{
$accountID = $account->id;
$query = \Auth::user()->transactionjournals()->with(
[
'transactions',
'transactioncurrency',
'transactiontype'
]
$query = $this->_user->transactionjournals()->with(
[
'transactions',
'transactioncurrency',
'transactiontype'
]
)
->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
->leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id')
->where('accounts.id', $accountID)
->where('date', '>=', $start->format('Y-m-d'))
->where('date', '<=', $end->format('Y-m-d'))
->orderBy('transaction_journals.date', 'DESC')
->orderBy('transaction_journals.id', 'DESC')
->take($count)
->get(['transaction_journals.*']);
->leftJoin('transactions', 'transactions.transaction_journal_id', '=',
'transaction_journals.id')
->leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id')
->where('accounts.id', $accountID)
->where('date', '>=', $start->format('Y-m-d'))
->where('date', '<=', $end->format('Y-m-d'))
->orderBy('transaction_journals.date', 'DESC')
->orderBy('transaction_journals.id', 'DESC')
->take($count)
->get(['transaction_journals.*']);
return $query;
}
/**
* @param \User $user
* @return mixed|void
*/
public function overruleUser(\User $user)
{
$this->_user = $user;
return true;
}
/**
* @param int $count
*
@@ -233,19 +255,19 @@ class EloquentTransactionJournalRepository implements TransactionJournalReposito
*/
public function paginate($count = 25, Carbon $start = null, Carbon $end = null)
{
$query = \Auth::user()->transactionjournals()->with(
[
'transactions' => function ($q) {
return $q->orderBy('amount', 'ASC');
},
'transactions.account',
'transactions.account.accounttype',
'transactioncurrency',
'transactiontype'
]
$query = $this->_user->transactionjournals()->with(
[
'transactions' => function ($q) {
return $q->orderBy('amount', 'ASC');
},
'transactions.account',
'transactions.account.accounttype',
'transactioncurrency',
'transactiontype'
]
)
->orderBy('transaction_journals.date', 'DESC')
->orderBy('transaction_journals.id', 'DESC');
->orderBy('transaction_journals.date', 'DESC')
->orderBy('transaction_journals.id', 'DESC');
if (!is_null($start)) {
$query->where('transaction_journals.date', '>=', $start->format('Y-m-d'));
}
@@ -270,37 +292,40 @@ class EloquentTransactionJournalRepository implements TransactionJournalReposito
// depending on the $what
$fromAccount = null;
$toAccount = null;
$toAccount = null;
/** @var \Firefly\Storage\Account\AccountRepositoryInterface $accountRepository */
$accountRepository = \App::make('Firefly\Storage\Account\AccountRepositoryInterface');
$accountRepository->overruleUser($this->_user);
/** @var \Firefly\Storage\Category\CategoryRepositoryInterface $catRepository */
$catRepository = \App::make('Firefly\Storage\Category\CategoryRepositoryInterface');
$catRepository->overruleUser($this->_user);
/** @var \Firefly\Storage\Budget\BudgetRepositoryInterface $budRepository */
$budRepository = \App::make('Firefly\Storage\Budget\BudgetRepositoryInterface');
$budRepository->overruleUser($this->_user);
switch ($what) {
case 'withdrawal':
$fromAccount = $accountRepository->find(intval($data['account_id']));
$toAccount = $accountRepository->createOrFindBeneficiary($data['beneficiary']);
$toAccount = $accountRepository->createOrFindBeneficiary($data['beneficiary']);
break;
case 'deposit':
$fromAccount = $accountRepository->createOrFindBeneficiary($data['beneficiary']);
$toAccount = $accountRepository->find(intval($data['account_id']));
$toAccount = $accountRepository->find(intval($data['account_id']));
break;
case 'transfer':
$fromAccount = $accountRepository->find(intval($data['account_from_id']));
$toAccount = $accountRepository->find(intval($data['account_to_id']));
$toAccount = $accountRepository->find(intval($data['account_to_id']));
break;
}
// fall back to cash if necessary:
$fromAccount = is_null($fromAccount) ? $fromAccount = $accountRepository->getCashAccount() : $fromAccount;
$toAccount = is_null($toAccount) ? $toAccount = $accountRepository->getCashAccount() : $toAccount;
$toAccount = is_null($toAccount) ? $toAccount = $accountRepository->getCashAccount() : $toAccount;
// create or find category:
$category = isset($data['category']) ? $catRepository->createOrFind($data['category']) : null;
@@ -309,8 +334,8 @@ class EloquentTransactionJournalRepository implements TransactionJournalReposito
$budget = isset($data['budget_id']) ? $budRepository->find(intval($data['budget_id'])) : null;
// find amount & description:
$description = trim($data['description']);
$amount = floatval($data['amount']);
$date = new Carbon($data['date']);
$amount = floatval($data['amount']);
$date = new Carbon($data['date']);
// try to create a journal:
$transactionJournal = $this->createSimpleJournal($fromAccount, $toAccount, $description, $amount, $date);
@@ -323,6 +348,7 @@ class EloquentTransactionJournalRepository implements TransactionJournalReposito
if ($what == 'transfer') {
/** @var \Firefly\Storage\Piggybank\PiggybankRepositoryInterface $piggyRepository */
$piggyRepository = \App::make('Firefly\Storage\Piggybank\PiggybankRepositoryInterface');
$piggyRepository->overruleUser($this->_user);
if (isset($data['piggybank_id'])) {
/** @var \Piggybank $piggyBank */
@@ -337,15 +363,15 @@ class EloquentTransactionJournalRepository implements TransactionJournalReposito
$transaction->piggybank()->associate($piggyBank);
$transaction->save();
\Event::fire(
'piggybanks.createRelatedTransfer', [$piggyBank, $transactionJournal, $transaction]
'piggybanks.createRelatedTransfer', [$piggyBank, $transactionJournal, $transaction]
);
break;
}
}
if ($connected === false) {
\Session::flash(
'warning', 'Piggy bank "' . e($piggyBank->name)
. '" is not set to draw money from any of the accounts in this transfer'
'warning', 'Piggy bank "' . e($piggyBank->name)
. '" is not set to draw money from any of the accounts in this transfer'
);
}
}
@@ -375,18 +401,21 @@ class EloquentTransactionJournalRepository implements TransactionJournalReposito
{
/** @var \Firefly\Storage\Category\CategoryRepositoryInterface $catRepository */
$catRepository = \App::make('Firefly\Storage\Category\CategoryRepositoryInterface');
$catRepository->overruleUser($this->_user);
/** @var \Firefly\Storage\Budget\BudgetRepositoryInterface $budgetRepository */
$budRepository = \App::make('Firefly\Storage\Budget\BudgetRepositoryInterface');
$budRepository->overruleUser($this->_user);
/** @var \Firefly\Storage\Account\AccountRepositoryInterface $accountRepository */
$accountRepository = \App::make('Firefly\Storage\Account\AccountRepositoryInterface');
$accountRepository->overruleUser($this->_user);
// update basics first:
$journal->description = $data['description'];
$journal->date = $data['date'];
$amount = floatval($data['amount']);
$journal->date = $data['date'];
$amount = floatval($data['amount']);
// remove previous category, if any:
if (!is_null($journal->categories()->first())) {
@@ -424,7 +453,7 @@ class EloquentTransactionJournalRepository implements TransactionJournalReposito
switch ($journal->transactiontype->type) {
case 'Withdrawal':
// means transaction[0] is the users account.
$account = $accountRepository->find($data['account_id']);
$account = $accountRepository->find($data['account_id']);
$beneficiary = $accountRepository->createOrFindBeneficiary($data['beneficiary']);
$transactions[0]->account()->associate($account);
$transactions[1]->account()->associate($beneficiary);
@@ -438,7 +467,7 @@ class EloquentTransactionJournalRepository implements TransactionJournalReposito
break;
case 'Deposit':
// means transaction[0] is the beneficiary.
$account = $accountRepository->find($data['account_id']);
$account = $accountRepository->find($data['account_id']);
$beneficiary = $accountRepository->createOrFindBeneficiary($data['beneficiary']);
$journal->transactions[0]->account()->associate($beneficiary);
$journal->transactions[1]->account()->associate($account);
@@ -455,6 +484,7 @@ class EloquentTransactionJournalRepository implements TransactionJournalReposito
// attach the new piggy bank, if valid:
/** @var \Firefly\Storage\Piggybank\PiggybankRepositoryInterface $piggyRepository */
$piggyRepository = \App::make('Firefly\Storage\Piggybank\PiggybankRepositoryInterface');
$piggyRepository->overruleUser($this->_user);
if (isset($data['piggybank_id'])) {
/** @var \Piggybank $piggyBank */
@@ -476,8 +506,8 @@ class EloquentTransactionJournalRepository implements TransactionJournalReposito
}
if ($connected === false) {
\Session::flash(
'warning', 'Piggy bank "' . e($piggyBank->name)
. '" is not set to draw money from any of the accounts in this transfer'
'warning', 'Piggy bank "' . e($piggyBank->name)
. '" is not set to draw money from any of the accounts in this transfer'
);
}
}

View File

@@ -16,7 +16,7 @@ interface TransactionJournalRepositoryInterface
* @param \Account $toAccount
* @param $description
* @param $amount
* @param Carbon $date
* @param Carbon $date
*
* @return mixed
*/
@@ -27,6 +27,12 @@ interface TransactionJournalRepositoryInterface
*/
public function get();
/**
* @param \User $user
* @return mixed
*/
public function overruleUser(\User $user);
/**
* @param $what
* @param $data
@@ -52,9 +58,9 @@ interface TransactionJournalRepositoryInterface
/**
* @param \Account $account
* @param int $count
* @param Carbon $start
* @param Carbon $end
* @param int $count
* @param Carbon $start
* @param Carbon $end
*
* @return mixed
*/
@@ -62,7 +68,7 @@ interface TransactionJournalRepositoryInterface
/**
* @param \Account $account
* @param Carbon $date
* @param Carbon $date
*
* @return mixed
*/

View File

@@ -60,10 +60,10 @@ class EloquentUserRepository implements UserRepositoryInterface
*/
public function register($array)
{
$user = new \User;
$user->email = isset($array['email']) ? $array['email'] : null;
$user = new \User;
$user->email = isset($array['email']) ? $array['email'] : null;
$user->migrated = 0;
$user->reset = \Str::random(32);
$user->reset = \Str::random(32);
$user->password = \Hash::make(\Str::random(12));
if (!$user->save()) {