From 8d68be8e0746d29f89fa89d368adde5775f9e804 Mon Sep 17 00:00:00 2001 From: Prashant Singh Date: Sat, 15 Jun 2019 12:27:54 +0530 Subject: [PATCH] Rule condition discount calculation now working properly --- packages/Webkul/Checkout/src/Cart.php | 3 +- ...19_05_13_024326_create_cart_rule_table.php | 4 +-- .../Webkul/Discount/src/Helpers/Discount.php | 28 +++++++++++++------ 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/packages/Webkul/Checkout/src/Cart.php b/packages/Webkul/Checkout/src/Cart.php index 6bdbbffad..fc42a4823 100755 --- a/packages/Webkul/Checkout/src/Cart.php +++ b/packages/Webkul/Checkout/src/Cart.php @@ -1297,7 +1297,8 @@ class Cart { 'id' => $item->id, 'total' => $item->total, 'base_total' => $leastValue, - 'quantity' => $item->quantity + 'quantity' => $item->quantity, + 'price' => $item->price ]; } } diff --git a/packages/Webkul/Discount/src/Database/Migrations/2019_05_13_024326_create_cart_rule_table.php b/packages/Webkul/Discount/src/Database/Migrations/2019_05_13_024326_create_cart_rule_table.php index 03f6273ec..41859725a 100644 --- a/packages/Webkul/Discount/src/Database/Migrations/2019_05_13_024326_create_cart_rule_table.php +++ b/packages/Webkul/Discount/src/Database/Migrations/2019_05_13_024326_create_cart_rule_table.php @@ -39,8 +39,8 @@ class CreateCartRuleTable extends Migration $table->integer('sort_order')->unsigned()->default(0); $table->string('action_type')->nullable(); $table->decimal('disc_amount', 12, 4)->default(0); - $table->decimal('disc_quantity', 12, 4)->default(0); - $table->string('disc_threshold')->default(0); + $table->decimal('disc_quantity', 12, 4)->default(1); + $table->string('disc_threshold')->default(1); $table->integer('coupon_type')->default(1); $table->boolean('auto_generation')->default(0); $table->boolean('apply_to_shipping')->default(0); diff --git a/packages/Webkul/Discount/src/Helpers/Discount.php b/packages/Webkul/Discount/src/Helpers/Discount.php index cee384b68..f4938a557 100644 --- a/packages/Webkul/Discount/src/Helpers/Discount.php +++ b/packages/Webkul/Discount/src/Helpers/Discount.php @@ -376,24 +376,36 @@ class Discount $leastWorthItem = \Cart::leastWorthItem(); $realQty = $leastWorthItem['quantity']; - if ($cart->items_qty >= $disc_threshold && $realQty >= $disc_quantity) { + if ($cart->items_qty >= $disc_threshold) { if ($action_type == config('pricerules.cart.validation.0')) { - $amountDiscounted = $leastWorthItem['total'] * ($disc_amount / 100); + $amountDiscounted = $leastWorthItem['price'] * ($disc_amount / 100); - if ($amountDiscounted > $leastWorthItem['total']) { - $amountDiscounted = $leastWorthItem['total']; + if ($realQty > $disc_quantity) { + $amountDiscounted = $amountDiscounted * $disc_quantity; + } + + if ($amountDiscounted > $leastWorthItem['price']) { + $amountDiscounted = $leastWorthItem['price']; } } else if ($action_type == config('pricerules.cart.validation.1')) { $amountDiscounted = $disc_amount; - if ($amountDiscounted > $leastWorthItem['total']) { - $amountDiscounted = $leastWorthItem['total']; + if ($realQty > $disc_quantity) { + $amountDiscounted = $amountDiscounted * $disc_quantity; + } + + if ($amountDiscounted > $leastWorthItem['price']) { + $amountDiscounted = $leastWorthItem['price']; } } else if ($action_type == config('pricerules.cart.validation.2')) { $amountDiscounted = $disc_amount; - if ($amountDiscounted > $leastWorthItem['total']) { - $amountDiscounted = $leastWorthItem['total']; + if ($realQty > $disc_quantity) { + $amountDiscounted = $amountDiscounted * $disc_quantity; + } + + if ($amountDiscounted > $leastWorthItem['price']) { + $amountDiscounted = $leastWorthItem['price']; } } }