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:
commit
130ae68d33
|
|
@ -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),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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' => [
|
||||
|
|
|
|||
|
|
@ -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' => [
|
||||
|
|
|
|||
|
|
@ -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' => [
|
||||
|
|
|
|||
|
|
@ -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' => [
|
||||
|
|
|
|||
|
|
@ -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' => [
|
||||
|
|
|
|||
|
|
@ -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' => [
|
||||
|
|
|
|||
|
|
@ -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' => [
|
||||
|
|
|
|||
|
|
@ -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' => [
|
||||
|
|
|
|||
|
|
@ -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' => [
|
||||
|
|
|
|||
|
|
@ -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' => [
|
||||
|
|
|
|||
|
|
@ -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' => [
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
Loading…
Reference in New Issue