diff --git a/packages/Webkul/Admin/src/DataGrids/CartRuleCouponDataGrid.php b/packages/Webkul/Admin/src/DataGrids/CartRuleCouponDataGrid.php new file mode 100644 index 000000000..ccf8c6375 --- /dev/null +++ b/packages/Webkul/Admin/src/DataGrids/CartRuleCouponDataGrid.php @@ -0,0 +1,86 @@ + + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ +class CartRuleCouponDataGrid extends DataGrid +{ + protected $index = 'id'; + + protected $sortOrder = 'desc'; + + public function prepareQueryBuilder() + { + $queryBuilder = DB::table('cart_rule_coupons') + ->addSelect('id', 'code', 'created_at', 'expired_at', 'times_used') + ->where('cart_rule_coupons.cart_rule_id', request('id')); + + $this->setQueryBuilder($queryBuilder); + } + + public function addColumns() + { + $this->addColumn([ + 'index' => 'id', + 'label' => trans('admin::app.datagrid.id'), + 'type' => 'number', + 'searchable' => false, + 'sortable' => true, + 'filterable' => true + ]); + + $this->addColumn([ + 'index' => 'code', + 'label' => trans('admin::app.datagrid.coupon-code'), + 'type' => 'string', + 'searchable' => true, + 'sortable' => true, + 'filterable' => true + ]); + + $this->addColumn([ + 'index' => 'created_at', + 'label' => trans('admin::app.datagrid.created-date'), + 'type' => 'datetime', + 'sortable' => true, + 'searchable' => false, + 'filterable' => true + ]); + + $this->addColumn([ + 'index' => 'expired_at', + 'label' => trans('admin::app.datagrid.expiration-date'), + 'type' => 'datetime', + 'sortable' => true, + 'searchable' => false, + 'filterable' => true + ]); + + $this->addColumn([ + 'index' => 'times_used', + 'label' => trans('admin::app.datagrid.times-used'), + 'type' => 'number', + 'searchable' => true, + 'sortable' => true, + 'filterable' => true + ]); + } + + public function prepareMassActions() + { + $this->addMassAction([ + 'type' => 'delete', + 'action' => route('admin.cart-rule-coupons.mass-delete'), + 'label' => trans('admin::app.datagrid.delete'), + 'method' => 'DELETE' + ]); + } +} diff --git a/packages/Webkul/Admin/src/Resources/views/sales/orders/view.blade.php b/packages/Webkul/Admin/src/Resources/views/sales/orders/view.blade.php index c635af49e..a1b28cbd0 100755 --- a/packages/Webkul/Admin/src/Resources/views/sales/orders/view.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/sales/orders/view.blade.php @@ -332,7 +332,13 @@ @if ($order->base_discount_amount > 0) - {{ __('admin::app.sales.orders.discount') }} + + {{ __('admin::app.sales.orders.discount') }} + + @if ($order->coupon_code) + ({{ $order->coupon_code }}) + @endif + - {{ core()->formatBasePrice($order->base_discount_amount) }} diff --git a/packages/Webkul/CartRule/src/Helpers/CartRule.php b/packages/Webkul/CartRule/src/Helpers/CartRule.php index faef6fa22..942fe77ea 100644 --- a/packages/Webkul/CartRule/src/Helpers/CartRule.php +++ b/packages/Webkul/CartRule/src/Helpers/CartRule.php @@ -380,6 +380,8 @@ class CartRule break; } + $selectedShipping->save(); + $cartAppliedCartRuleIds = array_merge(explode(',', $cart->applied_cart_rule_ids), $appliedRuleIds); $cartAppliedCartRuleIds = array_filter($cartAppliedCartRuleIds); diff --git a/packages/Webkul/CartRule/src/Listeners/Cart.php b/packages/Webkul/CartRule/src/Listeners/Cart.php index f886166b4..f039059c1 100644 --- a/packages/Webkul/CartRule/src/Listeners/Cart.php +++ b/packages/Webkul/CartRule/src/Listeners/Cart.php @@ -2,6 +2,8 @@ namespace Webkul\CartRule\Listeners; +use Webkul\CartRule\Helpers\CartRule; + /** * Cart event handler * @@ -10,5 +12,32 @@ namespace Webkul\CartRule\Listeners; */ class Cart { + /** + * CartRule object + * + * @var CartRule + */ + protected $cartRuleHepler; + /** + * Create a new listener instance. + * + * @param Webkul\CartRule\Repositories\CartRule $cartRuleHepler + * @return void + */ + public function __construct(CartRule $cartRuleHepler) + { + $this->cartRuleHepler = $cartRuleHepler; + } + + /** + * Aplly valid cart rules to cart + * + * @param Cart $cart + * @return void + */ + public function applyCartRules($cart) + { + $this->cartRuleHepler->collect(); + } } \ No newline at end of file diff --git a/packages/Webkul/CartRule/src/Providers/EventServiceProvider.php b/packages/Webkul/CartRule/src/Providers/EventServiceProvider.php index a935da915..a5b5d7133 100755 --- a/packages/Webkul/CartRule/src/Providers/EventServiceProvider.php +++ b/packages/Webkul/CartRule/src/Providers/EventServiceProvider.php @@ -15,5 +15,7 @@ class EventServiceProvider extends ServiceProvider public function boot() { Event::listen('checkout.order.save.after', 'Webkul\CartRule\Listeners\Order@manageCartRule'); + + Event::listen('checkout.cart.collect.totals.before', 'Webkul\CartRule\Listeners\Cart@applyCartRules'); } } \ No newline at end of file diff --git a/packages/Webkul/CatalogRule/src/Helpers/CatalogRuleProduct.php b/packages/Webkul/CatalogRule/src/Helpers/CatalogRuleProduct.php index f700fb5fe..5be4b124f 100644 --- a/packages/Webkul/CatalogRule/src/Helpers/CatalogRuleProduct.php +++ b/packages/Webkul/CatalogRule/src/Helpers/CatalogRuleProduct.php @@ -134,7 +134,7 @@ class CatalogRuleProduct return $qb; foreach ($rule->conditions as $condition) { - if (! $condition['attribute'] || ! $condition['value']) + if (! $condition['attribute'] || ! isset($condition['value']) || is_null($condition['value']) || $condition['value'] == '') continue; $chunks = explode('|', $condition['attribute']); @@ -204,6 +204,7 @@ class CatalogRuleProduct ->orderBy('channel_id', 'asc') ->orderBy('customer_group_id', 'asc') ->orderBy('product_id', 'asc') + ->orderBy('sort_order', 'asc') ->orderBy('catalog_rule_id', 'asc'); if ($product) { diff --git a/packages/Webkul/Checkout/src/Models/Cart.php b/packages/Webkul/Checkout/src/Models/Cart.php index 01cddea2b..9088531fa 100755 --- a/packages/Webkul/Checkout/src/Models/Cart.php +++ b/packages/Webkul/Checkout/src/Models/Cart.php @@ -12,8 +12,6 @@ class Cart extends Model implements CartContract protected $guarded = ['id', 'created_at', 'updated_at']; - protected $hidden = ['coupon_code']; - protected $with = ['items', 'items.children']; /** diff --git a/packages/Webkul/Shop/src/Http/Controllers/OnepageController.php b/packages/Webkul/Shop/src/Http/Controllers/OnepageController.php index a77f66752..12dad01aa 100755 --- a/packages/Webkul/Shop/src/Http/Controllers/OnepageController.php +++ b/packages/Webkul/Shop/src/Http/Controllers/OnepageController.php @@ -8,9 +8,6 @@ use Webkul\Shipping\Facades\Shipping; use Webkul\Payment\Facades\Payment; use Webkul\Checkout\Http\Requests\CustomerAddressForm; use Webkul\Sales\Repositories\OrderRepository; -use Webkul\Discount\Helpers\Cart\CouponAbleRule as Coupon; -use Webkul\Discount\Helpers\Cart\NonCouponAbleRule as NonCoupon; -use Webkul\Discount\Helpers\Cart\ValidatesDiscount; use Webkul\Customer\Repositories\CustomerRepository; /** @@ -22,13 +19,6 @@ use Webkul\Customer\Repositories\CustomerRepository; */ class OnepageController extends Controller { - /** - * OrderRepository object - * - * @var array - */ - protected $orderRepository; - /** * Contains route related configuration * @@ -37,21 +27,11 @@ class OnepageController extends Controller protected $_config; /** - * CouponAbleRule instance object + * OrderRepository object * + * @var array */ - protected $coupon; - - /** - * NoncouponAbleRule instance object - * - */ - protected $nonCoupon; - - /** - * ValidatesDiscount instance object - */ - protected $validatesDiscount; + protected $orderRepository; /** * customerRepository instance object @@ -61,25 +41,17 @@ class OnepageController extends Controller /** * Create a new controller instance. * - * @param \Webkul\Attribute\Repositories\OrderRepository $orderRepository + * @param \Webkul\Attribute\Repositories\OrderRepository $orderRepository + * @param \Webkul\Customer\Repositories\CustomerRepository $customerRepository * @return void */ public function __construct( OrderRepository $orderRepository, - Coupon $coupon, - NonCoupon $nonCoupon, - ValidatesDiscount $validatesDiscount, CustomerRepository $customerRepository ) { - $this->coupon = $coupon; - - $this->nonCoupon = $nonCoupon; - $this->orderRepository = $orderRepository; - $this->validatesDiscount = $validatesDiscount; - $this->customerRepository = $customerRepository; $this->_config = request('_config'); @@ -100,8 +72,6 @@ class OnepageController extends Controller if (! auth()->guard('customer')->check() && $cart->haveDownloadableItems()) return redirect()->route('customer.session.index'); - $this->nonCoupon->apply(); - Cart::collectTotals(); return view($this->_config['view'], compact('cart')); @@ -139,8 +109,6 @@ class OnepageController extends Controller } else { $cart = Cart::getCart(); - $this->nonCoupon->apply(); - Cart::collectTotals(); if ($cart->haveStockableItems()) { @@ -166,8 +134,6 @@ class OnepageController extends Controller if (Cart::hasError() || !$shippingMethod || !Cart::saveShippingMethod($shippingMethod)) return response()->json(['redirect_url' => route('shop.checkout.cart.index')], 403); - $this->nonCoupon->apply(); - Cart::collectTotals(); return response()->json(Payment::getSupportedPaymentMethods()); @@ -185,8 +151,6 @@ class OnepageController extends Controller if (Cart::hasError() || ! $payment || ! Cart::savePaymentMethod($payment)) return response()->json(['redirect_url' => route('shop.checkout.cart.index')], 403); - $this->nonCoupon->apply(); - Cart::collectTotals(); $cart = Cart::getCart(); @@ -253,23 +217,53 @@ class OnepageController extends Controller { $cart = Cart::getCart(); - $this->validatesDiscount->validate(); - - if ($cart->haveStockableItems() && ! $cart->shipping_address) { + if ($cart->haveStockableItems() && ! $cart->shipping_address) throw new \Exception(trans('Please check shipping address.')); - } - if (! $cart->billing_address) { + if (! $cart->billing_address) throw new \Exception(trans('Please check billing address.')); - } - if ($cart->haveStockableItems() && ! $cart->selected_shipping_rate) { + if ($cart->haveStockableItems() && ! $cart->selected_shipping_rate) throw new \Exception(trans('Please specify shipping method.')); - } - if (! $cart->payment) { + if (! $cart->payment) throw new \Exception(trans('Please specify payment method.')); - } + } + + /** + * Check Customer is exist or not + * + * @return Response + */ + public function checkExistCustomer() + { + $customer = $this->customerRepository->findOneWhere([ + 'email' => request()->email + ]); + + if (! is_null($customer)) + return 'true'; + + return 'false'; + } + + /** + * Login for checkout + * + * @return Response + */ + public function loginForCheckout() + { + $this->validate(request(), [ + 'email' => 'required|email' + ]); + + if (! auth()->guard('customer')->attempt(request(['email', 'password']))) + return response()->json(['error' => trans('shop::app.customer.login-form.invalid-creds')]); + + Cart::mergeCart(); + + return response()->json(['success' => 'Login successfully']); } /** @@ -333,40 +327,4 @@ class OnepageController extends Controller ], 422); } } - - /** - * Check Customer is exist or not - * - * @return Response - */ - public function checkExistCustomer() - { - //check customer is exist or not - $customer = $this->customerRepository->findOneWhere([ - 'email' => request()->email - ]); - - //if customer is exist - if (! is_null($customer)) { - return 'true'; - } - return 'false'; - } - - //login for checkout - public function loginForCheckout() - { - $this->validate(request(), [ - 'email' => 'required|email' - ]); - - if (! auth()->guard('customer')->attempt(request(['email', 'password']))) { - return response()->json(['error' => trans('shop::app.customer.login-form.invalid-creds')]); - } - - //Event passed to prepare cart after login - Cart::mergeCart(); - - return response()->json(['success' => 'Login successfully']); - } } \ No newline at end of file diff --git a/packages/Webkul/Shop/src/Resources/lang/en/app.php b/packages/Webkul/Shop/src/Resources/lang/en/app.php index 7095c10b6..c538d53b8 100755 --- a/packages/Webkul/Shop/src/Resources/lang/en/app.php +++ b/packages/Webkul/Shop/src/Resources/lang/en/app.php @@ -499,7 +499,8 @@ return [ 'free-desc' => 'This is a free shipping', 'flat-desc' => 'This is a flat rate', 'password' => 'Password', - 'login-exist-message' => 'You already have an account with us, Sign in or continue as guest.' + 'login-exist-message' => 'You already have an account with us, Sign in or continue as guest.', + 'enter-coupon-code' => 'Enter Coupon Code' ], 'total' => [ @@ -513,9 +514,13 @@ return [ 'disc-amount' => 'Amount discounted', 'new-grand-total' => 'New Grand Total', 'coupon' => 'Coupon', - 'coupon-applied' => 'Coupon Applied', + 'coupon-applied' => 'Applied Coupon', 'remove-coupon' => 'Remove Coupon', - 'cannot-apply-coupon' => 'Cannot Apply Coupon' + 'cannot-apply-coupon' => 'Cannot Apply Coupon', + 'invalid-coupon' => 'Coupon code is invalid.', + 'success-coupon' => 'Coupon code applied successfully.', + 'remove-coupon' => 'Coupon code removed successfully.', + 'coupon-apply-issue' => 'Coupon code can\'t be applied.' ], 'success' => [ diff --git a/packages/Webkul/Shop/src/Resources/views/checkout/cart/index.blade.php b/packages/Webkul/Shop/src/Resources/views/checkout/cart/index.blade.php index 269fc5ca4..72aa3c9bd 100755 --- a/packages/Webkul/Shop/src/Resources/views/checkout/cart/index.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/checkout/cart/index.blade.php @@ -127,6 +127,8 @@ @include('shop::checkout.total.summary', ['cart' => $cart]) + + {!! view_render_event('bagisto.shop.checkout.cart.summary.after', ['cart' => $cart]) !!} @@ -155,6 +157,7 @@ @endsection @push('scripts') + @include('shop::checkout.cart.coupon') 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 bbab890a3..70d5d87d6 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 @@ -24,15 +24,12 @@ @endif -
base_discount_amount && $cart->base_discount_amount > 0) style="display: block;" @else style="display: none;" @endif>
@@ -43,36 +40,4 @@ {{ core()->currency($cart->base_grand_total) }} - -
is('checkout/cart')) v-if="parseInt(discount)" @endif> - @if (! request()->is('checkout/cart')) - @if (! $cart->coupon_code) -
-
-
-
- -
- -
* @{{ error_message }}
- - -
-
-
- @else -
-
- - - -
-
- @endif - @endif -
\ No newline at end of file