devTest Controller สำหรับทดสอบ
This commit is contained in:
parent
521a748de1
commit
d495137aaf
1 changed files with 576 additions and 0 deletions
576
src/controllers/DevTestController.ts
Normal file
576
src/controllers/DevTestController.ts
Normal file
|
|
@ -0,0 +1,576 @@
|
||||||
|
import {
|
||||||
|
Controller,
|
||||||
|
Post,
|
||||||
|
Put,
|
||||||
|
Patch,
|
||||||
|
Delete,
|
||||||
|
Route,
|
||||||
|
Security,
|
||||||
|
Tags,
|
||||||
|
Body,
|
||||||
|
Path,
|
||||||
|
Request,
|
||||||
|
Response,
|
||||||
|
Get,
|
||||||
|
Query,
|
||||||
|
} from "tsoa";
|
||||||
|
import { AppDataSource } from "../database/data-source";
|
||||||
|
import HttpStatus from "../interfaces/http-status";
|
||||||
|
import HttpSuccess from "../interfaces/http-success";
|
||||||
|
import HttpStatusCode from "../interfaces/http-status";
|
||||||
|
import HttpError from "../interfaces/http-error";
|
||||||
|
import { Command } from "../entities/Command";
|
||||||
|
import { Brackets, LessThan, MoreThan, Double, In, Between, IsNull, Not, Any } from "typeorm";
|
||||||
|
import { CommandType } from "../entities/CommandType";
|
||||||
|
import { Profile, CreateProfileAllFields } from "../entities/Profile";
|
||||||
|
import { RequestWithUser, RequestWithUserWebService } from "../middlewares/user";
|
||||||
|
import { OrgRevision } from "../entities/OrgRevision";
|
||||||
|
import { ProfileEmployee } from "../entities/ProfileEmployee";
|
||||||
|
import { PosMaster } from "../entities/PosMaster";
|
||||||
|
import permission from "../interfaces/permission";
|
||||||
|
import { viewCurrentTenureOfficer } from "../entities/view/viewCurrentTenureOfficer";
|
||||||
|
import { CommandController } from "./CommandController";
|
||||||
|
import Extension from "../interfaces/extension";
|
||||||
|
import { viewRegistryOfficer } from "../entities/view/viewRegistryOfficer";
|
||||||
|
import { viewRegistryEmployee } from "../entities/view/viewRegistryEmployee";
|
||||||
|
import { Registry } from "../entities/Registry";
|
||||||
|
import { RegistryEmployee } from "../entities/RegistryEmployee";
|
||||||
|
import { TenurePositionOfficer } from "../entities/TenurePositionOfficer";
|
||||||
|
import { PosMasterAssign, PosMasterAssignDTO } from "../entities/PosMasterAssign";
|
||||||
|
import { PermissionProfile } from "../entities/PermissionProfile";
|
||||||
|
import { OrgRoot } from "../entities/OrgRoot";
|
||||||
|
import { MetaWorkflow } from "../entities/MetaWorkflow";
|
||||||
|
import { MetaState } from "../entities/MetaState";
|
||||||
|
import { MetaStateOperator } from "../entities/MetaStateOperator";
|
||||||
|
import { Workflow } from "../entities/Workflow";
|
||||||
|
import { State } from "../entities/State";
|
||||||
|
import { StateOperator } from "../entities/StateOperator";
|
||||||
|
import { StateOperatorUser } from "../entities/StateOperatorUser";
|
||||||
|
import {
|
||||||
|
commandTypePath,
|
||||||
|
calculateGovAge,
|
||||||
|
calculateAge,
|
||||||
|
calculateRetireDate,
|
||||||
|
calculateRetireLaw,
|
||||||
|
removeProfileInOrganize,
|
||||||
|
setLogDataDiff,
|
||||||
|
} from "../interfaces/utils";
|
||||||
|
import CallAPI from "../interfaces/call-api";
|
||||||
|
import { PostRetireToExprofile } from "./ExRetirementController"
|
||||||
|
import { Position } from "../entities/Position";
|
||||||
|
import { PosLevel } from "../entities/PosLevel";
|
||||||
|
import { TenureLevelOfficer } from "../entities/TenureLevelOfficer";
|
||||||
|
import { TenurePositionEmployee } from "../entities/TenurePositionEmployee";
|
||||||
|
import { TenureLevelEmployee } from "../entities/TenureLevelEmployee";
|
||||||
|
import { TenurePositionExecutiveOfficer } from "../entities/TenurePositionExecutiveOfficer";
|
||||||
|
|
||||||
|
@Route("api/v1/org/DevTest")
|
||||||
|
@Tags("DevTest")
|
||||||
|
@Security("bearerAuth")
|
||||||
|
@Response(
|
||||||
|
HttpStatusCode.INTERNAL_SERVER_ERROR,
|
||||||
|
"เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง",
|
||||||
|
)
|
||||||
|
export class DevTestController extends Controller {
|
||||||
|
private commandRepository = AppDataSource.getRepository(Command);
|
||||||
|
private commandTypeRepository = AppDataSource.getRepository(CommandType);
|
||||||
|
private orgRevisionRepo = AppDataSource.getRepository(OrgRevision);
|
||||||
|
private orgRootRepo = AppDataSource.getRepository(OrgRoot);
|
||||||
|
private posMasterRepo = AppDataSource.getRepository(PosMaster);
|
||||||
|
private profileRepo = AppDataSource.getRepository(Profile);
|
||||||
|
private profileEmpRepo = AppDataSource.getRepository(ProfileEmployee);
|
||||||
|
private registryRepo = AppDataSource.getRepository(Registry);
|
||||||
|
private registryEmployeeRepo = AppDataSource.getRepository(RegistryEmployee);
|
||||||
|
private posMasterAssignRepository = AppDataSource.getRepository(PosMasterAssign);
|
||||||
|
private permissionProfilesRepository = AppDataSource.getRepository(PermissionProfile);
|
||||||
|
private profileEmployeeRepo = AppDataSource.getRepository(ProfileEmployee);
|
||||||
|
private metaWorkflowRepo = AppDataSource.getRepository(MetaWorkflow);
|
||||||
|
private metaStateRepo = AppDataSource.getRepository(MetaState);
|
||||||
|
private metaStateOperatorRepo = AppDataSource.getRepository(MetaStateOperator);
|
||||||
|
private workflowRepo = AppDataSource.getRepository(Workflow);
|
||||||
|
private stateRepo = AppDataSource.getRepository(State);
|
||||||
|
private stateOperatorRepo = AppDataSource.getRepository(StateOperator);
|
||||||
|
private stateOperatorUserRepo = AppDataSource.getRepository(StateOperatorUser);
|
||||||
|
private positionRepository = AppDataSource.getRepository(Position);
|
||||||
|
private positionOfficerRepo = AppDataSource.getRepository(TenurePositionOfficer);
|
||||||
|
private positionEmployeeRepo = AppDataSource.getRepository(TenurePositionEmployee);
|
||||||
|
private levelOfficerRepo = AppDataSource.getRepository(TenureLevelOfficer);
|
||||||
|
private levelEmployeeRepo = AppDataSource.getRepository(TenureLevelEmployee);
|
||||||
|
private positionExecutiveOfficerRepo = AppDataSource.getRepository(
|
||||||
|
TenurePositionExecutiveOfficer,
|
||||||
|
);
|
||||||
|
|
||||||
|
@Patch("tick-officer-registry")
|
||||||
|
public async calculateOfficerPosition(
|
||||||
|
@Request() req: RequestWithUser,
|
||||||
|
@Body()
|
||||||
|
body: {
|
||||||
|
profileIds: string[];
|
||||||
|
},
|
||||||
|
) {
|
||||||
|
|
||||||
|
console.log("1.")
|
||||||
|
/**
|
||||||
|
* ===============================
|
||||||
|
* PREPARE DATA
|
||||||
|
* ===============================
|
||||||
|
*/
|
||||||
|
const profile = await this.profileRepo.find({
|
||||||
|
where: { id: In(body.profileIds) },
|
||||||
|
relations: {
|
||||||
|
posLevel: true,
|
||||||
|
posType: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!profile.length) return;
|
||||||
|
|
||||||
|
const [{ today }] = await AppDataSource.query(
|
||||||
|
"SELECT CURRENT_DATE() as today",
|
||||||
|
);
|
||||||
|
|
||||||
|
const orgRevision = await this.orgRevisionRepo.findOne({
|
||||||
|
select: ["id"],
|
||||||
|
where: {
|
||||||
|
orgRevisionIsDraft: false,
|
||||||
|
orgRevisionIsCurrent: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ===============================
|
||||||
|
* TRANSACTION
|
||||||
|
* ===============================
|
||||||
|
*/
|
||||||
|
const queryRunner = AppDataSource.createQueryRunner();
|
||||||
|
await queryRunner.connect();
|
||||||
|
await queryRunner.startTransaction();
|
||||||
|
console.log("2.")
|
||||||
|
try {
|
||||||
|
/**
|
||||||
|
* ===============================
|
||||||
|
* RESULT BUFFERS (SAVE ARRAY)
|
||||||
|
* ===============================
|
||||||
|
*/
|
||||||
|
const positionOfficerBulk: any[] = [];
|
||||||
|
const levelOfficerBulk: any[] = [];
|
||||||
|
const executiveOfficerBulk: any[] = [];
|
||||||
|
console.log("3.")
|
||||||
|
/**
|
||||||
|
* ===============================
|
||||||
|
* MAIN LOOP (SINGLE LOOP)
|
||||||
|
* ===============================
|
||||||
|
*/
|
||||||
|
for (const x of profile) {
|
||||||
|
const currentDate =
|
||||||
|
x.isLeave && x.leaveDate
|
||||||
|
? Extension.toDateOnlyString(x.leaveDate)
|
||||||
|
: today;
|
||||||
|
/**
|
||||||
|
* ====================================
|
||||||
|
* PARALLEL STORED PROCEDURES
|
||||||
|
* ====================================
|
||||||
|
*/
|
||||||
|
const [
|
||||||
|
positionResult,
|
||||||
|
levelResult,
|
||||||
|
executiveResult,
|
||||||
|
] = await Promise.all([
|
||||||
|
AppDataSource.query("CALL GetProfileSalaryPosition(?, ?)", [
|
||||||
|
x.id,
|
||||||
|
currentDate,
|
||||||
|
]),
|
||||||
|
AppDataSource.query("CALL GetProfileSalaryLevel(?, ?)", [
|
||||||
|
x.id,
|
||||||
|
currentDate,
|
||||||
|
]),
|
||||||
|
AppDataSource.query("CALL GetProfileSalaryExecutive(?, ?)", [
|
||||||
|
x.id,
|
||||||
|
currentDate,
|
||||||
|
]),
|
||||||
|
]);
|
||||||
|
console.log("4.",x.id)
|
||||||
|
/**
|
||||||
|
* ====================================
|
||||||
|
* POSITION
|
||||||
|
* ====================================
|
||||||
|
*/
|
||||||
|
const posRows = positionResult?.[0] ?? [];
|
||||||
|
const posMap =
|
||||||
|
posRows.length > 1
|
||||||
|
? posRows.slice(1).map((r: any, i: number) => ({
|
||||||
|
days_diff: Number(r.days_diff) || 0,
|
||||||
|
positionName: posRows[i]?.positionName,
|
||||||
|
}))
|
||||||
|
: [];
|
||||||
|
|
||||||
|
const posCal = posMap
|
||||||
|
.filter((p:any) => p.positionName === x.position)
|
||||||
|
.reduce(
|
||||||
|
(a:any, c:any) => ({
|
||||||
|
days_diff: a.days_diff + c.days_diff,
|
||||||
|
positionName: c.positionName,
|
||||||
|
}),
|
||||||
|
{ days_diff: 0, positionName: null },
|
||||||
|
);
|
||||||
|
|
||||||
|
positionOfficerBulk.push({
|
||||||
|
profileId: x.id,
|
||||||
|
positionName: posCal.positionName,
|
||||||
|
days_diff: posCal.days_diff,
|
||||||
|
Years: Math.floor(posCal.days_diff / 365.2524),
|
||||||
|
Months: Math.floor((posCal.days_diff / 30.4375) % 12),
|
||||||
|
Days: Math.floor(posCal.days_diff % 30.4375),
|
||||||
|
});
|
||||||
|
console.log("5.",x.id)
|
||||||
|
/**
|
||||||
|
* ====================================
|
||||||
|
* 2️⃣ POSITION LEVEL
|
||||||
|
* ====================================
|
||||||
|
*/
|
||||||
|
const lvlRows = levelResult?.[0] ?? [];
|
||||||
|
const lvlMap =
|
||||||
|
lvlRows.length > 1
|
||||||
|
? lvlRows.slice(1).map((r: any, i: number) => ({
|
||||||
|
days_diff: Number(r.days_diff) || 0,
|
||||||
|
positionType: lvlRows[i]?.positionType,
|
||||||
|
positionLevel: lvlRows[i]?.positionLevel,
|
||||||
|
positionCee: lvlRows[i]?.positionCee,
|
||||||
|
}))
|
||||||
|
: [];
|
||||||
|
|
||||||
|
const lvlCal = lvlMap
|
||||||
|
.filter(
|
||||||
|
(l:any) =>
|
||||||
|
l.positionLevel === x.posLevel?.posLevelName &&
|
||||||
|
l.positionType === x.posType?.posTypeName,
|
||||||
|
)
|
||||||
|
.reduce(
|
||||||
|
(a:any, c:any) => ({
|
||||||
|
days_diff: a.days_diff + c.days_diff,
|
||||||
|
positionType: c.positionType,
|
||||||
|
positionLevel: c.positionLevel,
|
||||||
|
positionCee: c.positionCee,
|
||||||
|
}),
|
||||||
|
{
|
||||||
|
days_diff: 0,
|
||||||
|
positionType: null,
|
||||||
|
positionLevel: null,
|
||||||
|
positionCee: null,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
levelOfficerBulk.push({
|
||||||
|
profileId: x.id,
|
||||||
|
positionType: lvlCal.positionType,
|
||||||
|
positionLevel: lvlCal.positionLevel,
|
||||||
|
positionCee: lvlCal.positionCee,
|
||||||
|
days_diff: lvlCal.days_diff,
|
||||||
|
Years: x.posLevel ? (lvlCal.days_diff / 365.2524).toFixed(4) : 0,
|
||||||
|
Months: x.posLevel ? ((lvlCal.days_diff / 30.4375) % 12).toFixed(4) : 0,
|
||||||
|
Days: x.posLevel ? (lvlCal.days_diff % 30.4375).toFixed(4) : 0,
|
||||||
|
});
|
||||||
|
console.log("6.",x.id)
|
||||||
|
/**
|
||||||
|
* ====================================
|
||||||
|
* 3️⃣ POSITION EXECUTIVE
|
||||||
|
* ====================================
|
||||||
|
*/
|
||||||
|
const exeRows = executiveResult?.[0] ?? [];
|
||||||
|
const exeMap =
|
||||||
|
exeRows.length > 1
|
||||||
|
? exeRows.slice(1).map((r: any, i: number) => ({
|
||||||
|
days_diff: Number(r.days_diff) || 0,
|
||||||
|
positionExecutive: exeRows[i]?.positionExecutive,
|
||||||
|
}))
|
||||||
|
: [];
|
||||||
|
|
||||||
|
const position = await this.positionRepository.findOne({
|
||||||
|
where: {
|
||||||
|
positionIsSelected: true,
|
||||||
|
posMaster: {
|
||||||
|
orgRevisionId: orgRevision?.id,
|
||||||
|
current_holderId: x.id,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
order: { createdAt: "DESC" },
|
||||||
|
relations: {
|
||||||
|
posExecutive: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const exeName = position?.posExecutive?.posExecutiveName;
|
||||||
|
|
||||||
|
const exeCal = exeMap
|
||||||
|
.filter((e:any) => exeName && e.positionExecutive === exeName)
|
||||||
|
.reduce(
|
||||||
|
(a:any, c:any) => ({
|
||||||
|
days_diff: a.days_diff + c.days_diff,
|
||||||
|
positionExecutive: c.positionExecutive,
|
||||||
|
}),
|
||||||
|
{ days_diff: 0, positionExecutive: null },
|
||||||
|
);
|
||||||
|
|
||||||
|
executiveOfficerBulk.push({
|
||||||
|
profileId: x.id,
|
||||||
|
positionExecutiveName: exeCal.positionExecutive,
|
||||||
|
days_diff: exeCal.days_diff,
|
||||||
|
Years: (exeCal.days_diff / 365.2524).toFixed(4),
|
||||||
|
Months: ((exeCal.days_diff / 30.4375) % 12).toFixed(4),
|
||||||
|
Days: (exeCal.days_diff % 30.4375).toFixed(4),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
console.log("7.")
|
||||||
|
/**
|
||||||
|
* ===============================
|
||||||
|
* CLEAR ALL DATA AND SAVE ARRAY (BULK)
|
||||||
|
* ===============================
|
||||||
|
*/
|
||||||
|
await queryRunner.manager
|
||||||
|
.createQueryBuilder()
|
||||||
|
.delete()
|
||||||
|
.from(this.positionOfficerRepo.target)
|
||||||
|
.execute();
|
||||||
|
|
||||||
|
await queryRunner.manager
|
||||||
|
.createQueryBuilder()
|
||||||
|
.delete()
|
||||||
|
.from(this.levelOfficerRepo.target)
|
||||||
|
.execute();
|
||||||
|
|
||||||
|
await queryRunner.manager
|
||||||
|
.createQueryBuilder()
|
||||||
|
.delete()
|
||||||
|
.from(this.positionExecutiveOfficerRepo.target)
|
||||||
|
.execute();
|
||||||
|
console.log("8.")
|
||||||
|
await queryRunner.manager.save(this.positionOfficerRepo.target, positionOfficerBulk);
|
||||||
|
await queryRunner.manager.save(this.levelOfficerRepo.target, levelOfficerBulk);
|
||||||
|
await queryRunner.manager.save(this.positionExecutiveOfficerRepo.target,executiveOfficerBulk);
|
||||||
|
console.log("9.")
|
||||||
|
/**
|
||||||
|
* ===============================
|
||||||
|
* REGISTRY OFFICER (SYNC VIEW)
|
||||||
|
* ===============================
|
||||||
|
*/
|
||||||
|
const allRegis = await queryRunner.manager
|
||||||
|
.getRepository(viewRegistryOfficer)
|
||||||
|
.createQueryBuilder("registryOfficer")
|
||||||
|
.where("registryOfficer.profileId IN (:...profileIds)", {
|
||||||
|
profileIds: new Set(profile.map((p) => p.id))
|
||||||
|
})
|
||||||
|
.getMany();
|
||||||
|
|
||||||
|
const mapRegistryData = allRegis.map((x) => ({
|
||||||
|
...x,
|
||||||
|
isProbation: Boolean(x.isProbation),
|
||||||
|
isLeave: Boolean(x.isLeave),
|
||||||
|
isRetirement: Boolean(x.isRetirement),
|
||||||
|
Educations: x.Educations ? JSON.stringify(x.Educations) : "",
|
||||||
|
}));
|
||||||
|
console.log("10.")
|
||||||
|
|
||||||
|
await queryRunner.manager
|
||||||
|
.createQueryBuilder()
|
||||||
|
.delete()
|
||||||
|
.from(this.registryRepo.target)
|
||||||
|
.execute();
|
||||||
|
|
||||||
|
if (mapRegistryData.length > 0) {
|
||||||
|
await queryRunner.manager.save(this.registryRepo.target, mapRegistryData);
|
||||||
|
}
|
||||||
|
console.log("11.")
|
||||||
|
/**
|
||||||
|
* ===============================
|
||||||
|
* COMMIT
|
||||||
|
* ===============================
|
||||||
|
*/
|
||||||
|
await queryRunner.commitTransaction();
|
||||||
|
} catch (error) {
|
||||||
|
await queryRunner.rollbackTransaction();
|
||||||
|
throw error;
|
||||||
|
} finally {
|
||||||
|
await queryRunner.release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Post("getDNA")
|
||||||
|
public async GetData(
|
||||||
|
@Request() req: RequestWithUser
|
||||||
|
){
|
||||||
|
let _data: any = {
|
||||||
|
root: null,
|
||||||
|
child1: null,
|
||||||
|
child2: null,
|
||||||
|
child3: null,
|
||||||
|
child4: null,
|
||||||
|
};
|
||||||
|
|
||||||
|
_data = await new permission().PermissionOrgList(req, "COMMAND");
|
||||||
|
return new HttpSuccess(_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Post("calculateGovAge")
|
||||||
|
public async calculateGovAge(
|
||||||
|
@Request() req: RequestWithUser,
|
||||||
|
@Body()
|
||||||
|
body: {
|
||||||
|
profileId: string;
|
||||||
|
},
|
||||||
|
){
|
||||||
|
return new HttpSuccess(await calculateGovAge(body.profileId, "OFFICER"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @summary Test Job กวาดออกคำสั่ง ทำงานทุกๆตี2
|
||||||
|
*/
|
||||||
|
@Post("cronjobCommand")
|
||||||
|
async CronjobCommand() {
|
||||||
|
const commandController = new CommandController();
|
||||||
|
await commandController.cronjobCommand();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @summary payload & Endpoint ออกคำสั่ง
|
||||||
|
*/
|
||||||
|
@Put("path-excec/{id}")
|
||||||
|
async Bright(
|
||||||
|
@Path() id: string,
|
||||||
|
@Request() request: RequestWithUser,
|
||||||
|
) {
|
||||||
|
const command = await this.commandRepository.findOne({
|
||||||
|
where: { id: id },
|
||||||
|
relations: ["commandType", "commandRecives", "commandSends", "commandSends.commandSendCCs"],
|
||||||
|
});
|
||||||
|
if (!command) {
|
||||||
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลคำสั่งนี้");
|
||||||
|
}
|
||||||
|
const path = commandTypePath(command.commandType.code);
|
||||||
|
return new HttpSuccess({
|
||||||
|
path: path + "/excecute",
|
||||||
|
refIds: command.commandRecives
|
||||||
|
.filter((x) => x.refId != null)
|
||||||
|
.map((x) => ({
|
||||||
|
refId: x.refId,
|
||||||
|
commandNo: command.commandNo,
|
||||||
|
commandYear: command.commandYear,
|
||||||
|
commandId: command.id,
|
||||||
|
remark: command.positionDetail,
|
||||||
|
amount: x.amount,
|
||||||
|
amountSpecial: x.amountSpecial,
|
||||||
|
positionSalaryAmount: x.positionSalaryAmount,
|
||||||
|
mouthSalaryAmount: x.mouthSalaryAmount,
|
||||||
|
commandCode: command.commandType.commandCode,
|
||||||
|
commandName: command.commandType.name,
|
||||||
|
commandDateAffect: command.commandExcecuteDate,
|
||||||
|
commandDateSign: command.commandAffectDate,
|
||||||
|
})),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API รายละเอียดรายการคำสั่ง tab4 แนบท้าย
|
||||||
|
* @summary API รายละเอียดรายการคำสั่ง tab4 แนบท้าย
|
||||||
|
* @param {string} id Id คำสั่ง
|
||||||
|
* @param {string} profileId profileId
|
||||||
|
*/
|
||||||
|
@Get("tab4/attachment/{id}/{profileId}")
|
||||||
|
async GetByIdTab4Attachment(
|
||||||
|
@Path() id: string,
|
||||||
|
@Path() profileId: string,
|
||||||
|
@Request() request: RequestWithUser
|
||||||
|
) {
|
||||||
|
await new permission().PermissionGet(request, "COMMAND");
|
||||||
|
|
||||||
|
let profile: Profile | ProfileEmployee | null = null;
|
||||||
|
profile = await this.profileRepo.findOne({ where: { id: profileId } });
|
||||||
|
if (!profile) {
|
||||||
|
profile = await this.profileEmpRepo.findOne({ where: { id: profileId } });
|
||||||
|
if (!profile)
|
||||||
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลบุคคลากรนี้");
|
||||||
|
}
|
||||||
|
|
||||||
|
const command = await this.commandRepository.findOne({
|
||||||
|
where: { id },
|
||||||
|
relations: ["commandType", "commandRecives"],
|
||||||
|
});
|
||||||
|
if (!command) {
|
||||||
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลคำสั่งนี้");
|
||||||
|
}
|
||||||
|
|
||||||
|
let _command: any = [];
|
||||||
|
const path = commandTypePath(command.commandType.code);
|
||||||
|
if (path == null) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบประเภทคำสั่งนี้ในระบบ");
|
||||||
|
await new CallAPI()
|
||||||
|
.PostData(request, path + "/attachment", {
|
||||||
|
refIds: command.commandRecives
|
||||||
|
.filter((x) =>
|
||||||
|
x.refId != null &&
|
||||||
|
x.profileId != null && x.profileId == profileId
|
||||||
|
)
|
||||||
|
.map((x) => ({
|
||||||
|
refId: x.refId,
|
||||||
|
Sequence: x.order,
|
||||||
|
CitizenId: x.citizenId,
|
||||||
|
Prefix: x.prefix,
|
||||||
|
FirstName: x.firstName,
|
||||||
|
LastName: x.lastName,
|
||||||
|
Amount: x.amount,
|
||||||
|
PositionSalaryAmount: x.positionSalaryAmount,
|
||||||
|
MouthSalaryAmount: x.mouthSalaryAmount,
|
||||||
|
RemarkHorizontal: x.remarkHorizontal,
|
||||||
|
RemarkVertical: x.remarkVertical,
|
||||||
|
CommandYear: command.commandYear,
|
||||||
|
CommandExcecuteDate: command.commandExcecuteDate,
|
||||||
|
})),
|
||||||
|
})
|
||||||
|
.then(async (res) => {
|
||||||
|
_command = res;
|
||||||
|
})
|
||||||
|
.catch(() => {});
|
||||||
|
|
||||||
|
let issue =
|
||||||
|
command.isBangkok == "OFFICE"
|
||||||
|
? "สำนักปลัดกรุงเทพมหานคร"
|
||||||
|
: command.isBangkok == "BANGKOK"
|
||||||
|
? "กรุงเทพมหานคร"
|
||||||
|
: null;
|
||||||
|
if (issue == null) {
|
||||||
|
const orgRevisionActive = await this.orgRevisionRepo.findOne({
|
||||||
|
where: { orgRevisionIsCurrent: true, orgRevisionIsDraft: false },
|
||||||
|
relations: ["posMasters", "posMasters.orgRoot"],
|
||||||
|
});
|
||||||
|
if (orgRevisionActive != null) {
|
||||||
|
const profile = await this.profileRepo.findOne({
|
||||||
|
where: {
|
||||||
|
keycloak: command.createdUserId.toString(),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
if (profile != null) {
|
||||||
|
issue =
|
||||||
|
orgRevisionActive?.posMasters?.filter((x) => x.current_holderId == profile.id)[0]
|
||||||
|
?.orgRoot?.orgRootName || null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (issue == null) issue = "...................................";
|
||||||
|
return new HttpSuccess({
|
||||||
|
template: command.commandType.fileAttachment,
|
||||||
|
reportName: "xlsx-report",
|
||||||
|
data: {
|
||||||
|
data: _command,
|
||||||
|
issuerOrganizationName: issue,
|
||||||
|
commandNo: command.commandNo == null ? "" : Extension.ToThaiNumber(command.commandNo),
|
||||||
|
commandYear:
|
||||||
|
command.commandYear == null
|
||||||
|
? ""
|
||||||
|
: Extension.ToThaiNumber(Extension.ToThaiYear(command.commandYear).toString()),
|
||||||
|
commandExcecuteDate:
|
||||||
|
command.commandExcecuteDate == null
|
||||||
|
? ""
|
||||||
|
: Extension.ToThaiNumber(Extension.ToThaiFullDate2(command.commandExcecuteDate)),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue