From 9eec6641ddaaf738ed864fe58b10e4f204e929ce Mon Sep 17 00:00:00 2001 From: James Cole Date: Wed, 14 Jan 2015 12:24:08 +0100 Subject: [PATCH] Cleanup in preparation of an overhaul. --- app/controllers/AccountController.php | 46 ++-- app/controllers/GoogleChartController.php | 2 +- app/controllers/HomeController.php | 4 +- app/controllers/JsonController.php | 4 +- app/controllers/PiggybankController.php | 4 +- app/controllers/PreferencesController.php | 2 +- app/controllers/RepeatedExpenseController.php | 4 +- .../FireflyIII/Database/Account/Account.php | 236 ++---------------- .../Database/Account/AccountInterface.php | 46 ---- .../Database/AccountMeta/AccountMeta.php | 66 +++++ .../Database/Scope/AccountScope.php | 52 ++++ .../Database/Scope/AccountScopeTrait.php | 22 ++ .../Exception/DeprecatedException.php | 13 + .../Helper/TransactionJournal/Helper.php | 2 +- app/lib/FireflyIII/Report/Report.php | 2 +- app/lib/FireflyIII/Validation/Account.php | 62 +++++ app/lib/FireflyIII/Validation/Validation.php | 44 ++++ app/models/Account.php | 26 +- app/models/AccountMeta.php | 6 +- app/views/accounts/create.blade.php | 4 +- 20 files changed, 337 insertions(+), 310 deletions(-) create mode 100644 app/lib/FireflyIII/Database/AccountMeta/AccountMeta.php create mode 100644 app/lib/FireflyIII/Database/Scope/AccountScope.php create mode 100644 app/lib/FireflyIII/Database/Scope/AccountScopeTrait.php create mode 100644 app/lib/FireflyIII/Exception/DeprecatedException.php create mode 100644 app/lib/FireflyIII/Validation/Account.php create mode 100644 app/lib/FireflyIII/Validation/Validation.php diff --git a/app/controllers/AccountController.php b/app/controllers/AccountController.php index b09766ed02..d9b907fe7f 100644 --- a/app/controllers/AccountController.php +++ b/app/controllers/AccountController.php @@ -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(); } diff --git a/app/controllers/GoogleChartController.php b/app/controllers/GoogleChartController.php index f413c9c5a3..98696a972f 100644 --- a/app/controllers/GoogleChartController.php +++ b/app/controllers/GoogleChartController.php @@ -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) { diff --git a/app/controllers/HomeController.php b/app/controllers/HomeController.php index 33bd974e5e..485f71cb15 100644 --- a/app/controllers/HomeController.php +++ b/app/controllers/HomeController.php @@ -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); } diff --git a/app/controllers/JsonController.php b/app/controllers/JsonController.php index fedc5768d2..a0e6f08262 100644 --- a/app/controllers/JsonController.php +++ b/app/controllers/JsonController.php @@ -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; diff --git a/app/controllers/PiggybankController.php b/app/controllers/PiggybankController.php index 69222f22fa..16089486f2 100644 --- a/app/controllers/PiggybankController.php +++ b/app/controllers/PiggybankController.php @@ -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'; diff --git a/app/controllers/PreferencesController.php b/app/controllers/PreferencesController.php index b1a5ca0fc7..ab4b81f717 100644 --- a/app/controllers/PreferencesController.php +++ b/app/controllers/PreferencesController.php @@ -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', []); diff --git a/app/controllers/RepeatedExpenseController.php b/app/controllers/RepeatedExpenseController.php index 652e255578..78272a9453 100644 --- a/app/controllers/RepeatedExpenseController.php +++ b/app/controllers/RepeatedExpenseController.php @@ -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'; diff --git a/app/lib/FireflyIII/Database/Account/Account.php b/app/lib/FireflyIII/Database/Account/Account.php index 368aeecac6..69b286d744 100644 --- a/app/lib/FireflyIII/Database/Account/Account.php +++ b/app/lib/FireflyIII/Database/Account/Account.php @@ -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; - - } - - } diff --git a/app/lib/FireflyIII/Database/Account/AccountInterface.php b/app/lib/FireflyIII/Database/Account/AccountInterface.php index 336df90401..c9d21ba229 100644 --- a/app/lib/FireflyIII/Database/Account/AccountInterface.php +++ b/app/lib/FireflyIII/Database/Account/AccountInterface.php @@ -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 diff --git a/app/lib/FireflyIII/Database/AccountMeta/AccountMeta.php b/app/lib/FireflyIII/Database/AccountMeta/AccountMeta.php new file mode 100644 index 0000000000..a3d1d6a39e --- /dev/null +++ b/app/lib/FireflyIII/Database/AccountMeta/AccountMeta.php @@ -0,0 +1,66 @@ +isValid(); + + return ['errors' => $model->getErrors()]; + } +} \ No newline at end of file diff --git a/app/lib/FireflyIII/Database/Scope/AccountScope.php b/app/lib/FireflyIII/Database/Scope/AccountScope.php new file mode 100644 index 0000000000..4028fdf329 --- /dev/null +++ b/app/lib/FireflyIII/Database/Scope/AccountScope.php @@ -0,0 +1,52 @@ + '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; + } + } +} \ No newline at end of file diff --git a/app/lib/FireflyIII/Database/Scope/AccountScopeTrait.php b/app/lib/FireflyIII/Database/Scope/AccountScopeTrait.php new file mode 100644 index 0000000000..d0ec9b77c6 --- /dev/null +++ b/app/lib/FireflyIII/Database/Scope/AccountScopeTrait.php @@ -0,0 +1,22 @@ +getAssetAccounts(); + return $accountRepository->getAccountsByType(['Default account', 'Asset account']); } /** diff --git a/app/lib/FireflyIII/Report/Report.php b/app/lib/FireflyIII/Report/Report.php index 56deca08ec..f3040fe30f 100644 --- a/app/lib/FireflyIII/Report/Report.php +++ b/app/lib/FireflyIII/Report/Report.php @@ -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; diff --git a/app/lib/FireflyIII/Validation/Account.php b/app/lib/FireflyIII/Validation/Account.php new file mode 100644 index 0000000000..9eda3a0743 --- /dev/null +++ b/app/lib/FireflyIII/Validation/Account.php @@ -0,0 +1,62 @@ + '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); + } +} \ No newline at end of file diff --git a/app/lib/FireflyIII/Validation/Validation.php b/app/lib/FireflyIII/Validation/Validation.php new file mode 100644 index 0000000000..07e7784898 --- /dev/null +++ b/app/lib/FireflyIII/Validation/Validation.php @@ -0,0 +1,44 @@ + ['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 diff --git a/app/models/AccountMeta.php b/app/models/AccountMeta.php index 5a481a2c90..36a1462149 100644 --- a/app/models/AccountMeta.php +++ b/app/models/AccountMeta.php @@ -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'; /** diff --git a/app/views/accounts/create.blade.php b/app/views/accounts/create.blade.php index 8fc3f78c5a..260f1b3fb6 100644 --- a/app/views/accounts/create.blade.php +++ b/app/views/accounts/create.blade.php @@ -29,8 +29,8 @@
@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'))}}