You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
5.7 KiB
153 lines
5.7 KiB
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Coupon;
|
|
use Brian2694\Toastr\Facades\Toastr;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class CouponController extends Controller
|
|
{
|
|
public function add_new(Request $request)
|
|
{
|
|
$key = explode(' ', $request['search']);
|
|
$coupons = Coupon::where('created_by','admin')
|
|
->when(isset($key), function($query)use($key){
|
|
$query->where( function ($q) use ($key) {
|
|
foreach ($key as $value) {
|
|
$q->orWhere('title', 'like', "%{$value}%")
|
|
->orWhere('code', 'like', "%{$value}%");
|
|
}
|
|
});
|
|
})
|
|
->latest()->paginate(config('default_pagination'));
|
|
return view('admin-views.coupon.index', compact('coupons'));
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
$request->validate([
|
|
'code' => 'required|unique:coupons|max:100',
|
|
'title' => 'required|max:191',
|
|
'start_date' => 'required',
|
|
'expire_date' => 'required',
|
|
'discount' => 'required',
|
|
'coupon_type' => 'required|in:zone_wise,restaurant_wise,free_delivery,first_order,default',
|
|
'zone_ids' => 'required_if:coupon_type,zone_wise',
|
|
'restaurant_ids' => 'required_if:coupon_type,restaurant_wise'
|
|
]);
|
|
$data = '';
|
|
$customer_id = $request->customer_ids ?? ['all'];
|
|
if($request->coupon_type == 'zone_wise')
|
|
{
|
|
$data = $request->zone_ids;
|
|
}
|
|
else if($request->coupon_type == 'restaurant_wise')
|
|
{
|
|
$data = $request->restaurant_ids;
|
|
}
|
|
|
|
DB::table('coupons')->insert([
|
|
'title' => $request->title,
|
|
'code' => $request->code,
|
|
'limit' => $request->coupon_type=='first_order'?1:$request->limit,
|
|
'coupon_type' => $request->coupon_type,
|
|
'start_date' => $request->start_date,
|
|
'expire_date' => $request->expire_date,
|
|
'min_purchase' => $request->min_purchase != null ? $request->min_purchase : 0,
|
|
'max_discount' => $request->max_discount != null ? $request->max_discount : 0,
|
|
'discount' => $request->discount_type == 'amount' ? $request->discount : $request['discount'],
|
|
'discount_type' => $request->discount_type??'',
|
|
'status' => 1,
|
|
'created_by' => 'admin',
|
|
'data' => json_encode($data),
|
|
'customer_id' => json_encode($customer_id),
|
|
'created_at' => now(),
|
|
'updated_at' => now()
|
|
]);
|
|
|
|
Toastr::success(translate('messages.coupon_added_successfully'));
|
|
return back();
|
|
}
|
|
|
|
public function edit($id)
|
|
{
|
|
$coupon = Coupon::where(['id' => $id])->first();
|
|
// dd(json_decode($coupon->data));
|
|
return view('admin-views.coupon.edit', compact('coupon'));
|
|
}
|
|
|
|
public function update(Request $request, $id)
|
|
{
|
|
$request->validate([
|
|
'code' => 'required|max:100|unique:coupons,code,'.$id,
|
|
'title' => 'required|max:191',
|
|
'start_date' => 'required',
|
|
'expire_date' => 'required',
|
|
'discount' => 'required',
|
|
'zone_ids' => 'required_if:coupon_type,zone_wise',
|
|
'restaurant_ids' => 'required_if:coupon_type,restaurant_wise'
|
|
]);
|
|
$data = '';
|
|
if($request->coupon_type == 'zone_wise')
|
|
{
|
|
$data = $request->zone_ids;
|
|
}
|
|
else if($request->coupon_type == 'restaurant_wise')
|
|
{
|
|
$data = $request->restaurant_ids;
|
|
}
|
|
$customer_id = $request->customer_ids ?? ['all'];
|
|
DB::table('coupons')->where(['id' => $id])->update([
|
|
'title' => $request->title,
|
|
'code' => $request->code,
|
|
'limit' => $request->coupon_type=='first_order'?1:$request->limit,
|
|
'coupon_type' => $request->coupon_type,
|
|
'start_date' => $request->start_date,
|
|
'expire_date' => $request->expire_date,
|
|
'min_purchase' => $request->min_purchase != null ? $request->min_purchase : 0,
|
|
'max_discount' => $request->max_discount != null ? $request->max_discount : 0,
|
|
'discount' => $request->discount_type == 'amount' ? $request->discount : $request['discount'],
|
|
'discount_type' => $request->discount_type??'',
|
|
'data' => json_encode($data),
|
|
'customer_id' => json_encode($customer_id),
|
|
'updated_at' => now()
|
|
]);
|
|
|
|
Toastr::success(translate('messages.coupon_updated_successfully'));
|
|
return redirect()->route('admin.coupon.add-new');
|
|
}
|
|
|
|
public function status(Request $request)
|
|
{
|
|
$coupon = Coupon::find($request->id);
|
|
$coupon->status = $request->status;
|
|
$coupon->save();
|
|
Toastr::success(translate('messages.coupon_status_updated'));
|
|
return back();
|
|
}
|
|
|
|
public function delete(Request $request)
|
|
{
|
|
$coupon = Coupon::find($request->id);
|
|
$coupon->delete();
|
|
Toastr::success(translate('messages.coupon_deleted_successfully'));
|
|
return back();
|
|
}
|
|
|
|
// public function search(Request $request){
|
|
// $key = explode(' ', $request['search']);
|
|
// $coupons=Coupon::where(function ($q) use ($key) {
|
|
// foreach ($key as $value) {
|
|
// $q->orWhere('title', 'like', "%{$value}%")
|
|
// ->orWhere('code', 'like', "%{$value}%");
|
|
// }
|
|
// })->where('created_by','admin')->limit(50)->get();
|
|
// return response()->json([
|
|
// 'view'=>view('admin-views.coupon.partials._table',compact('coupons'))->render(),
|
|
// 'count'=>$coupons->count()
|
|
// ]);
|
|
// }
|
|
}
|
|
|