75 lines
4.0 KiB
TypeScript
75 lines
4.0 KiB
TypeScript
import { BadRequestException, Body, Controller, Delete, Get, Param, ParseBoolPipe, ParseEnumPipe, ParseIntPipe, Patch, Post, Query, UseGuards, UsePipes, ValidationPipe } from "@nestjs/common";
|
|
import { LeaveRequestsService } from "../services/leave-requests.service";
|
|
import { CreateLeaveRequestsDto } from "../dtos/create-leave-requests.dto";
|
|
import { LeaveRequests } from "@prisma/client";
|
|
import { UpdateLeaveRequestsDto } from "../dtos/update-leave-requests.dto";
|
|
import { RolesAllowed } from "src/common/decorators/roles.decorators";
|
|
import { LeaveApprovalStatus, Roles as RoleEnum } from '.prisma/client';
|
|
import { ApiBearerAuth, ApiOperation, ApiResponse, ApiTags } from "@nestjs/swagger";
|
|
import { LeaveRequestEntity } from "../dtos/swagger-entities/leave-requests.entity";
|
|
import { SearchLeaveRequestsDto } from "../dtos/search-leave-requests.dto";
|
|
|
|
@ApiTags('Leave Requests')
|
|
@ApiBearerAuth('access-token')
|
|
// @UseGuards()
|
|
@Controller('leave-requests')
|
|
export class LeaveRequestController {
|
|
constructor(private readonly leaveRequetsService: LeaveRequestsService){}
|
|
|
|
@Post()
|
|
@RolesAllowed(RoleEnum.ACCOUNTING, RoleEnum.ADMIN, RoleEnum.EMPLOYEE, RoleEnum.HR, RoleEnum.SUPERVISOR)
|
|
@ApiOperation({summary: 'Create leave request' })
|
|
@ApiResponse({ status: 201, description: 'Leave request created',type: LeaveRequestEntity })
|
|
@ApiResponse({ status: 400, description: 'Incomplete task or invalid data' })
|
|
create(@Body() dto: CreateLeaveRequestsDto): Promise<LeaveRequests> {
|
|
return this. leaveRequetsService.create(dto);
|
|
}
|
|
|
|
@Get()
|
|
@RolesAllowed(RoleEnum.ACCOUNTING, RoleEnum.ADMIN, RoleEnum.HR, RoleEnum.SUPERVISOR)
|
|
@ApiOperation({summary: 'Find all leave request' })
|
|
@ApiResponse({ status: 201, description: 'List of Leave requests found',type: LeaveRequestEntity, isArray: true })
|
|
@ApiResponse({ status: 400, description: 'List of leave request not found' })
|
|
@UsePipes(new ValidationPipe({transform: true, whitelist: true}))
|
|
findAll(@Query() filters: SearchLeaveRequestsDto): Promise<(LeaveRequests & {daysRequested:number; cost: number})[]> {
|
|
return this.leaveRequetsService.findAll(filters);
|
|
}
|
|
|
|
@Get(':id')
|
|
@RolesAllowed(RoleEnum.ACCOUNTING, RoleEnum.ADMIN, RoleEnum.EMPLOYEE, RoleEnum.HR, RoleEnum.SUPERVISOR)
|
|
@ApiOperation({summary: 'Find leave request' })
|
|
@ApiResponse({ status: 201, description: 'Leave request found',type: LeaveRequestEntity })
|
|
@ApiResponse({ status: 400, description: 'Leave request not found' })
|
|
findOne(@Param('id', ParseIntPipe) id: number): Promise<LeaveRequests> {
|
|
return this.leaveRequetsService.findOne(id);
|
|
}
|
|
|
|
@Patch(':id')
|
|
@RolesAllowed(RoleEnum.ACCOUNTING, RoleEnum.ADMIN, RoleEnum.EMPLOYEE, RoleEnum.HR, RoleEnum.SUPERVISOR)
|
|
@ApiOperation({summary: 'Update leave request' })
|
|
@ApiResponse({ status: 201, description: 'Leave request updated',type: LeaveRequestEntity })
|
|
@ApiResponse({ status: 400, description: 'Leave request not found' })
|
|
update(@Param('id', ParseIntPipe) id: number,@Body() dto: UpdateLeaveRequestsDto): Promise<LeaveRequests> {
|
|
return this.leaveRequetsService.update(id, dto);
|
|
}
|
|
|
|
@Delete(':id')
|
|
@RolesAllowed(RoleEnum.ACCOUNTING, RoleEnum.ADMIN, RoleEnum.EMPLOYEE, RoleEnum.HR, RoleEnum.SUPERVISOR)
|
|
@ApiOperation({summary: 'Delete leave request' })
|
|
@ApiResponse({ status: 201, description: 'Leave request deleted',type: LeaveRequestEntity })
|
|
@ApiResponse({ status: 400, description: 'Leave request not found' })
|
|
remove(@Param('id', ParseIntPipe) id: number): Promise<LeaveRequests> {
|
|
return this.leaveRequetsService.remove(id);
|
|
}
|
|
|
|
@Patch(':id/approval')
|
|
updateApproval( @Param('id', ParseIntPipe) id: number,
|
|
@Body('is_approved', ParseBoolPipe) isApproved: boolean): Promise<LeaveRequests> {
|
|
const approvalStatus = isApproved ?
|
|
LeaveApprovalStatus.APPROVED : LeaveApprovalStatus.DENIED;
|
|
return this.leaveRequetsService.update(id, { approval_status: approvalStatus });
|
|
}
|
|
|
|
}
|
|
|