create API ticker
This commit is contained in:
parent
cb65f1fffc
commit
a0a740cca3
|
|
@ -23,6 +23,7 @@ class BannerController extends Controller
|
|||
|
||||
public function create(BannerRequest $request)
|
||||
{
|
||||
|
||||
$banner = new Banner;
|
||||
|
||||
if ($request->has('title')) {
|
||||
|
|
|
|||
|
|
@ -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)) {
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -415,15 +415,15 @@ const LeaveManagement = () => {
|
|||
})?.leave_days ?? 0
|
||||
totalDayOff = totalDayOff + total
|
||||
return (
|
||||
<Table.Td key={i} ta={'center'}>
|
||||
<Table.Td bg={total > 0 ? '#ffb5b5' : ''} key={i} ta={'center'}>
|
||||
{total === 0 ? '' : total}
|
||||
</Table.Td>
|
||||
)
|
||||
})}
|
||||
|
||||
<Table.Td ta={'center'}>{totalDayLeave}</Table.Td>
|
||||
<Table.Td ta={'center'}>{totalDayOff}</Table.Td>
|
||||
<Table.Td ta={'center'}>
|
||||
<Table.Td ta={'center'} bg={'#ffb5b5'}>{totalDayOff}</Table.Td>
|
||||
<Table.Td ta={'center'} bg={'#c3ffc3'}>
|
||||
{totalDayLeave - totalDayOff}
|
||||
</Table.Td>
|
||||
<Table.Td>
|
||||
|
|
|
|||
Loading…
Reference in New Issue