feat(paid-time-off): add methods and controller to pull paid time off for one employee
This commit is contained in:
parent
83f5da2e4a
commit
2ec59e2ffb
|
|
@ -0,0 +1,22 @@
|
||||||
|
import { Controller, Get, Query } from "@nestjs/common";
|
||||||
|
import { Prisma } from "@prisma/client";
|
||||||
|
import { Access } from "src/common/decorators/module-access.decorators";
|
||||||
|
import { ModuleAccessAllowed } from "src/common/decorators/modules-guard.decorators";
|
||||||
|
import { Result } from "src/common/errors/result-error.factory";
|
||||||
|
import { PaidTimeOffBankHoursService } from "src/time-and-attendance/paid-time-off/paid-time-off.service";
|
||||||
|
|
||||||
|
@Controller('paid-time-off')
|
||||||
|
export class PaidTimeOffController {
|
||||||
|
constructor(
|
||||||
|
private readonly paidTimeOffService: PaidTimeOffBankHoursService,
|
||||||
|
) { }
|
||||||
|
|
||||||
|
@Get('totals')
|
||||||
|
@ModuleAccessAllowed('timesheets', 'timesheets_approval', 'employee_management')
|
||||||
|
async getPaidTimeOffTotalsForOneEmployee(
|
||||||
|
@Access('email') email: string,
|
||||||
|
@Query('email') employee_email?: string,
|
||||||
|
) {
|
||||||
|
return this.paidTimeOffService.getPaidTimeOffTotalsWithEmployeeEmail(employee_email ?? email);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -4,18 +4,20 @@ import { PrismaService } from "src/prisma/prisma.service";
|
||||||
import { BankedHoursService } from "src/time-and-attendance/domains/services/banking-hours.service";
|
import { BankedHoursService } from "src/time-and-attendance/domains/services/banking-hours.service";
|
||||||
import { SickLeaveService } from "src/time-and-attendance/domains/services/sick-leave.service";
|
import { SickLeaveService } from "src/time-and-attendance/domains/services/sick-leave.service";
|
||||||
import { VacationService } from "src/time-and-attendance/domains/services/vacation.service";
|
import { VacationService } from "src/time-and-attendance/domains/services/vacation.service";
|
||||||
import { PaidTimeOFfBankHoursService } from "src/time-and-attendance/paid-time-off/paid-time-off.service";
|
import { PaidTimeOffController } from "src/time-and-attendance/paid-time-off/paid-time-off.controller";
|
||||||
|
import { PaidTimeOffBankHoursService } from "src/time-and-attendance/paid-time-off/paid-time-off.service";
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
|
controllers: [PaidTimeOffController],
|
||||||
providers: [
|
providers: [
|
||||||
PrismaService,
|
PrismaService,
|
||||||
EmailToIdResolver,
|
EmailToIdResolver,
|
||||||
PaidTimeOFfBankHoursService,
|
PaidTimeOffBankHoursService,
|
||||||
VacationService,
|
VacationService,
|
||||||
SickLeaveService,
|
SickLeaveService,
|
||||||
BankedHoursService,
|
BankedHoursService,
|
||||||
],
|
],
|
||||||
exports: [
|
exports: [
|
||||||
PaidTimeOFfBankHoursService,
|
PaidTimeOffBankHoursService,
|
||||||
],
|
],
|
||||||
}) export class PaidTimeOffModule { }
|
}) export class PaidTimeOffModule { }
|
||||||
|
|
@ -1,21 +1,51 @@
|
||||||
import { Injectable } from "@nestjs/common";
|
import { Injectable } from "@nestjs/common";
|
||||||
import { Result } from "src/common/errors/result-error.factory";
|
import { Result } from "src/common/errors/result-error.factory";
|
||||||
|
import { EmailToIdResolver } from "src/common/mappers/email-id.mapper";
|
||||||
import { computeHours } from "src/common/utils/date-utils";
|
import { computeHours } from "src/common/utils/date-utils";
|
||||||
import { PrismaService } from "src/prisma/prisma.service";
|
import { PrismaService } from "src/prisma/prisma.service";
|
||||||
import { BankedHoursService } from "src/time-and-attendance/domains/services/banking-hours.service";
|
import { BankedHoursService } from "src/time-and-attendance/domains/services/banking-hours.service";
|
||||||
import { SickLeaveService } from "src/time-and-attendance/domains/services/sick-leave.service";
|
import { SickLeaveService } from "src/time-and-attendance/domains/services/sick-leave.service";
|
||||||
import { VacationService } from "src/time-and-attendance/domains/services/vacation.service";
|
import { VacationService } from "src/time-and-attendance/domains/services/vacation.service";
|
||||||
import { paid_time_off_mapping, paid_time_off_types } from "src/time-and-attendance/paid-time-off/paid-time-off.dto";
|
import { paid_time_off_mapping, paid_time_off_types, PaidTimeOffDto } from "src/time-and-attendance/paid-time-off/paid-time-off.dto";
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class PaidTimeOFfBankHoursService {
|
export class PaidTimeOffBankHoursService {
|
||||||
constructor(
|
constructor(
|
||||||
private readonly prisma: PrismaService,
|
private readonly prisma: PrismaService,
|
||||||
private readonly bankingService: BankedHoursService,
|
private readonly bankingService: BankedHoursService,
|
||||||
private readonly vacationService: VacationService,
|
private readonly vacationService: VacationService,
|
||||||
private readonly sickLeaveService: SickLeaveService,
|
private readonly sickLeaveService: SickLeaveService,
|
||||||
|
private readonly emailResolver: EmailToIdResolver,
|
||||||
) { }
|
) { }
|
||||||
|
|
||||||
|
getPaidTimeOffTotalsWithEmployeeEmail = async (email: string): Promise<Result<Partial<PaidTimeOffDto>, string>> => {
|
||||||
|
const employee_info = await this.emailResolver.findIdByEmail(email);
|
||||||
|
|
||||||
|
|
||||||
|
if (!employee_info.success)
|
||||||
|
return { success: false, error: 'USER_NOT_FOUND' }
|
||||||
|
|
||||||
|
const pto = await this.prisma.paidTimeOff.findUnique({
|
||||||
|
where: { employee_id: employee_info.data },
|
||||||
|
select: {
|
||||||
|
vacation_hours: true,
|
||||||
|
sick_hours: true,
|
||||||
|
banked_hours: true,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
if (!pto)
|
||||||
|
return { success: false, error: 'PTO_NOT_FOUND' }
|
||||||
|
|
||||||
|
const ptoData: Partial<PaidTimeOffDto> = {
|
||||||
|
sick_hours: Number(pto.sick_hours),
|
||||||
|
vacation_hours: Number(pto.vacation_hours),
|
||||||
|
banked_hours: Number(pto.banked_hours),
|
||||||
|
}
|
||||||
|
|
||||||
|
return { success: true, data: ptoData }
|
||||||
|
}
|
||||||
|
|
||||||
//called during update function of Shifts Module
|
//called during update function of Shifts Module
|
||||||
updatePaidTimeOffBankHoursWhenShiftUpdate = async (
|
updatePaidTimeOffBankHoursWhenShiftUpdate = async (
|
||||||
start_time: Date,
|
start_time: Date,
|
||||||
|
|
|
||||||
|
|
@ -3,14 +3,14 @@ import { Result } from "src/common/errors/result-error.factory";
|
||||||
import { EmailToIdResolver } from "src/common/mappers/email-id.mapper";
|
import { EmailToIdResolver } from "src/common/mappers/email-id.mapper";
|
||||||
import { computeHours } from "src/common/utils/date-utils";
|
import { computeHours } from "src/common/utils/date-utils";
|
||||||
import { PrismaService } from "src/prisma/prisma.service";
|
import { PrismaService } from "src/prisma/prisma.service";
|
||||||
import { PaidTimeOFfBankHoursService } from "src/time-and-attendance/paid-time-off/paid-time-off.service";
|
import { PaidTimeOffBankHoursService } from "src/time-and-attendance/paid-time-off/paid-time-off.service";
|
||||||
import { PayPeriodEventService } from "src/time-and-attendance/pay-period/services/pay-period-event.service";
|
import { PayPeriodEventService } from "src/time-and-attendance/pay-period/services/pay-period-event.service";
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class ShiftsDeleteService {
|
export class ShiftsDeleteService {
|
||||||
constructor(
|
constructor(
|
||||||
private readonly prisma: PrismaService,
|
private readonly prisma: PrismaService,
|
||||||
private readonly paidTimeOffService: PaidTimeOFfBankHoursService,
|
private readonly paidTimeOffService: PaidTimeOffBankHoursService,
|
||||||
private readonly emailResolver: EmailToIdResolver,
|
private readonly emailResolver: EmailToIdResolver,
|
||||||
private readonly payPeriodEventService: PayPeriodEventService,
|
private readonly payPeriodEventService: PayPeriodEventService,
|
||||||
) { }
|
) { }
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ import { shift_select } from "src/time-and-attendance/utils/selects.utils";
|
||||||
import { Normalized } from "src/time-and-attendance/utils/type.utils";
|
import { Normalized } from "src/time-and-attendance/utils/type.utils";
|
||||||
import { ShiftDto } from "src/time-and-attendance/shifts/shift.dto";
|
import { ShiftDto } from "src/time-and-attendance/shifts/shift.dto";
|
||||||
import { EmailToIdResolver } from "src/common/mappers/email-id.mapper";
|
import { EmailToIdResolver } from "src/common/mappers/email-id.mapper";
|
||||||
import { PaidTimeOFfBankHoursService } from "src/time-and-attendance/paid-time-off/paid-time-off.service";
|
import { PaidTimeOffBankHoursService } from "src/time-and-attendance/paid-time-off/paid-time-off.service";
|
||||||
import { paid_time_off_types } from "src/time-and-attendance/paid-time-off/paid-time-off.dto";
|
import { paid_time_off_types } from "src/time-and-attendance/paid-time-off/paid-time-off.dto";
|
||||||
import { PayPeriodEventService } from "src/time-and-attendance/pay-period/services/pay-period-event.service";
|
import { PayPeriodEventService } from "src/time-and-attendance/pay-period/services/pay-period-event.service";
|
||||||
|
|
||||||
|
|
@ -21,7 +21,7 @@ export class ShiftsUpdateService {
|
||||||
private readonly typeResolver: BankCodesResolver,
|
private readonly typeResolver: BankCodesResolver,
|
||||||
private readonly timesheetResolver: EmployeeTimesheetResolver,
|
private readonly timesheetResolver: EmployeeTimesheetResolver,
|
||||||
private readonly emailResolver: EmailToIdResolver,
|
private readonly emailResolver: EmailToIdResolver,
|
||||||
private readonly paidTimeOffService: PaidTimeOFfBankHoursService,
|
private readonly paidTimeOffService: PaidTimeOffBankHoursService,
|
||||||
private readonly payPeriodEventService: PayPeriodEventService,
|
private readonly payPeriodEventService: PayPeriodEventService,
|
||||||
) { }
|
) { }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ import { ShiftsUpdateService } from 'src/time-and-attendance/shifts/services/shi
|
||||||
import { VacationService } from 'src/time-and-attendance/domains/services/vacation.service';
|
import { VacationService } from 'src/time-and-attendance/domains/services/vacation.service';
|
||||||
import { BankedHoursService } from 'src/time-and-attendance/domains/services/banking-hours.service';
|
import { BankedHoursService } from 'src/time-and-attendance/domains/services/banking-hours.service';
|
||||||
import { PaidTimeOffModule } from 'src/time-and-attendance/paid-time-off/paid-time-off.module';
|
import { PaidTimeOffModule } from 'src/time-and-attendance/paid-time-off/paid-time-off.module';
|
||||||
import { PaidTimeOFfBankHoursService } from 'src/time-and-attendance/paid-time-off/paid-time-off.service';
|
import { PaidTimeOffBankHoursService } from 'src/time-and-attendance/paid-time-off/paid-time-off.service';
|
||||||
import { PayPeriodEventService } from 'src/time-and-attendance/pay-period/services/pay-period-event.service';
|
import { PayPeriodEventService } from 'src/time-and-attendance/pay-period/services/pay-period-event.service';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
|
|
@ -20,7 +20,7 @@ import { PayPeriodEventService } from 'src/time-and-attendance/pay-period/servic
|
||||||
ShiftsDeleteService,
|
ShiftsDeleteService,
|
||||||
VacationService,
|
VacationService,
|
||||||
BankedHoursService,
|
BankedHoursService,
|
||||||
PaidTimeOFfBankHoursService,
|
PaidTimeOffBankHoursService,
|
||||||
PayPeriodEventService,
|
PayPeriodEventService,
|
||||||
],
|
],
|
||||||
exports: [
|
exports: [
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,8 @@ import { BusinessLogicsModule } from "src/time-and-attendance/domains/business-l
|
||||||
import { VacationService } from "src/time-and-attendance/domains/services/vacation.service";
|
import { VacationService } from "src/time-and-attendance/domains/services/vacation.service";
|
||||||
import { BankedHoursService } from "src/time-and-attendance/domains/services/banking-hours.service";
|
import { BankedHoursService } from "src/time-and-attendance/domains/services/banking-hours.service";
|
||||||
import { PaidTimeOffModule } from "src/time-and-attendance/paid-time-off/paid-time-off.module";
|
import { PaidTimeOffModule } from "src/time-and-attendance/paid-time-off/paid-time-off.module";
|
||||||
import { PaidTimeOFfBankHoursService } from "src/time-and-attendance/paid-time-off/paid-time-off.service";
|
import { PaidTimeOffController } from "src/time-and-attendance/paid-time-off/paid-time-off.controller";
|
||||||
|
import { PaidTimeOffBankHoursService } from "src/time-and-attendance/paid-time-off/paid-time-off.service";
|
||||||
|
|
||||||
import { ExpenseController } from "src/time-and-attendance/expenses/expense.controller";
|
import { ExpenseController } from "src/time-and-attendance/expenses/expense.controller";
|
||||||
import { ExpenseCreateService } from "src/time-and-attendance/expenses/services/expense-create.service";
|
import { ExpenseCreateService } from "src/time-and-attendance/expenses/services/expense-create.service";
|
||||||
|
|
@ -64,7 +65,7 @@ import { PayPeriodEventService } from "./pay-period/services/pay-period-event.se
|
||||||
ExpenseController,
|
ExpenseController,
|
||||||
PayPeriodsController,
|
PayPeriodsController,
|
||||||
CsvExportController,
|
CsvExportController,
|
||||||
|
PaidTimeOffController,
|
||||||
],
|
],
|
||||||
providers: [
|
providers: [
|
||||||
GetTimesheetsOverviewService,
|
GetTimesheetsOverviewService,
|
||||||
|
|
@ -90,7 +91,7 @@ import { PayPeriodEventService } from "./pay-period/services/pay-period-event.se
|
||||||
CsvGeneratorService,
|
CsvGeneratorService,
|
||||||
VacationService,
|
VacationService,
|
||||||
BankedHoursService,
|
BankedHoursService,
|
||||||
PaidTimeOFfBankHoursService,
|
PaidTimeOffBankHoursService,
|
||||||
PayPeriodEventService,
|
PayPeriodEventService,
|
||||||
],
|
],
|
||||||
exports: [TimesheetApprovalService],
|
exports: [TimesheetApprovalService],
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user