api ทะเบียนประวัติลูกจ้างชั่วคาว

This commit is contained in:
Bright 2024-06-07 17:03:13 +07:00
parent bc231b0db2
commit 9078d4d702
2 changed files with 361 additions and 0 deletions

View file

@ -28,6 +28,7 @@ import {
UpdateProfileEmployee,
ProfileEmployeeHistory,
UpdatePositionTempProfileEmployee,
UpdateInformationProfileEmployee,
} from "../entities/ProfileEmployee";
import { EmployeePosLevel } from "../entities/EmployeePosLevel";
import { EmployeePosType } from "../entities/EmployeePosType";
@ -50,6 +51,13 @@ import { OrgChild1 } from "../entities/OrgChild1";
import { OrgChild2 } from "../entities/OrgChild2";
import { OrgChild3 } from "../entities/OrgChild3";
import { OrgChild4 } from "../entities/OrgChild4";
import { ProfileEmployeeInformationHistory } from "../entities/ProfileEmployeeInformationHistory";
import {
ProfileEmployeeEmployment,
CreateEmploymentProfileEmployee,
UpdateEmploymentProfileEmployee
} from "../entities/ProfileEmployeeEmployment";
import { ProfileEmployeeEmploymentHistory } from "../entities/ProfileEmployeeEmploymentHistory";
@Route("api/v1/org/profile-employee")
@Tags("ProfileEmployee")
@ -82,6 +90,9 @@ export class ProfileEmployeeController extends Controller {
private child2Repository = AppDataSource.getRepository(OrgChild2);
private child3Repository = AppDataSource.getRepository(OrgChild3);
private child4Repository = AppDataSource.getRepository(OrgChild4);
private informationHistoryRepository = AppDataSource.getRepository(ProfileEmployeeInformationHistory);
private employmentRepository = AppDataSource.getRepository(ProfileEmployeeEmployment);
private employmentHistoryRepository = AppDataSource.getRepository(ProfileEmployeeEmploymentHistory);
/**
* report
@ -631,6 +642,127 @@ export class ProfileEmployeeController extends Controller {
return new HttpSuccess(profile);
}
/**
* API
*
* @summary (ADMIN)
*
*/
@Get("temp")
async listProfileEmp() {
const [record, total] = await this.profileRepo
.createQueryBuilder("profileEmployee")
.leftJoinAndSelect("profileEmployee.posLevel", "posLevel")
.leftJoinAndSelect("profileEmployee.posType", "posType")
.leftJoinAndSelect("profileEmployee.current_holders", "current_holders")
.leftJoinAndSelect("current_holders.positions", "positions")
.leftJoinAndSelect("current_holders.orgRoot", "orgRoot")
.leftJoinAndSelect("current_holders.orgChild1", "orgChild1")
.leftJoinAndSelect("current_holders.orgChild2", "orgChild2")
.leftJoinAndSelect("current_holders.orgChild3", "orgChild3")
.leftJoinAndSelect("current_holders.orgChild4", "orgChild4")
.andWhere("profileEmployee.employeeClass = :employeeClass", { employeeClass: "TEMP" })
.andWhere("profileEmployee.statusTemp = :statusTemp", { statusTemp: "REPORT" })
.getManyAndCount();
const data = await Promise.all(
record.map((_data) => {
const shortName =
_data.current_holders.length == 0
? null
: _data.current_holders[0].orgChild4 != null
? `${_data.current_holders[0].orgChild4.orgChild4ShortName}${_data.current_holders[0].posMasterNo}`
: _data.current_holders[0].orgChild3 != null
? `${_data.current_holders[0].orgChild3.orgChild3ShortName}${_data.current_holders[0].posMasterNo}`
: _data.current_holders[0].orgChild2 != null
? `${_data.current_holders[0].orgChild2.orgChild2ShortName}${_data.current_holders[0].posMasterNo}`
: _data.current_holders[0].orgChild1 != null
? `${_data.current_holders[0].orgChild1.orgChild1ShortName}${_data.current_holders[0].posMasterNo}`
: _data.current_holders[0].orgRoot != null
? `${_data.current_holders[0].orgRoot.orgRootShortName}${_data.current_holders[0].posMasterNo}`
: null;
return {
id: _data.id,
prefix: _data.prefix,
rank: _data.rank,
firstName: _data.firstName,
lastName: _data.lastName,
citizenId: _data.citizenId,
posLevel: _data.posLevel == null ? null : _data.posLevel.posLevelName,
posType: _data.posType == null ? null : _data.posType.posTypeName,
posTypeShortName: _data.posType == null ? null : _data.posType.posTypeShortName,
posLevelId: _data.posLevel == null ? null : _data.posLevel.id,
posTypeId: _data.posType == null ? null : _data.posType.id,
position: _data.position,
posNo: shortName,
employeeClass: _data.employeeClass == null ? null : _data.employeeClass,
govAge: Extension.CalculateGovAge(_data.dateAppoint, 0, 0),
age: Extension.CalculateAgeStrV2(_data.birthDate, 0, 0),
dateAppoint: _data.dateAppoint,
dateStart: _data.dateStart,
createdAt: _data.createdAt,
dateRetireLaw: _data.dateRetireLaw,
draftOrganizationOrganization:
_data.nodeTemp == "0"
? _data.rootTemp
: _data.nodeTemp == "1"
? _data.child1Temp
: _data.nodeTemp == "2"
? _data.child2Temp
: _data.nodeTemp == "3"
? _data.child3Temp
: _data.nodeTemp == "4"
? _data.child4Temp
: null,
draftPositionEmployee: _data.positionTemp,
draftOrgEmployeeStatus: _data.statusTemp,
node: _data.nodeTemp,
nodeId: _data.nodeIdTemp,
nodeName:
_data.nodeTemp == "0"
? _data.rootTemp
: _data.nodeTemp == "1"
? _data.child1Temp
: _data.nodeTemp == "2"
? _data.child2Temp
: _data.nodeTemp == "3"
? _data.child3Temp
: _data.nodeTemp == "4"
? _data.child4Temp
: null,
nodeShortName:
_data.nodeTemp == "0"
? _data.rootShortNameTemp
: _data.nodeTemp == "1"
? _data.child1ShortNameTemp
: _data.nodeTemp == "2"
? _data.child1ShortNameTemp
: _data.nodeTemp == "3"
? _data.child3ShortNameTemp
: _data.nodeTemp == "4"
? _data.child4ShortNameTemp
: null,
root: _data.rootTemp ? _data.rootTemp : null,
rootId: _data.rootIdTemp ? _data.rootIdTemp : null,
rootShortName: _data.rootShortNameTemp ? _data.rootShortNameTemp : null,
child1: _data.child1Temp ? _data.child1Temp : null,
child1Id: _data.child1IdTemp ? _data.child1IdTemp : null,
child1ShortName: _data.child1ShortNameTemp ? _data.child1ShortNameTemp : null,
child2: _data.child2Temp ? _data.child2Temp : null,
child2Id: _data.child2IdTemp ? _data.child2IdTemp : null,
child2ShortName: _data.child2ShortNameTemp ? _data.child2ShortNameTemp : null,
child3: _data.child3Temp ? _data.child3Temp : null,
child3Id: _data.child3IdTemp ? _data.child3IdTemp : null,
child3ShortName: _data.child3ShortNameTemp ? _data.child3ShortNameTemp : null,
child4: _data.child4Temp ? _data.child4Temp : null,
child4Id: _data.child4IdTemp ? _data.child4IdTemp : null,
child4ShortName: _data.child4ShortNameTemp ? _data.child4ShortNameTemp : null,
};
}),
);
return new HttpSuccess({ data: data, total });
}
/**
* API
*
@ -2372,4 +2504,228 @@ export class ProfileEmployeeController extends Controller {
await this.profileRepo.save(profile);
return new HttpSuccess();
}
/**
* API
*
* @summary (ADMIN)
*
* @param {string} profileEmployeeId profileEmployeeId
*/
@Put("information/{profileEmployeeId}")
async ProfileEmployeeInformation(
@Request() request: RequestWithUser,
@Path() profileEmployeeId: string,
@Body() body: UpdateInformationProfileEmployee,
) {
const profileEmp = await this.profileRepo.findOneBy({ id: profileEmployeeId });
if (!profileEmp) throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลโปรไฟล์นี้");
const history = new ProfileEmployeeInformationHistory();
Object.assign(history, { ...profileEmp, id: undefined });
Object.assign(profileEmp, body)
history.profileEmployeeId = profileEmployeeId;
history.lastUpdateFullName = request.user.name;
history.lastUpdateUserId = request.user.sub;
profileEmp.lastUpdateUserId = request.user.sub;
profileEmp.lastUpdateFullName = request.user.name;
await Promise.all([
this.profileRepo.save(profileEmp),
this.informationHistoryRepository.save(history),
]);
return new HttpSuccess();
}
/**
* API
*
* @summary (ADMIN)
*
* @param {string} profileEmployeeId profileEmployeeId
*/
@Get("information/history/{profileEmployeeId}")
async getInformationHistory(@Path() profileEmployeeId: string) {
const profileInformation = await this.profileRepo.find({
relations: {
information_histories: true,
},
where: { id: profileEmployeeId },
});
if (!profileInformation) throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล");
const mapData = profileInformation.flatMap((profile) =>
profile.information_histories).map((history) => ({
id: history.id,
positionEmployeeGroupId: history.positionEmployeeGroupId,
positionEmployeeLineId: history.positionEmployeeLineId,
positionEmployeePositionId: history.positionEmployeePositionId,
employeeOc: history.employeeOc,
employeeTypeIndividual: history.employeeTypeIndividual,
employeeWage: history.employeeWage,
employeeMoneyIncrease: history.employeeMoneyIncrease,
employeeMoneyAllowance: history.employeeMoneyAllowance,
employeeMoneyEmployee: history.employeeMoneyEmployee,
employeeMoneyEmployer: history.employeeMoneyEmployer,
createdAt: history.createdAt,
createdUserId: history.createdUserId,
createdFullName: history.createdFullName,
lastUpdatedAt: history.lastUpdatedAt,
lastUpdateUserId: history.lastUpdateUserId,
lastUpdateFullName: history.lastUpdateFullName,
}));
return new HttpSuccess(mapData);
}
/**
* API
*
* @summary
*
* @param {string} profileEmployeeId profileEmployeeId
*/
@Get("employment/{profileEmployeeId}")
async ProfileEmployeeEmployment(
@Path() profileEmployeeId: string,
) {
const employment = await this.employmentRepository.find({
where: { profileEmployeeId: profileEmployeeId },
order: { createdAt : "ASC"}
});
const mapData = employment.map((employment) => ({
id: employment.id,
date: employment.date,
command: employment.command,
}));
return new HttpSuccess(mapData);
}
/**
* API
*
* @summary
*
* @param {string} id Id
*/
@Get("employment/id/{id}")
async GetEmploymentById(
@Path() id: string,
) {
const employment = await this.employmentRepository.findOne({
where: { id: id },
});
return new HttpSuccess(employment);
}
/**
* API
*
* @summary
*
* @param {string} id Id
*/
@Get("employment/history/{id}")
async GetHistoryEmploymentById(
@Path() id: string,
) {
const employmentHistory = await this.employmentHistoryRepository.find({
where: { profileEmployeeEmploymentId: id },
order: { lastUpdatedAt : "ASC"}
});
return new HttpSuccess(employmentHistory);
}
/**
* API
*
* @summary
*
* @param {string} profileEmployeeId profileEmployeeId
*/
@Post("employment/{profileEmployeeId}")
async CreateEmployment(
@Path() profileEmployeeId: string,
@Body() body: CreateEmploymentProfileEmployee,
@Request() request: RequestWithUser,
) {
const profile = await this.profileRepo.findOne({
where: { id: profileEmployeeId },
});
if (!profile) throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล");
const employment = new ProfileEmployeeEmployment();
// const history = new ProfileEmployeeEmploymentHistory();
Object.assign(employment, body)
employment.profileEmployeeId = profileEmployeeId;
employment.createdUserId = request.user.sub;
employment.createdFullName = request.user.name;
employment.lastUpdateUserId = request.user.sub;
employment.lastUpdateFullName = request.user.name;
await this.employmentRepository.save(employment);
// if (employment) {
// Object.assign(history, { ...employment, id: undefined });
// history.profileEmployeeEmploymentId = employment.id;
// history.createdUserId = request.user.sub;
// history.createdFullName = request.user.name;
// history.lastUpdateFullName = request.user.name;
// history.lastUpdateUserId = request.user.sub;
// await this.employmentHistoryRepository.save(history);
// }
return new HttpSuccess();
}
/**
* API
*
* @summary (ADMIN)
*
* @param {string} id Id
*/
@Delete("employment/{id}")
async DeleteEmployment(@Path() id: string) {
await this.employmentHistoryRepository.delete({
profileEmployeeEmploymentId: id,
});
const result = await this.employmentRepository.delete({ id });
if (result.affected && result.affected <= 0) {
throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล");
}
return new HttpSuccess();
}
/**
* API
*
* @summary (ADMIN)
*
* @param {string} id Id
*/
@Put("employment/{id}")
async UpdateEmployment(
@Request() request: RequestWithUser,
@Path() id: string,
@Body() body: UpdateEmploymentProfileEmployee,
) {
const employment = await this.employmentRepository.findOneBy({ id });
if (!employment) throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล");
const history = new ProfileEmployeeEmploymentHistory();
Object.assign(history, { ...employment, id: undefined });
Object.assign(employment, body)
employment.lastUpdateUserId = request.user.sub;
employment.lastUpdateFullName = request.user.name;
history.profileEmployeeEmploymentId = id;
history.lastUpdateFullName = request.user.name;
history.lastUpdateUserId = request.user.sub;
await Promise.all([
this.employmentRepository.save(employment),
this.employmentHistoryRepository.save(history)
]);
return new HttpSuccess();
}
}

View file

@ -41,3 +41,8 @@ export class CreateEmploymentProfileEmployee {
date: Date | null;
command: string | null;
}
export class UpdateEmploymentProfileEmployee {
date: Date | null;
command: string | null;
}