Customer profile and customer review completed

This commit is contained in:
prashant-webkul 2018-08-24 10:48:53 +05:30
parent 1bff70bd7b
commit 371012a6be
12 changed files with 154 additions and 37 deletions

View File

@ -0,0 +1,46 @@
<?php
namespace Webkul\Customer\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Webkul\Customer\Repositories\CustomerRepository;
use Webkul\Customer\Repositories\CustomerAddressRepository;
use Auth;
/**
* Account Controlller for the customers
* basically will control the landing
* behavior for custome and group of
* customers.
*
* @author Prashant Singh <prashant.singh852@webkul.com>
* @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com)
*/
class AccountController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
protected $_config;
protected $customer;
protected $address;
public function __construct(CustomerRepository $customer, CustomerAddressRepository $address)
{
$this->middleware('auth:customer');
$this->_config = request('_config');
$this->customer = $customer;
$this->address = $address;
}
public function index() {
return view($this->_config['view']);
}
}

View File

@ -33,8 +33,11 @@ class AddressController extends Controller
{
$this->middleware('auth:customer');
$this->_config = request('_config');
$this->customer = $customer;
$this->address = $address;
}
@ -45,6 +48,7 @@ class AddressController extends Controller
* @return Array
*/
private function getCustomer($id) {
$customer = collect($this->customer->findOneWhere(['id'=>$id]));
return $customer;
@ -57,9 +61,11 @@ class AddressController extends Controller
* @return Array
*/
private function getAddress($id) {
$address = collect($this->address->findOneWhere(['id'=>$id]));
$address = collect($this->address->findOneWhere(['customer_id'=>$id]));
return $address;
}
@ -75,10 +81,7 @@ class AddressController extends Controller
$address = $this->getAddress($id);
if(count($address)==0)
return view($this->_config['view'])->with('address', 'You don\'t have any addresses saved yet, create new.');
else
return view($this->_config['view'])->with('address', $address);
return view($this->_config['view'])->with('address', $address);
}
/**
@ -101,19 +104,44 @@ class AddressController extends Controller
$id = auth()->guard('customer')->user()->id;
$data = collect(request()->input())->except('_token')->toArray();
$this->validate(request(), [
'address1' => 'string|required',
'address1' => 'string|required',
'address2' => 'string|required',
'country' => 'string|required',
'state' => 'string|required',
'city' => 'string|required',
'pincode' => 'numeric|required',
'postcode' => 'numeric|required',
]);
$data = collect(request()->input())->except('_token')->toArray();
dd($data);
$cust_id['customer_id'] = $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');
}
}
@ -124,9 +152,43 @@ class AddressController extends Controller
*
* @return View
*/
public function edit() {
public function showEdit() {
return view($this->_config['view']);
$id = auth()->guard('customer')->user()->id;
$address = $this->getAddress($id);
return view($this->_config['view'])->with('address', $address);
}
public function edit() {
$id = auth()->guard('customer')->user()->id;
$this->validate(request(), [
'address1' => 'string|required',
'address2' => 'string|required',
'country' => 'string|required',
'state' => 'string|required',
'city' => 'string|required',
'postcode' => 'numeric|required',
]);
$data = collect(request()->input())->except('_token')->toArray();
$address = $this->getAddress($id);
if($this->address->update($data, $id)) {
Session()->flash('success','Address Updated Successfully.');
return redirect()->route('customer.address.index');
} else {
Session()->flash('success','Address Cannot be Updated.');
return redirect()->route('customer.address.edit');
}
}
}

View File

@ -104,9 +104,11 @@ class CustomerController extends Controller
$data = collect(request()->input())->except(['_token','password','password_confirmation','oldpassword'])->toArray();
if($this->customer->update($data, $id)) {
Session()->flash('success','Profile Updated Successfully');
return redirect()->back();
} else {
Session()->flash('success','Profile Updated Successfully');
return redirect()->back();
}
@ -118,9 +120,11 @@ class CustomerController extends Controller
if($this->customer->update($data, $id)) {
Session()->flash('success','Profile Updated Successfully');
return redirect()->back();
} else {
Session()->flash('success','Profile Updated Successfully');
return redirect()->back();
}
}

