From 73a7b21c252570edfba632219821aaea4ac8e147 Mon Sep 17 00:00:00 2001 From: cuneytsenturk Date: Thu, 23 Nov 2017 13:38:43 +0300 Subject: [PATCH] close #72 Fixed: Validation for create customer --- app/Http/Controllers/Auth/Users.php | 28 ++++++++++++++ app/Http/Controllers/Incomes/Customers.php | 38 ++++++++++++++++--- app/Http/Controllers/Settings/Modules.php | 1 - app/Http/Requests/Income/Customer.php | 2 +- resources/lang/en-GB/customer.php | 4 ++ resources/lang/en-GB/messages.php | 1 + .../views/incomes/customers/create.blade.php | 24 +++++++++++- .../views/incomes/customers/edit.blade.php | 24 +++++++++++- routes/web.php | 1 + 9 files changed, 113 insertions(+), 10 deletions(-) diff --git a/app/Http/Controllers/Auth/Users.php b/app/Http/Controllers/Auth/Users.php index 2207fdde0..b4c759aa9 100644 --- a/app/Http/Controllers/Auth/Users.php +++ b/app/Http/Controllers/Auth/Users.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use App\Http\Requests\Auth\User as Request; +use Illuminate\Http\Request as ARequest; use App\Models\Auth\User; use App\Models\Auth\Role; @@ -226,4 +227,31 @@ class Users extends Controller // Redirect to items return redirect('items/items'); } + + public function autocomplete(ARequest $request) + { + $user = false; + + $column = $request['column']; + $value = $request['value']; + + if (!empty($column) && !empty($value)) { + switch ($column) { + case 'id': + $user = User::find(); + break; + case 'email': + $user = User::where('email', $value)->first(); + break; + default: + $user = User::where($column, $value)->first(); + } + } + + return response()->json([ + 'errors' => ($user) ? false: true, + 'success' => ($user) ? true: false, + 'data' => $user + ]); + } } diff --git a/app/Http/Controllers/Incomes/Customers.php b/app/Http/Controllers/Incomes/Customers.php index 228533a94..66ab45154 100644 --- a/app/Http/Controllers/Incomes/Customers.php +++ b/app/Http/Controllers/Incomes/Customers.php @@ -44,10 +44,24 @@ class Customers extends Controller */ public function store(Request $request) { - $customer = Customer::create($request->all()); + if (empty($request->input('create_user'))) { + Customer::create($request->all()); + } else { + $user = User::where('email', $request['email'])->first(); - if (!empty($request->input('create_user'))) { - $user = User::create($request->input()); + if (!empty($user)) { + $message = trans('messages.error.customer', ['name' => $user->name]); + + flash($message)->error(); + + return redirect()->back()->withInput($request->except('create_user'))->withErrors( + ['email' => trans('customer.error.email')] + ); + + //$user = User::create($request->input()); + } + + $customer = Customer::create($request->all()); $request['user_id'] = $user->id; $request['roles'] = array('3'); @@ -93,10 +107,22 @@ class Customers extends Controller */ public function update(Customer $customer, Request $request) { - $customer->update($request->all()); + if (empty($request->input('create_user'))) { + $customer->update($request->all()); + } else { + $user = User::where('email', $request['email'])->first(); - if (!empty($request->input('create_user'))) { - $user = User::create($request->input()); + if (!empty($user)) { + $message = trans('messages.error.customer', ['name' => $user->name]); + + flash($message)->error(); + + return redirect()->back()->withInput($request->except('create_user'))->withErrors( + ['email' => trans('customer.error.email')] + ); + + //$user = User::create($request->input()); + } $request['user_id'] = $user->id; $request['roles'] = array('3'); diff --git a/app/Http/Controllers/Settings/Modules.php b/app/Http/Controllers/Settings/Modules.php index 5c9808ac9..709aa56ff 100644 --- a/app/Http/Controllers/Settings/Modules.php +++ b/app/Http/Controllers/Settings/Modules.php @@ -58,5 +58,4 @@ class Modules extends Controller return redirect('settings/apps/' . $alias); } - } diff --git a/app/Http/Requests/Income/Customer.php b/app/Http/Requests/Income/Customer.php index 015277b15..861524f9c 100644 --- a/app/Http/Requests/Income/Customer.php +++ b/app/Http/Requests/Income/Customer.php @@ -32,7 +32,7 @@ class Customer extends Request $id = null; } - if (!empty($this->request->get('create_user'))) { + if (!empty($this->request->get('create_user')) && empty($this->request->get('user_id'))) { $required = 'required|'; } diff --git a/resources/lang/en-GB/customer.php b/resources/lang/en-GB/customer.php index ac2c6b8b0..e0a68b0c5 100644 --- a/resources/lang/en-GB/customer.php +++ b/resources/lang/en-GB/customer.php @@ -2,4 +2,8 @@ return [ 'all' => 'All Customers', + + 'error' => [ + 'email' => 'The email has already been taken.' + ] ]; diff --git a/resources/lang/en-GB/messages.php b/resources/lang/en-GB/messages.php index a70ccd9d8..39ba2e00b 100644 --- a/resources/lang/en-GB/messages.php +++ b/resources/lang/en-GB/messages.php @@ -9,6 +9,7 @@ return [ ], 'error' => [ 'not_user_company' => 'Error: You are not allowed to manage this company!', + 'customer' => 'Error: You can not created customer! :name use this email address.', ], 'warning' => [ 'deleted' => 'Warning: You are not allowed to delete :name because it has :text related.', diff --git a/resources/views/incomes/customers/create.blade.php b/resources/views/incomes/customers/create.blade.php index 2feaa4c32..3bc9c5aa8 100644 --- a/resources/views/incomes/customers/create.blade.php +++ b/resources/views/incomes/customers/create.blade.php @@ -77,10 +77,32 @@ }); $('#create_user').on('ifClicked', function (event) { + $('input[name="user_id"]').remove(); + if ($(this).prop('checked')) { $('.col-md-6.password').addClass('hidden'); } else { - $('.col-md-6.password').removeClass('hidden'); + $.ajax({ + url: '{{ url("auth/users/autocomplete") }}', + type: 'GET', + dataType: 'JSON', + data: {column: 'email', value: $('input[name="email"]').val()}, + beforeSend: function() { + $('.box-footer .btn').attr('disabled', true); + }, + complete: function() { + $('.box-footer .btn').attr('disabled', false); + }, + success: function(json) { + if (json['errors']) { + $('.col-md-6.password').removeClass('hidden'); + } + + if (json['success']) { + $('input[name="password_confirmation"]').after(''); + } + } + }); } }); }); diff --git a/resources/views/incomes/customers/edit.blade.php b/resources/views/incomes/customers/edit.blade.php index 0d99a7e0f..7f9ac8934 100644 --- a/resources/views/incomes/customers/edit.blade.php +++ b/resources/views/incomes/customers/edit.blade.php @@ -82,10 +82,32 @@ }); $('#create_user').on('ifClicked', function (event) { + $('input[name="user_id"]').remove(); + if ($(this).prop('checked')) { $('.col-md-6.password').addClass('hidden'); } else { - $('.col-md-6.password').removeClass('hidden'); + $.ajax({ + url: '{{ url("auth/users/autocomplete") }}', + type: 'GET', + dataType: 'JSON', + data: {column: 'email', value: $('input[name="email"]').val()}, + beforeSend: function() { + $('.box-footer .btn').attr('disabled', true); + }, + complete: function() { + $('.box-footer .btn').attr('disabled', false); + }, + success: function(json) { + if (json['errors']) { + $('.col-md-6.password').removeClass('hidden'); + } + + if (json['success']) { + $('input[name="password_confirmation"]').after(''); + } + } + }); } }); }); diff --git a/routes/web.php b/routes/web.php index 937301dba..67a0fed8a 100644 --- a/routes/web.php +++ b/routes/web.php @@ -29,6 +29,7 @@ Route::group(['middleware' => 'language'], function () { Route::group(['prefix' => 'auth'], function () { Route::get('logout', 'Auth\Login@destroy')->name('logout'); + Route::get('users/autocomplete', 'Auth\Users@autocomplete'); Route::get('users/{user}/read-bills', 'Auth\Users@readUpcomingBills'); Route::get('users/{user}/read-invoices', 'Auth\Users@readOverdueInvoices'); Route::get('users/{user}/read-items', 'Auth\Users@readItemsOutOfStock');