diff --git a/packages/Webkul/Admin/src/DataGrids/CustomerDataGrid.php b/packages/Webkul/Admin/src/DataGrids/CustomerDataGrid.php index 732e8f64a..4961d4179 100755 --- a/packages/Webkul/Admin/src/DataGrids/CustomerDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/CustomerDataGrid.php @@ -23,7 +23,7 @@ class CustomerDataGrid extends DataGrid { $queryBuilder = DB::table('customers') ->leftJoin('customer_groups', 'customers.customer_group_id', '=', 'customer_groups.id') - ->addSelect('customers.id as customer_id', 'customers.email', 'customer_groups.name') + ->addSelect('customers.id as customer_id', 'customers.email', 'customer_groups.name', 'status') ->addSelect(DB::raw('CONCAT(customers.first_name, " ", customers.last_name) as full_name')); $this->addFilter('customer_id', 'customers.id'); @@ -69,6 +69,22 @@ class CustomerDataGrid extends DataGrid 'sortable' => true, 'filterable' => true ]); + + $this->addColumn([ + 'index' => 'status', + 'label' => trans('admin::app.datagrid.status'), + 'type' => 'boolean', + 'searchable' => false, + 'sortable' => true, + 'filterable' => true, + 'wrapper' => function ($row) { + if ($row->status == 1) { + return 'Activated'; + } else { + return 'Blocked'; + } + } + ]); } public function prepareActions() { @@ -96,4 +112,30 @@ class CustomerDataGrid extends DataGrid 'title' => trans('admin::app.customers.note.help-title') ]); } + + /** + * Customer Mass Action To Delete And Change Their + */ + public function prepareMassActions() + { + $this->addMassAction([ + 'type' => 'delete', + 'label' => 'Delete', + 'action' => route('admin.customer.mass-delete'), + 'method' => 'PUT', + ]); + + $this->addMassAction([ + 'type' => 'update', + 'label' => 'Update Status', + 'action' => route('admin.customer.mass-update'), + 'method' => 'PUT', + 'options' => [ + 'Active' => 1, + 'Inactive' => 0 + ] + ]); + + $this->enableMassAction = true; + } } \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Http/Controllers/Customer/CustomerController.php b/packages/Webkul/Admin/src/Http/Controllers/Customer/CustomerController.php index 476256f76..c2b700582 100755 --- a/packages/Webkul/Admin/src/Http/Controllers/Customer/CustomerController.php +++ b/packages/Webkul/Admin/src/Http/Controllers/Customer/CustomerController.php @@ -224,4 +224,43 @@ class CustomerController extends Controller return redirect()->route($this->_config['redirect']); } + + /** + * To mass update the customer + */ + public function massUpdate() + { + $customerIds = explode(',', request()->input('indexes')); + $updateOption = request()->input('update-options'); + + foreach ($customerIds as $customerId) { + $customer = $this->customer->find($customerId); + + $customer->update([ + 'status' => $updateOption + ]); + } + + session()->flash('info', trans('admin::app.customers.customers.mass-update-success')); + + return redirect()->back(); + } + + /** + * To mass delete the customer + */ + public function massDestroy() + { + $customerIds = explode(',', request()->input('indexes')); + + foreach ($customerIds as $customerId) { + $this->customer->deleteWhere([ + 'id' => $customerId + ]); + } + + session()->flash('info', trans('admin::app.customers.customers.mass-destroy-success')); + + return redirect()->back(); + } } \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Http/routes.php b/packages/Webkul/Admin/src/Http/routes.php index 92b39b4ff..c9de0b06d 100755 --- a/packages/Webkul/Admin/src/Http/routes.php +++ b/packages/Webkul/Admin/src/Http/routes.php @@ -43,7 +43,7 @@ Route::group(['middleware' => ['web']], function () { 'view' => 'admin::dashboard.index' ])->name('admin.dashboard.index'); - //Customers Management Routes + //Customer Management Routes Route::get('customers', 'Webkul\Admin\Http\Controllers\Customer\CustomerController@index')->defaults('_config', [ 'view' => 'admin::customers.index' ])->name('admin.customer.index'); @@ -74,6 +74,10 @@ Route::group(['middleware' => ['web']], function () { Route::post('customers/delete/{id}', 'Webkul\Admin\Http\Controllers\Customer\CustomerController@destroy')->name('admin.customer.delete'); + Route::post('customers/masssdelete', 'Webkul\Admin\Http\Controllers\Customer\CustomerController@massDestroy')->name('admin.customer.mass-delete'); + + Route::post('customers/masssupdate', 'Webkul\Admin\Http\Controllers\Customer\CustomerController@massUpdate')->name('admin.customer.mass-update'); + Route::get('reviews', 'Webkul\Product\Http\Controllers\ReviewController@index')->defaults('_config',[ 'view' => 'admin::customers.reviews.index' ])->name('admin.customer.review.index'); diff --git a/packages/Webkul/Admin/src/Resources/lang/en/app.php b/packages/Webkul/Admin/src/Resources/lang/en/app.php index 601624dab..f1f99b62f 100755 --- a/packages/Webkul/Admin/src/Resources/lang/en/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/en/app.php @@ -768,7 +768,9 @@ return [ 'phone' => 'Phone', 'group-default' => 'Cannot delete the default group.', 'edit-help-title' => 'Edit Customer', - 'delete-help-title' => 'Delete Customer' + 'delete-help-title' => 'Delete Customer', + 'mass-destroy-success' => 'Customers deleted successfully', + 'mass-update-success' => 'Customers updated successfully' ], 'reviews' => [ @@ -819,7 +821,7 @@ return [ 'cust-groups' => 'Customer Groups', 'priority' => 'Priority', 'add-condition' => 'Add Conditions', - 'disc_amt' => 'Discount Amount', + 'disc_amt' => 'Discount Amount(B)', 'disc_percent' => 'Discount Percentage', 'is-coupon' => 'Use Coupon', 'is-coupon-yes' => 'Yes', @@ -842,6 +844,7 @@ return [ 'free-shipping' => 'Free Shipping', 'is-guest' => 'For Guests', 'disc_qty' => 'Max. Quantity Allowed To Be Discounted', + 'test-mode' => 'Choose how to test conditions' ], 'status' => [ diff --git a/packages/Webkul/Admin/src/Resources/views/promotions/cart-rule/create.blade.php b/packages/Webkul/Admin/src/Resources/views/promotions/cart-rule/create.blade.php index d19e6c828..64c897335 100644 --- a/packages/Webkul/Admin/src/Resources/views/promotions/cart-rule/create.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/promotions/cart-rule/create.blade.php @@ -179,13 +179,22 @@
-
-
Any of the condition is true
+
+ {{ __('admin::app.promotion.general-info.test-mode') }} + +
@@ -257,7 +266,7 @@
- + @{{ errors.first('disc_amount') }}
@@ -418,6 +427,7 @@ free_shipping: null, all_conditions: [], + match_criteria: 'all_are_true', code: null, suffix: null, @@ -441,7 +451,6 @@ actions: @json($cart_rule[0]).actions, conditions_list:[], cart_object: { - criteria: null, attribute: null, condition: null, value: [] @@ -516,13 +525,17 @@ }, onSubmit: function (e) { + if (this.conditions_list.length != 0) { + this.conditions_list.test_mode = this.match_criteria; + } + + this.all_conditions = JSON.stringify(this.conditions_list); + this.$validator.validateAll().then(result => { if (result) { e.target.submit(); } }); - - this.all_conditions = JSON.stringify(this.conditions_list); }, addFlashMessages() { diff --git a/packages/Webkul/Admin/src/Resources/views/promotions/cart-rule/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/promotions/cart-rule/edit.blade.php index eab873ee1..95f4b4de1 100644 --- a/packages/Webkul/Admin/src/Resources/views/promotions/cart-rule/edit.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/promotions/cart-rule/edit.blade.php @@ -179,13 +179,22 @@
-
-
Any of the condition is true
+
+ {{ __('admin::app.promotion.general-info.test-mode') }} + +
@@ -405,6 +414,7 @@ free_shipping: null, all_conditions: null, + match_criteria: 'all_are_true', code: null, suffix: null, @@ -427,7 +437,6 @@ actions: @json($cart_rule[0]).actions, conditions_list:[], cart_object: { - criteria: null, attribute: null, condition: null, value: [] @@ -511,7 +520,6 @@ this.conditions_list.push(this.cart_object); this.cart_object = { - criteria: null, attribute: null, condition: null, value: [] @@ -559,13 +567,20 @@ }, onSubmit: function (e) { + + // if (this.conditions_list.length != 0) { + // this.conditions_list.push(this.match_criteria); + // } + + console.log(JSON.stringify(this.conditions_list)); + + this.all_conditions = JSON.stringify(this.conditions_list); + this.$validator.validateAll().then(result => { if (result) { e.target.submit(); } }); - - this.all_conditions = JSON.stringify(this.conditions_list); }, addFlashMessages() { diff --git a/packages/Webkul/Admin/src/Resources/views/sales/invoices/view.blade.php b/packages/Webkul/Admin/src/Resources/views/sales/invoices/view.blade.php index 63a12eafc..06d1ddd2d 100755 --- a/packages/Webkul/Admin/src/Resources/views/sales/invoices/view.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/sales/invoices/view.blade.php @@ -249,7 +249,7 @@ {{ core()->formatBasePrice($item->base_discount_amount) }} @endif - {{ core()->formatBasePrice($item->base_total + $item->base_tax_amount) }} + {{ core()->formatBasePrice($item->base_total + $item->base_tax_amount - $item->base_total + $item->base_tax_amount) }} @endforeach diff --git a/packages/Webkul/Admin/src/Resources/views/sales/orders/view.blade.php b/packages/Webkul/Admin/src/Resources/views/sales/orders/view.blade.php index 38c66eed3..efab09d67 100755 --- a/packages/Webkul/Admin/src/Resources/views/sales/orders/view.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/sales/orders/view.blade.php @@ -289,7 +289,7 @@ {{ core()->formatBasePrice($item->base_discount_amount) }} @endif - {{ core()->formatBasePrice($item->base_total + $item->base_tax_amount) }} + {{ core()->formatBasePrice($item->base_total + $item->base_tax_amount - $item->base_discount_amount) }} @endforeach diff --git a/packages/Webkul/Checkout/src/Cart.php b/packages/Webkul/Checkout/src/Cart.php index 694f3fc62..d60a54d6e 100755 --- a/packages/Webkul/Checkout/src/Cart.php +++ b/packages/Webkul/Checkout/src/Cart.php @@ -1167,6 +1167,9 @@ class Cart { 'tax_percent' => $data['tax_percent'], 'tax_amount' => $data['tax_amount'], 'base_tax_amount' => $data['base_tax_amount'], + 'discount_percent' => $data['discount_percent'], + 'discount_amount' => $data['discount_amount'], + 'base_discount_amount' => $data['base_discount_amount'], 'additional' => $data['additional'], ]; diff --git a/packages/Webkul/Discount/src/Config/rule-conditions.php b/packages/Webkul/Discount/src/Config/rule-conditions.php index b8e147a4f..7719a72ab 100644 --- a/packages/Webkul/Discount/src/Config/rule-conditions.php +++ b/packages/Webkul/Discount/src/Config/rule-conditions.php @@ -28,7 +28,7 @@ return [ 0 => 'admin::app.promotion.catalog.apply-percent', 1 => 'admin::app.promotion.catalog.apply-fixed', 2 => 'admin::app.promotion.catalog.adjust-to-percent', - 3 => 'admin::app.promotion.catalog.adjust-to-value' + // 3 => 'admin::app.promotion.catalog.adjust-to-value' ], 'attributes' => [ @@ -85,10 +85,6 @@ return [ '<=' => 'Lesser or equals', '>' => 'Greater than', '<' => 'Lesser than', - '{}' => 'Contains' - // '!{}' => 'Does not contains', - // '()' => 'Is one of', - // '!()' => 'Not is one of' ], 'text' => [ @@ -99,8 +95,6 @@ return [ '<' => 'Lesser than', '{}' => 'Contains', '!{}' => 'Does not contains' - // '()' => 'Is one of', - // '!()' => 'Not is one of' ], 'string' => [ @@ -111,8 +105,6 @@ return [ '<' => 'Lesser than', '{}' => 'Contains', '!{}' => 'Does not contains' - // '()' => 'Is one of', - // '!()' => 'Not is one of' ], 'boolean' => [ @@ -171,9 +163,9 @@ return [ ], 'test_mode' => [ - 0 => 'all_are_true', - 1 => 'all_are_false', - 2 => 'any_of_true', - 3 => 'all_of_false' + 'all_are_true' => 'All conditions are true', + 'all_are_false' => 'All conditions are false', + 'any_is_true' => 'Any condition is true', + 'any_is_false' => 'Any condition is false' ] ]; \ No newline at end of file diff --git a/packages/Webkul/Discount/src/Helpers/Discount.php b/packages/Webkul/Discount/src/Helpers/Discount.php index c5bb028dc..cae8eb6ba 100644 --- a/packages/Webkul/Discount/src/Helpers/Discount.php +++ b/packages/Webkul/Discount/src/Helpers/Discount.php @@ -114,6 +114,18 @@ class Discount if ($canBeApplied->count()) { $this->save(array_first($canBeApplied)['rule']); + $itemId = array_first($canBeApplied); + + foreach (\Cart::getCart()->items as $item) { + if ($item->id == $itemId['item_id']) { + $item->update([ + 'discount_amount' => array_first($canBeApplied)['discount'], + 'base_discount_amount' => array_first($canBeApplied)['discount'] + ]); + + break; + } + } return array_first($canBeApplied); } else { @@ -307,6 +319,7 @@ class Discount } } + $report['item_id'] = $leastWorthItem['id']; $report['discount'] = $amountDiscounted; $report['formatted_discount'] = core()->formatPrice($amountDiscounted, $cart->cart_currency_code); $report['new_grand_total'] = $cart->grand_total - $amountDiscounted; diff --git a/packages/Webkul/Discount/src/Http/Controllers/CartRuleController.php b/packages/Webkul/Discount/src/Http/Controllers/CartRuleController.php index 66fe52b21..d13eeae8b 100644 --- a/packages/Webkul/Discount/src/Http/Controllers/CartRuleController.php +++ b/packages/Webkul/Discount/src/Http/Controllers/CartRuleController.php @@ -2,16 +2,10 @@ namespace Webkul\Discount\Http\Controllers; -use Webkul\Attribute\Repositories\AttributeRepository as Attribute; -use Webkul\Attribute\Repositories\AttributeFamilyRepository as AttributeFamily; -use Webkul\Category\Repositories\CategoryRepository as Category; -use Webkul\Product\Repositories\ProductFlatRepository as Product; -use Webkul\Discount\Repositories\CatalogRuleRepository as CatalogRule; use Webkul\Discount\Repositories\CartRuleRepository as CartRule; use Webkul\Checkout\Repositories\CartRepository as Cart; use Webkul\Discount\Repositories\CartRuleLabelsRepository as CartRuleLabels; use Webkul\Discount\Repositories\CartRuleCouponsRepository as CartRuleCoupons; -use Validator; /** * Cart Rule controller @@ -26,26 +20,6 @@ class CartRuleController extends Controller */ protected $_config; - /** - * Attribute $attribute - */ - protected $attribute; - - /** - * AttributeFamily $attributeFamily - */ - protected $attributeFamily; - - /** - * Category $category - */ - protected $category; - - /** - * Product $product - */ - protected $product; - /** * Property for Cart rule application */ @@ -71,34 +45,47 @@ class CartRuleController extends Controller */ protected $cart; - public function __construct(Attribute $attribute, AttributeFamily $attributeFamily, Category $category, Product $product, CatalogRule $catalogRule, CartRule $cartRule, CartRuleCoupons $cartRuleCoupon, CartRuleLabels $cartRuleLabel) + public function __construct( + CartRule $cartRule, + CartRuleCoupons $cartRuleCoupon, + CartRuleLabels $cartRuleLabel + ) { $this->_config = request('_config'); - $this->attribute = $attribute; - $this->attributeFamily = $attributeFamily; - $this->category = $category; - $this->product = $product; + $this->cartRule = $cartRule; + $this->cartRuleCoupon = $cartRuleCoupon; + $this->cartRuleLabel = $cartRuleLabel; + $this->appliedConfig = config('pricerules.cart'); } + /** + * @return view + */ public function index() { return view($this->_config['view']); } + /** + * @return view + */ public function create() { - return view($this->_config['view'])->with('cart_rule', [$this->appliedConfig, $this->fetchOptionableAttributes(), $this->getStatesAndCountries()]); + return view($this->_config['view'])->with('cart_rule', [$this->appliedConfig, [], $this->getStatesAndCountries()]); } + /** + * @return Redirect + */ public function store() { $data = request()->all(); - $validated = Validator::make($data, [ + $validated = $this->validate($data, [ 'name' => 'required|string', 'description' => 'string', // 'customer_groups' => 'required|array', @@ -118,15 +105,10 @@ class CartRuleController extends Controller 'label' => 'array|nullable' ]); - $data['usage_limit'] = 0; - $data['per_customer'] = 0; - - if ($validated->fails()) { - session()->flash('error', 'Validation failed'); - return redirect()->route('admin.cart-rule.create') - ->withErrors($validated) - ->withInput(); - } + $data = [ + 'usage_limit' => 0, + 'per_customer' => 0 + ]; if ($data['starts_from'] == "" || $data['ends_till'] == "") { $data['starts_from'] = null; @@ -136,6 +118,7 @@ class CartRuleController extends Controller unset($data['_token']); $channels = $data['channels']; + unset($data['channels']); // $customer_groups = $data['customer_groups']; @@ -143,6 +126,7 @@ class CartRuleController extends Controller unset($data['criteria']); $labels = $data['label']; + unset($data['label']); unset($data['cart_attributes']); unset($data['attributes']); @@ -170,6 +154,7 @@ class CartRuleController extends Controller } else { $data['conditions'] = json_encode($data['all_conditions']); } + unset($data['all_conditions']); if ($data['use_coupon']) { @@ -177,6 +162,7 @@ class CartRuleController extends Controller $data['auto_generation'] = 0; $coupons['code'] = $data['code']; + unset($data['code']); // } else { // $data['auto_generation'] = 1; @@ -207,6 +193,7 @@ class CartRuleController extends Controller if (isset($labels['global'])) { foreach (core()->getAllChannels() as $channel) { $label1['channel_id'] = $channel->id; + foreach($channel->locales as $locale) { $label1['locale_id'] = $locale->id; $label1['label'] = $labels['global']; @@ -218,10 +205,11 @@ class CartRuleController extends Controller } else { $label2['label'] = $labels['global']; $label2['cart_rule_id'] = $ruleCreated->id; + $ruleLabelCreated = $this->cartRuleLabel->create($label2); } - if(isset($coupons)) { + if (isset($coupons)) { $coupons['cart_rule_id'] = $ruleCreated->id; $coupons['usage_per_customer'] = $data['per_customer']; //0 is for unlimited usage @@ -243,18 +231,29 @@ class CartRuleController extends Controller return redirect()->route($this->_config['redirect']); } + /** + * @return view + */ public function edit($id) { $cart_rule = $this->cartRule->find($id); - return view($this->_config['view'])->with('cart_rule', [$this->appliedConfig, $this->fetchOptionableAttributes(), $this->getStatesAndCountries(), $cart_rule]); + return view($this->_config['view'])->with('cart_rule', [ + $this->appliedConfig, + [], + $this->getStatesAndCountries(), + $cart_rule + ]); } + /** + * @return redirect + */ public function update($id) { $types = config('price_rules.cart.validations'); - $validated = Validator::make(request()->all(), [ + $this->validate(request(), [ 'name' => 'required|string', 'description' => 'string', // 'customer_groups' => 'required|array', @@ -274,18 +273,13 @@ class CartRuleController extends Controller 'label' => 'array|nullable' ]); - $data['usage_limit'] = 0; - $data['per_customer'] = 0; - - if ($validated->fails()) { - session()->flash('error', 'Validation failed'); - return redirect()->route('admin.cart-rule.create') - ->withErrors($validated) - ->withInput(); - } + $data = [ + 'usage_limit' => 0, + 'per_customer' => 0 + ]; $data = request()->all(); - + dd($data); if ($data['starts_from'] == "" || $data['ends_till'] == "") { $data['starts_from'] = null; $data['ends_till'] = null; @@ -294,6 +288,7 @@ class CartRuleController extends Controller unset($data['_token']); $channels = $data['channels']; + unset($data['channels']); // $customer_groups = $data['customer_groups']; @@ -302,6 +297,7 @@ class CartRuleController extends Controller if (isset($data['label'])) { $labels = $data['label']; + unset($data['label']); } @@ -325,6 +321,7 @@ class CartRuleController extends Controller } $data['actions'] = json_encode($data['actions']); + if (! isset($data['all_conditions']) || $data['all_conditions'] == "[]") { $data['conditions'] = null; } else { @@ -338,6 +335,7 @@ class CartRuleController extends Controller $data['auto_generation'] = 0; $coupons['code'] = $data['code']; + unset($data['code']); // } else { // $data['auto_generation'] = 1; @@ -413,17 +411,4 @@ class CartRuleController extends Controller 'states' => $states ]; } - - public function fetchOptionableAttributes() - { - $attributesWithOptions = array(); - - foreach($this->attribute->all() as $attribute) { - if (($attribute->type == 'select' || $attribute->type == 'multiselect') && $attribute->code != 'tax_category_id') { - $attributesWithOptions[$attribute->admin_name] = $attribute->options->toArray(); - } - } - - return $attributesWithOptions; - } -} +} \ No newline at end of file diff --git a/packages/Webkul/Shop/src/Http/Controllers/OnepageController.php b/packages/Webkul/Shop/src/Http/Controllers/OnepageController.php index f1a0662b5..de749c49f 100755 --- a/packages/Webkul/Shop/src/Http/Controllers/OnepageController.php +++ b/packages/Webkul/Shop/src/Http/Controllers/OnepageController.php @@ -90,6 +90,8 @@ class OnepageController extends Controller if (Cart::hasError() || !Cart::saveCustomerAddress($data) || ! $rates = Shipping::collectRates()) return response()->json(['redirect_url' => route('shop.checkout.cart.index')], 403); + $rule = Cart::applyNonCoupon(); + Cart::collectTotals(); return response()->json($rates); @@ -107,6 +109,8 @@ class OnepageController extends Controller if (Cart::hasError() || !$shippingMethod || !Cart::saveShippingMethod($shippingMethod)) return response()->json(['redirect_url' => route('shop.checkout.cart.index')], 403); + $rule = Cart::applyNonCoupon(); + Cart::collectTotals(); return response()->json(Payment::getSupportedPaymentMethods());