File: /home/mobilech/nepalapplesupport.com/shop/app/Http/Controllers/Web/CouponController.php
<?php
namespace App\Http\Controllers\Web;
use App\CPU\CartManager;
use App\CPU\Helpers;
use App\Http\Controllers\Controller;
use App\Model\Coupon;
use App\Model\Order;
use Carbon\Carbon;
use Illuminate\Http\Request;
class CouponController extends Controller
{
public function apply(Request $request)
{
$couponLimit = Order::where(['customer_id'=> auth('customer')->id(), 'coupon_code'=> $request['code']])
->groupBy('order_group_id')->get()->count();
$coupon_f = Coupon::where(['code' => $request['code']])
->where('status',1)
->whereDate('start_date', '<=', date('Y-m-d'))
->whereDate('expire_date', '>=', date('Y-m-d'))->first();
if(!$coupon_f){
return response()->json([
'status' => 0,
'messages' => ['0' => 'Invalid Coupon']
]);
}
if($coupon_f && $coupon_f->coupon_type == 'first_order'){
$coupon = $coupon_f;
}else{
$coupon = $coupon_f->limit > $couponLimit ? $coupon_f : null;
}
if($coupon && $coupon->coupon_type == 'first_order'){
$orders = Order::where(['customer_id'=> auth('customer')->id()])->count();
if($orders>0){
return response()->json([
'status' => 0,
'messages' => ['0' => "Sorry this coupon is not valid for this user!"]
]);
}
}
if ($coupon && (($coupon->coupon_type == 'first_order') || ($coupon->coupon_type == 'discount_on_purchase' && ($coupon->customer_id == '0' || $coupon->customer_id == auth('customer')->id())))) {
$total = 0;
foreach (CartManager::get_cart() as $cart) {
if($coupon->seller_id == '0' || (is_null($coupon->seller_id) && $cart->seller_is=='admin') || ($coupon->seller_id == $cart->seller_id && $cart->seller_is=='seller')){
$product_subtotal = $cart['price'] * $cart['quantity'];
$total += $product_subtotal;
}
}
if ($total >= $coupon['min_purchase']) {
if ($coupon['discount_type'] == 'percentage') {
$discount = (($total / 100) * $coupon['discount']) > $coupon['max_discount'] ? $coupon['max_discount'] : (($total / 100) * $coupon['discount']);
} else {
$discount = $coupon['discount'];
}
session()->put('coupon_code', $request['code']);
session()->put('coupon_type', $coupon->coupon_type);
session()->put('coupon_discount', $discount);
session()->put('coupon_bearer', $coupon->coupon_bearer);
session()->put('coupon_seller_id', $coupon->seller_id);
return response()->json([
'status' => 1,
'discount' => Helpers::currency_converter($discount),
'total' => Helpers::currency_converter($total - $discount),
'messages' => ['0' => 'Coupon Applied Successfully!']
]);
}
}elseif($coupon && $coupon->coupon_type == 'free_delivery' && ($coupon->customer_id == '0' || $coupon->customer_id == auth('customer')->id())){
$total = 0;
$shipping_fee = 0;
foreach (CartManager::get_cart() as $cart) {
if($coupon->seller_id == '0' || (is_null($coupon->seller_id) && $cart->seller_is=='admin') || ($coupon->seller_id == $cart->seller_id && $cart->seller_is=='seller')) {
$product_subtotal = $cart['price'] * $cart['quantity'];
$total += $product_subtotal;
if (is_null($coupon->seller_id) || $coupon->seller_id == '0' || $coupon->seller_id == $cart->seller_id) {
$shipping_fee += $cart['shipping_cost'];
}
}
}
if ($total >= $coupon['min_purchase']) {
session()->put('coupon_code', $request['code']);
session()->put('coupon_type', $coupon->coupon_type);
session()->put('coupon_discount', $shipping_fee);
session()->put('coupon_bearer', $coupon->coupon_bearer);
session()->put('coupon_seller_id', $coupon->seller_id);
return response()->json([
'status' => 1,
'discount' => Helpers::currency_converter($shipping_fee),
'total' => Helpers::currency_converter($total - $shipping_fee),
'messages' => ['0' => 'Coupon Applied Successfully!']
]);
}
}
return response()->json([
'status' => 0,
'messages' => ['0' => 'Invalid Coupon']
]);
}
}