Cleanup in preparation of an overhaul.

This commit is contained in:
James Cole 2015-01-14 12:24:08 +01:00
parent 144e329eca
commit d3e8ceee00
20 changed files with 337 additions and 310 deletions

View File

@ -140,8 +140,7 @@ class AccountController extends BaseController
{
$subTitle = $this->_subTitlesByIdentifier[$what];
$subTitleIcon = $this->_subIconsByIdentifier[$what];
$accounts = $this->_repository->getAccountsByType($this->_accountTypesByIdentifier[$what]);
$accounts = $this->_repository->getAccountsByType($this->_accountTypesByIdentifier[$what]);
return View::make('accounts.index', compact('what', 'subTitleIcon', 'subTitle', 'accounts'));
}
@ -169,21 +168,23 @@ class AccountController extends BaseController
public function store()
{
$data = Input::except('_token');
// always validate:
$messages = $this->_repository->validate($data);
/*
* always validate using the account validator:
* TODO move to constructor.
*/
/** @var \FireflyIII\Validation\Account $validator */
$validator = App::make('FireflyIII\Validation\Account');
$data = Input::except('_token', 'post_submit_action');
$errors = $validator->store($data);
// flash messages:
Session::flash('warnings', $messages['warnings']);
Session::flash('successes', $messages['successes']);
Session::flash('errors', $messages['errors']);
if ($messages['errors']->count() > 0) {
Session::flash('error', 'Could not store account: ' . $messages['errors']->first());
Session::flash('errors', $errors);
if ($errors->count() > 0) {
Session::flash('error', 'Could not store account: ' . $errors->first());
}
// return to create screen:
if ($data['post_submit_action'] == 'validate_only' || $messages['errors']->count() > 0) {
if ($data['post_submit_action'] == 'validate_only' || $errors->count() > 0) {
return Redirect::route('accounts.create', e($data['what']))->withInput();
}
@ -205,23 +206,24 @@ class AccountController extends BaseController
*/
public function update(Account $account)
{
/*
* always validate using the account validator:
* TODO move to constructor.
*/
/** @var \FireflyIII\Validation\Account $validator */
$validator = App::make('FireflyIII\Validation\Account');
$data = Input::except('_token');
$data['what'] = $this->_shortNamesByFullName[$account->accountType->type];
// always validate:
$messages = $this->_repository->validate($data);
$errors = $validator->update($data, $account);
// flash messages:
Session::flash('warnings', $messages['warnings']);
Session::flash('successes', $messages['successes']);
Session::flash('errors', $messages['errors']);
if ($messages['errors']->count() > 0) {
Session::flash('error', 'Could not update account: ' . $messages['errors']->first());
Session::flash('errors', $errors);
if ($errors->count() > 0) {
Session::flash('error', 'Could not update account: ' . $errors->first());
}
// return to update screen:
if ($data['post_submit_action'] == 'validate_only' || $messages['errors']->count() > 0) {
if ($data['post_submit_action'] == 'validate_only' || $errors->count() > 0) {
return Redirect::route('accounts.edit', $account->id)->withInput();
}

View File

@ -88,7 +88,7 @@ class GoogleChartController extends BaseController
/** @var \FireflyIII\Database\Account\Account $acct */
$acct = App::make('FireflyIII\Database\Account\Account');
$accounts = count($pref->data) > 0 ? $acct->getByIds($pref->data) : $acct->getAssetAccounts();
$accounts = count($pref->data) > 0 ? $acct->getByIds($pref->data) : $acct->getAccountsByType(['Default account', 'Asset account']);
/** @var Account $account */
foreach ($accounts as $account) {

View File

@ -33,7 +33,7 @@ class HomeController extends BaseController
/** @var \FireflyIII\Shared\Preferences\PreferencesInterface $preferences */
$preferences = App::make('FireflyIII\Shared\Preferences\PreferencesInterface');
$count = $acct->countAssetAccounts();
$count = $acct->countAccountsByType(['Default account', 'Asset account']);
$start = Session::get('start', Carbon::now()->startOfMonth());
$end = Session::get('end', Carbon::now()->endOfMonth());
@ -42,7 +42,7 @@ class HomeController extends BaseController
// get the preference for the home accounts to show:
$frontPage = $preferences->get('frontPageAccounts', []);
if ($frontPage->data == []) {
$accounts = $acct->getAssetAccounts();
$accounts = $acct->getAccountsByType(['Default account', 'Asset account']);
} else {
$accounts = $acct->getByIds($frontPage->data);
}

View File

@ -36,7 +36,7 @@ class JsonController extends BaseController
{
/** @var \FireflyIII\Database\Account\Account $accounts */
$accounts = App::make('FireflyIII\Database\Account\Account');
$list = $accounts->getExpenseAccounts();
$list = $accounts->getAccountsByType(['Expense account', 'Beneficiary account']);
$return = [];
foreach ($list as $entry) {
$return[] = $entry->name;
@ -53,7 +53,7 @@ class JsonController extends BaseController
{
/** @var \FireflyIII\Database\Account\Account $accounts */
$accounts = App::make('FireflyIII\Database\Account\Account');
$list = $accounts->getRevenueAccounts();
$list = $accounts->getAccountsByType(['Revenue account']);
$return = [];
foreach ($list as $entry) {
$return[] = $entry->name;

View File

@ -62,7 +62,7 @@ class PiggyBankController extends BaseController
$acct = App::make('FireflyIII\Database\Account\Account');
$periods = Config::get('firefly.piggy_bank_periods');
$accounts = FFForm::makeSelectList($acct->getAssetAccounts());
$accounts = FFForm::makeSelectList($acct->getAccountsByType(['Default account', 'Asset account']));
$subTitle = 'Create new piggy bank';
$subTitleIcon = 'fa-plus';
@ -107,7 +107,7 @@ class PiggyBankController extends BaseController
$acct = App::make('FireflyIII\Database\Account\Account');
$periods = Config::get('firefly.piggy_bank_periods');
$accounts = FFForm::makeSelectList($acct->getAssetAccounts());
$accounts = FFForm::makeSelectList($acct->getAccountsByType(['Default account', 'Asset account']));
$subTitle = 'Edit piggy bank "' . e($piggyBank->name) . '"';
$subTitleIcon = 'fa-pencil';

View File

@ -29,7 +29,7 @@ class PreferencesController extends BaseController
/** @var \FireflyIII\Shared\Preferences\Preferences $preferences */
$preferences = App::make('FireflyIII\Shared\Preferences\Preferences');
$accounts = $acct->getAssetAccounts();
$accounts = $acct->getAccountsByType(['Default account', 'Asset account']);
$viewRange = $preferences->get('viewRange', '1M');
$viewRangeValue = $viewRange->data;
$frontPage = $preferences->get('frontPageAccounts', []);

View File

@ -34,7 +34,7 @@ class RepeatedExpenseController extends BaseController
/** @var \FireflyIII\Database\Account\Account $acct */
$acct = App::make('FireflyIII\Database\Account\Account');
$periods = Config::get('firefly.piggy_bank_periods');
$accounts = FFForm::makeSelectList($acct->getAssetAccounts());
$accounts = FFForm::makeSelectList($acct->getAccountsByType(['Default account', 'Asset account']));
return View::make('repeatedExpense.create', compact('accounts', 'periods'))->with('subTitle', 'Create new repeated expense')->with(
'subTitleIcon', 'fa-plus'
@ -79,7 +79,7 @@ class RepeatedExpenseController extends BaseController
$acct = App::make('FireflyIII\Database\Account\Account');
$periods = Config::get('firefly.piggy_bank_periods');
$accounts = FFForm::makeSelectList($acct->getAssetAccounts());
$accounts = FFForm::makeSelectList($acct->getAccountsByType(['Default account', 'Asset account']));
$subTitle = 'Edit repeated expense "' . e($repeatedExpense->name) . '"';
$subTitleIcon = 'fa-pencil';

View File

@ -6,12 +6,11 @@ use Carbon\Carbon;
use FireflyIII\Database\CommonDatabaseCallsInterface;
use FireflyIII\Database\CUDInterface;
use FireflyIII\Database\SwitchUser;
use FireflyIII\Exception\NotImplementedException;
use FireflyIII\Exception\DeprecatedException;
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
use Illuminate\Database\Eloquent\Model as Eloquent;
use Illuminate\Database\Query\Builder as QueryBuilder;
use Illuminate\Support\Collection;
use Illuminate\Support\MessageBag;
/**
* Class Account
@ -41,47 +40,6 @@ class Account implements CUDInterface, CommonDatabaseCallsInterface, AccountInte
return $this->getUser()->accounts()->accountTypeIn($types)->count();
}
/**
* @return int
*/
public function countAssetAccounts()
{
return $this->countAccountsByType(['Default account', 'Asset account']);
}
/**
* @return int
*/
public function countExpenseAccounts()
{
return $this->countAccountsByType(['Expense account', 'Beneficiary account']);
}
/**
* Counts the number of total revenue accounts. Useful for DataTables.
*
* @return int
*/
public function countRevenueAccounts()
{
return $this->countAccountsByType(['Revenue account']);
}
/**
* @param \Account $account
*
* @return \Account|null
*/
public function findInitialBalanceAccount(\Account $account)
{
/** @var \FireflyIII\Database\AccountType\AccountType $acctType */
$acctType = \App::make('FireflyIII\Database\AccountType\AccountType');
$accountType = $acctType->findByWhat('initial');
return $this->getUser()->accounts()->where('account_type_id', $accountType->id)->where('name', 'LIKE', $account->name . '%')->first();
}
/**
* @param array $types
*
@ -92,14 +50,11 @@ class Account implements CUDInterface, CommonDatabaseCallsInterface, AccountInte
/*
* Basic query:
*/
$query = $this->getUser()->accounts()->accountTypeIn($types)->withMeta()->orderBy('name', 'ASC');;
$set = $query->get(['accounts.*']);
$query = $this->getUser()->accounts()->accountTypeIn($types)->orderBy('name', 'ASC');;
$set = $query->get(['accounts.*','account_role.data as account_role']);
$set->each(
function (\Account $account) {
/*
* Get last activity date.
*/
$account->lastActivityDate = $this->getLastActivity($account);
}
);
@ -107,57 +62,6 @@ class Account implements CUDInterface, CommonDatabaseCallsInterface, AccountInte
return $set;
}
/**
* Get all asset accounts. Optional JSON based parameters.
*
* @param array $metaFilter
*
* @return Collection
*/
public function getAssetAccounts($metaFilter = [])
{
$list = $this->getAccountsByType(['Default account', 'Asset account']);
$list->each(
function (\Account $account) {
// get accountRole:
/** @var \AccountMeta $entry */
$accountRole = $account->accountmeta()->whereName('accountRole')->first();
if (!$accountRole) {
$accountRole = new \AccountMeta;
$accountRole->account_id = $account->id;
$accountRole->name = 'accountRole';
$accountRole->data = 'defaultExpense';
$accountRole->save();
}
$account->accountRole = $accountRole->data;
}
);
return $list;
}
/**
* @return Collection
*/
public function getExpenseAccounts()
{
return $this->getAccountsByType(['Expense account', 'Beneficiary account']);
}
/**
* Get all revenue accounts.
*
* @return Collection
*/
public function getRevenueAccounts()
{
return $this->getAccountsByType(['Revenue account']);
}
/**
* @param \Account $account
*
@ -184,8 +88,8 @@ class Account implements CUDInterface, CommonDatabaseCallsInterface, AccountInte
/*
* Create a journal from opposing to account or vice versa.
*/
$balance = floatval($data['openingbalance']);
$date = new Carbon($data['openingbalancedate']);
$balance = floatval($data['openingBalance']);
$date = new Carbon($data['openingBalanceDate']);
/** @var \FireflyIII\Database\TransactionJournal\TransactionJournal $tj */
$tj = \App::make('FireflyIII\Database\TransactionJournal\TransactionJournal');
if ($balance < 0) {
@ -339,7 +243,7 @@ class Account implements CUDInterface, CommonDatabaseCallsInterface, AccountInte
\App::abort(500);
}
$account->save();
if (isset($data['openingbalance']) && floatval($data['openingbalance']) != 0) {
if (isset($data['openingBalance']) && floatval($data['openingBalance']) != 0) {
$this->storeInitialBalance($account, $data);
}
@ -405,78 +309,18 @@ class Account implements CUDInterface, CommonDatabaseCallsInterface, AccountInte
}
/**
* Validates a model. Returns an array containing MessageBags
* Validates an array. Returns an array containing MessageBags
* errors/warnings/successes.
*
* @param array $model
*
* @throws DeprecatedException
*
* @return array
*/
public function validate(array $model)
{
$warnings = new MessageBag;
$successes = new MessageBag;
$errors = new MessageBag;
/*
* Name validation:
*/
if (!isset($model['name'])) {
$errors->add('name', 'Name is mandatory');
}
if (isset($model['name']) && strlen($model['name']) == 0) {
$errors->add('name', 'Name is too short');
}
if (isset($model['name']) && strlen($model['name']) > 100) {
$errors->add('name', 'Name is too long');
}
$validator = \Validator::make([$model], \Account::$rules);
if ($validator->invalid()) {
$errors->merge($errors);
}
if (isset($model['account_role']) && !in_array($model['account_role'], array_keys(\Config::get('firefly.accountRoles')))) {
$errors->add('account_role', 'Invalid account role');
} else {
$successes->add('account_role', 'OK');
}
/*
* type validation.
*/
if (!isset($model['what'])) {
$errors->add('name', 'Internal error: need to know type of account!');
}
/*
* Opening balance and opening balance date.
*/
if (isset($model['what']) && $model['what'] == 'asset') {
if (isset($model['openingbalance']) && strlen($model['openingbalance']) > 0 && !is_numeric($model['openingbalance'])) {
$errors->add('openingbalance', 'This is not a number.');
}
if (isset($model['openingbalancedate']) && strlen($model['openingbalancedate']) > 0) {
try {
new Carbon($model['openingbalancedate']);
} catch (\Exception $e) {
$errors->add('openingbalancedate', 'This date is invalid.');
}
}
}
if (!$errors->has('name')) {
$successes->add('name', 'OK');
}
if (!$errors->has('openingbalance')) {
$successes->add('openingbalance', 'OK');
}
if (!$errors->has('openingbalancedate')) {
$successes->add('openingbalancedate', 'OK');
}
return ['errors' => $errors, 'warnings' => $warnings, 'successes' => $successes];
throw new DeprecatedException;
}
/**
@ -492,25 +336,30 @@ class Account implements CUDInterface, CommonDatabaseCallsInterface, AccountInte
}
/**
* Finds an account type using one of the "$what"'s: expense, asset, revenue, opening, etc.
*
* @param $what
*
* @throws NotImplementedException
* @throws DeprecatedException
*
* @return \AccountType|null
*/
public function findByWhat($what)
{
throw new NotImplementedException;
throw new DeprecatedException;
}
/**
* Returns all objects.
*
* @throws DeprecatedException
*
*
* @return Collection
* @throws NotImplementedException
*/
public function get()
{
throw new NotImplementedException;
throw new DeprecatedException;
}
/**
@ -571,32 +420,6 @@ class Account implements CUDInterface, CommonDatabaseCallsInterface, AccountInte
}
/**
* @param \Account $account
* @param int $limit
*
* @return \Illuminate\Pagination\Paginator
*/
public function getAllTransactionJournals(\Account $account, $limit = 50)
{
$offset = intval(\Input::get('page')) > 0 ? intval(\Input::get('page')) * $limit : 0;
$set = $this->getUser()->transactionJournals()->withRelevantData()->leftJoin(
'transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id'
)->where('transactions.account_id', $account->id)->take($limit)->offset($offset)->orderBy('date', 'DESC')->get(
['transaction_journals.*']
);
$count = $this->getUser()->transactionJournals()->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
->orderBy('date', 'DESC')->where('transactions.account_id', $account->id)->count();
$items = [];
foreach ($set as $entry) {
$items[] = $entry;
}
return \Paginator::make($items, $count, $limit);
}
/**
* @param \Account $account
*
@ -655,25 +478,4 @@ class Account implements CUDInterface, CommonDatabaseCallsInterface, AccountInte
}
/**
* @param \Account $account
* @param Carbon $start
* @param Carbon $end
*
* @return \Illuminate\Pagination\Paginator
*/
public function getTransactionJournalsInRange(\Account $account, Carbon $start, Carbon $end)
{
$set = $this->getUser()->transactionJournals()->transactionTypes(['Withdrawal'])->withRelevantData()->leftJoin(
'transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id'
)->where('transactions.account_id', $account->id)->before($end)->after($start)->orderBy('date', 'DESC')->get(
['transaction_journals.*']
);
return $set;
}
}

View File

@ -21,34 +21,6 @@ interface AccountInterface
*/
public function countAccountsByType(array $types);
/**
* Counts the number of total asset accounts. Useful for DataTables.
*
* @return int
*/
public function countAssetAccounts();
/**
* Counts the number of total expense accounts. Useful for DataTables.
*
* @return int
*/
public function countExpenseAccounts();
/**
* Counts the number of total revenue accounts. Useful for DataTables.
*
* @return int
*/
public function countRevenueAccounts();
/**
* @param \Account $account
*
* @return \Account|null
*/
public function findInitialBalanceAccount(\Account $account);
/**
* Get all accounts of the selected types. Is also capable of handling DataTables' parameters.
*
@ -58,24 +30,6 @@ interface AccountInterface
*/
public function getAccountsByType(array $types);
/**
* Get all asset accounts. The parameters are optional and are provided by the DataTables plugin.
*
* @return Collection
*/
public function getAssetAccounts();
/**
* @return Collection
*/
public function getExpenseAccounts();
/**
* Get all revenue accounts.
*
* @return Collection
*/
public function getRevenueAccounts();
/**
* @param \Account $account

View File

@ -0,0 +1,66 @@
<?php
namespace FireflyIII\Database\AccountMeta;
use FireflyIII\Database\CUDInterface;
use FireflyIII\Exception\NotImplementedException;
use Illuminate\Database\Eloquent\Model as Eloquent;
/**
* Class AccountMeta
*
* @package FireflyIII\Database\AccountMeta
*/
class AccountMeta implements CUDInterface
{
/**
* @param Eloquent $model
*
* @return bool
*/
public function destroy(Eloquent $model)
{
// TODO: Implement destroy() method.
throw new NotImplementedException;
}
/**
* @param array $data
*
* @return Eloquent
*/
public function store(array $data)
{
// TODO: Implement store() method.
throw new NotImplementedException;
}
/**
* @param Eloquent $model
* @param array $data
*
* @return bool
*/
public function update(Eloquent $model, array $data)
{
// TODO: Implement update() method.
throw new NotImplementedException;
}
/**
* Validates an array. Returns an array containing MessageBags
* errors/warnings/successes.
*
* @param array $model
*
* @return array
*/
public function validate(array $model)
{
$model = new \AccountMeta($model);
$model->isValid();
return ['errors' => $model->getErrors()];
}
}

View File

@ -0,0 +1,52 @@
<?php
namespace FireflyIII\Database\Scope;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\ScopeInterface;
use Illuminate\Database\Query\JoinClause;
/**
* Class AccountScope
*
* @package FireflyIII\Database\Scope
*/
class AccountScope implements ScopeInterface
{
static public $fields = ['accountRole' => 'account_role'];
/**
* Apply the scope to a given Eloquent query builder.
*
* @param \Illuminate\Database\Eloquent\Builder $builder
*
* @return void
*/
public function apply(Builder $builder)
{
foreach (self::$fields as $name => $field) {
$builder->leftJoin(
'account_meta AS ' . $field, function (JoinClause $join) use ($field, $name) {
$join->on($field . '.account_id', '=', 'accounts.id')->where($field . '.name', '=', $name);
}
);
}
//$builder->whereNull($model->getQualifiedDeletedAtColumn());
}
/**
* Remove the scope from the given Eloquent query builder.
*
* @param \Illuminate\Database\Eloquent\Builder $builder
*
* @return void
*/
public function remove(Builder $builder)
{
foreach ($builder->joins as $join) {
var_dump($join);
exit;
}
}
}

View File

@ -0,0 +1,22 @@
<?php
namespace FireflyIII\Database\Scope;
/**
* Class AccountScopeTrait
*
* @package FireflyIII\Database\Scope
*/
trait AccountScopeTrait
{
/**
* Boot the soft deleting trait for a model.
*
* @return void
*/
public static function bootAccountScopeTrait()
{
static::addGlobalScope(new AccountScope);
}
}

View File

@ -0,0 +1,13 @@
<?php
namespace FireflyIII\Exception;
/**
* Class DeprecatedException
*
* @package FireflyIII\Exception
*/
class DeprecatedException extends \Exception
{
}

View File

@ -49,7 +49,7 @@ class Helper implements HelperInterface
/** @var \FireflyIII\Database\Account\Account $accountRepository */
$accountRepository = \App::make('FireflyIII\Database\Account\Account');
return $accountRepository->getAssetAccounts();
return $accountRepository->getAccountsByType(['Default account', 'Asset account']);
}
/**

View File

@ -387,7 +387,7 @@ class Report implements ReportInterface
$sharedAccounts[] = $account->id;
}
$accounts = $this->_accounts->getAssetAccounts()->filter(
$accounts = $this->_accounts->getAccountsByType(['Default account', 'Asset account'])->filter(
function (\Account $account) use ($sharedAccounts) {
if (!in_array($account->id, $sharedAccounts)) {
return $account;

View File

@ -0,0 +1,62 @@
<?php
namespace FireflyIII\Validation;
use Illuminate\Support\MessageBag;
/**
* Class Account
*
* @package FireflyIII\Validation
*/
class Account implements Validation
{
/**
* Every time a new [object or set of objects] is created through
* the Firefly III website, the data submitted will be validated using
* this method. This method does not check for valid models but rather if the information
* in the array can be used to create the [object or set of objects] that the user wants to.
*
* For example, to create a new asset account with an opening balance, the user does not have to
* submit an account_type or transaction_type because we know what to do.
*
* @param array $data
*
* @return MessageBag
*/
public function store(array $data = [])
{
$meta = join(',', array_keys(\Config::get('firefly.accountRoles')));
$rules = [
'what' => 'required|in:asset,expense,revenue',
'name' => 'required|between:1,100',
'openingBalance' => 'numeric',
'openingBalanceDate' => 'date',
'active' => 'required|boolean',
'account_role' => 'in:' . $meta,
];
$validator = \Validator::make($data, $rules);
$validator->valid();
return $validator->messages();
}
/**
* Every time an [object or set of objects] is updated this method will validate the new
* values in the context of the existing object (or set of objects). Since most forms
* only have one [object] to validate and at least always one main [object] to validate
* this method will accept an array of data to validate and an optional model to validate
* against.
*
* @param array $data
* @param \Eloquent $model
*
* @return MessageBag
*/
public function update(array $data = [], \Eloquent $model = null)
{
// this method simply returns the validation done by "store":
return $this->store($data);
}
}

View File

@ -0,0 +1,44 @@
<?php
namespace FireflyIII\Validation;
use Illuminate\Support\MessageBag;
use Illuminate\Database\Eloquent\Model;
/**
* Interface Validation
*
* @package FireflyIII\Validation
*/
interface Validation
{
/**
* Every time a new [object or set of objects] is created through
* the Firefly III website, the data submitted will be validated using
* this method. This method does not check for valid models but rather if the information
* in the array can be used to create the [object or set of objects] that the user wants to.
*
* For example, to create a new asset account with an opening balance, the user does not have to
* submit an account_type or transaction_type because we know what to do.
*
* @param array $data
*
* @return MessageBag
*/
public function store(array $data = []);
/**
* Every time an [object or set of objects] is updated this method will validate the new
* values in the context of the existing object (or set of objects). Since most forms
* only have one [object] to validate and at least always one main [object] to validate
* this method will accept an array of data to validate and an optional model to validate
* against.
*
* @param array $data
* @param \Eloquent $model
*
* @return MessageBag
*/
public function update(array $data = [], Model $model = null);
}

View File

@ -1,23 +1,25 @@
<?php
use FireflyIII\Database\Scope\AccountScopeTrait;
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
use Illuminate\Database\Eloquent\Model as Eloquent;
use Illuminate\Database\Eloquent\SoftDeletingTrait;
use Watson\Validating\ValidatingTrait;
use \Illuminate\Database\Eloquent\Model as Eloquent;
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
/**
* Class Account
*/
class Account extends Eloquent
{
use SoftDeletingTrait, ValidatingTrait;
use SoftDeletingTrait, ValidatingTrait, AccountScopeTrait;
protected $dates = ['deleted_at', 'created_at', 'updated_at'];
protected $fillable = ['name', 'user_id', 'account_type_id', 'active'];
/**
* Validation rules.
*
* @var array
*/
public static $rules
protected $rules
= [
'name' => ['required', 'between:1,100'],
'user_id' => 'required|exists:users,id',
@ -25,8 +27,6 @@ class Account extends Eloquent
'active' => 'required|boolean'
];
protected $dates = ['deleted_at', 'created_at', 'updated_at'];
protected $fillable = ['name', 'user_id', 'account_type_id', 'active'];
/**
* Account type.
@ -67,7 +67,7 @@ class Account extends Eloquent
/**
*
* @param EloquentBuilder $query
* @param array $types
* @param array $types
*/
public function scopeAccountTypeIn(EloquentBuilder $query, array $types)
{
@ -97,6 +97,16 @@ class Account extends Eloquent
return $this->hasMany('Transaction');
}
/**
* @param $value
*
* @return mixed
*/
public function getAccountRoleAttribute($value)
{
return json_decode($value);
}
/**
* @param $fieldName
* @param $fieldValue

View File

@ -10,16 +10,16 @@ class AccountMeta extends Eloquent
/**
* @var array
*/
public static $rules
protected $rules
= [
'account_id' => 'numeric|required|exists:accounts,id',
'account_id' => 'numeric|exists:accounts,id',
'name' => 'required|between:1,250',
'data' => 'required'
];
/**
* @var array
*/
protected $fillable = ['account_id', 'name', 'date'];
protected $fillable = ['account_id', 'name', 'data'];
protected $table = 'account_meta';
/**

View File

@ -29,8 +29,8 @@
</div>
<div class="panel-body">
@if($what == 'asset')
{{Form::ffBalance('openingbalance')}}
{{Form::ffDate('openingbalancedate', date('Y-m-d'))}}
{{Form::ffBalance('openingBalance')}}
{{Form::ffDate('openingBalanceDate', date('Y-m-d'))}}
@endif
{{Form::ffCheckbox('active','1',true)}}
{{Form::ffSelect('account_role',Config::get('firefly.accountRoles'))}}