hrms-api-org/src/interfaces/utils.ts

345 lines
10 KiB
TypeScript
Raw Normal View History

import { OrgRevision } from "../entities/OrgRevision";
import { AppDataSource } from "../database/data-source";
import { PosMaster } from "../entities/PosMaster";
import { Position } from "../entities/Position";
import { EmployeePosMaster } from "../entities/EmployeePosMaster";
import { EmployeePosition } from "../entities/EmployeePosition";
import { In } from "typeorm";
2024-08-09 10:17:39 +07:00
import { RequestWithUser } from "../middlewares/user";
import { Command } from "../entities/Command";
export function calculateAge(start: Date, end = new Date()) {
if (start.getTime() > end.getTime()) return null;
let year = end.getFullYear() - start.getFullYear();
let month = end.getMonth() - start.getMonth();
let day = end.getDate() - start.getDate();
2024-07-01 17:27:01 +07:00
// if (month < 0) {
// month += 12;
// year -= 1;
// }
// if (day < 0) {
// month -= 1;
// day =
// new Date(start.getFullYear(), start.getMonth(), 0).getDate() -
// start.getDate() +
// end.getDate();
// }
2024-07-03 00:36:23 +07:00
if (day < 0) {
month -= 1;
day += new Date(end.getFullYear(), end.getMonth(), 0).getDate();
}
2024-07-01 17:27:01 +07:00
2024-07-03 00:36:23 +07:00
if (month < 0) {
month += 12;
year -= 1;
}
return { year, month, day };
}
2024-03-08 17:20:39 +07:00
export function calculateRetireDate(birthDate: Date) {
2024-07-03 00:36:23 +07:00
// let _birthDate = birthDate;
// _birthDate.setFullYear(_birthDate.getFullYear() + 60); var year = d.getFullYear();
var d = birthDate;
var year = d.getFullYear();
var month = d.getMonth();
var day = d.getDate();
2024-10-07 14:53:27 +07:00
var c = new Date(year + 60, month, day - 1);
2024-07-03 00:36:23 +07:00
return c;
}
export function calculateRetireLaw(birthDate: Date) {
2024-03-08 17:20:39 +07:00
let dd = birthDate.getDate();
let mm = birthDate.getMonth();
let yy = birthDate.getFullYear();
let flag = true;
switch (mm) {
2024-07-03 00:36:23 +07:00
case 9:
2024-03-08 17:20:39 +07:00
if (dd >= 2) flag = false;
break;
2024-07-03 00:36:23 +07:00
case 10:
flag = false;
2024-03-26 09:47:17 +07:00
break;
2024-07-03 00:36:23 +07:00
case 11:
flag = false;
2024-03-08 17:20:39 +07:00
break;
}
2024-07-03 00:36:23 +07:00
if (flag == true) return new Date(`${yy + 60}-09-30T00:00:00.000+07:00`);
2024-03-08 17:20:39 +07:00
2024-03-11 10:45:40 +07:00
return new Date(`${yy + 61}-09-30T00:00:00.000+07:00`);
2024-03-08 17:20:39 +07:00
}
2024-03-26 09:47:17 +07:00
export function calculateRetireYear(birthDate: Date) {
let dd = birthDate.getDate();
let mm = birthDate.getMonth();
let yy = birthDate.getFullYear();
let flag = true;
switch (mm) {
case 10:
if (dd >= 2) flag = false;
break;
case 11:
break;
case 12:
break;
}
if (flag) return yy + 60;
return yy + 61;
}
2024-10-07 14:53:27 +07:00
export async function removeProfileInOrganize(profileId: string, type: string) {
const currentRevision = await AppDataSource.getRepository(OrgRevision)
.createQueryBuilder("orgRevision")
.where("orgRevision.orgRevisionIsDraft = false")
.andWhere("orgRevision.orgRevisionIsCurrent = true")
.getOne();
if (!currentRevision) {
2024-08-02 10:45:11 +07:00
return;
}
if (type === "OFFICER") {
const findProfileInposMaster = await AppDataSource.getRepository(PosMaster)
.createQueryBuilder("posMaster")
.where("posMaster.orgRevisionId = :orgRevisionId", { orgRevisionId: currentRevision?.id })
.andWhere("posMaster.current_holderId = :profileId", { profileId })
.getOne();
2024-10-07 14:53:27 +07:00
await AppDataSource.getRepository(PosMaster)
.createQueryBuilder()
.update(PosMaster)
.set({ current_holderId: null })
.where("id = :id", { id: findProfileInposMaster?.id })
.execute();
if (!findProfileInposMaster) {
2024-08-02 10:45:11 +07:00
return;
}
const findPosition = await AppDataSource.getRepository(Position)
.createQueryBuilder("position")
.where("position.posMasterId = :posMasterId", { posMasterId: findProfileInposMaster?.id })
.getMany();
if (!findPosition) {
2024-08-02 10:45:11 +07:00
return;
}
await AppDataSource.getRepository(Position)
.createQueryBuilder()
.update(Position)
.set({ positionIsSelected: false })
.where("id IN (:...ids)", { ids: findPosition.map((item) => item.id) })
.execute();
}
2024-10-07 14:53:27 +07:00
if (type === "EMPLOYEE") {
const findProfileInEmpPosMaster = await AppDataSource.getRepository(EmployeePosMaster)
.createQueryBuilder("employeePosMaster")
.where("employeePosMaster.orgRevisionId = :orgRevisionId", {
orgRevisionId: currentRevision?.id,
})
.andWhere("employeePosMaster.current_holderId = :profileId", { profileId })
.getOne();
await AppDataSource.getRepository(EmployeePosMaster)
.createQueryBuilder()
.update(EmployeePosMaster)
.set({ current_holderId: null })
.where("id = :id", { id: findProfileInEmpPosMaster?.id })
.execute();
if (!findProfileInEmpPosMaster) {
2024-08-02 10:45:11 +07:00
return;
}
const findEmpPosition = await AppDataSource.getRepository(EmployeePosition)
.createQueryBuilder("employeePosition")
.where("employeePosition.posMasterId = :posMasterId", {
posMasterId: findProfileInEmpPosMaster?.id,
})
.getMany();
if (!findEmpPosition) {
2024-08-02 10:45:11 +07:00
return;
}
await AppDataSource.getRepository(EmployeePosition)
.createQueryBuilder()
.update(EmployeePosition)
.set({ positionIsSelected: false })
.where("id IN (:...ids)", { ids: findEmpPosition.map((item) => item.id) })
.execute();
}
}
export async function checkReturnCommandType(commandId: string) {
const commandRepository = AppDataSource.getRepository(Command);
const _type = await commandRepository.findOne({
where: {
id: commandId
},
relations: ["commandType"],
});
if (!["C-PM-08", "C-PM-09"].includes(String(_type?.commandType.code))) {
return false;
}
return true;
}
export async function checkExceptCommandType(commandId: string) {
const commandRepository = AppDataSource.getRepository(Command);
const _type = await commandRepository.findOne({
where: {
id: commandId
},
relations: ["commandType"],
});
if (!["C-PM-25", "C-PM-26"].includes(String(_type?.commandType.code))) {
return false;
}
return true;
}
export async function checkCommandType(commandId: string) {
const commandRepository = AppDataSource.getRepository(Command);
const _type = await commandRepository.findOne({
where: {
id: commandId
},
relations: ["commandType"],
});
if (!["C-PM-12", "C-PM-13", "C-PM-17", "C-PM-18", "C-PM-23", "C-PM-19", "C-PM-20"].includes(String(_type?.commandType.code))) {
return false;
}
return true;
}
2024-08-09 10:17:39 +07:00
//logs
export type DataDiff = {
before: any;
after: any;
};
export type LogSequence = {
action: string;
status: "success" | "error";
description: string;
query?: any;
request?: {
method?: "GET" | "POST" | "PUT" | "DELETE" | "PATCH";
url?: string;
payload?: string;
response?: string;
};
};
export function setLogDataDiff(req: RequestWithUser, data: DataDiff) {
req.app.locals.logData.dataDiff = {
before: JSON.stringify(data.before),
after: JSON.stringify(data.after),
};
}
export function addLogSequence(req: RequestWithUser, data: LogSequence) {
if (!req?.app?.locals?.logData?.sequence) {
req.app.locals.logData.sequence = [];
}
req.app.locals.logData.sequence = req.app.locals.logData.sequence.concat(data);
}
export function editLogSequence(req: RequestWithUser, index: number, data: LogSequence) {
req.app.locals.logData.sequence[index] = data;
}
2024-10-11 11:05:31 +07:00
export function commandTypePath(commandCode: string): string | null {
switch (commandCode) {
case "C-PM-01":
2024-10-18 17:35:04 +07:00
return "/placement/recruit/report"; //
2024-10-11 11:05:31 +07:00
case "C-PM-02":
2024-10-18 17:35:04 +07:00
return "/placement/candidate/report"; //
2024-10-11 11:05:31 +07:00
case "C-PM-03":
return "/placement/appoint/report";
case "C-PM-04":
return "/placement/move/report";
case "C-PM-05":
return "/placement/appointment/appoint/report";
case "C-PM-06":
2024-10-18 17:35:04 +07:00
return "/placement/slip/report";
2024-10-11 11:05:31 +07:00
case "C-PM-07":
return "/placement/appointment/move/report";
case "C-PM-08":
return "/retirement/other/appoint/report";
case "C-PM-09":
return "/retirement/other/out/report";
case "C-PM-10":
2024-10-18 17:35:04 +07:00
return "/probation/report/command10/officer/report";
2024-10-11 11:05:31 +07:00
case "C-PM-11":
return "/probation/report/command11/officer/report";//PROBATION
2024-10-11 11:05:31 +07:00
case "C-PM-12":
return "/probation/report/command12/officer/report";//PROBATION
2024-10-11 11:05:31 +07:00
case "C-PM-13":
return "/placement/transfer/command/report";
case "C-PM-14":
2024-10-18 17:35:04 +07:00
return "/placement/receive/command/report";
2024-10-11 11:05:31 +07:00
case "C-PM-15":
return "/placement/officer/command/report";
case "C-PM-16":
return "/placement/repatriation/command/report";
case "C-PM-17":
return "/retirement/resign/command/report";
case "C-PM-18":
return "/retirement/out/command/report";
case "C-PM-19":
return "/discipline/result/command19/report";
case "C-PM-20":
return "/discipline/result/command20/report";
case "C-PM-21":
return "/org/command/command21/employee/report";//ORG
2024-10-11 11:05:31 +07:00
case "C-PM-22":
return "/placement/appointment/employee-appoint/report";
case "C-PM-23":
return "/retirement/resign/employee/report";
case "C-PM-24":
return "/placement/appointment/employee-move/report";
case "C-PM-25":
return "/discipline/result/command25/report";
case "C-PM-26":
return "/discipline/result/command26/report";
case "C-PM-27":
return "/discipline/result/command27/report";
case "C-PM-28":
return "/discipline/result/command28/report";
case "C-PM-29":
return "/discipline/result/command29/report";
case "C-PM-30":
return "/discipline/result/command30/report";
case "C-PM-31":
return "/discipline/result/command31/report";
case "C-PM-32":
return "/discipline/result/command32/report";
case "C-PM-33":
return "/salary/report/command/officer/report";//SALARY
2024-10-11 11:05:31 +07:00
case "C-PM-34":
return "/salary/report/command/officer/report";//SALARY
2024-10-11 11:05:31 +07:00
case "C-PM-35":
return "/salary/report/command/officer/report";//SALARY
2024-10-11 11:05:31 +07:00
case "C-PM-36":
return "/salary/report/command/employee/report";//SALARY
2024-10-11 11:05:31 +07:00
case "C-PM-37":
return "/salary/report/command/employee/report";//SALARY
2024-10-11 11:05:31 +07:00
case "C-PM-38":
return "/org/command/command38/officer/report";//ORG
2024-10-11 11:05:31 +07:00
case "C-PM-39":
2024-10-18 17:35:04 +07:00
return "/placement/appointment/slip/report";
2024-10-11 11:05:31 +07:00
case "C-PM-40":
return "/org/command/command40/officer/report";//ORG
2024-10-11 11:05:31 +07:00
case "C-PM-41":
return "/retirement/resign/leave-cancel/report";
default:
return null;
}
}