Merge pull request #4263 from devansh-webkul/issue-4262

Fixed minimum order amount should also accept the minimum value #4262
This commit is contained in:
Jitendra Singh 2020-11-17 16:31:00 +05:30 committed by GitHub
commit 130ae68d33
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 70 additions and 65 deletions

View File

@ -168,17 +168,13 @@ class CheckoutController extends Controller
*/
public function checkMinimumOrder()
{
$cart = Cart::getCart();
$cartBaseSubTotal = (float) $cart->base_sub_total;
$minimumOrderAmount = (float) core()->getConfigData('sales.orderSettings.minimum-order.minimum_order_amount') ?? 0;
$status = $cartBaseSubTotal > $minimumOrderAmount;
$status = Cart::checkMinimumOrder();
return response()->json([
'status' => ! $status ? false : true,
'message' => ! $status ? trans('shop::app.checkout.cart.minimum-order-message', ['amount' => $minimumOrderAmount]) : 'Success',
'message' => ! $status ? trans('shop::app.checkout.cart.minimum-order-message', ['amount' => core()->currency($minimumOrderAmount)]) : 'Success',
'data' => [
'cart' => new CartResource($cart),
]

View File

@ -293,7 +293,7 @@ class Cart
public function getItemByProduct($data)
{
$items = $this->getCart()->all_items;
foreach ($items as $item) {
if ($item->product->getTypeInstance()->compareOptions($item->additional, $data['additional'])) {
if (isset($data['additional']['parent_id'])) {
@ -607,7 +607,7 @@ class Cart
if ($validationResult->isItemInactive()) {
$this->removeItem($item->id);
$isInvalid = true;
session()->flash('info', __('shop::app.checkout.cart.item.inactive'));
@ -708,7 +708,7 @@ class Cart
$item->save();
}
Event::dispatch('checkout.cart.calculate.items.tax.after', $cart);
}
@ -1275,4 +1275,20 @@ class Cart
}
}
}
/**
* Check minimum order.
*
* @return boolean
*/
public function checkMinimumOrder(): bool
{
$cart = $this->getCart();
if (! $cart) {
return false;
}
return $cart->checkMinimumOrder();
}
}

View File

@ -3,7 +3,6 @@
namespace Webkul\Checkout\Models;
use Illuminate\Database\Eloquent\Model;
use Webkul\Product\Models\ProductProxy;
use Webkul\Checkout\Contracts\Cart as CartContract;
class Cart extends Model implements CartContract
@ -169,4 +168,18 @@ class Cart extends Model implements CartContract
return true;
}
/**
* Check minimum order.
*
* @return boolean
*/
public function checkMinimumOrder(): bool
{
$minimumOrderAmount = (float) core()->getConfigData('sales.orderSettings.minimum-order.minimum_order_amount') ?? 0;
$cartBaseSubTotal = (float) $this->base_sub_total;
return $cartBaseSubTotal >= $minimumOrderAmount;
}
}

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
{
"/js/shop.js": "/js/shop.js?id=f9b25f1c2f22de85711d",
"/js/shop.js": "/js/shop.js?id=fd3e9e2c897df46dd84c",
"/css/shop.css": "/css/shop.css?id=45a1e46876af32f30871"
}

View File

