diff --git a/packages/Webkul/Admin/src/Resources/views/layouts/master.blade.php b/packages/Webkul/Admin/src/Resources/views/layouts/master.blade.php index 75dbff667..efaca0d02 100644 --- a/packages/Webkul/Admin/src/Resources/views/layouts/master.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/layouts/master.blade.php @@ -11,7 +11,8 @@ - + @yield('head') @yield('css') @@ -54,22 +55,16 @@ + - + diff --git a/packages/Webkul/Admin/src/Resources/views/settings/sliders/create.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/sliders/create.blade.php index 3de76411b..d00de95e9 100644 --- a/packages/Webkul/Admin/src/Resources/views/settings/sliders/create.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/settings/sliders/create.blade.php @@ -22,51 +22,46 @@
@csrf() - -
+
+ + + @{{ errors.first('title') }} +
-
- - - @{{ errors.first('title') }} -
+ getAllChannels() ?> +
+ + + @{{ errors.first('channel_id') }} +
- getAllChannels() ?> -
- - - @{{ errors.first('channel_id') }} -
+
+ -
- + - + - + @{{ errors.first('image') }} + {{-- The image field validation is not working, resolve it. --}} - @{{ errors.first('image') }} - {{-- The image field validation is not working, resolve it. --}} + +
- -
+
+ -
- + + {{-- --}} - - - @{{ errors.first('content') }} -
- -
- + @{{ errors.first('content') }} +
diff --git a/packages/Webkul/Customer/src/Database/migrations/2018_10_27_110337_modify_customer_address_table.php b/packages/Webkul/Customer/src/Database/migrations/2018_10_27_110337_modify_customer_address_table.php new file mode 100644 index 000000000..01b8b20aa --- /dev/null +++ b/packages/Webkul/Customer/src/Database/migrations/2018_10_27_110337_modify_customer_address_table.php @@ -0,0 +1,37 @@ +boolean('default_address')->default(0)->after('phone'); + $table->string('name')->nullable()->after('phone'); + }); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + if (Schema::hasTable('customer_addresses')) { + Schema::table('customer_addresses', function (Blueprint $table) { + $table->dropColumn(['default', 'name']); + }); + } + } +} diff --git a/packages/Webkul/Customer/src/Http/Controllers/AddressController.php b/packages/Webkul/Customer/src/Http/Controllers/AddressController.php index 1f5b98c5b..bab099177 100644 --- a/packages/Webkul/Customer/src/Http/Controllers/AddressController.php +++ b/packages/Webkul/Customer/src/Http/Controllers/AddressController.php @@ -9,10 +9,8 @@ use Webkul\Customer\Repositories\CustomerAddressRepository; use Auth; /** - * Customer controlller for the customer - * basically for the tasks of customers - * which will be done after customer - * authenticastion. + * Customer controlller for the customer basically for the tasks of customers which will + * be done after customer authenticastion. * * @author Prashant Singh * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) @@ -34,35 +32,18 @@ class AddressController extends Controller $this->_config = request('_config'); - $this->customer = $customer; + $this->customer = auth()->guard('customer')->user(); $this->address = $address; } - /** - * Getting logged in customer address helper - * - * @return array - */ - private function getAddress($id) { - - $address = collect($this->address->findOneWhere(['customer_id'=>$id])); - - return $address; - - } - /** * Address Route index page * * @return view */ public function index() { - $id = auth()->guard('customer')->user()->id; - - $address = $this->getAddress($id); - - return view($this->_config['view'])->with('address', $address); + return view($this->_config['view'])->with('addresses', $this->customer->addresses); } /** @@ -80,90 +61,64 @@ class AddressController extends Controller * @return view */ public function create() { - - $id = auth()->guard('customer')->user()->id; - $data = collect(request()->input())->except('_token')->toArray(); $this->validate(request(), [ - 'address1' => 'string|required', 'address2' => 'string|required', 'country' => 'string|required', 'state' => 'string|required', 'city' => 'string|required', 'postcode' => 'required', - ]); - $cust_id['customer_id'] = $id; - + $cust_id['customer_id'] = $this->customer->id; $data = array_merge($cust_id, $data); - $address = $this->getAddress($id); - - - if(count($address) == 0 || $address->isEmpty()) { - if($this->address->create($data)) { - session()->flash('success', 'Address have been successfully added.'); - - return redirect()->route($this->_config['redirect']); - - } else { - session()->flash('error', 'Address cannot be added.'); - - return redirect()->back(); - } - } else { - session()->flash('error', 'Cannot create a new address due to previously existing address'); - - return redirect()-route('customer.address.edit'); + if($this->customer->addresses->count() == 0) { + $data['default_address'] = 1; } + if($this->address->create($data)) { + session()->flash('success', 'Address have been successfully added.'); + return redirect()->route($this->_config['redirect']); + } else { + session()->flash('error', 'Address cannot be added.'); + return redirect()->back(); + } } /** - * For editing the existing address of the customer + * For editing the existing addresses of current logged in customer * * @return view */ - public function showEdit() { - - $id = auth()->guard('customer')->user()->id; - - $address = $this->getAddress($id); - - return view($this->_config['view'])->with('address', $address); + public function showEdit($id) { + $address = $this->customer->addresses->where('id', $id); + return view($this->_config['view'])->with('address', $address->first()); } /** - * Edits the premade resource of customer called + * Edit's the premade resource of customer called * Address. * * @return redirect */ - public function edit() { - - $id = auth()->guard('customer')->user()->id; - + public function edit($id) { $this->validate(request(), [ - 'address1' => 'string|required', 'address2' => 'string|required', 'country' => 'string|required', 'state' => 'string|required', 'city' => 'string|required', 'postcode' => 'required', - ]); $data = collect(request()->input())->except('_token')->toArray(); - $address = $this->getAddress($id); - if($this->address->update($data, $id)) { Session()->flash('success','Address Updated Successfully.'); @@ -174,4 +129,38 @@ class AddressController extends Controller return redirect()->route('customer.address.edit'); } } + + /** + * To change the default address or make the default address, by default when first address is created will be the default address + * + * @return Mixed | @return response + */ + public function makeDefault($id) { + $default = $this->customer->defaultAddress; + + $result = $this->address->find($default->id)->update(['default_address' => 0]); + + if($this->address->find($id)->update(['default_address' => 1])) { + + } else { + session()->flash('success', 'Default Cannot Be Address Changed'); + } + + return redirect()->back(); + } + + /** + * Delete address of the current customer + * + * @param integer $id + * + * @return response mixed + */ + public function destroy($id) { + $this->address->delete($id); + + session()->flash('success', trans('shop::app.address.delete.success')); + + return redirect()->back(); + } } diff --git a/packages/Webkul/Customer/src/Http/Controllers/ForgotPasswordController.php b/packages/Webkul/Customer/src/Http/Controllers/ForgotPasswordController.php index 2323cae0e..b7e32fc5f 100644 --- a/packages/Webkul/Customer/src/Http/Controllers/ForgotPasswordController.php +++ b/packages/Webkul/Customer/src/Http/Controllers/ForgotPasswordController.php @@ -7,6 +7,12 @@ use Illuminate\Http\Response; use Illuminate\Foundation\Auth\SendsPasswordResetEmails; use Illuminate\Support\Facades\Password; +/** + * Forgot Password controlller for the customer. + * + * @author Prashant Singh + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ class ForgotPasswordController extends Controller { diff --git a/packages/Webkul/Customer/src/Http/Controllers/ResetPasswordController.php b/packages/Webkul/Customer/src/Http/Controllers/ResetPasswordController.php index 78629ee8b..744219235 100644 --- a/packages/Webkul/Customer/src/Http/Controllers/ResetPasswordController.php +++ b/packages/Webkul/Customer/src/Http/Controllers/ResetPasswordController.php @@ -10,6 +10,12 @@ use Illuminate\Support\Facades\Hash; use Illuminate\Auth\Events\PasswordReset; use Illuminate\Support\Str; +/** + * Reset Password controlller for the customer. + * + * @author Prashant Singh + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ class ResetPasswordController extends Controller { diff --git a/packages/Webkul/Customer/src/Http/Controllers/SessionController.php b/packages/Webkul/Customer/src/Http/Controllers/SessionController.php index 564777325..aed7fec5f 100644 --- a/packages/Webkul/Customer/src/Http/Controllers/SessionController.php +++ b/packages/Webkul/Customer/src/Http/Controllers/SessionController.php @@ -8,6 +8,7 @@ use Illuminate\Support\Facades\Event; use Webkul\Customer\Models\Customer; use Webkul\Customer\Http\Listeners\CustomerEventsHandler; use Cart; + /** * Session controller for the user customer * @@ -27,7 +28,6 @@ class SessionController extends Controller { $this->middleware('customer')->except(['show','create']); - $this->_config = request('_config'); $subscriber = new CustomerEventsHandler; @@ -53,13 +53,11 @@ class SessionController extends Controller ]); if (!auth()->guard('customer')->attempt(request(['email', 'password']))) { - session()->flash('error', 'Please check your credentials and try again.'); return back(); } //Event passed to prepare cart after login - Event::fire('customer.after.login', $request->input('email')); return redirect()->intended(route($this->_config['redirect'])); diff --git a/packages/Webkul/Customer/src/Http/Controllers/WishlistController.php b/packages/Webkul/Customer/src/Http/Controllers/WishlistController.php index 646230d1c..7f6ce8bd2 100644 --- a/packages/Webkul/Customer/src/Http/Controllers/WishlistController.php +++ b/packages/Webkul/Customer/src/Http/Controllers/WishlistController.php @@ -11,10 +11,8 @@ use Cart; use Auth; /** - * Customer controlller for the customer - * basically for the tasks of customers - * which will be done after customer - * authenticastion. + * Customer controlller for the customer basically for the tasks of customers which will be done + * after customer authenticastion. * * @author Prashant Singh * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) diff --git a/packages/Webkul/Customer/src/Models/Customer.php b/packages/Webkul/Customer/src/Models/Customer.php index 78381d7ba..5ac75a876 100644 --- a/packages/Webkul/Customer/src/Models/Customer.php +++ b/packages/Webkul/Customer/src/Models/Customer.php @@ -50,8 +50,16 @@ class Customer extends Authenticatable /** * Get the customer address that owns the customer. */ - public function address() + public function addresses() { - return $this->hasOne(CustomerAddress::class); + return $this->hasMany(CustomerAddress::class, 'customer_id'); + } + + /** + * Get default customer address that owns the customer. + */ + public function defaultAddress() + { + return $this->hasOne(CustomerAddress::class, 'customer_id')->where('default_address', 1); } } diff --git a/packages/Webkul/Customer/src/Models/CustomerAddress.php b/packages/Webkul/Customer/src/Models/CustomerAddress.php index 927742082..41aeb65eb 100644 --- a/packages/Webkul/Customer/src/Models/CustomerAddress.php +++ b/packages/Webkul/Customer/src/Models/CustomerAddress.php @@ -7,5 +7,5 @@ class CustomerAddress extends Model { protected $table = 'customer_addresses'; - protected $fillable = ['customer_id' ,'address1', 'address2', 'country', 'state', 'city', 'postcode']; + protected $fillable = ['customer_id' ,'address1', 'address2', 'country', 'state', 'city', 'postcode', 'default_address']; } diff --git a/packages/Webkul/Customer/src/Repositories/CustomerAddressRepository.php b/packages/Webkul/Customer/src/Repositories/CustomerAddressRepository.php index b172328e7..bca34d6b3 100644 --- a/packages/Webkul/Customer/src/Repositories/CustomerAddressRepository.php +++ b/packages/Webkul/Customer/src/Repositories/CustomerAddressRepository.php @@ -23,32 +23,4 @@ class CustomerAddressRepository extends Repository { return 'Webkul\Customer\Models\CustomerAddress'; } - - /** - * @param array $data - * @return mixed - */ - - public function create(array $data) - { - $address = $this->model->create($data); - - return $address; - } - - /** - * @param array $data - * @param $id - * @param string $attribute - * @return mixed - */ - - public function update(array $data, $id, $attribute = "id") - { - $address = $this->findOneByField('customer_id', $id); - - $address->update($data); - - return $address; - } } \ No newline at end of file diff --git a/packages/Webkul/Shop/src/Http/routes.php b/packages/Webkul/Shop/src/Http/routes.php index 7ddfe1b7c..a109fbf9e 100644 --- a/packages/Webkul/Shop/src/Http/routes.php +++ b/packages/Webkul/Shop/src/Http/routes.php @@ -122,12 +122,10 @@ Route::group(['middleware' => ['web', 'theme', 'locale', 'currency']], function //customer account Route::prefix('account')->group(function () { - Route::get('index', 'Webkul\Customer\Http\Controllers\AccountController@index')->defaults('_config', [ 'view' => 'shop::customers.account.index' ])->name('customer.account.index'); - /* Profile Routes Starts Here */ Route::get('profile', 'Webkul\Customer\Http\Controllers\CustomerController@index')->defaults('_config', [ 'view' => 'shop::customers.account.profile.index' @@ -157,13 +155,17 @@ Route::group(['middleware' => ['web', 'theme', 'locale', 'currency']], function 'redirect' => 'customer.address.index' ])->name('customer.address.create'); - Route::get('address/edit', 'Webkul\Customer\Http\Controllers\AddressController@showEdit')->defaults('_config', [ + Route::get('address/edit/{id}', 'Webkul\Customer\Http\Controllers\AddressController@showEdit')->defaults('_config', [ 'view' => 'shop::customers.account.address.edit' ])->name('customer.address.edit'); - Route::post('address/edit', 'Webkul\Customer\Http\Controllers\AddressController@edit')->defaults('_config', [ + Route::post('address/edit/{id}', 'Webkul\Customer\Http\Controllers\AddressController@edit')->defaults('_config', [ 'redirect' => 'customer.address.index' ])->name('customer.address.edit'); + + Route::get('address/default/{id}', 'Webkul\Customer\Http\Controllers\AddressController@makeDefault')->name('make.default.address'); + + Route::get('address/delete/{id}', 'Webkul\Customer\Http\Controllers\AddressController@destroy')->name('address.delete'); /* Routes for Addresses ends here */ /* Wishlist route */ diff --git a/packages/Webkul/Shop/src/Resources/assets/sass/app.scss b/packages/Webkul/Shop/src/Resources/assets/sass/app.scss index 914733f6e..291371b9b 100644 --- a/packages/Webkul/Shop/src/Resources/assets/sass/app.scss +++ b/packages/Webkul/Shop/src/Resources/assets/sass/app.scss @@ -140,7 +140,64 @@ body { margin-top: 90px; } + //components +.bold { + font-weight: bold; + color: #3A3A3A; +} + +/* The container */ +.radio-container { + display: block; + position: relative; + padding-left: 35px; + margin-bottom: 12px; + cursor: pointer; + font-size: 16px; + user-select: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + + input { + position: absolute; + opacity: 0; + cursor: pointer; + } + + /* Create a custom radio button */ + .checkmark { + position: absolute; + top: 0; + left: 0; + height: 16px; + width: 16px; + background-color: white; + border: 2px solid #FF6472; + border-radius: 50%; + } + /* Create the indicator (the dot/circle - hidden when not checked) */ + .checkmark:after { + content: ""; + position: absolute; + display: none; + } + + .checkmark:after { + top: 2px; + left: 2px; + width: 8px; + height: 8px; + border-radius: 50%; + background: #FF6472; + } +} + +/* Show the indicator (dot/circle) when checked */ +.radio-container input:checked ~ .checkmark:after { + display: block; +} //wishlist icon hover properties .add-to-wishlist { @@ -2735,7 +2792,6 @@ section.review { margin-top: 2%; table tbody tr { - display: grid; margin-bottom: 20px; } } @@ -2754,7 +2810,6 @@ section.review { //Account content inside a table .account-table-content { color: $font-color; - margin-top: 1.4%; table { tbody { @@ -2770,6 +2825,64 @@ section.review { } } +//address holder and address card +.address-holder { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + flex-wrap: wrap; + width: 100%; +} + +.address-card { + width: 260px; + border: 1px solid #E8E8E8; + display: flex; + position: relative; + flex-direction: row; + justify-content: flex-start; + align-items: flex-start; + padding: 25px 1px 22px 15px; + margin-right: 15px; + margin-bottom: 15px; + + .control-group { + width: 15px; + height: 15px; + margin-top: 10px; + } + + .details { + font-weight: lighter; + margin-left: 15px; + + span { + display: block; + margin: 8px; + } + + .control-links { + width: 90%; + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + + .btn { + height: 30px; + } + } + + .default-address { + position: absolute; + top: -3px; + right: -3px; + } + } +} + .edit-form { display: flex; border: 1px solid $border-color; diff --git a/packages/Webkul/Shop/src/Resources/lang/en/app.php b/packages/Webkul/Shop/src/Resources/lang/en/app.php index 9ed2eac23..2e7043236 100644 --- a/packages/Webkul/Shop/src/Resources/lang/en/app.php +++ b/packages/Webkul/Shop/src/Resources/lang/en/app.php @@ -122,6 +122,9 @@ return [ 'edit' => 'Edit', 'empty' => 'You don\'t have any saved addresses here, please create a new one by clicking the link below.', 'create' => 'Create Address', + 'delete' => 'Delete', + 'make-default' => 'Make Default', + 'default' => 'Default' ], 'create' => [ @@ -140,6 +143,10 @@ return [ 'page-title' => 'Customer - Edit Address', 'title' => 'Edit Address', 'submit' => 'Edit Address' + ], + 'delete' => [ + 'success' => 'Address Successfully Deleted', + 'failure' => 'Address Cannot Be Deleted' ] ], diff --git a/packages/Webkul/Shop/src/Resources/views/customers/account/address/address.blade.php b/packages/Webkul/Shop/src/Resources/views/customers/account/address/address.blade.php index 5a2a87908..d153158cb 100644 --- a/packages/Webkul/Shop/src/Resources/views/customers/account/address/address.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/customers/account/address/address.blade.php @@ -16,62 +16,65 @@ - @if(!$address->isEmpty()) - + @if(!$addresses->isEmpty()) + @else - + @endif
+ + @endforeach + @endif - - - @endsection diff --git a/packages/Webkul/Shop/src/Resources/views/customers/account/address/edit.blade.php b/packages/Webkul/Shop/src/Resources/views/customers/account/address/edit.blade.php index 1a748ff90..2ddc8d20d 100644 --- a/packages/Webkul/Shop/src/Resources/views/customers/account/address/edit.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/customers/account/address/edit.blade.php @@ -14,7 +14,7 @@ -
+