From 9ae4f8a80112d6015c3cf556cc9141a7f96bfbc3 Mon Sep 17 00:00:00 2001 From: Prashant Singh Date: Sat, 15 Jun 2019 18:47:53 +0530 Subject: [PATCH 01/10] Fixed issues with cart rule customer groups --- .../views/promotions/cart-rule/edit.blade.php | 6 +- .../Http/Controllers/CartRuleController.php | 77 +++++++++++++++---- .../views/checkout/onepage.blade.php | 25 ------ .../views/checkout/total/summary.blade.php | 1 - 4 files changed, 63 insertions(+), 46 deletions(-) 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 95f4b4de1..ce21944ca 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 @@ -76,7 +76,7 @@ - {{--
+
- @{{ errors.first('customer_groups') }} -
--}} + @{{ errors.first('customer_groups[]') }} +
diff --git a/packages/Webkul/Discount/src/Http/Controllers/CartRuleController.php b/packages/Webkul/Discount/src/Http/Controllers/CartRuleController.php index 93f1271bf..6853cd9d2 100644 --- a/packages/Webkul/Discount/src/Http/Controllers/CartRuleController.php +++ b/packages/Webkul/Discount/src/Http/Controllers/CartRuleController.php @@ -83,7 +83,7 @@ class CartRuleController extends Controller */ public function store() { - $validated = $this->validate($data, [ + $validated = $this->validate(request(), [ 'name' => 'required|string', 'description' => 'string', 'customer_groups' => 'required|array', @@ -114,9 +114,13 @@ class CartRuleController extends Controller // set per customer usage limit $data['per_customer'] = 0; - // check starts from and ends till - if ($data['starts_from'] == "" || $data['ends_till'] == "") { + // check if starts_from is null + if ($data['starts_from'] == "") { $data['starts_from'] = null; + } + + // check if end_till is null + if ($data['ends_till'] == "") { $data['ends_till'] = null; } @@ -282,12 +286,10 @@ class CartRuleController extends Controller */ public function update($id) { - $types = config('price_rules.cart.validations'); - $this->validate(request(), [ 'name' => 'required|string', 'description' => 'string', - // 'customer_groups' => 'required|array', + 'customer_groups' => 'required|array', 'channels' => 'required|array', 'status' => 'required|boolean', 'use_coupon' => 'boolean|required', @@ -304,35 +306,58 @@ class CartRuleController extends Controller 'label' => 'array|nullable' ]); - $data['usage_limit'] = 0; - $data['per_customer'] = 0; - + // collecting request in $data $data = request()->all(); - if ($data['starts_from'] == "" || $data['ends_till'] == "") { + // unset request token from $data + unset($data['_token']); + + // condition validation rules from config + $types = config('price_rules.cart.validations'); + + // set rule uasge limit + $data['usage_limit'] = 0; + + // set rule usage per customer + $data['per_customer'] = 0; + + // check if starts_from is null + if ($data['starts_from'] == "") { $data['starts_from'] = null; + } + + // check if end_till is null + if ($data['ends_till'] == "") { $data['ends_till'] = null; } - unset($data['_token']); - + // set channels $channels = $data['channels']; + // unset the channels from $data unset($data['channels']); - // $customer_groups = $data['customer_groups']; - // unset($data['customer_groups']); - // unset($data['criteria']); + // set customer_groups + $customer_groups = $data['customer_groups']; + // unset customer groups + unset($data['customer_groups']); + + // unset criteria from conditions + unset($data['criteria']); + + // set labels and unset them from $data if (isset($data['label'])) { $labels = $data['label']; unset($data['label']); } + // unset cart_attributes and attributes from $data unset($data['cart_attributes']); unset($data['attributes']); + // prepare actions from data for json action if (isset($data['disc_amount']) && $data['action_type'] == config('pricerules.cart.validations.2')) { $data['actions'] = [ 'action_type' => $data['action_type'], @@ -349,16 +374,20 @@ class CartRuleController extends Controller ]; } + // encode php array to json for actions $data['actions'] = json_encode($data['actions']); + // prepare conditions from data for json conditions if (! isset($data['all_conditions']) || $data['all_conditions'] == "[]") { $data['conditions'] = null; } else { $data['conditions'] = json_encode($data['all_conditions']); } + // unset all_conditions from conditions unset($data['all_conditions']); + // set coupons from $data if ($data['use_coupon']) { // if (isset($data['auto_generation']) && $data['auto_generation']) { $data['auto_generation'] = 0; @@ -386,13 +415,19 @@ class CartRuleController extends Controller // $coupons['limit'] = $data['usage_limit']; // } + // update cart rule $ruleUpdated = $this->cartRule->update($data, $id); - // $ruleGroupUpdated = $this->cartRule->CustomerGroupSync($customer_groups, $ruleUpdated); + // update customer groups for cart rule + $ruleGroupUpdated = $this->cartRule->CustomerGroupSync($customer_groups, $ruleUpdated); + + // update customer groups for cart rule $ruleChannelUpdated = $this->cartRule->ChannelSync($channels, $ruleUpdated); + // update labels $labelsUpdated = $this->cartRule->LabelSync($labels, $ruleUpdated); + // check coupons set conditions if (isset($coupons)) { $coupons['cart_rule_id'] = $ruleUpdated->id; // $coupons['usage_per_customer'] = $data['per_customer']; //0 is for unlimited usage @@ -400,7 +435,7 @@ class CartRuleController extends Controller $couponUpdated = $ruleUpdated->coupons->update($coupons); } - if ($ruleUpdated && $ruleChannelUpdated) { + if ($ruleUpdated && $ruleGroupUpdated && $ruleChannelUpdated) { if (isset($couponUpdated) && $couponUpdated) { session()->flash('info', trans('admin::app.promotion.status.success-coupon')); } @@ -415,6 +450,9 @@ class CartRuleController extends Controller return redirect()->route($this->_config['redirect']); } + /** + * Delete + */ public function destroy($id) { $cartRule = $this->cartRule->findOrFail($id); @@ -430,6 +468,11 @@ class CartRuleController extends Controller } } + /** + * Get Countries and states list from core helpers + * + * @return Array + */ public function getStatesAndCountries() { $countries = core()->countries()->toArray(); diff --git a/packages/Webkul/Shop/src/Resources/views/checkout/onepage.blade.php b/packages/Webkul/Shop/src/Resources/views/checkout/onepage.blade.php index 607d84292..02e593fbc 100755 --- a/packages/Webkul/Shop/src/Resources/views/checkout/onepage.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/checkout/onepage.blade.php @@ -374,31 +374,6 @@ this.templateRender() : '') ]); - }, - - methods: { - onSubmit: function() { - var this_this = this; - - axios.post('{{ route('shop.checkout.check.coupons') }}', { - code: this_this.code - }).then(function(response) { - console.log(response.data); - }).catch(function(error) { - console.log(error.data); - }); - }, - - removeCoupon: function () { - var this_this = this; - - axios.post('{{ route('shop.checkout.remove.coupon') }}') - .then(function(response) { - console.log(response.data); - }).catch(function(error) { - console.log(error.data); - }); - } } }) diff --git a/packages/Webkul/Shop/src/Resources/views/checkout/total/summary.blade.php b/packages/Webkul/Shop/src/Resources/views/checkout/total/summary.blade.php index ca2ebabfd..f5229a87b 100755 --- a/packages/Webkul/Shop/src/Resources/views/checkout/total/summary.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/checkout/total/summary.blade.php @@ -24,7 +24,6 @@
@endif -
discount_amount && $cart->discount_amount > 0) style="display: block;" @else style="display: none;" @endif>
-
- +
+ +
+ +
+
- +
@@ -341,42 +345,6 @@ } }) - var summaryTemplateRenderFns = []; - - Vue.component('summary-section', { - inject: ['$validator'], - - data: function() { - return { - templateRender: null, - - code: null, - - coupon_used: false, - - hide_discount: 0 - } - }, - - staticRenderFns: summaryTemplateRenderFns, - - mounted: function() { - this.templateRender = summaryHtml.render; - - for (var i in summaryHtml.staticRenderFns) { - summaryTemplateRenderFns.push(summaryHtml.staticRenderFns[i]); - } - }, - - render: function(h) { - return h('div', [ - (this.templateRender ? - this.templateRender() : - '') - ]); - } - }) - var shippingTemplateRenderFns = []; Vue.component('shipping-section', { @@ -460,40 +428,78 @@ eventBus.$emit('after-payment-method-selected'); } } - }) + }); var reviewTemplateRenderFns = []; Vue.component('review-section', { - data: function() { + props: ['active'], + + data: function () { return { templateRender: null, - code: '', - - hide_discount: 1, - - coupon_used: false, - - error_message: '' + hide_discount: null, } }, staticRenderFns: reviewTemplateRenderFns, - mounted: function() { + mounted: function () { + this.hide_discount = this.active; + this.templateRender = reviewHtml.render; + for (var i in reviewHtml.staticRenderFns) { reviewTemplateRenderFns.push(reviewHtml.staticRenderFns[i]); } - - @if ($cart->coupon_code != null) - this.code = '{{ $cart->coupon_code }}'; - this.coupon_used = true; - @endif }, render: function(h) { + return h('div', [ + (this.templateRender ? + this.templateRender() : + '') + ] + ); + } + }); + + var summaryTemplateRenderFns = []; + + Vue.component('summary-section', { + inject: ['$validator'], + props: ['active'], + + data: function () { + return { + templateRender: null, + + code: null, + + coupon_used: false, + + hide_discount: null, + + error_message: '', + + call_count: 0, + } + }, + + staticRenderFns: summaryTemplateRenderFns, + + mounted: function () { + this.hide_discount = this.active; + + this.templateRender = summaryHtml.render; + + for (var i in summaryHtml.staticRenderFns) { + summaryTemplateRenderFns.push(summaryHtml.staticRenderFns[i]); + } + }, + + render: function (h) { return h('div', [ (this.templateRender ? this.templateRender() : @@ -510,12 +516,8 @@ }).then(function(response) { this_this.coupon_used = true; - document.getElementById("discount-detail").style.display = "block"; - document.getElementById("discount-detail-discount-amount").innerHTML = response.data.result.formatted_discount; - - document.getElementById("grand-total-amount-detail").innerHTML = response.data.result.grand_total; + this_this.getOrderSummary(); }).catch(function(error) { - console.log(error.data); }); }, @@ -527,20 +529,24 @@ this_this.coupon_used = false; this_this.code = ''; + }).catch(function(error) {}); + }, - console.log(response.data.data.grand_total); + getOrderSummary () { + var this_this = this; - document.getElementById("discount-detail").style.display = "none"; + this.$http.get("{{ route('shop.checkout.summary') }}") + .then(function(response) { + this_this.resetSummary = false; - document.getElementById("grand-total-amount-detail").innerHTML = response.data.data.grand_total; - }).catch(function(error) { - console.log(error.data); - - this_this.error_message = '{{ __('shop::app.checkout.onepage.total.cannot-apply-coupon') }}' - }); - } + summaryHtml = Vue.compile(response.data.html) + setTimeout(function() { + this_this.resetSummary = true; + }, 0); + }).catch(function (error) {}) + }, } - }); + }) @endpush \ No newline at end of file diff --git a/packages/Webkul/Shop/src/Resources/views/checkout/onepage/review.blade.php b/packages/Webkul/Shop/src/Resources/views/checkout/onepage/review.blade.php index 5341e42e4..d200f8a9c 100755 --- a/packages/Webkul/Shop/src/Resources/views/checkout/onepage/review.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/checkout/onepage/review.blade.php @@ -155,7 +155,8 @@
- @include('shop::checkout.total.summary', ['cart' => $cart]) + {{-- @include('shop::checkout.total.summary', ['cart' => $cart]) --}} +
\ No newline at end of file diff --git a/packages/Webkul/Shop/src/Resources/views/checkout/total/summary.blade.php b/packages/Webkul/Shop/src/Resources/views/checkout/total/summary.blade.php index f5229a87b..678798244 100755 --- a/packages/Webkul/Shop/src/Resources/views/checkout/total/summary.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/checkout/total/summary.blade.php @@ -1,4 +1,4 @@ -
+

{{ __('shop::app.checkout.total.order-summary') }}

@@ -35,7 +35,6 @@
-