@ -230,8 +230,8 @@ class OnepageController extends Controller
$minimumOrderAmount = (int) core()->getConfigData('sales.orderSettings.minimum-order.minimum_order_amount') ?? 0;
if (! ($cart->base_sub_total > $minimumOrderAmount)) {
throw new \Exception(trans('shop::app.checkout.cart.minimum-order-message', ['amount' => $minimumOrderAmount]));
if (! $cart->checkMinimumOrder()) {
throw new \Exception(trans('shop::app.checkout.cart.minimum-order-message', ['amount' => core()->currency($minimumOrderAmount)]));
}
if ($cart->haveStockableItems() && ! $cart->shipping_address) {

View File

@ -9,24 +9,17 @@ export default {
'addClass',
'text',
'cartDetails',
'minimumOrderAmount',
'isMinimumOrderCompleted',
'minimumOrderMessage'
],
methods: {
checkMinimumOrder: function (e) {
let base_sub_total = parseFloat(this.getCartDetails().base_sub_total);
let minimumOrderAmount = parseFloat(this.minimumOrderAmount);
if (! (base_sub_total > minimumOrderAmount)) {
if (! this.isMinimumOrderCompleted) {
e.preventDefault();
window.flashMessages = [{'type': 'alert-warning', 'message': this.minimumOrderMessage}];
this.$root.addFlashMessages();
}
},
getCartDetails: function () {
return JSON.parse(this.cartDetails);
}
}
}

View File

@ -498,7 +498,7 @@ return [
'event' => [
'expired' => 'This event has been expired.'
],
'minimum-order-message' => 'Your order should be greater than :amount'
'minimum-order-message' => 'Minimum order amount is :amount'
],
'onepage' => [

View File

@ -492,7 +492,7 @@ return [
'cart-remove-action' => 'Wollen Sie dies wirklich tun?',
'partial-cart-update' => 'Nur einige der Produkte wurden aktualisiert',
'link-missing' => '',
'minimum-order-message' => 'Your order should be greater than :amount'
'minimum-order-message' => 'Minimum order amount is :amount'
],
'onepage' => [

View File

@ -498,7 +498,7 @@ return [
'event' => [
'expired' => 'This event has been expired.'
],
'minimum-order-message' => 'Your order should be greater than :amount'
'minimum-order-message' => 'Minimum order amount is :amount'
],
'onepage' => [

View File

@ -464,7 +464,7 @@ return [
'event' => [
'expired' => 'This event has been expired.'
],
'minimum-order-message' => 'Your order should be greater than :amount'
'minimum-order-message' => 'Minimum order amount is :amount'
],
'onepage' => [

View File

@ -497,7 +497,7 @@ return [
'event' => [
'expired' => 'This event has been expired.'
],
'minimum-order-message' => 'Your order should be greater than :amount'
'minimum-order-message' => 'Minimum order amount is :amount'
],
'onepage' => [

View File

@ -17,7 +17,7 @@ return [
'common' => [
'error' => 'Qualcosa è andato storto, per favore prova ancora più tardi.',
'image-upload-limit' => 'La dimensione massima di caricamento dell\'immagine è 2 MB',
'image-upload-limit' => 'La dimensione massima di caricamento dell\'immagine è 2 MB',
'no-result-found' => 'Non abbiamo trovato risultati.'
],
@ -495,7 +495,7 @@ return [
'event' => [
'expired' => 'Questo evento è terminato.'
],
'minimum-order-message' => 'Your order should be greater than :amount'
'minimum-order-message' => 'Minimum order amount is :amount'
],
'onepage' => [

View File

@ -16,7 +16,7 @@ return [
'common' => [
'error' => 'エラーが発生しました。しばらく待ってから、再度アクセスしてください。',
'image-upload-limit' => '画像の最大アップロードサイズは2MBです',
'image-upload-limit' => '画像の最大アップロードサイズは2MBです',
],
'home' => [
@ -456,7 +456,7 @@ return [
'cart-remove-action' => '手続きを進めますか。',
'partial-cart-update' => 'Only some of the product(s) were updated',
'link-missing' => '',
'minimum-order-message' => 'Your order should be greater than :amount'
'minimum-order-message' => 'Minimum order amount is :amount'
],
'onepage' => [

View File

@ -17,7 +17,7 @@ return [
'common' => [
'error' => 'Something went wrong, please try again later.',
'image-upload-limit' => 'De maximale uploadgrootte van de afbeelding is 2 MB',
'image-upload-limit' => 'De maximale uploadgrootte van de afbeelding is 2 MB',
'no-result-found' => 'We could not find any records.'
],
@ -502,7 +502,7 @@ return [
'event' => [
'expired' => 'This event has been expired.'
],
'minimum-order-message' => 'Your order should be greater than :amount'
'minimum-order-message' => 'Minimum order amount is :amount'
],
'onepage' => [

View File

@ -17,7 +17,7 @@ return [
'common' => [
'error' => 'Coś poszło nie tak. Proszę spróbować później.',
'image-upload-limit' => 'Maksymalny rozmiar przesyłanego obrazu to 2 MB',
'image-upload-limit' => 'Maksymalny rozmiar przesyłanego obrazu to 2 MB',
'no-result-found' => 'Nie znaleźliśmy żadnych zapisów.'
],
@ -494,7 +494,7 @@ return [
'event' => [
'expired' => 'To wydarzenie wygasło.'
],
'minimum-order-message' => 'Your order should be greater than :amount'
'minimum-order-message' => 'Minimum order amount is :amount'
],
'onepage' => [

View File

@ -487,7 +487,7 @@ return [
'event' => [
'expired' => 'This event has been expired.'
],
'minimum-order-message' => 'Your order should be greater than :amount'
'minimum-order-message' => 'Minimum order amount is :amount'
],
'onepage' => [

View File

@ -495,7 +495,7 @@ return [
'event' => [
'expired' => 'Bu eylemin geçerliliği sona erdi.'
],
'minimum-order-message' => 'Your order should be greater than :amount'
'minimum-order-message' => 'Minimum order amount is :amount'
],
'onepage' => [

View File

@ -138,9 +138,8 @@
href="{{ route('shop.checkout.onepage.index') }}"
add-class="btn btn-lg btn-primary"
text="{{ __('shop::app.checkout.cart.proceed-to-checkout') }}"
cart-details="{{ $cart }}"
minimum-order-amount="{{ $minimumOrderAmount }}"
minimum-order-message="{{ __('shop::app.checkout.cart.minimum-order-message', ['amount' => $minimumOrderAmount]) }}">
is-minimum-order-completed="{{ $cart->checkMinimumOrder() }}"
minimum-order-message="{{ __('shop::app.checkout.cart.minimum-order-message', ['amount' => core()->currency($minimumOrderAmount)]) }}">
</proceed-to-checkout>
@endif
</div>

View File

@ -96,9 +96,8 @@
href="{{ route('shop.checkout.onepage.index') }}"
add-class="btn btn-primary btn-lg"
text="{{ __('shop::app.minicart.checkout') }}"
cart-details="{{ $cart }}"
minimum-order-amount="{{ $minimumOrderAmount }}"
minimum-order-message="{{ __('shop::app.checkout.cart.minimum-order-message', ['amount' => $minimumOrderAmount]) }}"
is-minimum-order-completed="{{ $cart->checkMinimumOrder() }}"
minimum-order-message="{{ __('shop::app.checkout.cart.minimum-order-message', ['amount' => core()->currency($minimumOrderAmount)]) }}"
style="color: white;">
</proceed-to-checkout>
</div>

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
{
"/js/velocity.js": "/js/velocity.js?id=1b8afaddd07cc3f668b1",
"/js/velocity.js": "/js/velocity.js?id=4ac9d3094b2372ee0b3e",
"/css/velocity-admin.css": "/css/velocity-admin.css?id=4322502d80a0e4a0affd",
"/css/velocity.css": "/css/velocity.css?id=d1461e1147981876a7fd"
}

View File

@ -74,7 +74,7 @@
'checkoutUrl',
'checkoutText',
'subtotalText',
'minimumOrderAmount',
'isMinimumOrderCompleted',
'minimumOrderMessage'
],
@ -122,10 +122,7 @@
},
checkMinimumOrder: function (e) {
let base_sub_total = parseFloat(this.cartInformation.raw.base_sub_total);
let minimumOrderAmount = parseFloat(this.minimumOrderAmount);
if (! (base_sub_total > minimumOrderAmount)) {
if (! this.isMinimumOrderCompleted) {
e.preventDefault();
window.showAlert(`alert-warning`, 'Warning', this.minimumOrderMessage);
}

View File

@ -9,23 +9,16 @@ export default {
'addClass',
'text',
'cartDetails',
'minimumOrderAmount',
'isMinimumOrderCompleted',
'minimumOrderMessage'
],
methods: {
checkMinimumOrder: function (e) {
let base_sub_total = parseFloat(this.getCartDetails().base_sub_total);
let minimumOrderAmount = parseFloat(this.minimumOrderAmount);
if (! (base_sub_total > minimumOrderAmount)) {
if (! this.isMinimumOrderCompleted) {
e.preventDefault();
window.showAlert(`alert-warning`, 'Warning', this.minimumOrderMessage);
}
},
getCartDetails: function () {
return JSON.parse(this.cartDetails);
}
}
}

View File

@ -9,7 +9,7 @@
checkout-text="{{ __('shop::app.minicart.checkout') }}"
checkout-url="{{ route('shop.checkout.onepage.index') }}"
subtotal-text="{{ __('shop::app.checkout.cart.cart-subtotal') }}"
minimum-order-amount="{{ $minimumOrderAmount }}"
minimum-order-message="{{ __('shop::app.checkout.cart.minimum-order-message', ['amount' => $minimumOrderAmount]) }}">
is-minimum-order-completed="{{ Cart::checkMinimumOrder() }}"
minimum-order-message="{{ __('shop::app.checkout.cart.minimum-order-message', ['amount' => core()->currency($minimumOrderAmount)]) }}">
</mini-cart>
</div>

View File

@ -53,9 +53,8 @@
href="{{ route('shop.checkout.onepage.index') }}"
add-class="theme-btn text-uppercase col-12 remove-decoration fw6 text-center"
text="{{ __('velocity::app.checkout.proceed') }}"
cart-details="{{ $cart }}"
minimum-order-amount="{{ $minimumOrderAmount }}"
minimum-order-message="{{ __('shop::app.checkout.cart.minimum-order-message', ['amount' => $minimumOrderAmount]) }}">
is-minimum-order-completed="{{ $cart->checkMinimumOrder() }}"
minimum-order-message="{{ __('shop::app.checkout.cart.minimum-order-message', ['amount' => core()->currency($minimumOrderAmount)]) }}">
</proceed-to-checkout>
</div>
</div>