diff --git a/app/Http/Requests/AccountFormRequest.php b/app/Http/Requests/AccountFormRequest.php index 2ec1793d5c..3ab4a26faf 100644 --- a/app/Http/Requests/AccountFormRequest.php +++ b/app/Http/Requests/AccountFormRequest.php @@ -31,9 +31,9 @@ class AccountFormRequest extends Request $accountRoles = join(',', array_keys(Config::get('firefly.accountRoles'))); $types = join(',', array_keys(Config::get('firefly.subTitlesByIdentifier'))); - $nameRule = 'required|between:1,100|uniqueForUser:accounts,name'; + $nameRule = 'required|between:1,100|uniqueAccountForUser'; if (Account::find(Input::get('id'))) { - $nameRule = 'required|between:1,100|belongsToUser:accounts'; + $nameRule = 'required|between:1,100|belongsToUser:accounts|uniqueForUser:'.Input::get('id'); } return [ diff --git a/app/Models/Account.php b/app/Models/Account.php index 9c91fa403d..c6c8816423 100644 --- a/app/Models/Account.php +++ b/app/Models/Account.php @@ -18,7 +18,7 @@ class Account extends Model = [ 'user_id' => 'required|exists:users,id', 'account_type_id' => 'required|exists:account_types,id', - 'name' => 'required|between:1,1024|uniqueForUser:accounts,name', + 'name' => 'required|between:1,1024|uniqueAccountForUser', 'active' => 'required|boolean' ]; diff --git a/app/Repositories/Account/AccountRepository.php b/app/Repositories/Account/AccountRepository.php index dea1ace150..6788e3d468 100644 --- a/app/Repositories/Account/AccountRepository.php +++ b/app/Repositories/Account/AccountRepository.php @@ -285,12 +285,14 @@ class AccountRepository implements AccountRepositoryInterface 'active' => $data['active'] === true ? true : false, ] ); + if (!$newAccount->isValid()) { // does the account already exist? $existingAccount = Account::where('user_id', $data['user'])->where('account_type_id', $accountType->id)->where('name', $data['name'])->first(); if (!$existingAccount) { Log::error('Account create error: ' . $newAccount->getErrors()->toJson()); - var_dump($newAccount->getErrors()->toArray()); + App::abort(500); + } $newAccount = $existingAccount; } diff --git a/app/Validation/FireflyValidator.php b/app/Validation/FireflyValidator.php index e3ea988a76..b4b95b1701 100644 --- a/app/Validation/FireflyValidator.php +++ b/app/Validation/FireflyValidator.php @@ -4,8 +4,11 @@ namespace FireflyIII\Validation; use Auth; use Carbon\Carbon; +use Config; use DB; +use FireflyIII\Models\AccountType; use Illuminate\Validation\Validator; +use Input; use Navigation; /** @@ -34,6 +37,13 @@ class FireflyValidator extends Validator } + /** + * @param $attribute + * @param $value + * @param $parameters + * + * @return bool + */ public function validatePiggyBankReminder($attribute, $value, $parameters) { $array = $this->data; @@ -51,14 +61,44 @@ class FireflyValidator extends Validator return true; } - $nextReminder = Navigation::addPeriod($startDate, $array['reminder'],0); + $nextReminder = Navigation::addPeriod($startDate, $array['reminder'], 0); // reminder is beyond target? - if($nextReminder > $targetDate) { + if ($nextReminder > $targetDate) { return false; } + return true; } + /** + * @param $attribute + * @param $value + * @param $parameters + * + * @return bool + */ + public function validateUniqueAccountForUser($attribute, $value, $parameters) + { + // get account type from data, we must have this: + $type = isset($this->data['what']) ? $this->data['what'] : Input::get('what'); + $longType = Config::get('firefly.accountTypeByIdentifier.' . $type); + $dbType = AccountType::whereType($longType)->first(); + if (!$dbType) { + return false; + } + $query = DB::table('accounts')->where('name', $value)->where('account_type_id', $dbType->id)->where('user_id', Auth::user()->id); + if (isset($parameters[0])) { + $query->where('id', '!=', $parameters[0]); + } + $count = $query->count(); + if ($count == 0) { + return true; + } + + return false; + + } + /** * @param $attribute * @param $value @@ -69,7 +109,7 @@ class FireflyValidator extends Validator public function validateUniqueForUser($attribute, $value, $parameters) { $query = DB::table($parameters[0])->where($parameters[1], $value); - $query->where('user_id',Auth::user()->id); + $query->where('user_id', Auth::user()->id); if (isset($paramers[2])) { $query->where('id', '!=', $parameters[2]); }