diff --git a/BACKEND/Modules/Admin/app/Http/Controllers/BannerController.php b/BACKEND/Modules/Admin/app/Http/Controllers/BannerController.php index c0da624..e320ee5 100755 --- a/BACKEND/Modules/Admin/app/Http/Controllers/BannerController.php +++ b/BACKEND/Modules/Admin/app/Http/Controllers/BannerController.php @@ -23,6 +23,7 @@ class BannerController extends Controller public function create(BannerRequest $request) { + $banner = new Banner; if ($request->has('title')) { diff --git a/BACKEND/Modules/Admin/app/Http/Controllers/TicketController.php b/BACKEND/Modules/Admin/app/Http/Controllers/TicketController.php index fa810c2..884584f 100644 --- a/BACKEND/Modules/Admin/app/Http/Controllers/TicketController.php +++ b/BACKEND/Modules/Admin/app/Http/Controllers/TicketController.php @@ -13,6 +13,8 @@ use Carbon\Carbon; use Carbon\CarbonPeriod; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Modules\Admin\app\Models\Category; +use Modules\Admin\app\Models\Ticket; class TicketController extends Controller { @@ -21,49 +23,167 @@ class TicketController extends Controller use HasSearchRequest; use AnalyzeData; - public function get(Request $request) + public function getByUserId(Request $request) { - // Get data tickets and user -> pagination, orderby 'desc', filter: fromDate, toDate, status, type, name + $tickets = new Ticket; + + // Order by + $this->orderByRequest($tickets, $request); + + // Filter + $this->filterRequest( + builder: $tickets, + request: $request, + filterKeys: [ + 'type' => self::F_TEXT, + 'reason' => self::F_TEXT, + 'updated_by' => self::F_TEXT, + 'start_date' => [ + 'type' => self::F_THAN_EQ_DATETIME, + 'column' => 'tickets.start_date' + ], + 'end_date' => [ + 'type' => self::F_THAN_EQ_DATETIME, + 'column' => 'tickets.end_date' + ], + ] + ); + + $responseData = array_merge( + $tickets->where('user_id',auth('admins')->user()->id)->orderBy('created_at', 'desc')->paginate($request->get('per_page'))->toArray(), + ['status' => true] + ); + + return response()->json($responseData); + + } + + public function getAll(Request $request) + { + $tickets = new Ticket; + + // Order by + $this->orderByRequest($tickets, $request); + + // Filter + $this->filterRequest( + builder: $tickets, + request: $request, + filterKeys: [ + 'type' => self::F_TEXT, + 'reason' => self::F_TEXT, + 'updated_by' => self::F_TEXT, + 'start_date' => [ + 'type' => self::F_THAN_EQ_DATETIME, + 'column' => 'tickets.start_date' + ], + 'end_date' => [ + 'type' => self::F_THAN_EQ_DATETIME, + 'column' => 'tickets.end_date' + ], + ] + ); + + $responseData = array_merge( + $tickets->orderBy('created_at', 'desc')->paginate($request->get('per_page'))->toArray(), + ['status' => true] + ); + + return response()->json($responseData); + } public function createTicket(Request $request){ + + // Define validation rules + $rules = [ + 'start_date' => 'required|date', + 'start_period' => 'required|string', // Adjust the validation rule as per your requirements + 'end_date' => 'required|date|after_or_equal:start_date', + 'end_period' => 'required|string', // Adjust the validation rule as per your requirements + ]; + + // Validate the request + $request->validate($rules); + // return $request; + //Get data from request $startDate = $request->input('start_date'); //Start day $startPeriod = $request->input('start_period'); //The session begins $endDate = $request->input('end_date'); //End date $endPeriod = $request->input('end_period'); //Session ends - $user_id = $request->input('user_id'); // ID user create ticket - $results = $this->getAllPeriod($startDate, $startPeriod, $endDate, $endPeriod); + $user = auth('admins')->user(); // user create ticket + + // return $user; + + $ticket = Ticket::create([ + 'start_date' => Carbon::create($startDate)->setTimezone(env('TIME_ZONE')), + 'start_period' => $startPeriod, + 'end_date' => Carbon::create($endDate)->setTimezone(env('TIME_ZONE')), + 'end_period' => $endPeriod, + 'user_id' => $user->id + ]); + + // Send notification email to admin (list) + + + return response()->json(['data' => $ticket, 'status' => true]); } public function deleteTicket(Request $request){ + $rules = [ + 'ticket_id' => 'required' + ]; + + // Validate the request + $request->validate($rules); + $user = auth('admins')->user(); $ticket_id = $request->input('ticket_id'); + $ticket = Ticket::find($ticket_id); + if($ticket){ + // $user->id == user_id of ticket ---> delete + if($ticket->user_id == $user->id){ + $ticket->delete(); + return response()->json(['message' => 'delete success', 'status' => true]); + }else{ + return response()->json(['message' => 'You are committing an act of vandalism', 'status' => false]); + } + } - // $user->id == user_id of ticket ---> delete - - // else false + return response()->json(['message' => 'Delete fail', 'status' => false]); } public function handleTicket(Request $request){ + $rules = [ + 'ticket_id' => 'required', + 'action' => 'required' + ]; + + // Validate the request + $request->validate($rules); + $ticket_id = $request->input('ticket_id'); $admin_note = $request->input('admin_note'); $action = $request->input('action'); // 'confirm' or 'refuse' $admin = auth('admins')->user(); + $ticket = Ticket::find($ticket_id); + $results = $this->getAllPeriod($ticket->start_date, $ticket->start_period, $ticket->end_date, $ticket->end_period); + return $results; // $admin->id != user_id of ticket ---> continue // Confirm // Add records to the notes table like function Timekeeping.addNoteForUser() based on the $results array // Update updated_by and admin_note in tickets table - // Send notification email to admin (list) and users + // Send notification email to users // Refuse // Update updated_by and admin_note in tickets table - // Send notification email to admin (list) and users + // Send notification email to users // false } @@ -76,6 +196,8 @@ class TicketController extends Controller //Use CarbonPeriod to create a period from the start date to the end date $period = CarbonPeriod::create($startDate, $endDate); + $time_type = Category::where('c_type','TIME_TYPE'); + foreach ($period as $date) { //If it is the start date if ($date->isSameDay($startDate)) { diff --git a/BACKEND/Modules/Admin/routes/api.php b/BACKEND/Modules/Admin/routes/api.php index 722611b..5159102 100755 --- a/BACKEND/Modules/Admin/routes/api.php +++ b/BACKEND/Modules/Admin/routes/api.php @@ -138,10 +138,11 @@ Route::middleware('api') Route::group([ 'prefix' => 'ticket', ], function () { - Route::get('/', [TicketController::class, 'get']); - Route::post('/create', [TrackingController::class, 'createTicket'])->middleware('check.permission:admin.hr.staff'); - Route::get('/delete', [TrackingController::class, 'deleteTicket'])->middleware('check.permission:admin.hr.staff'); - Route::post('/handle-ticket', [TrackingController::class, 'handleTicket'])->middleware('check.permission:admin'); + Route::get('/all', [TicketController::class, 'getAll'])->middleware('check.permission:admin'); + Route::get('/getByUserId', [TicketController::class, 'getByUserId'])->middleware('check.permission:admin.hr.staff'); + Route::post('/create', [TicketController::class, 'createTicket'])->middleware('check.permission:admin.hr.staff'); + Route::get('/delete', [TicketController::class, 'deleteTicket'])->middleware('check.permission:admin.hr.staff'); + Route::post('/handle-ticket', [TicketController::class, 'handleTicket'])->middleware('check.permission:admin'); }); }); }); diff --git a/FRONTEND/src/pages/LeaveManagement/LeaveManagement.tsx b/FRONTEND/src/pages/LeaveManagement/LeaveManagement.tsx index 917f78f..6f152c4 100644 --- a/FRONTEND/src/pages/LeaveManagement/LeaveManagement.tsx +++ b/FRONTEND/src/pages/LeaveManagement/LeaveManagement.tsx @@ -415,15 +415,15 @@ const LeaveManagement = () => { })?.leave_days ?? 0 totalDayOff = totalDayOff + total return ( -