diff --git a/packages/Webkul/Admin/src/DataGrids/CartRuleDataGrid.php b/packages/Webkul/Admin/src/DataGrids/CartRuleDataGrid.php
index ef51932bf..83cfa0a79 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', 'use_coupon');
$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,8 +93,46 @@ 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
+ ]);
+
+ $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 == 1) {
+ return '';
+ } else {
+ return '';
+ }
+ }
+ ]);
}
public function prepareActions()
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/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 6c1f28aa9..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
@@ -142,17 +142,6 @@
@{{ errors.first('per_customer') }}
--}}
-
-
-
-
-
- @{{ errors.first('is_guest') }}
-
-
{{--
@@ -364,10 +353,9 @@
@foreach(core()->getAllChannels() as $channel)
-
[{{ $channel->code }}]
@foreach($channel->locales as $locale)
-
+
@@ -405,7 +393,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/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..8ff965281 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
@@ -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) {
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/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..4f239d198 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,39 +351,67 @@ abstract class Discount
*/
protected function testIfAllConditionAreTrue($conditions, $cart)
{
+ $paymentMethods = $this->getPaymentMethods();
+
+ $shippingMethods = $this->getShippingMethods();
+
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 ?? '';
+ $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 = $paymentMethods[$cart->payment->method]['title'];
- $payment_method = $cart->payment->method ?? '';
$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};
- if (isset($condition->value))
+ } else {
+ $result = false;
+ }
+
+ if (isset($condition->value)) {
$test_value = $condition->value;
- if (isset($condition->condition))
+ } 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;
@@ -414,23 +467,34 @@ abstract class Discount
*
* @return boolean
*/
- protected function testIfAnyConditionIsTrue($conditions, $cart) {
+ protected function testIfAnyConditionIsTrue($conditions, $cart)
+ {
+ $paymentMethods = $this->getPaymentMethods();
+
+ $shippingMethods = $this->getShippingMethods();
+
array_pop($conditions);
$result = false;
- $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 ?? '';
+ $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 = $paymentMethods[$cart->payment->method]['title'];
- $payment_method = $cart->payment->method ?? '';
$sub_total = $cart->base_sub_total;
$total_items = $cart->items_qty;
+
$total_weight = 0;
foreach($cart->items as $item) {
@@ -438,11 +502,34 @@ 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 ($condition->type == 'string') {
+ $actual_value = strtolower($actual_value);
+
+ $test_value = strtolower($test_value);
+ }
+
if ($test_condition == '=') {
if ($actual_value == $test_value) {
$result = true;
diff --git a/packages/Webkul/Discount/src/Helpers/NonCouponAbleRule.php b/packages/Webkul/Discount/src/Helpers/NonCouponAbleRule.php
index 7f7cbb4de..b747860fe 100644
--- a/packages/Webkul/Discount/src/Helpers/NonCouponAbleRule.php
+++ b/packages/Webkul/Discount/src/Helpers/NonCouponAbleRule.php
@@ -36,15 +36,14 @@ 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
- $alreadyAppliedRule->delete();
+ $alreadyAppliedCartRuleCart->first()->delete();
// all discount is cleared fro mthe cart and cart items table
$this->clearDiscount();
@@ -68,10 +67,25 @@ 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
+ ]);
+ }
+
+ 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/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());
+ }
}
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 @@