View File

@ -61,11 +61,13 @@ class RegistrationController extends Controller
if ($this->customer->create($registrationData)) {
session()->flash('success', 'Account created successfully.');
return redirect()->route($this->_config['redirect']);
} else {
session()->flash('error', 'Cannot Create Your Account.');
return redirect()->back();
}

View File

@ -6,4 +6,6 @@ use Illuminate\Database\Eloquent\Model;
class CustomersAddress extends Model
{
protected $table = 'customer_addresses';
protected $fillable = ['customer_id' ,'address1', 'address2', 'country', 'state', 'city', 'postcode'];
}

View File

@ -45,7 +45,7 @@ class CustomerAddressRepository extends Repository
public function update(array $data, $id, $attribute = "id")
{
$address = $this->find($id);
$address = $this->findOneByField('customer_id', $id);
$address->update($data);

View File

@ -42,7 +42,7 @@ Route::group(['middleware' => ['web']], function () {
'redirect' => 'customer.session.index'
])->name('customer.session.destroy');
Route::view('/cart', 'shop::store.product.view.cart.index')->name('customer.cart');
Route::view('/cart', 'shop::store.product.cart.cart.index')->name('customer.cart');
Route::view('/product', 'shop::store.product.details.home.index')->name('customer.product');
@ -83,11 +83,12 @@ Route::group(['middleware' => ['web']], function () {
])->name('customer.address.create');
Route::post('address/create', 'Webkul\Customer\Http\Controllers\AddressController@create')->defaults('_config', [
'view' => 'shop::customers.account.address.address'
'view' => 'shop::customers.account.address.address',
'redirect' => 'customer.address.index'
])->name('customer.address.create');
Route::get('address/edit', 'Webkul\Customer\Http\Controllers\AddressController@edit')->defaults('_config', [
'view' => 'shop::customers.account.address.address'
Route::get('address/edit', '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', [

View File

@ -1,6 +1,6 @@
<template>
<li>
<a href="">{{ this.item['translations'][0].name }}&emsp;<i class="icon dropdown-right-icon"
<a :href="this.item['translations'][0].slug">{{ this.item['translations'][0].name }}&emsp;<i class="icon dropdown-right-icon"
v-if="haveChildren && item.parent_id != null"></i></a>
<ul v-if="haveChildren">
<category-item
@ -29,6 +29,7 @@ export default {
computed: {
haveChildren() {
console.log(this.item);
return this.item.children.length ? true : false;
}
}

View File

@ -15,8 +15,7 @@
</div>
<div class="profile-content">
@if(gettype($address) == "string")
@if($address->isEmpty())
<div>You don't have any saved addresses here, please create a new one by clicking the link below.</div>
<br/>
<a href="{{ route('customer.address.create') }}">Create Address</a>
@ -39,17 +38,17 @@
</thead>
<tbody>
<tr>
<td>One</td>
<td>{{ $address['address1'] }}</td>
<td>One</td>
<td>{{ $address['address2'] }}</td>
<td>One</td>
<td>{{ $address['country'] }}</td>
<td>One</td>
<td>{{ $address['state'] }}</td>
<td>One</td>
<td>{{ $address['city'] }}</td>
<td>One</td>
<td>{{ $address['postcode'] }}</td>
</tr>
</tbody>
</table>

View File

@ -30,13 +30,13 @@
</div>
<div class="control-group" :class="[errors.has('state') ? 'has-error' : '']">
<label for="state">state</label>
<label for="state">State</label>
<input type="text" class="control" name="state" v-validate="'required'">
<span class="control-error" v-if="errors.has('state')">@{{ errors.first('state') }}</span>
</div>
<div class="control-group" :class="[errors.has('city') ? 'has-error' : '']">
<label for="city">city</label>
<label for="city">City</label>
<input type="text" class="control" name="city" v-validate="'required'">
<span class="control-error" v-if="errors.has('city')">@{{ errors.first('city') }}</span>
</div>

View File

@ -5,50 +5,49 @@
<div class="address-form-content">
<div class="title">Add Address</div>
<form method="post" action="{{ route('customer.address.create') }}">
<form method="post" action="{{ route('customer.address.edit') }}">
<div class="edit-form">
@csrf
<div class="control-group" :class="[errors.has('address1') ? 'has-error' : '']">
<label for="first_name">Address Line 1</label>
<input type="text" class="control" name="address1" v-validate="'required'">
<input type="text" class="control" name="address1" v-validate="'required'" value ="{{ $address['address1'] }}">
<span class="control-error" v-if="errors.has('address1')">@{{ errors.first('address1') }}</span>
</div>
<div class="control-group" :class="[errors.has('address2') ? 'has-error' : '']">
<label for="address2">Address Line 2</label>
<input type="text" class="control" name="address2" v-validate="'required'">
<input type="text" class="control" name="address2" v-validate="'required'" value ="{{ $address['address2'] }}">
<span class="control-error" v-if="errors.has('address2')">@{{ errors.first('address2') }}</span>
</div>
<div class="control-group" :class="[errors.has('country') ? 'has-error' : '']">
<label for="country">Country</label>
<input type="text" class="control" name="country" v-validate="'required'">
<input type="text" class="control" name="country" v-validate="'required'" value ="{{ $address['country'] }}">
<span class="control-error" v-if="errors.has('country')">@{{ errors.first('country') }}</span>
</div>
<div class="control-group" :class="[errors.has('state') ? 'has-error' : '']">
<label for="state">state</label>
<input type="text" class="control" name="state" v-validate="'required'">
<input type="text" class="control" name="state" v-validate="'required'" value ="{{ $address['state'] }}">
<span class="control-error" v-if="errors.has('state')">@{{ errors.first('state') }}</span>
</div>
<div class="control-group" :class="[errors.has('city') ? 'has-error' : '']">
<label for="city">city</label>
<input type="text" class="control" name="city" v-validate="'required|digits:10'">
<input type="text" class="control" name="city" v-validate="'required|alpha_spaces'" value ="{{ $address['city'] }}">
<span class="control-error" v-if="errors.has('city')">@{{ errors.first('city') }}</span>
</div>
<div class="control-group" :class="[errors.has('postcode') ? 'has-error' : '']">
<label for="postcode">Postcode</label>
<input type="text" class="control" name="postcode" v-validate="'required|digits:10'">
<input type="text" class="control" name="postcode" v-validate="'required|digits:10'" value ="{{ $address['postcode'] }}">
<span class="control-error" v-if="errors.has('postcode')">@{{ errors.first('postcode') }}</span>
</div>
<div class="button-group">
<input class="btn btn-primary btn-lg" type="submit" value="Create Address">
<input class="btn btn-primary btn-lg" type="submit" value="Edit Address">
</div>
</div>

View File

@ -29279,6 +29279,7 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
computed: {
haveChildren: function haveChildren() {
console.log(this.item);
return this.item.children.length ? true : false;
}
}
@ -29293,7 +29294,7 @@ var render = function() {
var _h = _vm.$createElement
var _c = _vm._self._c || _h
return _c("li", [
_c("a", { attrs: { href: "" } }, [
_c("a", { attrs: { href: this.item["translations"][0].slug } }, [
_vm._v(_vm._s(this.item["translations"][0].name) + ""),
_vm.haveChildren && _vm.item.parent_id != null
? _c("i", { staticClass: "icon dropdown-right-icon" })