create API ticker

This commit is contained in:
JOSEPH LE 2024-08-07 13:22:21 +07:00
parent cb65f1fffc
commit a0a740cca3
4 changed files with 140 additions and 16 deletions

View File

@ -23,6 +23,7 @@ class BannerController extends Controller
public function create(BannerRequest $request) public function create(BannerRequest $request)
{ {
$banner = new Banner; $banner = new Banner;
if ($request->has('title')) { if ($request->has('title')) {

View File

@ -13,6 +13,8 @@ use Carbon\Carbon;
use Carbon\CarbonPeriod; use Carbon\CarbonPeriod;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Modules\Admin\app\Models\Category;
use Modules\Admin\app\Models\Ticket;
class TicketController extends Controller class TicketController extends Controller
{ {
@ -21,49 +23,167 @@ class TicketController extends Controller
use HasSearchRequest; use HasSearchRequest;
use AnalyzeData; 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){ 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 //Get data from request
$startDate = $request->input('start_date'); //Start day $startDate = $request->input('start_date'); //Start day
$startPeriod = $request->input('start_period'); //The session begins $startPeriod = $request->input('start_period'); //The session begins
$endDate = $request->input('end_date'); //End date $endDate = $request->input('end_date'); //End date
$endPeriod = $request->input('end_period'); //Session ends $endPeriod = $request->input('end_period'); //Session ends
$user_id = $request->input('user_id'); // ID user create ticket $user = auth('admins')->user(); // user create ticket
$results = $this->getAllPeriod($startDate, $startPeriod, $endDate, $endPeriod);
// 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){ public function deleteTicket(Request $request){
$rules = [
'ticket_id' => 'required'
];
// Validate the request
$request->validate($rules);
$user = auth('admins')->user(); $user = auth('admins')->user();
$ticket_id = $request->input('ticket_id'); $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 return response()->json(['message' => 'Delete fail', 'status' => false]);
// else false
} }
public function handleTicket(Request $request){ public function handleTicket(Request $request){
$rules = [
'ticket_id' => 'required',
'action' => 'required'
];
// Validate the request
$request->validate($rules);
$ticket_id = $request->input('ticket_id'); $ticket_id = $request->input('ticket_id');
$admin_note = $request->input('admin_note'); $admin_note = $request->input('admin_note');
$action = $request->input('action'); // 'confirm' or 'refuse' $action = $request->input('action'); // 'confirm' or 'refuse'
$admin = auth('admins')->user(); $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 // $admin->id != user_id of ticket ---> continue
// Confirm // Confirm
// Add records to the notes table like function Timekeeping.addNoteForUser() based on the $results array // Add records to the notes table like function Timekeeping.addNoteForUser() based on the $results array
// Update updated_by and admin_note in tickets table // Update updated_by and admin_note in tickets table
// Send notification email to admin (list) and users // Send notification email to users
// Refuse // Refuse
// Update updated_by and admin_note in tickets table // Update updated_by and admin_note in tickets table
// Send notification email to admin (list) and users // Send notification email to users
// false // false
} }
@ -76,6 +196,8 @@ class TicketController extends Controller
//Use CarbonPeriod to create a period from the start date to the end date //Use CarbonPeriod to create a period from the start date to the end date
$period = CarbonPeriod::create($startDate, $endDate); $period = CarbonPeriod::create($startDate, $endDate);
$time_type = Category::where('c_type','TIME_TYPE');
foreach ($period as $date) { foreach ($period as $date) {
//If it is the start date //If it is the start date
if ($date->isSameDay($startDate)) { if ($date->isSameDay($startDate)) {

View File

@ -138,10 +138,11 @@ Route::middleware('api')
Route::group([ Route::group([
'prefix' => 'ticket', 'prefix' => 'ticket',
], function () { ], function () {
Route::get('/', [TicketController::class, 'get']); Route::get('/all', [TicketController::class, 'getAll'])->middleware('check.permission:admin');
Route::post('/create', [TrackingController::class, 'createTicket'])->middleware('check.permission:admin.hr.staff'); Route::get('/getByUserId', [TicketController::class, 'getByUserId'])->middleware('check.permission:admin.hr.staff');
Route::get('/delete', [TrackingController::class, 'deleteTicket'])->middleware('check.permission:admin.hr.staff'); Route::post('/create', [TicketController::class, 'createTicket'])->middleware('check.permission:admin.hr.staff');
Route::post('/handle-ticket', [TrackingController::class, 'handleTicket'])->middleware('check.permission:admin'); Route::get('/delete', [TicketController::class, 'deleteTicket'])->middleware('check.permission:admin.hr.staff');
Route::post('/handle-ticket', [TicketController::class, 'handleTicket'])->middleware('check.permission:admin');
}); });
}); });
}); });

View File

@ -415,15 +415,15 @@ const LeaveManagement = () => {
})?.leave_days ?? 0 })?.leave_days ?? 0
totalDayOff = totalDayOff + total totalDayOff = totalDayOff + total
return ( return (
<Table.Td key={i} ta={'center'}> <Table.Td bg={total > 0 ? '#ffb5b5' : ''} key={i} ta={'center'}>
{total === 0 ? '' : total} {total === 0 ? '' : total}
</Table.Td> </Table.Td>
) )
})} })}
<Table.Td ta={'center'}>{totalDayLeave}</Table.Td> <Table.Td ta={'center'}>{totalDayLeave}</Table.Td>
<Table.Td ta={'center'}>{totalDayOff}</Table.Td> <Table.Td ta={'center'} bg={'#ffb5b5'}>{totalDayOff}</Table.Td>
<Table.Td ta={'center'}> <Table.Td ta={'center'} bg={'#c3ffc3'}>
{totalDayLeave - totalDayOff} {totalDayLeave - totalDayOff}
</Table.Td> </Table.Td>
<Table.Td> <Table.Td>