| Current Path : /home/users/unlimited/www/admin.priyotama.com/app/Http/Controllers/Vendor/ |
| Current File : /home/users/unlimited/www/admin.priyotama.com/app/Http/Controllers/Vendor/CouponController.php |
<?php
namespace App\Http\Controllers\Vendor;
use App\Http\Controllers\Controller;
use App\Models\Coupon;
use Brian2694\Toastr\Facades\Toastr;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\CentralLogics\Helpers;
use App\Models\Translation;
class CouponController extends Controller
{
public function add_new(Request $request)
{
$key = explode(' ', $request['search']);
$coupons = Coupon::latest()->where('created_by', 'vendor' )->where('store_id',Helpers::get_store_id())
->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}%");
}
});
}
)
->paginate(config('default_pagination'));
return view('vendor-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:free_delivery,default',
'title.0' => 'required',
],[
'title.0.required'=>translate('default_title_is_required'),
]);
$customer_id = $request->customer_ids ?? ['all'];
$data = "";
$coupon = new Coupon();
$coupon->title = $request->title[array_search('default', $request->lang)];
$coupon->code = $request->code;
$coupon->limit = $request->coupon_type=='first_order'?1:$request->limit;
$coupon->coupon_type = $request->coupon_type;
$coupon->start_date = $request->start_date;
$coupon->expire_date = $request->expire_date;
$coupon->min_purchase = $request->min_purchase != null ? $request->min_purchase : 0;
$coupon->max_discount = $request->max_discount != null ? $request->max_discount : 0;
$coupon->discount = $request->discount_type == 'amount' ? $request->discount : $request['discount'];
$coupon->discount_type = $request->discount_type??'';
$coupon->status = 1;
$coupon->created_by = 'vendor';
$coupon->data = json_encode($data);
$coupon->store_id =Helpers::get_store_id();
$coupon->module_id =Helpers::get_store_data()->module_id;
$coupon->customer_id = json_encode($customer_id);
$coupon->save();
$data = [];
$default_lang = str_replace('_', '-', app()->getLocale());
foreach ($request->lang as $index => $key) {
if($default_lang == $key && !($request->title[$index])){
if ($key != 'default') {
array_push($data, array(
'translationable_type' => 'App\Models\Coupon',
'translationable_id' => $coupon->id,
'locale' => $key,
'key' => 'title',
'value' => $coupon->title,
));
}
}else{
if ($request->title[$index] && $key != 'default') {
array_push($data, array(
'translationable_type' => 'App\Models\Coupon',
'translationable_id' => $coupon->id,
'locale' => $key,
'key' => 'title',
'value' => $request->title[$index],
));
}
}
}
Translation::insert($data);
Toastr::success(translate('messages.coupon_added_successfully'));
return back();
}
public function edit($id)
{
$coupon = Coupon::withoutGlobalScope('translate')->where(['id' => $id])->where('created_by', 'vendor' )->first();
// dd(json_decode($coupon->data));
return view('vendor-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',
'coupon_type' => 'required|in:free_delivery,default',
'title.0' => 'required',
],[
'title.0.required'=>translate('default_title_is_required'),
]);
$customer_id = $request->customer_ids ?? ['all'];
$coupon = Coupon::find($id);
$coupon->title = $request->title[array_search('default', $request->lang)];
$coupon->code = $request->code;
$coupon->limit = $request->coupon_type=='first_order'?1:$request->limit;
$coupon->coupon_type = $request->coupon_type;
$coupon->start_date = $request->start_date;
$coupon->expire_date = $request->expire_date;
$coupon->min_purchase = $request->min_purchase != null ? $request->min_purchase : 0;
$coupon->max_discount = $request->max_discount != null ? $request->max_discount : 0;
$coupon->discount = $request->discount_type == 'amount' ? $request->discount : $request['discount'];
$coupon->discount_type = $request->discount_type??'';
$coupon->customer_id = json_encode($customer_id);
$coupon->save();
$default_lang = str_replace('_', '-', app()->getLocale());
foreach ($request->lang as $index => $key) {
if($default_lang == $key && !($request->title[$index])){
if ($key != 'default') {
Translation::updateOrInsert(
[
'translationable_type' => 'App\Models\Coupon',
'translationable_id' => $coupon->id,
'locale' => $key,
'key' => 'title'
],
['value' => $coupon->title]
);
}
}else{
if ($request->title[$index] && $key != 'default') {
Translation::updateOrInsert(
[
'translationable_type' => 'App\Models\Coupon',
'translationable_id' => $coupon->id,
'locale' => $key,
'key' => 'title'
],
['value' => $request->title[$index]]
);
}
}
}
Toastr::success(translate('messages.coupon_updated_successfully'));
return redirect()->route('vendor.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('store_id',Helpers::get_store_id())->limit(50)->get();
// return response()->json([
// 'view'=>view('vendor-views.coupon.partials._table',compact('coupons'))->render(),
// 'count'=>$coupons->count()
// ]);
// }
}