feat(pay-period): added is_active to payload to filter inactive employee from the timesheets_approval page
This commit is contained in:
parent
52c2e5f70c
commit
c0d00d0ca9
|
|
@ -11,6 +11,7 @@ export class PayPeriodOverviewDto {
|
||||||
export class EmployeePeriodOverviewDto {
|
export class EmployeePeriodOverviewDto {
|
||||||
email: string;
|
email: string;
|
||||||
employee_name: string;
|
employee_name: string;
|
||||||
|
is_active: boolean;
|
||||||
regular_hours: number;
|
regular_hours: number;
|
||||||
other_hours: {
|
other_hours: {
|
||||||
evening_hours: number;
|
evening_hours: number;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { Injectable } from "@nestjs/common";
|
import { Injectable } from "@nestjs/common";
|
||||||
import { PrismaService } from "src/prisma/prisma.service";
|
import { PrismaService } from "src/prisma/prisma.service";
|
||||||
import { computeHours, computePeriod, listPayYear, payYearOfDate } from "src/common/utils/date-utils";
|
import { computeHours, computePeriod, listPayYear, payYearOfDate, toStringFromDate } from "src/common/utils/date-utils";
|
||||||
import { EmployeePeriodOverviewDto, PayPeriodDto, PayPeriodOverviewDto } from "../dtos/overview-pay-period.dto";
|
import { EmployeePeriodOverviewDto, PayPeriodDto, PayPeriodOverviewDto } from "../dtos/overview-pay-period.dto";
|
||||||
import { Result } from "src/common/errors/result-error.factory";
|
import { Result } from "src/common/errors/result-error.factory";
|
||||||
import { mapPayPeriodToDto } from "src/time-and-attendance/pay-period/pay-periods.mapper";
|
import { mapPayPeriodToDto } from "src/time-and-attendance/pay-period/pay-periods.mapper";
|
||||||
|
|
@ -220,6 +220,7 @@ export class PayPeriodsQueryService {
|
||||||
by_employee.set(id, {
|
by_employee.set(id, {
|
||||||
email,
|
email,
|
||||||
employee_name: name,
|
employee_name: name,
|
||||||
|
is_active: true,
|
||||||
regular_hours: 0,
|
regular_hours: 0,
|
||||||
other_hours: {
|
other_hours: {
|
||||||
evening_hours: 0,
|
evening_hours: 0,
|
||||||
|
|
@ -232,8 +233,8 @@ export class PayPeriodsQueryService {
|
||||||
total_hours: 0,
|
total_hours: 0,
|
||||||
expenses: 0,
|
expenses: 0,
|
||||||
mileage: 0,
|
mileage: 0,
|
||||||
is_approved: true,
|
is_approved: false,
|
||||||
is_remote: true,
|
is_remote: false,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -250,9 +251,14 @@ export class PayPeriodsQueryService {
|
||||||
});
|
});
|
||||||
|
|
||||||
for (const employee of all_employees) {
|
for (const employee of all_employees) {
|
||||||
|
let is_active = true;
|
||||||
|
if (employee.last_work_day) {
|
||||||
|
is_active = this.checkForInactiveDate(employee.last_work_day)
|
||||||
|
}
|
||||||
by_employee.set(employee.id, {
|
by_employee.set(employee.id, {
|
||||||
email: employee.user.email,
|
email: employee.user.email,
|
||||||
employee_name: employee.user.first_name + ' ' + employee.user.last_name,
|
employee_name: employee.user.first_name + ' ' + employee.user.last_name,
|
||||||
|
is_active: is_active,
|
||||||
regular_hours: 0,
|
regular_hours: 0,
|
||||||
other_hours: {
|
other_hours: {
|
||||||
evening_hours: 0,
|
evening_hours: 0,
|
||||||
|
|
@ -265,8 +271,8 @@ export class PayPeriodsQueryService {
|
||||||
total_hours: 0,
|
total_hours: 0,
|
||||||
expenses: 0,
|
expenses: 0,
|
||||||
mileage: 0,
|
mileage: 0,
|
||||||
is_approved: true,
|
is_approved: false,
|
||||||
is_remote: true,
|
is_remote: false,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -276,6 +282,7 @@ export class PayPeriodsQueryService {
|
||||||
by_employee.set(id, {
|
by_employee.set(id, {
|
||||||
email,
|
email,
|
||||||
employee_name: name,
|
employee_name: name,
|
||||||
|
is_active: true,
|
||||||
regular_hours: 0,
|
regular_hours: 0,
|
||||||
other_hours: {
|
other_hours: {
|
||||||
evening_hours: 0,
|
evening_hours: 0,
|
||||||
|
|
@ -288,8 +295,8 @@ export class PayPeriodsQueryService {
|
||||||
total_hours: 0,
|
total_hours: 0,
|
||||||
expenses: 0,
|
expenses: 0,
|
||||||
mileage: 0,
|
mileage: 0,
|
||||||
is_approved: true,
|
is_approved: false,
|
||||||
is_remote: true,
|
is_remote: false,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return by_employee.get(id)!;
|
return by_employee.get(id)!;
|
||||||
|
|
@ -336,12 +343,12 @@ export class PayPeriodsQueryService {
|
||||||
const record = ensure(exp.id, name, exp.user.email);
|
const record = ensure(exp.id, name, exp.user.email);
|
||||||
|
|
||||||
const amount = toMoney(expense.amount);
|
const amount = toMoney(expense.amount);
|
||||||
record.expenses = Number((record.expenses += amount).toFixed(2));
|
record.expenses = Number((record.expenses += amount).toFixed(2));
|
||||||
|
|
||||||
const type = (expense.bank_code?.type || "").toUpperCase();
|
const type = (expense.bank_code?.type || "").toUpperCase();
|
||||||
const rate = expense.bank_code?.modifier ?? 0;
|
const rate = expense.bank_code?.modifier ?? 0;
|
||||||
if (type === "MILEAGE" && rate > 0) {
|
if (type === "MILEAGE" && rate > 0) {
|
||||||
record.mileage = Number((record.mileage += Math.round((amount / rate) * 100) / 100).toFixed(2));
|
record.mileage = Number((record.mileage += Math.round((amount / rate) * 100) / 100).toFixed(2));
|
||||||
}
|
}
|
||||||
record.is_approved = record.is_approved && expense.timesheet.is_approved;
|
record.is_approved = record.is_approved && expense.timesheet.is_approved;
|
||||||
}
|
}
|
||||||
|
|
@ -456,4 +463,14 @@ export class PayPeriodsQueryService {
|
||||||
select: { period_start: true, period_end: true },
|
select: { period_start: true, period_end: true },
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private checkForInactiveDate = (last_work_day: Date) => {
|
||||||
|
const inactive_date = toStringFromDate(last_work_day);
|
||||||
|
const limit = new Date(inactive_date);
|
||||||
|
limit.setDate(limit.getDate() + 14);
|
||||||
|
if(limit >= new Date()) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user