From eedc0c61533cbb3ba6f2d9db78b73109cb3b25b1 Mon Sep 17 00:00:00 2001 From: Prashant Singh Date: Tue, 25 Jun 2019 11:10:21 +0530 Subject: [PATCH 1/7] eliminated the column is_guest column from cart rules in favor of guest as a customer group --- .../Admin/src/DataGrids/CartRuleDataGrid.php | 48 +++++++++++-------- .../Admin/src/Resources/assets/js/app.js | 3 +- .../promotions/cart-rule/create.blade.php | 12 ----- .../views/promotions/cart-rule/edit.blade.php | 5 +- ..._remove_is_guest_from_cart_rules_table.php | 32 +++++++++++++ .../Webkul/Discount/src/Helpers/Discount.php | 3 +- 6 files changed, 65 insertions(+), 38 deletions(-) create mode 100644 packages/Webkul/Discount/src/Database/Migrations/2019_06_25_110122_remove_is_guest_from_cart_rules_table.php diff --git a/packages/Webkul/Admin/src/DataGrids/CartRuleDataGrid.php b/packages/Webkul/Admin/src/DataGrids/CartRuleDataGrid.php index ef51932bf..45b2a3bc3 100644 --- a/packages/Webkul/Admin/src/DataGrids/CartRuleDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/CartRuleDataGrid.php @@ -21,7 +21,7 @@ class CartRuleDataGrid extends DataGrid { $queryBuilder = DB::table('cart_rules') ->select('id') - ->addSelect('id', 'name', 'starts_from', 'ends_till', 'priority', 'usage_limit', 'per_customer', 'status', 'end_other_rules', 'is_guest', 'action_type'); + ->addSelect('id', 'name', 'starts_from', 'ends_till', 'priority', 'status', 'end_other_rules', 'action_type', 'disc_quantity', 'disc_threshold'); $this->setQueryBuilder($queryBuilder); } @@ -62,26 +62,12 @@ class CartRuleDataGrid extends DataGrid 'searchable' => false, 'sortable' => true, 'filterable' => true, + 'closure' => true, 'wrapper' => function($value) { if ($value->status == 1) - return 'True'; + return ''; else - return 'False'; - } - ]); - - $this->addColumn([ - 'index' => 'is_guest', - 'label' => trans('admin::app.datagrid.for-guest'), - 'type' => 'boolean', - 'searchable' => false, - 'sortable' => true, - 'filterable' => true, - 'wrapper' => function($value) { - if ($value->is_guest == 1) - return 'True'; - else - return 'False'; + return ''; } ]); @@ -92,11 +78,12 @@ class CartRuleDataGrid extends DataGrid 'searchable' => false, 'sortable' => true, 'filterable' => true, + 'closure' => true, 'wrapper' => function($value) { if ($value->end_other_rules == 1) - return 'True'; + return ''; else - return 'False'; + return ''; } ]); @@ -106,6 +93,27 @@ class CartRuleDataGrid extends DataGrid 'type' => 'string', 'searchable' => false, 'sortable' => true, + 'filterable' => true, + 'wrapper' => function($value) { + return config('pricerules.cart.actions')[$value->action_type]; + } + ]); + + $this->addColumn([ + 'index' => 'disc_quantity', + 'label' => 'Quantity', + 'type' => 'number', + 'searchable' => false, + 'sortable' => true, + 'filterable' => true + ]); + + $this->addColumn([ + 'index' => 'disc_threshold', + 'label' => 'Threshold', + 'type' => 'number', + 'searchable' => false, + 'sortable' => true, 'filterable' => true ]); } diff --git a/packages/Webkul/Admin/src/Resources/assets/js/app.js b/packages/Webkul/Admin/src/Resources/assets/js/app.js index 225eacb32..4b13eeabd 100755 --- a/packages/Webkul/Admin/src/Resources/assets/js/app.js +++ b/packages/Webkul/Admin/src/Resources/assets/js/app.js @@ -121,8 +121,7 @@ $(document).ready(function () { } }, - addServerErrors() { - var scope = null; + addServerErrors(scope = null) { for (var key in serverErrors) { var inputNames = []; key.split('.').forEach(function(chunk, index) { 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 6c1f28aa9..4a979cc1d 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 @@ -142,17 +142,6 @@ @{{ errors.first('per_customer') }} --}} -
- - - - - @{{ errors.first('is_guest') }} -
- {{--
@@ -405,7 +394,6 @@ use_coupon: null, auto_generation: false, usage_limit: 0, - is_guest: 0, action_type: null, apply: null, 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 1653562d4..b446f2e6d 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 @@ -144,7 +144,7 @@ @{{ errors.first('per_customer') }}
--}} -
+ {{--
@{{ errors.first('is_guest') }} -
+
--}} {{--
@@ -393,7 +393,6 @@ use_coupon: null, // auto_generation: 0, usage_limit: 0, - is_guest: 0, action_type: null, apply: null, diff --git a/packages/Webkul/Discount/src/Database/Migrations/2019_06_25_110122_remove_is_guest_from_cart_rules_table.php b/packages/Webkul/Discount/src/Database/Migrations/2019_06_25_110122_remove_is_guest_from_cart_rules_table.php new file mode 100644 index 000000000..a34fe12d9 --- /dev/null +++ b/packages/Webkul/Discount/src/Database/Migrations/2019_06_25_110122_remove_is_guest_from_cart_rules_table.php @@ -0,0 +1,32 @@ +dropColumn('is_guest'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('cart_rules', function (Blueprint $table) { + $table->boolean('is_guest')->default(0); + }); + } +} diff --git a/packages/Webkul/Discount/src/Helpers/Discount.php b/packages/Webkul/Discount/src/Helpers/Discount.php index 852307862..c245f4683 100644 --- a/packages/Webkul/Discount/src/Helpers/Discount.php +++ b/packages/Webkul/Discount/src/Helpers/Discount.php @@ -414,7 +414,8 @@ abstract class Discount * * @return boolean */ - protected function testIfAnyConditionIsTrue($conditions, $cart) { + protected function testIfAnyConditionIsTrue($conditions, $cart) + { array_pop($conditions); $result = false; From 1a262e0f2747ec190cd6f591d1dbf3eeaa577ea4 Mon Sep 17 00:00:00 2001 From: Prashant Singh Date: Tue, 25 Jun 2019 12:27:13 +0530 Subject: [PATCH 2/7] Fixed some bugs in cart rules --- .../Admin/src/DataGrids/CartRuleDataGrid.php | 21 ++++++++++-- .../Admin/src/Resources/lang/en/app.php | 4 +-- .../promotions/cart-rule/create.blade.php | 3 +- packages/Webkul/Core/src/Core.php | 10 ++++++ .../Discount/src/Actions/FixedAmount.php | 2 +- .../Discount/src/Config/rule-conditions.php | 2 +- .../Webkul/Discount/src/Helpers/Discount.php | 33 +++++++++++++++++-- .../src/Helpers/NonCouponAbleRule.php | 12 ++++--- .../src/Models/CartRuleCustomerGroups.php | 6 ++++ 9 files changed, 78 insertions(+), 15 deletions(-) diff --git a/packages/Webkul/Admin/src/DataGrids/CartRuleDataGrid.php b/packages/Webkul/Admin/src/DataGrids/CartRuleDataGrid.php index 45b2a3bc3..766270196 100644 --- a/packages/Webkul/Admin/src/DataGrids/CartRuleDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/CartRuleDataGrid.php @@ -21,7 +21,7 @@ class CartRuleDataGrid extends DataGrid { $queryBuilder = DB::table('cart_rules') ->select('id') - ->addSelect('id', 'name', 'starts_from', 'ends_till', 'priority', 'status', 'end_other_rules', 'action_type', 'disc_quantity', 'disc_threshold'); + ->addSelect('id', 'name', 'starts_from', 'ends_till', 'priority', 'status', 'end_other_rules', 'action_type', 'disc_quantity', 'disc_threshold', 'use_coupon'); $this->setQueryBuilder($queryBuilder); } @@ -83,7 +83,7 @@ class CartRuleDataGrid extends DataGrid if ($value->end_other_rules == 1) return ''; else - return ''; + return ''; } ]); @@ -116,6 +116,23 @@ class CartRuleDataGrid extends DataGrid 'sortable' => true, 'filterable' => true ]); + + $this->addColumn([ + 'index' => 'use_coupon', + 'label' => 'Use Coupon', + 'type' => 'boolean', + 'searchable' => false, + 'sortable' => true, + 'filterable' => true, + 'closure' => true, + 'wrapper' => function($value) { + if ($value->use_coupon == 0) { + return ''; + } else { + return ''; + } + } + ]); } public function prepareActions() diff --git a/packages/Webkul/Admin/src/Resources/lang/en/app.php b/packages/Webkul/Admin/src/Resources/lang/en/app.php index 177477423..2cb5f3ca3 100755 --- a/packages/Webkul/Admin/src/Resources/lang/en/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/en/app.php @@ -823,7 +823,7 @@ return [ 'cust-groups' => 'Customer Groups', 'priority' => 'Priority', 'add-condition' => 'Add Conditions', - 'disc_amt' => 'Discount Amount(B)', + 'disc_amt' => 'Discount Amount', 'disc_percent' => 'Discount Percentage', 'is-coupon' => 'Use Coupon', 'is-coupon-yes' => 'Yes', @@ -879,7 +879,7 @@ return [ ], 'cart' => [ - 'buy-atleast' => 'Buy Atleast (N)', + 'buy-atleast' => 'Buy Atleast', 'apply-to-shipping' => 'Apply to shipping' ] ], 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 4a979cc1d..e15794bd7 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 @@ -353,10 +353,9 @@
@foreach(core()->getAllChannels() as $channel) - [{{ $channel->code }}] @foreach($channel->locales as $locale)
- + diff --git a/packages/Webkul/Core/src/Core.php b/packages/Webkul/Core/src/Core.php index d4c333028..861fd674f 100755 --- a/packages/Webkul/Core/src/Core.php +++ b/packages/Webkul/Core/src/Core.php @@ -596,6 +596,16 @@ class Core return $coreConfigValue->value; } + /** + * Retrieve a group of information from the core config table + * + * @return array + */ + public function retrieveGroupConfig($criteria) + { + return $criteria; + } + /** * Retrieve all countries * diff --git a/packages/Webkul/Discount/src/Actions/FixedAmount.php b/packages/Webkul/Discount/src/Actions/FixedAmount.php index a46ae6ecd..11838dd35 100644 --- a/packages/Webkul/Discount/src/Actions/FixedAmount.php +++ b/packages/Webkul/Discount/src/Actions/FixedAmount.php @@ -8,7 +8,7 @@ class FixedAmount extends Action { public function calculate($rule, $item, $cart) { - //calculate discount amount + // calculate discount amount $action_type = $rule->action_type; // action type used $disc_threshold = $rule->disc_threshold; // atleast quantity by default 1 --> may be omitted in near future $disc_amount = $rule->disc_amount; // value of discount diff --git a/packages/Webkul/Discount/src/Config/rule-conditions.php b/packages/Webkul/Discount/src/Config/rule-conditions.php index c881b7dc1..99d170b7a 100644 --- a/packages/Webkul/Discount/src/Config/rule-conditions.php +++ b/packages/Webkul/Discount/src/Config/rule-conditions.php @@ -34,7 +34,7 @@ return [ 'actions' => [ 'percent_of_product' => 'Percentage of product', 'fixed_amount' => 'Apply as fixed amount', - 'buy_a_get_b' => 'Get B amount back', + 'buy_a_get_b' => 'Buy A get B' ], 'validation' => [ diff --git a/packages/Webkul/Discount/src/Helpers/Discount.php b/packages/Webkul/Discount/src/Helpers/Discount.php index c245f4683..12fd2e5a1 100644 --- a/packages/Webkul/Discount/src/Helpers/Discount.php +++ b/packages/Webkul/Discount/src/Helpers/Discount.php @@ -92,8 +92,10 @@ abstract class Discount } } } else { - if ($rule->is_guest) { - $customerGroupBased = true; + foreach ($rule->customer_groups as $customer_group) { + if ($customer_group->customer_group->code == 'guest') { + $customerGroupBased = true; + } } } @@ -317,6 +319,29 @@ abstract class Discount } } + /** + * Retreives all the payment methods from application config + * + * @return array + */ + public function getPaymentMethods() + { + $paymentMethods = config('paymentmethods'); + + return $paymentMethods; + } + + /** + * Retreives all the shippin methods from the application config + * + * @return array + */ + public function getShippingMethods() + { + $shippingMethods = config('carriers'); + + return $shippingMethods; + } /** * Checks the rule against the current cart instance whether rule conditions are applicable @@ -326,6 +351,10 @@ abstract class Discount */ protected function testIfAllConditionAreTrue($conditions, $cart) { + $paymentMethods = $this->getPaymentMethods(); + + $shippingMethods = $this->getShippingMethods(); + array_pop($conditions); $shipping_address = $cart->getShippingAddressAttribute() ?? ''; diff --git a/packages/Webkul/Discount/src/Helpers/NonCouponAbleRule.php b/packages/Webkul/Discount/src/Helpers/NonCouponAbleRule.php index 7f7cbb4de..7afdffc7e 100644 --- a/packages/Webkul/Discount/src/Helpers/NonCouponAbleRule.php +++ b/packages/Webkul/Discount/src/Helpers/NonCouponAbleRule.php @@ -44,7 +44,7 @@ class NonCouponAbleRule extends Discount if (! $alreadyAppliedRule->use_coupon && ! $validated) { // if the validation fails then the cart rule gets deleted from cart rule cart - $alreadyAppliedRule->delete(); + $alreadyAppliedCartRuleCart->first()->delete(); // all discount is cleared fro mthe cart and cart items table $this->clearDiscount(); @@ -68,10 +68,12 @@ class NonCouponAbleRule extends Discount $impact = $actionInstance->calculate($rule, $item, $cart); - array_push($applicableRules, [ - 'rule' => $rule, - 'impact' => $impact - ]); + if ($impact['discount'] > 0) { + array_push($applicableRules, [ + 'rule' => $rule, + 'impact' => $impact + ]); + } } } diff --git a/packages/Webkul/Discount/src/Models/CartRuleCustomerGroups.php b/packages/Webkul/Discount/src/Models/CartRuleCustomerGroups.php index 64d99d3c0..a3e70fee4 100644 --- a/packages/Webkul/Discount/src/Models/CartRuleCustomerGroups.php +++ b/packages/Webkul/Discount/src/Models/CartRuleCustomerGroups.php @@ -3,6 +3,7 @@ namespace Webkul\Discount\Models; use Illuminate\Database\Eloquent\Model; +use Webkul\Customer\Moels\CustomerGroupProxy; use Webkul\Discount\Contracts\CartRuleCustomerGroups as CartRuleCustomerGroupContract; class CartRuleCustomerGroups extends Model implements CartRuleCustomerGroupContract @@ -10,4 +11,9 @@ class CartRuleCustomerGroups extends Model implements CartRuleCustomerGroupContr protected $table = 'cart_rule_customer_groups'; protected $guarded = ['created_at', 'updated_at']; + + public function customer_group() + { + return $this->hasOne(CustomerGroupProxy::modelClass()); + } } From 463ff5a8acba163e47e5802bf28690177d25518b Mon Sep 17 00:00:00 2001 From: Prashant Singh Date: Tue, 25 Jun 2019 13:14:12 +0530 Subject: [PATCH 3/7] Fixed issues with cart rules and made a validation function that checks the applied rule for any changes made in cart --- .../Webkul/Discount/src/Helpers/Discount.php | 32 ++++++++----------- .../src/Helpers/NonCouponAbleRule.php | 16 ++++++++-- .../Http/Controllers/CartRuleController.php | 6 ++-- 3 files changed, 31 insertions(+), 23 deletions(-) diff --git a/packages/Webkul/Discount/src/Helpers/Discount.php b/packages/Webkul/Discount/src/Helpers/Discount.php index 12fd2e5a1..b057b261b 100644 --- a/packages/Webkul/Discount/src/Helpers/Discount.php +++ b/packages/Webkul/Discount/src/Helpers/Discount.php @@ -357,15 +357,14 @@ abstract class Discount array_pop($conditions); - $shipping_address = $cart->getShippingAddressAttribute() ?? ''; + $shipping_address = $cart->getShippingAddressAttribute() ?? null; - $shipping_method = $cart->shipping_method ?? ''; - $shipping_country = $shipping_address->country ?? ''; - $shipping_state = $shipping_address->state ?? ''; - $shipping_postcode = $shipping_address->postcode ?? ''; - $shipping_city = $shipping_address->city ?? ''; - - $payment_method = $cart->payment->method ?? ''; + $shipping_method = $cart->shipping_method ?? null; + $shipping_country = $shipping_address->country ?? null; + $shipping_state = $shipping_address->state ?? null; + $shipping_postcode = $shipping_address->postcode ?? null; + $shipping_city = $shipping_address->city ?? null; + $payment_method = $cart->payment->method ?? null; $sub_total = $cart->base_sub_total; $total_items = $cart->items_qty; @@ -449,17 +448,14 @@ abstract class Discount $result = false; - $shipping_address = $cart->getShippingAddressAttribute() ?? ''; - - $shipping_method = $cart->shipping_method ?? ''; - $shipping_country = $shipping_address->country ?? ''; - $shipping_state = $shipping_address->state ?? ''; - $shipping_postcode = $shipping_address->postcode ?? ''; - $shipping_city = $shipping_address->city ?? ''; - - $payment_method = $cart->payment->method ?? ''; + $shipping_address = $cart->getShippingAddressAttribute() ?? null; + $shipping_method = $cart->shipping_method ?? null; + $shipping_country = $shipping_address->country ?? null; + $shipping_state = $shipping_address->state ?? null; + $shipping_postcode = $shipping_address->postcode ?? null; + $shipping_city = $shipping_address->city ?? null; + $payment_method = $cart->payment->method ?? null; $sub_total = $cart->base_sub_total; - $total_items = $cart->items_qty; $total_weight = 0; diff --git a/packages/Webkul/Discount/src/Helpers/NonCouponAbleRule.php b/packages/Webkul/Discount/src/Helpers/NonCouponAbleRule.php index 7afdffc7e..b747860fe 100644 --- a/packages/Webkul/Discount/src/Helpers/NonCouponAbleRule.php +++ b/packages/Webkul/Discount/src/Helpers/NonCouponAbleRule.php @@ -36,13 +36,12 @@ class NonCouponAbleRule extends Discount 'cart_id' => $cart->id, ]); - if (count($alreadyAppliedCartRuleCart)) { $alreadyAppliedRule = $alreadyAppliedCartRuleCart->first()->cart_rule; $validated = $this->validateRule($alreadyAppliedRule); - if (! $alreadyAppliedRule->use_coupon && ! $validated) { + if (! $validated) { // if the validation fails then the cart rule gets deleted from cart rule cart $alreadyAppliedCartRuleCart->first()->delete(); @@ -74,6 +73,19 @@ class NonCouponAbleRule extends Discount 'impact' => $impact ]); } + + if (count($alreadyAppliedCartRuleCart)) { + $alreadyAppliedRule = $alreadyAppliedCartRuleCart->first()->cart_rule; + + if ($alreadyAppliedRule->id == $rule->id) { + if ($impact['discount'] == 0) { + $alreadyAppliedCartRuleCart->first()->delete(); + + // all discount is cleared from cart and cart items table + $this->clearDiscount(); + } + } + } } } diff --git a/packages/Webkul/Discount/src/Http/Controllers/CartRuleController.php b/packages/Webkul/Discount/src/Http/Controllers/CartRuleController.php index 79d790a6f..c122886ba 100644 --- a/packages/Webkul/Discount/src/Http/Controllers/CartRuleController.php +++ b/packages/Webkul/Discount/src/Http/Controllers/CartRuleController.php @@ -463,12 +463,12 @@ class CartRuleController extends Controller if ($ruleUpdated && $ruleGroupUpdated && $ruleChannelUpdated) { if (isset($couponCreatedOrUpdated) && $couponCreatedOrUpdated) { - session()->flash('info', trans('admin::app.promotion.status.success-coupon')); + session()->flash('success', trans('admin::app.promotion.status.success-coupon')); } - session()->flash('info', trans('admin::app.promotion.status.update-success')); + session()->flash('success', trans('admin::app.promotion.status.update-success')); } else { - session()->flash('info', trans('admin::app.promotion.status.update-success')); + session()->flash('success', trans('admin::app.promotion.status.update-success')); return redirect()->back(); } From 35a87aa7fd3d721c9fbc85879edeeb9e0d90ee8f Mon Sep 17 00:00:00 2001 From: Prashant Singh Date: Tue, 25 Jun 2019 13:19:58 +0530 Subject: [PATCH 4/7] Added more security fixes for cart rules --- .../Webkul/Discount/src/Helpers/Discount.php | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/packages/Webkul/Discount/src/Helpers/Discount.php b/packages/Webkul/Discount/src/Helpers/Discount.php index b057b261b..605528015 100644 --- a/packages/Webkul/Discount/src/Helpers/Discount.php +++ b/packages/Webkul/Discount/src/Helpers/Discount.php @@ -379,12 +379,18 @@ abstract class Discount foreach ($conditions as $condition) { if (isset($condition->attribute)) $actual_value = ${$condition->attribute}; + else + $result = false; if (isset($condition->value)) $test_value = $condition->value; + else + $result = false; if (isset($condition->condition)) $test_condition = $condition->condition; + else + $result = false; if (isset($condition->type) && ($condition->type == 'numeric' || $condition->type == 'string' || $condition->type == 'text')) { if ($test_condition == '=') { @@ -464,9 +470,20 @@ abstract class Discount } foreach ($conditions as $condition) { - $actual_value = ${$condition->attribute}; - $test_value = $condition->value; - $test_condition = $condition->condition; + if (isset($condition->attribute)) + $actual_value = ${$condition->attribute}; + else + $result = false; + + if (isset($condition->value)) + $test_value = $condition->value; + else + $result = false; + + if (isset($condition->condition)) + $test_condition = $condition->condition; + else + $result = false; if ($condition->type == 'numeric' || $condition->type == 'string' || $condition->type == 'text') { if ($test_condition == '=') { From 44947074a49646ddf6874357eabc938336217363 Mon Sep 17 00:00:00 2001 From: Jyoti Singh Date: Tue, 25 Jun 2019 13:37:24 +0530 Subject: [PATCH 5/7] added discount threshold check in fixed amount cart rule --- packages/Webkul/Discount/src/Actions/FixedAmount.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/Webkul/Discount/src/Actions/FixedAmount.php b/packages/Webkul/Discount/src/Actions/FixedAmount.php index 11838dd35..8ff965281 100644 --- a/packages/Webkul/Discount/src/Actions/FixedAmount.php +++ b/packages/Webkul/Discount/src/Actions/FixedAmount.php @@ -18,7 +18,7 @@ class FixedAmount extends Action $realQty = $item['quantity']; - if ($cart >= $disc_threshold) { + if ($cart->items_qty >= $disc_threshold) { $amountDiscounted = $disc_amount; if ($realQty > $disc_quantity) { From 68c22f38f64123058a3f9145dde3a6000e85eddb Mon Sep 17 00:00:00 2001 From: Prashant Singh Date: Tue, 25 Jun 2019 14:44:14 +0530 Subject: [PATCH 6/7] improvements in cart rules --- .../Admin/src/DataGrids/CartRuleDataGrid.php | 2 +- .../Webkul/Discount/src/Helpers/Discount.php | 90 ++++++++++++++----- 2 files changed, 68 insertions(+), 24 deletions(-) diff --git a/packages/Webkul/Admin/src/DataGrids/CartRuleDataGrid.php b/packages/Webkul/Admin/src/DataGrids/CartRuleDataGrid.php index 766270196..83cfa0a79 100644 --- a/packages/Webkul/Admin/src/DataGrids/CartRuleDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/CartRuleDataGrid.php @@ -126,7 +126,7 @@ class CartRuleDataGrid extends DataGrid 'filterable' => true, 'closure' => true, 'wrapper' => function($value) { - if ($value->use_coupon == 0) { + if ($value->use_coupon == 1) { return ''; } else { return ''; diff --git a/packages/Webkul/Discount/src/Helpers/Discount.php b/packages/Webkul/Discount/src/Helpers/Discount.php index 605528015..4f239d198 100644 --- a/packages/Webkul/Discount/src/Helpers/Discount.php +++ b/packages/Webkul/Discount/src/Helpers/Discount.php @@ -359,40 +359,59 @@ abstract class Discount $shipping_address = $cart->getShippingAddressAttribute() ?? null; - $shipping_method = $cart->shipping_method ?? null; + $shipping_method = $cart->selected_shipping_rate->method_title ?? null; + $shipping_country = $shipping_address->country ?? null; + $shipping_state = $shipping_address->state ?? null; + $shipping_postcode = $shipping_address->postcode ?? null; + $shipping_city = $shipping_address->city ?? null; - $payment_method = $cart->payment->method ?? null; + + $payment_method = $paymentMethods[$cart->payment->method]['title']; + $sub_total = $cart->base_sub_total; $total_items = $cart->items_qty; + $total_weight = 0; - foreach($cart->items as $item) { + foreach ($cart->items as $item) { $total_weight = $total_weight + $item->base_total_weight; } $result = true; foreach ($conditions as $condition) { - if (isset($condition->attribute)) + if (isset($condition->attribute)) { $actual_value = ${$condition->attribute}; - else - $result = false; - if (isset($condition->value)) + } else { + $result = false; + } + + if (isset($condition->value)) { $test_value = $condition->value; - else - $result = false; - if (isset($condition->condition)) - $test_condition = $condition->condition; - else + } else { $result = false; + } + + if (isset($condition->condition)) { + $test_condition = $condition->condition; + } + else { + $result = false; + } if (isset($condition->type) && ($condition->type == 'numeric' || $condition->type == 'string' || $condition->type == 'text')) { + if ($condition->type == 'string') { + $actual_value = strtolower($actual_value); + + $test_value = strtolower($test_value); + } + if ($test_condition == '=') { if ($actual_value != $test_value) { $result = false; @@ -450,19 +469,32 @@ abstract class Discount */ protected function testIfAnyConditionIsTrue($conditions, $cart) { + $paymentMethods = $this->getPaymentMethods(); + + $shippingMethods = $this->getShippingMethods(); + array_pop($conditions); $result = false; $shipping_address = $cart->getShippingAddressAttribute() ?? null; - $shipping_method = $cart->shipping_method ?? null; + + $shipping_method = $cart->selected_shipping_rate->method_title ?? null; + $shipping_country = $shipping_address->country ?? null; + $shipping_state = $shipping_address->state ?? null; + $shipping_postcode = $shipping_address->postcode ?? null; + $shipping_city = $shipping_address->city ?? null; - $payment_method = $cart->payment->method ?? null; + + $payment_method = $paymentMethods[$cart->payment->method]['title']; + $sub_total = $cart->base_sub_total; + $total_items = $cart->items_qty; + $total_weight = 0; foreach($cart->items as $item) { @@ -470,22 +502,34 @@ abstract class Discount } foreach ($conditions as $condition) { - if (isset($condition->attribute)) + if (isset($condition->attribute)) { $actual_value = ${$condition->attribute}; - else - $result = false; - if (isset($condition->value)) + } else { + $result = false; + } + + if (isset($condition->value)) { $test_value = $condition->value; - else - $result = false; - if (isset($condition->condition)) - $test_condition = $condition->condition; - else + } else { $result = false; + } + + if (isset($condition->condition)) { + $test_condition = $condition->condition; + } + else { + $result = false; + } if ($condition->type == 'numeric' || $condition->type == 'string' || $condition->type == 'text') { + if ($condition->type == 'string') { + $actual_value = strtolower($actual_value); + + $test_value = strtolower($test_value); + } + if ($test_condition == '=') { if ($actual_value == $test_value) { $result = true; From ecd766cb817cbd15d076376f83c40b275401b57b Mon Sep 17 00:00:00 2001 From: Prashant Singh Date: Tue, 25 Jun 2019 14:57:26 +0530 Subject: [PATCH 7/7] Some changes in frontend regarding coupon form on checkout --- .../Resources/views/checkout/onepage.blade.php | 18 ++++++++++++++---- .../views/checkout/total/summary.blade.php | 9 ++++----- 2 files changed, 18 insertions(+), 9 deletions(-) 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 521af556b..2ba29bc61 100755 --- a/packages/Webkul/Shop/src/Resources/views/checkout/onepage.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/checkout/onepage.blade.php @@ -486,7 +486,9 @@ coupon_code: null, - error_message: '' + error_message: null, + + couponChanged: false } }, @@ -517,15 +519,23 @@ axios.post('{{ route('shop.checkout.check.coupons') }}', {code: this_this.coupon_code}) .then(function(response) { - this_this.$emit('onApplyCoupon') + this_this.$emit('onApplyCoupon'); + + this_this.couponChanged = true; }) .catch(function(error) { - window.flashMessages = [{'type' : 'alert-error', 'message' : error.response.data.message}]; + this_this.couponChanged = true; - this_this.$root.addFlashMessages(); + this_this.error_message = error.response.data.message; }); }, + changeCoupon: function() { + if (this.couponChanged == true) { + this.couponChanged = false; + } + }, + removeCoupon: function () { var this_this = this; 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 01de2b767..20098085f 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 @@ -50,13 +50,12 @@
-
- +
+
+
@{{ error_message }}
- @{{ error_message }} - - +