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.
117 lines
4.0 KiB
117 lines
4.0 KiB
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use App\Models\Shift;
|
|
use Brian2694\Toastr\Facades\Toastr;
|
|
|
|
class ShiftController extends Controller
|
|
{
|
|
public function list()
|
|
{
|
|
$shifts= Shift::latest()->paginate(25);
|
|
$total=$shifts->total();
|
|
// dd($shifts);
|
|
return view('admin-views.shift.list',[
|
|
'shifts'=>$shifts,
|
|
'total'=>$total,
|
|
]);
|
|
}
|
|
public function store(Request $request)
|
|
{
|
|
$request->validate([
|
|
'start_time'=>'required|date_format:H:i',
|
|
'end_time'=>'required|date_format:H:i|after:start_time',
|
|
'name'=>'required|max:191',
|
|
],[
|
|
'end_time.after'=>translate('messages.End time must be after the start time')
|
|
]);
|
|
|
|
$temp = Shift::where(function ($q) use ($request) {
|
|
return $q->where(function ($query) use ($request) {
|
|
return $query->where('start_time', '<=', $request->start_time)->where('end_time', '>=', $request->start_time);
|
|
})->orWhere(function ($query) use ($request) {
|
|
return $query->where('start_time', '<=', $request->end_time)->where('end_time', '>=', $request->end_time);
|
|
});
|
|
})
|
|
->first();
|
|
|
|
if (isset($temp)) {
|
|
return response()->json(['errors' => [
|
|
['code' => 'overlaped', 'message' => translate('messages.Shift_overlaped')]
|
|
]]);
|
|
}
|
|
$shift = new Shift();
|
|
$shift->name = $request->name;
|
|
$shift->start_time = $request->start_time;
|
|
$shift->end_time = $request->end_time;
|
|
$shift->save();
|
|
|
|
Toastr::success(translate('messages.shift_added_successfully'));
|
|
return response()->json(['success'=>true]);
|
|
|
|
}
|
|
public function status(Request $request)
|
|
{
|
|
$shift = Shift::findOrFail($request->id);
|
|
$shift->status = $request->status;
|
|
$shift->save();
|
|
Toastr::success(translate('messages.shift_status_updated'));
|
|
return back();
|
|
}
|
|
public function update(Request $request )
|
|
{
|
|
// dd($request->all());
|
|
$id=$request->id;
|
|
$request->validate([
|
|
'start_time'=>'required',
|
|
'end_time'=>'required|after:start_time',
|
|
'name'=>'required|max:191',
|
|
],[
|
|
'end_time.after'=>translate('messages.End time must be after the start time')
|
|
]);
|
|
$temp = Shift::where('id' ,'!=', $id)->where(function ($q) use ($request) {
|
|
return $q->where(function ($query) use ($request) {
|
|
return $query->where('start_time', '<=', $request->start_time)->where('end_time', '>=', $request->start_time);
|
|
})->orWhere(function ($query) use ($request) {
|
|
return $query->where('start_time', '<=', $request->end_time)->where('end_time', '>=', $request->end_time);
|
|
});
|
|
})
|
|
->first();
|
|
|
|
if (isset($temp)) {
|
|
return response()->json(['errors' => [
|
|
['code' => 'overlaped', 'message' => translate('messages.Shift_overlaped')]
|
|
]]);
|
|
}
|
|
Shift::find($id)->update([
|
|
'name' => $request->name,
|
|
'start_time' => $request->start_time,
|
|
'end_time' => $request->end_time,
|
|
]);
|
|
|
|
Toastr::success(translate('messages.shift_updated_successfully'));
|
|
return response()->json(['success'=>true]);
|
|
}
|
|
public function destroy(Shift $shift)
|
|
{
|
|
$shift->delete();
|
|
Toastr::success(translate('messages.shift_deleted_successfully'));
|
|
return back();
|
|
}
|
|
public function search(Request $request){
|
|
$key = explode(' ', $request['search']);
|
|
$shifts=Shift::where(function ($q) use ($key) {
|
|
foreach ($key as $value) {
|
|
$q->orWhere('name', 'like', "%{$value}%");
|
|
}
|
|
})
|
|
->latest()->paginate(50);
|
|
return response()->json([
|
|
'view'=>view('admin-views.shift.partials._table',compact('shifts'))->render(),
|
|
'total'=>$shifts->count()
|
|
]);
|
|
}
|
|
}
|
|
|