From a7f545fcf4e24ff9203010c6fff052a542b6e6ee Mon Sep 17 00:00:00 2001 From: rahul shukla Date: Wed, 20 Feb 2019 19:11:46 +0530 Subject: [PATCH 1/3] issue #594 --- .../Shop/src/DataGrids/OrderDataGrid.php | 88 +++++++++++++++++++ .../src/Http/Controllers/OrderController.php | 3 +- .../customers/account/orders/index.blade.php | 65 +------------- 3 files changed, 92 insertions(+), 64 deletions(-) create mode 100644 packages/Webkul/Shop/src/DataGrids/OrderDataGrid.php diff --git a/packages/Webkul/Shop/src/DataGrids/OrderDataGrid.php b/packages/Webkul/Shop/src/DataGrids/OrderDataGrid.php new file mode 100644 index 000000000..827fdc1ce --- /dev/null +++ b/packages/Webkul/Shop/src/DataGrids/OrderDataGrid.php @@ -0,0 +1,88 @@ + + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ +class OrderDataGrid extends DataGrid +{ + protected $index = 'id'; //the column that needs to be treated as index column + + protected $sortOrder = 'desc'; //asc or desc + + public function prepareQueryBuilder() + { + $queryBuilder = DB::table('orders as order') + ->addSelect('order.id', 'order.status', 'order.created_at', 'order.grand_total') + ->where('customer_id', auth()->guard('customer')->user()->id); + + $this->setQueryBuilder($queryBuilder); + } + + public function addColumns() + { + $this->addColumn([ + 'index' => 'id', + 'label' => trans('shop::app.customer.account.order.index.order_id'), + 'type' => 'number', + 'searchable' => false, + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'created_at', + 'label' => trans('shop::app.customer.account.order.index.date'), + 'type' => 'datetime', + 'searchable' => true, + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'grand_total', + 'label' => trans('shop::app.customer.account.order.index.total'), + 'type' => 'price', + 'searchable' => true, + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'status', + 'label' => trans('shop::app.customer.account.order.index.status'), + 'type' => 'string', + 'searchable' => false, + 'sortable' => true, + 'closure' => true, + 'wrapper' => function ($value) { + if ($value->status == 'processing') + return 'Processing'; + else if ($value->status == 'completed') + return 'Completed'; + else if ($value->status == "canceled") + return 'Canceled'; + else if ($value->status == "closed") + return 'Closed'; + else if ($value->status == "pending") + return 'Pending'; + else if ($value->status == "pending_payment") + return 'Pending Payment'; + else if ($value->status == "fraud") + return 'Fraud'; + } + ]); + } + + public function prepareActions() { + $this->addAction([ + 'type' => 'View', + 'route' => 'customer.orders.view', + 'icon' => 'icon eye-icon' + ]); + } +} \ No newline at end of file diff --git a/packages/Webkul/Shop/src/Http/Controllers/OrderController.php b/packages/Webkul/Shop/src/Http/Controllers/OrderController.php index af883561f..32c545436 100755 --- a/packages/Webkul/Shop/src/Http/Controllers/OrderController.php +++ b/packages/Webkul/Shop/src/Http/Controllers/OrderController.php @@ -65,7 +65,8 @@ class OrderController extends Controller * * @return \Illuminate\Http\Response */ - public function index() { + public function index() + { $orders = $this->order->findWhere([ 'customer_id' => auth()->guard('customer')->user()->id ]); diff --git a/packages/Webkul/Shop/src/Resources/views/customers/account/orders/index.blade.php b/packages/Webkul/Shop/src/Resources/views/customers/account/orders/index.blade.php index 9d9c39566..1b2ea26ce 100755 --- a/packages/Webkul/Shop/src/Resources/views/customers/account/orders/index.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/customers/account/orders/index.blade.php @@ -23,71 +23,10 @@ {!! view_render_event('bagisto.shop.customers.account.orders.list.before', ['orders' => $orders]) !!}
- - - @if (!$orders->count()) -
{{ __('admin::app.common.no-result-found') }}
- @endif -
{!! view_render_event('bagisto.shop.customers.account.orders.list.after', ['orders' => $orders]) !!} From 59ecc0f0194d7d0021f3d04c4710812f7f2dc247 Mon Sep 17 00:00:00 2001 From: rahul shukla Date: Thu, 21 Feb 2019 16:36:27 +0530 Subject: [PATCH 2/3] guest review --- packages/Webkul/Admin/src/Config/system.php | 33 +++++++++++++++++++ .../src/Providers/AdminServiceProvider.php | 8 +++-- ..._21_145238_alter_product_reviews_table.php | 31 +++++++++++++++++ ...r_id_nullable_in_product_reviews_table.php | 32 ++++++++++++++++++ .../Product/src/Models/ProductReview.php | 2 +- .../Webkul/Shipping/src/Config/system.php | 2 +- .../src/Http/Controllers/ReviewController.php | 12 ++++--- packages/Webkul/Shop/src/Http/routes.php | 2 +- .../Webkul/Shop/src/Resources/lang/en/app.php | 3 +- .../views/products/reviews/create.blade.php | 10 ++++++ .../views/products/reviews/index.blade.php | 8 +++-- .../views/products/view/reviews.blade.php | 16 ++++----- 12 files changed, 138 insertions(+), 21 deletions(-) create mode 100644 packages/Webkul/Admin/src/Config/system.php create mode 100644 packages/Webkul/Product/src/Database/Migrations/2019_02_21_145238_alter_product_reviews_table.php create mode 100644 packages/Webkul/Product/src/Database/Migrations/2019_02_21_153035_alter_customer_id_nullable_in_product_reviews_table.php diff --git a/packages/Webkul/Admin/src/Config/system.php b/packages/Webkul/Admin/src/Config/system.php new file mode 100644 index 000000000..67d19e606 --- /dev/null +++ b/packages/Webkul/Admin/src/Config/system.php @@ -0,0 +1,33 @@ + 'catalog', + 'name' => 'Catalog', + 'sort' => 1 + ], [ + 'key' => 'catalog.products', + 'name' => 'Products', + 'sort' => 1, + ], [ + 'key' => 'catalog.products.review', + 'name' => 'Review', + 'sort' => 1, + 'fields' => [ + [ + 'name' => 'guest_review', + 'title' => 'Allow Guest Review', + 'type' => 'select', + 'options' => [ + [ + 'title' => 'Yes', + 'value' => true + ], [ + 'title' => 'No', + 'value' => false + ] + ], + ] + ] + ], +]; \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Providers/AdminServiceProvider.php b/packages/Webkul/Admin/src/Providers/AdminServiceProvider.php index eb4853f6d..28dfb17d6 100755 --- a/packages/Webkul/Admin/src/Providers/AdminServiceProvider.php +++ b/packages/Webkul/Admin/src/Providers/AdminServiceProvider.php @@ -44,7 +44,7 @@ class AdminServiceProvider extends ServiceProvider Handler::class ); } - + /** * Register services. * @@ -115,7 +115,7 @@ class AdminServiceProvider extends ServiceProvider return $tree; } - + /** * Register package config. * @@ -130,5 +130,9 @@ class AdminServiceProvider extends ServiceProvider $this->mergeConfigFrom( dirname(__DIR__) . '/Config/acl.php', 'acl' ); + + $this->mergeConfigFrom( + dirname(__DIR__) . '/Config/system.php', 'core' + ); } } \ No newline at end of file diff --git a/packages/Webkul/Product/src/Database/Migrations/2019_02_21_145238_alter_product_reviews_table.php b/packages/Webkul/Product/src/Database/Migrations/2019_02_21_145238_alter_product_reviews_table.php new file mode 100644 index 000000000..897f343c3 --- /dev/null +++ b/packages/Webkul/Product/src/Database/Migrations/2019_02_21_145238_alter_product_reviews_table.php @@ -0,0 +1,31 @@ +string('name'); + $table->dropForeign('product_reviews_customer_id_foreign'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/packages/Webkul/Product/src/Database/Migrations/2019_02_21_153035_alter_customer_id_nullable_in_product_reviews_table.php b/packages/Webkul/Product/src/Database/Migrations/2019_02_21_153035_alter_customer_id_nullable_in_product_reviews_table.php new file mode 100644 index 000000000..b231e39de --- /dev/null +++ b/packages/Webkul/Product/src/Database/Migrations/2019_02_21_153035_alter_customer_id_nullable_in_product_reviews_table.php @@ -0,0 +1,32 @@ +integer('customer_id')->nullable()->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('product_reviews', function (Blueprint $table) { + // + }); + } +} diff --git a/packages/Webkul/Product/src/Models/ProductReview.php b/packages/Webkul/Product/src/Models/ProductReview.php index d5e111f5b..2544b941d 100755 --- a/packages/Webkul/Product/src/Models/ProductReview.php +++ b/packages/Webkul/Product/src/Models/ProductReview.php @@ -9,7 +9,7 @@ use Webkul\Product\Contracts\ProductReview as ProductReviewContract; class ProductReview extends Model implements ProductReviewContract { - protected $fillable = ['comment', 'title', 'rating', 'status', 'product_id', 'customer_id']; + protected $fillable = ['comment', 'title', 'rating', 'status', 'product_id', 'customer_id', 'name']; /** * Get the product attribute family that owns the product. diff --git a/packages/Webkul/Shipping/src/Config/system.php b/packages/Webkul/Shipping/src/Config/system.php index 03e49e78f..be069892b 100755 --- a/packages/Webkul/Shipping/src/Config/system.php +++ b/packages/Webkul/Shipping/src/Config/system.php @@ -30,7 +30,7 @@ return [ ], [ 'name' => 'active', 'title' => 'Status', - 'type' => 'select', + 'type' => 'multiselect', 'options' => [ [ 'title' => 'Active', diff --git a/packages/Webkul/Shop/src/Http/Controllers/ReviewController.php b/packages/Webkul/Shop/src/Http/Controllers/ReviewController.php index 32fbffd5f..55bc20f1d 100755 --- a/packages/Webkul/Shop/src/Http/Controllers/ReviewController.php +++ b/packages/Webkul/Shop/src/Http/Controllers/ReviewController.php @@ -46,8 +46,6 @@ class ReviewController extends Controller */ public function __construct(Product $product, ProductReview $productReview) { - $this->middleware('customer')->only(['create', 'store', 'destroy']); - $this->product = $product; $this->productReview = $productReview; @@ -65,7 +63,9 @@ class ReviewController extends Controller { $product = $this->product->findBySlugOrFail($slug); - return view($this->_config['view'], compact('product')); + $guest_review = core()->getConfigData('catalog.products.review.guest_review'); + + return view($this->_config['view'], compact('product', 'guest_review')); } /** @@ -84,11 +84,13 @@ class ReviewController extends Controller $data = request()->all(); - $customer_id = auth()->guard('customer')->user()->id; + if (auth()->guard('customer')->user()) { + $data['customer_id'] = auth()->guard('customer')->user()->id; + $data['name'] = auth()->guard('customer')->user()->first_name .' ' . auth()->guard('customer')->user()->last_name; + } $data['status'] = 'pending'; $data['product_id'] = $id; - $data['customer_id'] = $customer_id; $this->productReview->create($data); diff --git a/packages/Webkul/Shop/src/Http/routes.php b/packages/Webkul/Shop/src/Http/routes.php index cacfa3afa..e04ce1c40 100755 --- a/packages/Webkul/Shop/src/Http/routes.php +++ b/packages/Webkul/Shop/src/Http/routes.php @@ -106,7 +106,7 @@ Route::group(['middleware' => ['web', 'theme', 'locale', 'currency']], function // Show Product Review Form Store Route::post('/product/{slug}/review', 'Webkul\Shop\Http\Controllers\ReviewController@store')->defaults('_config', [ - 'redirect' => 'customer.reviews.index' + 'redirect' => 'shop.home.index' ])->name('shop.reviews.store'); //customer routes starts here diff --git a/packages/Webkul/Shop/src/Resources/lang/en/app.php b/packages/Webkul/Shop/src/Resources/lang/en/app.php index 9ab227503..594aea865 100755 --- a/packages/Webkul/Shop/src/Resources/lang/en/app.php +++ b/packages/Webkul/Shop/src/Resources/lang/en/app.php @@ -80,7 +80,8 @@ return [ 'ratingreviews' => ':rating Ratings & :review Reviews', 'star' => 'Star', 'percentage' => ':percentage %', - 'id-star' => 'star' + 'id-star' => 'star', + 'name' => 'Name' ], 'customer' => [ diff --git a/packages/Webkul/Shop/src/Resources/views/products/reviews/create.blade.php b/packages/Webkul/Shop/src/Resources/views/products/reviews/create.blade.php index fb5224293..1c4ee3d91 100755 --- a/packages/Webkul/Shop/src/Resources/views/products/reviews/create.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/products/reviews/create.blade.php @@ -75,6 +75,16 @@ @{{ errors.first('title') }} + @if ($guest_review && !auth()->guard('customer')->user()) +
+ + + @{{ errors.first('name') }} +
+ @endif +
@else - @auth('customer') + @if (core()->getConfigData('catalog.products.review.guest_review') || auth()->guard('customer')->check()) - @endauth + @endif @endif {!! view_render_event('bagisto.shop.products.view.reviews.after', ['product' => $product]) !!} \ No newline at end of file From 2da9f80bea1815f6de9635688adeb8138cc6f0cb Mon Sep 17 00:00:00 2001 From: rahul shukla Date: Thu, 21 Feb 2019 18:40:43 +0530 Subject: [PATCH 3/3] issues #586 --- .../Admin/src/Resources/lang/en/app.php | 3 +- .../Http/Controllers/TaxRateController.php | 129 +++++++++--------- 2 files changed, 70 insertions(+), 62 deletions(-) diff --git a/packages/Webkul/Admin/src/Resources/lang/en/app.php b/packages/Webkul/Admin/src/Resources/lang/en/app.php index f73d76faf..7d212e34d 100755 --- a/packages/Webkul/Admin/src/Resources/lang/en/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/en/app.php @@ -771,7 +771,8 @@ return [ 'xls' => 'XLS', 'file' => 'File', 'upload-error' => 'The file must be a file of type: xls, xlsx, csv.', - 'duplicate-error' => 'Identifier must be unique, duplicate identifier :identifier at row :position.' + 'duplicate-error' => 'Identifier must be unique, duplicate identifier :identifier at row :position.', + 'enough-row-error' => 'file has not enough rows' ], 'response' => [ diff --git a/packages/Webkul/Tax/src/Http/Controllers/TaxRateController.php b/packages/Webkul/Tax/src/Http/Controllers/TaxRateController.php index 85d1271d7..6b661771d 100755 --- a/packages/Webkul/Tax/src/Http/Controllers/TaxRateController.php +++ b/packages/Webkul/Tax/src/Http/Controllers/TaxRateController.php @@ -9,6 +9,7 @@ use Webkul\Tax\Repositories\TaxRateRepository as TaxRate; use Webkul\Admin\Imports\DataGridImport; use Illuminate\Support\Facades\Validator; use Excel; +use Maatwebsite\Excel\Validators\Failure; /** * Tax controller @@ -183,86 +184,92 @@ class TaxRateController extends Controller if (!in_array(request()->file('file')->getClientOriginalExtension(), $valid_extension)) { session()->flash('error', trans('admin::app.export.upload-error')); } else { - $excelData = (new DataGridImport)->toArray(request()->file('file')); + try { + $excelData = (new DataGridImport)->toArray(request()->file('file')); - foreach ($excelData as $data) { - foreach ($data as $column => $uploadData) { - $validator = Validator::make($uploadData, [ - 'identifier' => 'required|string', - 'state' => 'required|string', - 'country' => 'required|string', - 'tax_rate' => 'required|numeric' - ]); + foreach ($excelData as $data) { + foreach ($data as $column => $uploadData) { + $validator = Validator::make($uploadData, [ + 'identifier' => 'required|string', + 'state' => 'required|string', + 'country' => 'required|string', + 'tax_rate' => 'required|numeric' + ]); - if ($validator->fails()) { - $failedRules[$column+1] = $validator->errors(); - } - - $identiFier[$column+1] = $uploadData['identifier']; - } - - $identiFierCount = array_count_values($identiFier); - - $filtered = array_filter($identiFier, function ($value) use ($identiFierCount) { - return $identiFierCount[$value] > 1; - }); - } - - if ($filtered) { - foreach ($filtered as $position => $identifier) { - $message[] = trans('admin::app.export.duplicate-error', ['identifier' => $identifier, 'position' => $position]); - } - $finalMsg = implode(" ", $message); - - session()->flash('error', $finalMsg); - } else { - $errorMsg = []; - - if (isset($failedRules)) { - foreach ($failedRules as $coulmn => $fail) { - if ($fail->first('identifier')){ - $errorMsg[$coulmn] = $fail->first('identifier'); - } else if ($fail->first('tax_rate')) { - $errorMsg[$coulmn] = $fail->first('tax_rate'); - } else if ($fail->first('country')) { - $errorMsg[$coulmn] = $fail->first('country'); - } else if ($fail->first('state')) { - $errorMsg[$coulmn] = $fail->first('state'); + if ($validator->fails()) { + $failedRules[$column+1] = $validator->errors(); } + + $identiFier[$column+1] = $uploadData['identifier']; } - foreach ($errorMsg as $key => $msg) { - $msg = str_replace(".", "", $msg); - $message[] = $msg. ' at Row ' .$key . '.'; - } + $identiFierCount = array_count_values($identiFier); + $filtered = array_filter($identiFier, function ($value) use ($identiFierCount) { + return $identiFierCount[$value] > 1; + }); + } + + if ($filtered) { + foreach ($filtered as $position => $identifier) { + $message[] = trans('admin::app.export.duplicate-error', ['identifier' => $identifier, 'position' => $position]); + } $finalMsg = implode(" ", $message); session()->flash('error', $finalMsg); } else { - $taxRate = $this->taxRate->get()->toArray(); + $errorMsg = []; - foreach ($taxRate as $rate) { - $rateIdentifier[$rate['id']] = $rate['identifier']; - } + if (isset($failedRules)) { + foreach ($failedRules as $coulmn => $fail) { + if ($fail->first('identifier')){ + $errorMsg[$coulmn] = $fail->first('identifier'); + } else if ($fail->first('tax_rate')) { + $errorMsg[$coulmn] = $fail->first('tax_rate'); + } else if ($fail->first('country')) { + $errorMsg[$coulmn] = $fail->first('country'); + } else if ($fail->first('state')) { + $errorMsg[$coulmn] = $fail->first('state'); + } + } - foreach ($excelData as $data) { - foreach ($data as $column => $uploadData) { - if (isset($rateIdentifier)) { - $id = array_search($uploadData['identifier'], $rateIdentifier); - if ($id) { - $this->taxRate->update($uploadData, $id); + foreach ($errorMsg as $key => $msg) { + $msg = str_replace(".", "", $msg); + $message[] = $msg. ' at Row ' .$key . '.'; + } + + $finalMsg = implode(" ", $message); + + session()->flash('error', $finalMsg); + } else { + $taxRate = $this->taxRate->get()->toArray(); + + foreach ($taxRate as $rate) { + $rateIdentifier[$rate['id']] = $rate['identifier']; + } + + foreach ($excelData as $data) { + foreach ($data as $column => $uploadData) { + if (isset($rateIdentifier)) { + $id = array_search($uploadData['identifier'], $rateIdentifier); + if ($id) { + $this->taxRate->update($uploadData, $id); + } else { + $this->taxRate->create($uploadData); + } } else { $this->taxRate->create($uploadData); } - } else { - $this->taxRate->create($uploadData); } } - } - session()->flash('success', trans('admin::app.response.upload-success', ['name' => 'Tax Rate'])); + session()->flash('success', trans('admin::app.response.upload-success', ['name' => 'Tax Rate'])); + } } + } catch (\Exception $e) { + $failure = new Failure(1, 'rows', [0 => trans('admin::app.export.enough-row-error')]); + + session()->flash('error', $failure->errors()[0]); } }