hrms-api-org/src/controllers/ProfileSalaryTempController.ts

1603 lines
61 KiB
TypeScript

import {
Body,
Controller,
Get,
Patch,
Path,
Post,
Put,
Query,
Request,
Route,
Security,
Tags,
} from "tsoa";
import { AppDataSource } from "../database/data-source";
import { ProfileSalary } from "../entities/ProfileSalary";
import HttpSuccess from "../interfaces/http-success";
import HttpStatus from "../interfaces/http-status";
import HttpError from "../interfaces/http-error";
import HttpStatusCode from "../interfaces/http-status";
import { RequestWithUser } from "../middlewares/user";
import { Brackets, IsNull, LessThan, MoreThan, Not } from "typeorm";
import { setLogDataDiff } from "../interfaces/utils";
import {
CreateProfileSalaryTemp,
ProfileSalaryTemp,
UpdateProfileSalaryTemp,
} from "../entities/ProfileSalaryTemp";
import { Profile } from "../entities/Profile";
import { ProfileEmployee } from "../entities/ProfileEmployee";
import permission from "../interfaces/permission";
import { OrgRevision } from "../entities/OrgRevision";
import Extension from "../interfaces/extension";
import {
CreatePositionSalaryEditHistory,
PositionSalaryEditHistory,
} from "../entities/PositionSalaryEditHistory";
@Route("api/v1/org/profile/salaryTemp")
@Tags("ProfileSalaryTemp")
@Security("bearerAuth")
export class ProfileSalaryTempController extends Controller {
private profileRepo = AppDataSource.getRepository(Profile);
private profileEmployeeRepo = AppDataSource.getRepository(ProfileEmployee);
private salaryRepo = AppDataSource.getRepository(ProfileSalaryTemp);
private salaryOldRepo = AppDataSource.getRepository(ProfileSalary);
private orgRevisionRepo = AppDataSource.getRepository(OrgRevision);
private positionSalaryEditHistoryRepo = AppDataSource.getRepository(PositionSalaryEditHistory);
/**
* API ค้นหารายการคน
*
* @summary API ค้นหารายการคน
*
*/
@Get()
async listProfile(
@Request() request: RequestWithUser,
@Query("page") page: number = 1,
@Query("pageSize") pageSize: number = 10,
@Query()
searchField?: "firstName" | "lastName" | "fullName" | "citizenId",
@Query() type: string = "OFFICER",
@Query() searchKeyword: string = "",
@Query() statusCheckEdit?: string | null,
@Query() rootId?: string,
@Query("sortBy") sortBy?: string,
@Query("descending") descending?: boolean,
) {
if (type.trim().toUpperCase() == "OFFICER") {
let _data = await new permission().PermissionOrgList(request, "SYS_REGISTRY_OFFICER");
let queryLike =
"CONCAT(profile.prefix, profile.firstName, ' ', profile.lastName) LIKE :keyword";
if (searchField == "citizenId") {
queryLike = "profile.citizenId LIKE :keyword";
}
const findRevision = await this.orgRevisionRepo.findOne({
where: { orgRevisionIsCurrent: true },
});
if (!findRevision) {
throw new HttpError(HttpStatus.NOT_FOUND, "not found. OrgRevision");
}
let query = await this.profileRepo
.createQueryBuilder("profile")
.leftJoinAndSelect("profile.posLevel", "posLevel")
.leftJoinAndSelect("profile.posType", "posType")
.leftJoinAndSelect("profile.current_holders", "current_holders")
.leftJoinAndSelect("current_holders.positions", "positions")
.leftJoinAndSelect("positions.posExecutive", "posExecutive")
.leftJoinAndSelect("current_holders.orgRevision", "orgRevision")
.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")
.where("current_holders.orgRevisionId = :orgRevisionId", {
orgRevisionId: findRevision.id,
})
.andWhere(
statusCheckEdit != undefined &&
statusCheckEdit != null &&
statusCheckEdit.toUpperCase() != "ALL"
? "profile.statusCheckEdit = :statusCheckEdit"
: "1=1",
{
statusCheckEdit: statusCheckEdit?.trim()?.toUpperCase() ?? null,
},
)
.andWhere(
_data.root != undefined && _data.root != null
? _data.root[0] != null
? `current_holders.orgRootId IN (:...root)`
: `current_holders.orgRootId is null`
: "1=1",
{
root: _data.root,
},
)
.andWhere(
_data.child1 != undefined && _data.child1 != null
? _data.child1[0] != null
? `current_holders.orgChild1Id IN (:...child1)`
: `current_holders.orgChild1Id is null`
: "1=1",
{
child1: _data.child1,
},
)
.andWhere(
_data.child2 != undefined && _data.child2 != null
? _data.child2[0] != null
? `current_holders.orgChild2Id IN (:...child2)`
: `current_holders.orgChild2Id is null`
: "1=1",
{
child2: _data.child2,
},
)
.andWhere(
_data.child3 != undefined && _data.child3 != null
? _data.child3[0] != null
? `current_holders.orgChild3Id IN (:...child3)`
: `current_holders.orgChild3Id is null`
: "1=1",
{
child3: _data.child3,
},
)
.andWhere(
_data.child4 != undefined && _data.child4 != null
? _data.child4[0] != null
? `current_holders.orgChild4Id IN (:...child4)`
: `current_holders.orgChild4Id is null`
: "1=1",
{
child4: _data.child4,
},
)
.andWhere(
new Brackets((qb) => {
qb.orWhere(
searchKeyword != null && searchKeyword != ""
? `profile.citizenId like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `profile.position like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `CONCAT(profile.prefix, profile.firstName," ",profile.lastName) like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `posType.posTypeName like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `posLevel.posLevelName like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `orgRoot.orgRootName like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `orgChild1.orgChild1Name like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `orgChild2.orgChild2Name like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `orgChild3.orgChild3Name like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `orgChild4.orgChild4Name like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `CONCAT(
orgRoot.orgRootShortName," ",
current_holders.posMasterNo
) like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `CONCAT(
orgRoot.orgRootShortName,
orgChild1.orgChild1ShortName," ",
current_holders.posMasterNo
) like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `CONCAT(
orgRoot.orgRootShortName,
orgChild1.orgChild1ShortName,
orgChild2.orgChild2ShortName," ",
current_holders.posMasterNo
) like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `CONCAT(
orgRoot.orgRootShortName,
orgChild1.orgChild1ShortName,
orgChild2.orgChild2ShortName,
orgChild3.orgChild3ShortName," ",
current_holders.posMasterNo
) like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `CONCAT(
orgRoot.orgRootShortName,
orgChild1.orgChild1ShortName,
orgChild2.orgChild2ShortName,
orgChild3.orgChild3ShortName,
orgChild4.orgChild4ShortName," ",
current_holders.posMasterNo
) like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `CONCAT(
orgRoot.orgRootShortName,
current_holders.posMasterNo
) like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `CONCAT(
orgRoot.orgRootShortName,
orgChild1.orgChild1ShortName,
current_holders.posMasterNo
) like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `CONCAT(
orgRoot.orgRootShortName,
orgChild1.orgChild1ShortName,
orgChild2.orgChild2ShortName,
current_holders.posMasterNo
) like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `CONCAT(
orgRoot.orgRootShortName,
orgChild1.orgChild1ShortName,
orgChild2.orgChild2ShortName,
orgChild3.orgChild3ShortName,
current_holders.posMasterNo
) like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `CONCAT(
orgRoot.orgRootShortName,
orgChild1.orgChild1ShortName,
orgChild2.orgChild2ShortName,
orgChild3.orgChild3ShortName,
orgChild4.orgChild4ShortName,
current_holders.posMasterNo
) like '%${searchKeyword}%'`
: "1=1",
);
}),
)
// .andWhere(
// rootId != undefined &&
// rootId != null
// ? `current_holders.orgRootId = :rootId`
// : "1=1",
// {
// rootId: rootId,
// }
// )
.andWhere("current_holders.orgRootId = :rootId", {
rootId: rootId,
})
.addSelect("CASE WHEN current_holders.posMasterNo IS NULL THEN 1 ELSE 0 END", "sort_order")
// .orderBy(`${sortBy}`, sort)
if (sortBy) {
if(sortBy == "posLevel"){
query = query.orderBy(
`posLevel.posLevelName`,
descending ? "DESC" : "ASC"
);
}else if(sortBy == "posType"){
query = query.orderBy(
`posType.posTypeName`,
descending ? "DESC" : "ASC"
);
}else if(sortBy == "posExecutive"){
query = query.orderBy(
`posExecutive.posExecutiveName`,
descending ? "DESC" : "ASC"
);
}else if(sortBy == "posNo"){
query = query.orderBy(
`orgRoot.orgRootShortName`,
descending ? "DESC" : "ASC"
);
}else{
query = query.orderBy(
`profile.${sortBy}`,
descending ? "DESC" : "ASC"
);
}
}else{
query = query.orderBy("sort_order", "ASC")
.addOrderBy("orgRoot.orgRootOrder", "ASC")
.addOrderBy("orgChild1.orgChild1Order", "ASC")
.addOrderBy("orgChild2.orgChild2Order", "ASC")
.addOrderBy("orgChild3.orgChild3Order", "ASC")
.addOrderBy("orgChild4.orgChild4Order", "ASC")
.addOrderBy("current_holders.posMasterNo", "ASC")
}
const [record, total] = await query
.skip((page - 1) * pageSize)
.take(pageSize)
.getManyAndCount();
const data = await Promise.all(
record.map((_data) => {
const posExecutive =
_data.current_holders.length == 0 ||
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null ||
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.positions
.length == 0 ||
_data.current_holders
.find((x) => x.orgRevisionId == findRevision.id)
?.positions.find((x: any) => x.positionIsSelected == true) == null ||
_data.current_holders
.find((x) => x.orgRevisionId == findRevision.id)
?.positions.find((x: any) => x.positionIsSelected == true)?.posExecutive == null
? null
: _data.current_holders
.find((x) => x.orgRevisionId == findRevision.id)
?.positions.find((x: any) => x.positionIsSelected == true)?.posExecutive
?.posExecutiveName;
const shortName =
_data.current_holders.length == 0
? null
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null &&
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)
?.orgChild4 != null
? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild4.orgChild4ShortName} ${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}`
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null &&
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)
?.orgChild3 != null
? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild3.orgChild3ShortName} ${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}`
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null &&
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)
?.orgChild2 != null
? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild2.orgChild2ShortName} ${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}`
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) !=
null &&
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)
?.orgChild1 != null
? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild1.orgChild1ShortName} ${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}`
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) !=
null &&
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)
?.orgRoot != null
? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgRoot.orgRootShortName} ${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}`
: null;
const root =
_data.current_holders.length == 0 ||
(_data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null &&
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgRoot ==
null)
? null
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgRoot;
const child1 =
_data.current_holders == null ||
_data.current_holders.length == 0 ||
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null
? null
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild1;
const child2 =
_data.current_holders == null ||
_data.current_holders.length == 0 ||
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null
? null
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild2;
const child3 =
_data.current_holders == null ||
_data.current_holders.length == 0 ||
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null
? null
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild3;
const child4 =
_data.current_holders == null ||
_data.current_holders.length == 0 ||
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null
? null
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild4;
let _child1 = child1?.orgChild1Name;
let _child2 = child2?.orgChild2Name;
let _child3 = child3?.orgChild3Name;
let _child4 = child4?.orgChild4Name;
return {
id: _data.id,
avatar: _data.avatar,
avatarName: _data.avatarName,
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,
posLevelId: _data.posLevel == null ? null : _data.posLevel.id,
posTypeId: _data.posType == null ? null : _data.posType.id,
position: _data.position,
posExecutive: posExecutive,
posNo: shortName,
rootId: root == null ? null : root.id,
root: root == null ? null : root.orgRootName,
orgRootShortName: root == null ? null : root.orgRootShortName,
orgRevisionId: root == null ? null : root.orgRevisionId,
org:
(_child4 == null ? "" : _child4 + "\n") +
(_child3 == null ? "" : _child3 + "\n") +
(_child2 == null ? "" : _child2 + "\n") +
(_child1 == null ? "" : _child1 + "\n") +
(root?.orgRootName == null ? "" : root?.orgRootName),
statusCheckEdit: _data.statusCheckEdit,
type: "OFFICER",
};
}),
);
return new HttpSuccess({ data: data, total });
} else {
let _data = await new permission().PermissionOrgList(request, "SYS_REGISTRY_EMP");
let queryLike =
"CONCAT(profileEmployee.prefix, profileEmployee.firstName, ' ', profileEmployee.lastName) LIKE :keyword";
if (searchField == "citizenId") {
queryLike = "profileEmployee.citizenId LIKE :keyword";
}
const findRevision = await this.orgRevisionRepo.findOne({
where: { orgRevisionIsCurrent: true },
});
if (!findRevision) {
throw new HttpError(HttpStatus.NOT_FOUND, "not found. OrgRevision");
}
let query = await this.profileEmployeeRepo
.createQueryBuilder("profileEmployee")
.leftJoinAndSelect("profileEmployee.posLevel", "posLevel")
.leftJoinAndSelect("profileEmployee.posType", "posType")
.leftJoinAndSelect("profileEmployee.current_holders", "current_holders")
.leftJoinAndSelect("profileEmployee.profileEmployeeEmployment", "profileEmployeeEmployment")
.leftJoinAndSelect("current_holders.positions", "positions")
.leftJoinAndSelect("current_holders.orgRevision", "orgRevision")
.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")
.where("current_holders.orgRevisionId = :orgRevisionId", {
orgRevisionId: findRevision.id,
})
.andWhere(
statusCheckEdit != undefined &&
statusCheckEdit != null &&
statusCheckEdit.toUpperCase() != "ALL"
? "profileEmployee.statusCheckEdit = :statusCheckEdit"
: "1=1",
{
statusCheckEdit: statusCheckEdit?.trim()?.toUpperCase() ?? null,
},
)
.andWhere(
_data.root != undefined && _data.root != null
? _data.root[0] != null
? `current_holders.orgRootId IN (:...root)`
: `current_holders.orgRootId is null`
: "1=1",
{
root: _data.root,
},
)
.andWhere(
_data.child1 != undefined && _data.child1 != null
? _data.child1[0] != null
? `current_holders.orgChild1Id IN (:...child1)`
: `current_holders.orgChild1Id is null`
: "1=1",
{
child1: _data.child1,
},
)
.andWhere(
_data.child2 != undefined && _data.child2 != null
? _data.child2[0] != null
? `current_holders.orgChild2Id IN (:...child2)`
: `current_holders.orgChild2Id is null`
: "1=1",
{
child2: _data.child2,
},
)
.andWhere(
_data.child3 != undefined && _data.child3 != null
? _data.child3[0] != null
? `current_holders.orgChild3Id IN (:...child3)`
: `current_holders.orgChild3Id is null`
: "1=1",
{
child3: _data.child3,
},
)
.andWhere(
_data.child4 != undefined && _data.child4 != null
? _data.child4[0] != null
? `current_holders.orgChild4Id IN (:...child4)`
: `current_holders.orgChild4Id is null`
: "1=1",
{
child4: _data.child4,
},
)
// .andWhere("profileEmployee.employeeClass LIKE :type", {
// type: "PERM",
// })
// .andWhere(
// searchKeyword != undefined && searchKeyword != null && searchKeyword != ""
// ? queryLike
// : "1=1",
// {
// keyword: `%${searchKeyword}%`,
// },
// )
.andWhere(
new Brackets((qb) => {
qb.orWhere(
searchKeyword != null && searchKeyword != ""
? `profileEmployee.citizenId like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `profileEmployee.position like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `CONCAT(profileEmployee.prefix, profileEmployee.firstName," ",profileEmployee.lastName) like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `posType.posTypeName like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `posLevel.posLevelName like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `CONCAT(posType.posTypeShortName," ",posLevel.posLevelName) like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `CONCAT(posType.posTypeShortName,posLevel.posLevelName) like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `orgRoot.orgRootName like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `orgChild1.orgChild1Name like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `orgChild2.orgChild2Name like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `orgChild3.orgChild3Name like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `orgChild4.orgChild4Name like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `CONCAT(
orgRoot.orgRootShortName," ",
current_holders.posMasterNo
) like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `CONCAT(
orgRoot.orgRootShortName,
orgChild1.orgChild1ShortName," ",
current_holders.posMasterNo
) like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `CONCAT(
orgRoot.orgRootShortName,
orgChild1.orgChild1ShortName,
orgChild2.orgChild2ShortName," ",
current_holders.posMasterNo
) like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `CONCAT(
orgRoot.orgRootShortName,
orgChild1.orgChild1ShortName,
orgChild2.orgChild2ShortName,
orgChild3.orgChild3ShortName," ",
current_holders.posMasterNo
) like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `CONCAT(
orgRoot.orgRootShortName,
orgChild1.orgChild1ShortName,
orgChild2.orgChild2ShortName,
orgChild3.orgChild3ShortName,
orgChild4.orgChild4ShortName," ",
current_holders.posMasterNo
) like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `CONCAT(
orgRoot.orgRootShortName,
current_holders.posMasterNo
) like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `CONCAT(
orgRoot.orgRootShortName,
orgChild1.orgChild1ShortName,
current_holders.posMasterNo
) like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `CONCAT(
orgRoot.orgRootShortName,
orgChild1.orgChild1ShortName,
orgChild2.orgChild2ShortName,
current_holders.posMasterNo
) like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `CONCAT(
orgRoot.orgRootShortName,
orgChild1.orgChild1ShortName,
orgChild2.orgChild2ShortName,
orgChild3.orgChild3ShortName,
current_holders.posMasterNo
) like '%${searchKeyword}%'`
: "1=1",
)
.orWhere(
searchKeyword != null && searchKeyword != ""
? `CONCAT(
orgRoot.orgRootShortName,
orgChild1.orgChild1ShortName,
orgChild2.orgChild2ShortName,
orgChild3.orgChild3ShortName,
orgChild4.orgChild4ShortName,
current_holders.posMasterNo
) like '%${searchKeyword}%'`
: "1=1",
);
}),
)
.andWhere("current_holders.orgRootId = :rootId", {
rootId: rootId,
})
.orderBy("current_holders.posMasterNo", "ASC")
// .orderBy(`${sortBy}`, sort)
if (sortBy) {
if(sortBy == "posLevel"){
query = query.orderBy(
`posLevel.posLevelName`,
descending ? "DESC" : "ASC"
);
}else if(sortBy == "posType"){
query = query.orderBy(
`posType.posTypeName`,
descending ? "DESC" : "ASC"
);
}else if(sortBy == "posNo"){
query = query.orderBy(
`orgRoot.orgRootShortName`,
descending ? "DESC" : "ASC"
);
}else{
query = query.orderBy(
`profileEmployee.${sortBy}`,
descending ? "DESC" : "ASC"
);
}
}
const [record, total] = await query
.skip((page - 1) * pageSize)
.take(pageSize)
.getManyAndCount();
const data = await Promise.all(
record.map((_data) => {
const shortName =
_data.current_holders.length == 0
? null
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null &&
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)
?.orgChild4 != null
? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild4.orgChild4ShortName} ${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}`
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null &&
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)
?.orgChild3 != null
? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild3.orgChild3ShortName} ${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}`
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null &&
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)
?.orgChild2 != null
? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild2.orgChild2ShortName} ${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}`
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) !=
null &&
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)
?.orgChild1 != null
? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild1.orgChild1ShortName} ${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}`
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) !=
null &&
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)
?.orgRoot != null
? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgRoot.orgRootShortName} ${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}`
: null;
const dateEmployment =
_data.profileEmployeeEmployment.length == 0
? null
: _data.profileEmployeeEmployment.reduce((latest, current) => {
return latest.date > current.date ? latest : current;
}).date;
const root =
_data.current_holders.length == 0 ||
(_data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null &&
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgRoot ==
null)
? null
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgRoot;
const child1 =
_data.current_holders == null ||
_data.current_holders.length == 0 ||
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null
? null
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild1;
const child2 =
_data.current_holders == null ||
_data.current_holders.length == 0 ||
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null
? null
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild2;
const child3 =
_data.current_holders == null ||
_data.current_holders.length == 0 ||
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null
? null
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild3;
const child4 =
_data.current_holders == null ||
_data.current_holders.length == 0 ||
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null
? null
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild4;
let _child1 = child1?.orgChild1Name;
let _child2 = child2?.orgChild2Name;
let _child3 = child3?.orgChild3Name;
let _child4 = child4?.orgChild4Name;
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,
positionId: _data.positionIdTemp,
posmasterId: _data.posmasterIdTemp,
position: _data.position,
posNo: _data.employeeClass == "TEMP" ? _data.posMasterNoTemp : shortName,
employeeClass: _data.employeeClass == null ? null : _data.employeeClass,
govAge: Extension.CalculateGovAge(_data.dateAppoint, 0, 0),
age: Extension.CalculateAgeStrV2(_data.birthDate, 0, 0),
dateEmployment: dateEmployment,
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,
org:
(_child4 == null ? "" : _child4 + "\n") +
(_child3 == null ? "" : _child3 + "\n") +
(_child2 == null ? "" : _child2 + "\n") +
(_child1 == null ? "" : _child1 + "\n") +
(root?.orgRootName == null ? "" : root?.orgRootName),
statusCheckEdit: _data.statusCheckEdit,
type: "EMPLOYEE",
};
}),
);
return new HttpSuccess({ data: data, total });
}
}
// /**
// * API Clone ใหม่ตำแหน่งเงินเดือน
// *
// * @summary API Clone ใหม่ตำแหน่งเงินเดือน
// *
// */
// @Get("{type}/new-clone/{profileId}")
// public async newCloneSalary(
// @Path() profileId: string,
// @Path() type: string,
// @Request() req: RequestWithUser,
// ) {
// if (type.toLocaleUpperCase() == "OFFICER") {
// const salary = await this.salaryRepo.find({ where: { profileId: profileId } });
// await this.salaryRepo.remove(salary);
// let salaryOld = await this.salaryOldRepo.find({
// where: { profileId: profileId },
// order: { order: "ASC" },
// });
// salaryOld.forEach((item: any) => {
// item.salaryId = item.id;
// item.order = i + 1;
// });
// let salaryNew = salaryOld.map(({ id, ...rest }: ProfileSalary) => ({
// ...rest,
// isDelete: false,
// isEdit: false,
// createdUserId: req.user.sub,
// createdFullName: req.user.name,
// lastUpdateUserId: req.user.sub,
// lastUpdateFullName: req.user.name,
// createdAt: new Date(),
// lastUpdatedAt: new Date(),
// }));
// await this.salaryRepo.save(salaryNew);
// return new HttpSuccess(salaryNew);
// } else {
// const salary = await this.salaryRepo.find({ where: { profileEmployeeId: profileId } });
// await this.salaryRepo.remove(salary);
// let salaryOld = await this.salaryOldRepo.find({
// where: { profileEmployeeId: profileId },
// order: { order: "ASC" },
// });
// salaryOld.forEach((item: any) => {
// item.salaryId = item.id;
// item.order = i + 1;
// });
// let salaryNew = salaryOld.map(({ id, ...rest }: ProfileSalary) => ({
// ...rest,
// isDelete: false,
// isEdit: false,
// createdUserId: req.user.sub,
// createdFullName: req.user.name,
// lastUpdateUserId: req.user.sub,
// lastUpdateFullName: req.user.name,
// createdAt: new Date(),
// lastUpdatedAt: new Date(),
// }));
// await this.salaryRepo.save(salaryNew);
// return new HttpSuccess(salaryNew);
// }
// }
/**
* API Get ตำแหน่งเงินเดือน
*
* @summary API Get ตำแหน่งเงินเดือน
*
*/
@Get("get/{salaryId}")
public async getSalary(@Path() salaryId: string, @Request() req: RequestWithUser) {
const salary = await this.salaryRepo.findOne({
where: { id: salaryId },
relations: ["profileSalary"],
});
if (!salary) {
throw new HttpError(HttpStatus.BAD_REQUEST, "ไม่พบ profile ดังกล่าว");
}
return new HttpSuccess({ salaryNew: salary, salaryOld: salary.profileSalary });
}
/**
* API List ตำแหน่งเงินเดือน
*
* @summary API List ตำแหน่งเงินเดือน
*
*/
@Get("{type}/{profileId}")
public async listSalary(
@Path() profileId: string,
@Path() type: string,
@Request() req: RequestWithUser,
) {
if (type.toLocaleUpperCase() == "OFFICER") {
const salary = await this.salaryRepo.find({
where: { profileId: profileId },
order: { order: "ASC" },
});
if (salary.length <= 0) {
let salaryOld = await this.salaryOldRepo.find({
where: { profileId: profileId },
order: { order: "ASC" },
});
salaryOld.forEach((item: any, i) => {
item.salaryId = item.id;
item.order = i + 1;
});
let salaryNew = salaryOld.map(({ id, ...rest }: ProfileSalary) => ({
...rest,
isDelete: false,
isEdit: false,
isEntry: rest.isEntry ?? false,
createdUserId: req.user.sub,
createdFullName: req.user.name,
lastUpdateUserId: req.user.sub,
lastUpdateFullName: req.user.name,
createdAt: new Date(),
lastUpdatedAt: new Date(),
}));
await this.salaryRepo.save(salaryNew);
return new HttpSuccess(
salaryNew.map((item) => ({
...item,
status: item.isDelete == true ? "DELETE" : item.isEdit == true ? "EDIT" : "PENDING",
})),
);
}
return new HttpSuccess(
salary.map((item) => ({
...item,
status: item.isDelete == true ? "DELETE" : item.isEdit == true ? "EDIT" : "PENDING",
})),
);
} else {
const salary = await this.salaryRepo.find({
where: { profileEmployeeId: profileId },
order: { order: "ASC" },
});
if (salary.length <= 0) {
let salaryOld = await this.salaryOldRepo.find({
where: { profileEmployeeId: profileId },
order: { order: "ASC" },
});
salaryOld.forEach((item: any, i) => {
item.salaryId = item.id;
item.order = i + 1;
});
let salaryNew = salaryOld.map(({ id, ...rest }: ProfileSalary) => ({
...rest,
isDelete: false,
isEdit: false,
isEntry: rest.isEntry ?? false,
createdUserId: req.user.sub,
createdFullName: req.user.name,
lastUpdateUserId: req.user.sub,
lastUpdateFullName: req.user.name,
createdAt: new Date(),
lastUpdatedAt: new Date(),
}));
await this.salaryRepo.save(salaryNew);
return new HttpSuccess(
salaryNew.map((item) => ({
...item,
status: item.isDelete == true ? "DELETE" : item.isEdit == true ? "EDIT" : "PENDING",
})),
);
}
return new HttpSuccess(
salary.map((item) => ({
...item,
status: item.isDelete == true ? "DELETE" : item.isEdit == true ? "EDIT" : "PENDING",
})),
);
}
}
/**
* API List ตำแหน่งเงินเดือนแก้ไขแล้ว
*
* @summary API List ตำแหน่งเงินเดือนแก้ไขแล้ว
*
*/
@Get("{type}/done/{profileId}")
public async listDoneSalary(
@Path() profileId: string,
@Path() type: string,
@Request() req: RequestWithUser,
) {
if (type.toLocaleUpperCase() == "OFFICER") {
const salary = await this.salaryRepo.find({
where: { profileId: profileId, isDelete: false },
order: { order: "ASC" },
});
if (!salary) {
throw new HttpError(HttpStatus.BAD_REQUEST, "ไม่พบ profile ดังกล่าว");
}
return new HttpSuccess(
salary.map((item) => ({
...item,
status: item.isDelete == true ? "DELETE" : item.isEdit == true ? "EDIT" : "PENDING",
})),
);
} else {
const salary = await this.salaryRepo.find({
where: { profileEmployeeId: profileId, isDelete: false },
order: { order: "ASC" },
});
if (!salary) {
throw new HttpError(HttpStatus.BAD_REQUEST, "ไม่พบ profile ดังกล่าว");
}
return new HttpSuccess(
salary.map((item) => ({
...item,
status: item.isDelete == true ? "DELETE" : item.isEdit == true ? "EDIT" : "PENDING",
})),
);
}
}
/**
* API สร้างตำแหน่งเงินเดือน
*
* @summary API สร้างตำแหน่งเงินเดือน
*
*/
@Post()
public async newSalary(@Request() req: RequestWithUser, @Body() body: CreateProfileSalaryTemp) {
let dest_item = 1;
if (body.type.toLocaleUpperCase() == "OFFICER") {
if (body.profileId) {
const salary = await this.salaryRepo.findOne({
where: { profileId: body.profileId },
order: { order: "DESC" },
});
if (salary) {
dest_item = salary.order+1;
}
// const profile = await this.profileRepo.findOneBy({ id: body.profileId });
// if (!profile) {
// throw new HttpError(HttpStatus.BAD_REQUEST, "ไม่พบ profile ดังกล่าว");
// }
// profile.statusCheckEdit = "EDITED"
// await this.profileRepo.save(profile);
} else {
throw new HttpError(HttpStatus.BAD_REQUEST, "ไม่พบ profile ดังกล่าว");
}
} else {
if (body.profileEmployeeId) {
const salary = await this.salaryRepo.findOne({
where: { profileEmployeeId: body.profileEmployeeId },
order: { order: "DESC" },
});
if (salary) {
dest_item = salary.order+1;
}
// const profile = await this.profileEmployeeRepo.findOneBy({ id: body.profileId });
// if (!profile) {
// throw new HttpError(HttpStatus.BAD_REQUEST, "ไม่พบ profile ดังกล่าว");
// }
// profile.statusCheckEdit = "EDITED"
// await this.profileRepo.save(profile);
} else {
throw new HttpError(HttpStatus.BAD_REQUEST, "ไม่พบ profile ดังกล่าว");
}
}
const before = null;
const data = new ProfileSalaryTemp();
const meta = {
order: dest_item,
createdUserId: req.user.sub,
createdFullName: req.user.name,
lastUpdateUserId: req.user.sub,
lastUpdateFullName: req.user.name,
createdAt: new Date(),
lastUpdatedAt: new Date(),
isEdit: true,
};
Object.assign(data, { ...body, ...meta });
await this.salaryRepo.save(data, { data: req });
setLogDataDiff(req, { before, after: data });
return new HttpSuccess();
}
/**
* API แก้สถานะเป็นยังไม่แก้ไข
*
* @summary API แก้สถานะเป็นยังไม่แก้ไข
*
*/
@Post("confirm-pending")
public async confirmPendingSalary(
@Request() req: RequestWithUser,
@Body() body: { profileId: string; type: string },
) {
if (body.type.toLocaleUpperCase() == "OFFICER") {
const profile = await this.profileRepo.findOneBy({ id: body.profileId });
if (!profile) {
throw new HttpError(HttpStatus.BAD_REQUEST, "ไม่พบ profile ดังกล่าว");
}
profile.statusCheckEdit = "PENDING";
await this.profileRepo.save(profile);
} else {
const profile = await this.profileEmployeeRepo.findOneBy({ id: body.profileId });
if (!profile) {
throw new HttpError(HttpStatus.BAD_REQUEST, "ไม่พบ profile ดังกล่าว");
}
profile.statusCheckEdit = "PENDING";
await this.profileEmployeeRepo.save(profile);
}
return new HttpSuccess();
}
/**
* API ยืนยันเสร็จสิ้นการแก้ไข
*
* @summary API ยืนยันเสร็จสิ้นการแก้ไข
*
*/
@Post("confirm-edit")
public async confirmEditSalary(
@Request() req: RequestWithUser,
@Body() body: { profileId: string; type: string },
) {
if (body.type.toLocaleUpperCase() == "OFFICER") {
const profile = await this.profileRepo.findOneBy({ id: body.profileId });
if (!profile) {
throw new HttpError(HttpStatus.BAD_REQUEST, "ไม่พบ profile ดังกล่าว");
}
profile.statusCheckEdit = "EDITED";
await this.profileRepo.save(profile);
} else {
const profile = await this.profileEmployeeRepo.findOneBy({ id: body.profileId });
if (!profile) {
throw new HttpError(HttpStatus.BAD_REQUEST, "ไม่พบ profile ดังกล่าว");
}
profile.statusCheckEdit = "EDITED";
await this.profileEmployeeRepo.save(profile);
}
return new HttpSuccess();
}
/**
* API ยืนยันข้อมูลถูกต้อง
*
* @summary API ยืนยันข้อมูลถูกต้อง
*
*/
@Post("confirm-done")
public async confirmDoneSalary(
@Request() req: RequestWithUser,
@Body() body: { profileId: string; type: string },
) {
if (body.type.toLocaleUpperCase() == "OFFICER") {
const profile = await this.profileRepo.findOneBy({ id: body.profileId });
if (!profile) {
throw new HttpError(HttpStatus.BAD_REQUEST, "ไม่พบ profile ดังกล่าว");
}
profile.statusCheckEdit = "CHECKED";
await this.profileRepo.save(profile);
} else {
const profile = await this.profileEmployeeRepo.findOneBy({ id: body.profileId });
if (!profile) {
throw new HttpError(HttpStatus.BAD_REQUEST, "ไม่พบ profile ดังกล่าว");
}
profile.statusCheckEdit = "CHECKED";
await this.profileEmployeeRepo.save(profile);
}
return new HttpSuccess();
}
/**
* API แก้ไขข้อมูล
*
* @summary API แก้ไขข้อมูล
*
*/
@Patch("{salaryId}")
public async editSalary(
@Request() req: RequestWithUser,
@Body() body: UpdateProfileSalaryTemp,
@Path() salaryId: string,
) {
const record = await this.salaryRepo.findOneBy({ id: salaryId });
if (!record) throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล");
// await new permission().PermissionOrgUserUpdate(req, "SYS_REGISTRY_OFFICER", record.profileId);
const before = structuredClone(record);
Object.assign(record, body);
record.isEdit = true;
record.lastUpdateUserId = req.user.sub;
record.lastUpdateFullName = req.user.name;
record.lastUpdatedAt = new Date();
await Promise.all([
this.salaryRepo.save(record, { data: req }),
setLogDataDiff(req, { before, after: record }),
]);
return new HttpSuccess();
}
/**
* API ลบข้อมูล
*
* @summary API ลบข้อมูล
*
*/
@Post("delete")
public async deleteIsSalary(
@Request() req: RequestWithUser,
@Body() body: { salaryId: string; type: string },
) {
const data = await this.salaryRepo.findOneBy({ id: body.salaryId });
if (data == null) throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล");
data.isDelete = true;
await this.salaryRepo.save(data);
return new HttpSuccess();
}
/**
* API ย้อนลบข้อมูล
*
* @summary API ย้อนลบข้อมูล
*
*/
@Post("delete-renew")
public async deleteReNewIsSalary(
@Request() req: RequestWithUser,
@Body() body: { salaryId: string; type: string },
) {
const data = await this.salaryRepo.findOneBy({ id: body.salaryId });
if (data == null) throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล");
data.isDelete = false;
await this.salaryRepo.save(data);
return new HttpSuccess();
}
/**
* API สลับตำแหน่ง
*
* @summary API สลับตำแหน่ง
*
*/
@Get("swap/{direction}/{salaryId}")
public async swapSalary(
@Path() direction: string,
salaryId: string,
@Request() req: RequestWithUser,
) {
const source_item = await this.salaryRepo.findOne({ where: { id: salaryId } });
// if (source_item) {
//await new permission().PermissionOrgUserGet(req,"SYS_REGISTRY_OFFICER",source_item.profileId,); //ไม่แน่ใจOFFปิดไว้ก่อน
// }
if (source_item == null) throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล");
const sourceOrder = source_item.order;
if (direction.trim().toUpperCase() == "UP") {
const dest_item = await this.salaryRepo.findOne({
where: { profileId: source_item.profileId, order: LessThan(sourceOrder) },
order: { order: "DESC" },
});
if (dest_item == null) return new HttpSuccess();
var destOrder = dest_item.order;
dest_item.order = sourceOrder;
dest_item.isEdit = true;
source_item.order = destOrder;
source_item.isEdit = true;
await Promise.all([this.salaryRepo.save(source_item), this.salaryRepo.save(dest_item)]);
} else {
const dest_item = await this.salaryRepo.findOne({
where: { profileId: source_item.profileId, order: MoreThan(sourceOrder) },
order: { order: "ASC" },
});
if (dest_item == null) return new HttpSuccess();
var destOrder = dest_item.order;
dest_item.order = sourceOrder;
dest_item.isEdit = true;
source_item.order = destOrder;
source_item.isEdit = true;
await Promise.all([this.salaryRepo.save(source_item), this.salaryRepo.save(dest_item)]);
}
return new HttpSuccess();
}
/**
* API ตีกลับแก้ไข
*
* @summary API ตีกลับแก้ไข
*
*/
@Patch("return-edit/{profileId}")
public async returnEdit(
@Path() profileId: string,
@Body() body: CreatePositionSalaryEditHistory,
@Request() req: RequestWithUser,
) {
let profile = null;
let profileEmployee = null;
profile = await this.profileRepo.findOneBy({ id: profileId });
if (!profile) {
profileEmployee = await this.profileEmployeeRepo.findOneBy({ id: profileId });
if (!profileEmployee) {
throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล");
}
}
try {
if (profile) {
profile.statusCheckEdit = "PENDING";
await this.profileRepo.save(profile);
} else if (profileEmployee) {
profileEmployee.statusCheckEdit = "PENDING";
await this.profileEmployeeRepo.save(profileEmployee);
}
const history: PositionSalaryEditHistory = Object.assign(
new PositionSalaryEditHistory(),
body,
);
if (profile) {
history.profileId = profileId;
} else if (profileEmployee) {
history.profileEmployeeId = profileId;
}
history.returnedDate = new Date();
history.examinerName = req.user.name;
history.createdFullName = req.user.name;
history.lastUpdateFullName = req.user.name;
await this.positionSalaryEditHistoryRepo.save(history);
return new HttpSuccess();
} catch {
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่สามารถดําเนินการได้");
}
}
/**
* API รายการประวัติตีกลับแก้ไข
*
* @summary API รายการประวัติตีกลับแก้ไข
*
*/
@Get("return-edit/history/{profileId}")
public async returnEditHistory(@Path() profileId: string) {
try {
let history = await this.positionSalaryEditHistoryRepo.find({
where: { profileId: profileId },
order: { returnedDate: "DESC" },
});
//EMP
if (!history) {
history = await this.positionSalaryEditHistoryRepo.find({
where: { profileEmployeeId: profileId },
order: { returnedDate: "DESC" },
});
}
return new HttpSuccess(history);
} catch {
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่สามารถดําเนินการได้");
}
}
/**
* API แก้้ไขลำดับรายคน
*
* @summary API แก้้ไขลำดับรายคน
*
*/
@Get("change/sort/all")
public async changeSortEditGenAll() {
try {
const profiles = await this.profileRepo.find();
let num = 1;
for await (const item of profiles) {
let salaryOld = await this.salaryOldRepo.find({
where: { profileId: item.id },
order: { commandDateAffect: "ASC", order: "ASC" },
});
salaryOld.forEach((item: any, i) => {
item.order = i + 1;
});
num = num + 1;
console.log(num);
await this.salaryOldRepo.save(salaryOld);
}
return new HttpSuccess();
} catch {
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่สามารถดําเนินการได้");
}
}
/**
* API แก้้ไขลำดับรายคน
*
* @summary API แก้้ไขลำดับรายคน
*
*/
@Get("change/sort/{profileId}")
public async changeSortEdit(@Path() profileId: string) {
try {
let salaryOld = await this.salaryRepo.find({
where: { profileId: profileId },
order: { commandDateAffect: "ASC", order: "ASC" },
});
salaryOld.forEach((item: any, i) => {
item.order = i + 1;
});
await this.salaryRepo.save(salaryOld);
return new HttpSuccess();
} catch {
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่สามารถดําเนินการได้");
}
}
/**
* API แก้้ไขลำดับรายคน
*
* @summary API แก้้ไขลำดับรายคน
*
*/
@Put("change/sort/{profileId}")
public async changeSortEditAll(@Path() profileId: string, @Body() requestBody: { id: string[] }) {
const salary = await this.salaryRepo.find({
where: { profileId: profileId },
});
const sortLevel = salary.map((data) => ({
...data,
order: requestBody.id.indexOf(data.id) + 1,
}));
await this.salaryRepo.save(sortLevel);
return new HttpSuccess();
}
}