Merge branch 'develop'
This commit is contained in:
commit
7eeeb49389
28 changed files with 1108 additions and 741 deletions
109
README.md
109
README.md
|
|
@ -1 +1,108 @@
|
|||
# bma-ehr-organization
|
||||
# hrms-api-org
|
||||
|
||||
ระบบ API สำหรับจัดการข้อมูลบุคลากรและโครงสร้างองค์กร (HRMS)
|
||||
|
||||
---
|
||||
|
||||
## ✨ Features
|
||||
|
||||
- **RESTful API** (Express)
|
||||
- **ฐานข้อมูล MySQL** (TypeORM)
|
||||
- **Cronjob อัตโนมัติ** (node-cron)
|
||||
- **WebSocket** สำหรับ real-time
|
||||
- **RabbitMQ integration**
|
||||
- **Swagger UI** สำหรับ API docs
|
||||
- รองรับการ **import/export ข้อมูล**
|
||||
|
||||
---
|
||||
|
||||
## 🗂️ โครงสร้างโปรเจกต์หลัก
|
||||
|
||||
| Path | รายละเอียด |
|
||||
| ----------------------------------- | ------------------------------------- |
|
||||
| `src/controllers/` | API Controllers |
|
||||
| `src/entities/` | Entity สำหรับ TypeORM |
|
||||
| `src/services/` | Service logic (RabbitMQ, WebSocket) |
|
||||
| `src/database/data-source.ts` | ตั้งค่าเชื่อมต่อฐานข้อมูล |
|
||||
| `src/migration/` | ไฟล์ migration ของฐานข้อมูล |
|
||||
| `static/` | ไฟล์ static และ config |
|
||||
| `scripts/clean-migration-fk-idx.js` | สคริปต์ลบบรรทัด FK*/idx* ใน migration |
|
||||
|
||||
---
|
||||
|
||||
## 🚀 การใช้งานเบื้องต้น
|
||||
|
||||
1. **ติดตั้ง dependencies**
|
||||
|
||||
```sh
|
||||
npm install
|
||||
```
|
||||
|
||||
2. **สร้างไฟล์ `.env`**
|
||||
|
||||
- กำหนดค่าฐานข้อมูลและ API_KEY ตามต้องการ
|
||||
|
||||
3. **Build และ Start**
|
||||
|
||||
```sh
|
||||
npm run build
|
||||
npm start
|
||||
```
|
||||
|
||||
4. **ดู API docs**
|
||||
- เปิดที่ `http://localhost:3000/api-docs`
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ คำสั่งที่สำคัญ (npm scripts)
|
||||
|
||||
- `npm run dev` : รันแบบ development (hot reload)
|
||||
- `npm run build` : สร้างไฟล์สำหรับ production
|
||||
- `npm run migration:generate` : สร้าง migration ใหม่ เช่น
|
||||
|
||||
```sh
|
||||
npm run migration:generate src/migration/update_table_0811202s
|
||||
```
|
||||
|
||||
- `npm run migration:run` : รัน migration
|
||||
- `node scripts/clean-migration-fk-idx.js` : ลบบรรทัดที่มี `FK_` หรือ `idx_` ใน migration อัตโนมัติ (ควรรันหลัง gen migration ทุกครั้ง)
|
||||
|
||||
---
|
||||
|
||||
## 🐳 การ Build/Deploy ด้วย act (local GitHub Actions)
|
||||
|
||||
หากต้องการ build และ deploy ด้วย workflow release (เช่น ทดสอบ pipeline บนเครื่อง)
|
||||
ให้ใช้คำสั่งนี้:
|
||||
|
||||
```sh
|
||||
act workflow_dispatch -W .github/workflows/release.yaml --input IMAGE_VER=latest -s DOCKER_USER=admin -s DOCKER_PASS=FPTadmin2357 -s SSH_PASSWORD=FPTadmin2357
|
||||
```
|
||||
|
||||
**อธิบาย option ที่ใช้:**
|
||||
|
||||
- `-W .github/workflows/release.yaml` : ระบุ workflow ที่จะรัน
|
||||
- `--input IMAGE_VER=latest` : กำหนด tag ของ docker image (เช่น latest)
|
||||
- `-s DOCKER_USER=...` : กำหนด secret สำหรับ docker registry
|
||||
- `-s DOCKER_PASS=...` : กำหนด secret สำหรับ docker registry
|
||||
- `-s SSH_PASSWORD=...` : กำหนด secret สำหรับ ssh deploy
|
||||
|
||||
> ⚠️ **หมายเหตุ:** สำหรับ production ห้ามใช้รหัสผ่านจริงใน public repo หรือแชร์ credentials
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ หมายเหตุเกี่ยวกับ Migration
|
||||
|
||||
- หลังจากใช้ `npm run migration:generate` แล้ว **ต้องลบบรรทัดที่มี `FK_` หรือ `idx_` ออกจากไฟล์ migration ทุกครั้ง** (ทั้งในฟังก์ชัน up/down)
|
||||
- สามารถใช้สคริปต์นี้ช่วยลบอัตโนมัติ:
|
||||
|
||||
```sh
|
||||
node scripts/clean-migration-fk-idx.js
|
||||
```
|
||||
|
||||
- สคริปต์นี้จะค้นหาและแทนที่บรรทัดที่มี `FK_` หรือ `idx_` ด้วย comment `// removed FK_/idx_ auto-cleanup` ในทุกไฟล์ migration
|
||||
|
||||
---
|
||||
|
||||
## 📄 License
|
||||
|
||||
Distributed under the ISC License.
|
||||
|
|
|
|||
37
scripts/clean-migration-fk-idx.js
Normal file
37
scripts/clean-migration-fk-idx.js
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
// Script: scripts/clean-migration-fk-idx.js
|
||||
// ลบบรรทัดที่มี FK_ หรือ idx_ ในไฟล์ migration ทั้งหมด และแทนที่ด้วย comment
|
||||
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
|
||||
const MIGRATION_DIR = path.join(__dirname, "../src/migration");
|
||||
|
||||
function processFile(filePath) {
|
||||
const lines = fs.readFileSync(filePath, "utf8").split("\n");
|
||||
let changed = false;
|
||||
const newLines = lines.map((line) => {
|
||||
if (/FK_|idx_/.test(line)) {
|
||||
changed = true;
|
||||
return " // removed FK_/idx_ auto-cleanup";
|
||||
}
|
||||
return line;
|
||||
});
|
||||
if (changed) {
|
||||
fs.writeFileSync(filePath, newLines.join("\n"), "utf8");
|
||||
console.log("Cleaned:", filePath);
|
||||
}
|
||||
}
|
||||
|
||||
function walk(dir) {
|
||||
fs.readdirSync(dir).forEach((f) => {
|
||||
const fullPath = path.join(dir, f);
|
||||
if (fs.statSync(fullPath).isDirectory()) {
|
||||
walk(fullPath);
|
||||
} else if (f.endsWith(".ts")) {
|
||||
processFile(fullPath);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
walk(MIGRATION_DIR);
|
||||
console.log("Migration FK_/idx_ cleanup complete.");
|
||||
|
|
@ -215,7 +215,7 @@ export class CommandController extends Controller {
|
|||
_data.child1 != undefined && _data.child1 != null
|
||||
? _data.child1[0] != null
|
||||
? `current_holders.orgChild1Id IN (:...child1)`
|
||||
: `current_holders.orgChild1Id is null`
|
||||
: `current_holders.orgChild1Id is ${_data.privilege == "PARENT" ? "not null" : "null"}`
|
||||
: "1=1",
|
||||
{
|
||||
child1: _data.child1,
|
||||
|
|
@ -1477,7 +1477,7 @@ export class CommandController extends Controller {
|
|||
}
|
||||
// @Get("XXX")
|
||||
async cronjobUpdateRetirementStatus(/*@Request() request: RequestWithUser*/) {
|
||||
const adminToken = await getToken() ?? "";
|
||||
const adminToken = (await getToken()) ?? "";
|
||||
const today = new Date();
|
||||
today.setUTCHours(0, 0, 0, 0);
|
||||
let type: string = "OFFICER";
|
||||
|
|
@ -1672,7 +1672,7 @@ export class CommandController extends Controller {
|
|||
positionIsSelected: false,
|
||||
lastUpdateFullName: "System Administrator",
|
||||
lastUpdatedAt: _Date,
|
||||
}
|
||||
},
|
||||
);
|
||||
_posMaster.isSit = false;
|
||||
_posMaster.current_holderId = null;
|
||||
|
|
@ -1702,7 +1702,7 @@ export class CommandController extends Controller {
|
|||
positionIsSelected: false,
|
||||
lastUpdateFullName: "System Administrator",
|
||||
lastUpdatedAt: _Date,
|
||||
}
|
||||
},
|
||||
);
|
||||
_posMaster.isSit = false;
|
||||
_posMaster.next_holderId = null;
|
||||
|
|
@ -1730,7 +1730,7 @@ export class CommandController extends Controller {
|
|||
positionIsSelected: false,
|
||||
lastUpdateFullName: "System Administrator",
|
||||
lastUpdatedAt: _Date,
|
||||
}
|
||||
},
|
||||
);
|
||||
_posMaster.isSit = false;
|
||||
_posMaster.current_holderId = null;
|
||||
|
|
@ -1977,62 +1977,68 @@ export class CommandController extends Controller {
|
|||
if (commandCode == "C-PM-21") {
|
||||
profileTemp.position = profile?.positionTemp ?? "-";
|
||||
profileTemp.posLevel = profile?.posLevelNameTemp ?? "-";
|
||||
profileTemp.org = (profile?.child4Temp == null ? "" : profile?.child4Temp + "\n") +
|
||||
profileTemp.org =
|
||||
(profile?.child4Temp == null ? "" : profile?.child4Temp + "\n") +
|
||||
(profile?.child3Temp == null ? "" : profile?.child3Temp + "\n") +
|
||||
(profile?.child2Temp == null ? "" : profile?.child2Temp + "\n") +
|
||||
(profile?.child1Temp == null ? "" : profile?.child1Temp + "\n") +
|
||||
(profile?.rootTemp == null ? "" : profile?.rootTemp)
|
||||
(profile?.rootTemp == null ? "" : profile?.rootTemp);
|
||||
if (profile?.nodeTemp) {
|
||||
switch (profile?.nodeTemp) {
|
||||
case "4":
|
||||
profileTemp.posNo = `${profile.child4ShortNameTemp} ${profile?.posMasterNoTemp}`;
|
||||
break
|
||||
break;
|
||||
case "3":
|
||||
profileTemp.posNo = `${profile.child3ShortNameTemp} ${profile?.posMasterNoTemp}`;
|
||||
break
|
||||
profileTemp.posNo = `${profile.child3ShortNameTemp} ${profile?.posMasterNoTemp}`;
|
||||
break;
|
||||
case "2":
|
||||
profileTemp.posNo = `${profile.child2ShortNameTemp} ${profile?.posMasterNoTemp}`;
|
||||
break
|
||||
break;
|
||||
case "1":
|
||||
profileTemp.posNo = `${profile.child1ShortNameTemp} ${profile?.posMasterNoTemp}`;
|
||||
break
|
||||
profileTemp.posNo = `${profile.child1ShortNameTemp} ${profile?.posMasterNoTemp}`;
|
||||
break;
|
||||
case "0":
|
||||
profileTemp.posNo = `${profile.rootShortNameTemp} ${profile?.posMasterNoTemp}`;
|
||||
break
|
||||
default: break;
|
||||
profileTemp.posNo = `${profile.rootShortNameTemp} ${profile?.posMasterNoTemp}`;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return {
|
||||
no: Extension.ToThaiNumber((idx + 1).toString()),
|
||||
org: commandCode != "C-PM-21"
|
||||
? profile?.isLeave == false
|
||||
? (_child4 == null ? "" : _child4 + "\n") +
|
||||
(_child3 == null ? "" : _child3 + "\n") +
|
||||
(_child2 == null ? "" : _child2 + "\n") +
|
||||
(_child1 == null ? "" : _child1 + "\n") +
|
||||
(_root == null ? "" : _root)
|
||||
: orgLeave
|
||||
: profileTemp.org,
|
||||
org:
|
||||
commandCode != "C-PM-21"
|
||||
? profile?.isLeave == false
|
||||
? (_child4 == null ? "" : _child4 + "\n") +
|
||||
(_child3 == null ? "" : _child3 + "\n") +
|
||||
(_child2 == null ? "" : _child2 + "\n") +
|
||||
(_child1 == null ? "" : _child1 + "\n") +
|
||||
(_root == null ? "" : _root)
|
||||
: orgLeave
|
||||
: profileTemp.org,
|
||||
fullName: `${x.prefix}${x.firstName} ${x.lastName}`,
|
||||
citizenId: Extension.ToThaiNumber(x.citizenId),
|
||||
position: commandCode != "C-PM-21"
|
||||
? profile?.position
|
||||
? profile?.position
|
||||
: "-"
|
||||
: profileTemp.position,
|
||||
posLevel: commandCode != "C-PM-21"
|
||||
? profile?.posType && profile?.posLevel
|
||||
? Extension.ToThaiNumber(
|
||||
`${profile?.posType.posTypeShortName} ${profile?.posLevel.posLevelName}`,
|
||||
)
|
||||
: "-"
|
||||
: Extension.ToThaiNumber(profileTemp.posLevel),
|
||||
posNo: commandCode != "C-PM-21"
|
||||
? shortName
|
||||
? Extension.ToThaiNumber(shortName)
|
||||
: "-"
|
||||
: Extension.ToThaiNumber(profileTemp.posNo),
|
||||
position:
|
||||
commandCode != "C-PM-21"
|
||||
? profile?.position
|
||||
? profile?.position
|
||||
: "-"
|
||||
: profileTemp.position,
|
||||
posLevel:
|
||||
commandCode != "C-PM-21"
|
||||
? profile?.posType && profile?.posLevel
|
||||
? Extension.ToThaiNumber(
|
||||
`${profile?.posType.posTypeShortName} ${profile?.posLevel.posLevelName}`,
|
||||
)
|
||||
: "-"
|
||||
: Extension.ToThaiNumber(profileTemp.posLevel),
|
||||
posNo:
|
||||
commandCode != "C-PM-21"
|
||||
? shortName
|
||||
? Extension.ToThaiNumber(shortName)
|
||||
: "-"
|
||||
: Extension.ToThaiNumber(profileTemp.posNo),
|
||||
amount: x.amount ? Extension.ToThaiNumber(x.amount.toLocaleString()) : "-",
|
||||
dateRetire: profile?.dateRetire
|
||||
? Extension.ToThaiNumber(Extension.ToThaiShortDate_monthYear(profile?.dateRetire))
|
||||
|
|
@ -4271,6 +4277,18 @@ export class CommandController extends Controller {
|
|||
if (!profile) {
|
||||
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลทะเบียนประวัตินี้");
|
||||
}
|
||||
const posMaster: any = await this.posMasterRepository.findOne({
|
||||
where: {
|
||||
current_holderId: item.profileId,
|
||||
orgRevision: {
|
||||
orgRevisionIsCurrent: true,
|
||||
orgRevisionIsDraft: false,
|
||||
},
|
||||
},
|
||||
relations: ["orgRevision"],
|
||||
});
|
||||
|
||||
const orgRevisionRef = posMaster ? posMaster.id : null;
|
||||
|
||||
//ลบตำแหน่งที่รักษาการแทน
|
||||
const code = _command?.commandType?.code;
|
||||
|
|
@ -4300,6 +4318,7 @@ export class CommandController extends Controller {
|
|||
lastUpdatedAt: new Date(),
|
||||
};
|
||||
if (item.isLeave != undefined && item.isLeave == true) {
|
||||
await CreatePosMasterHistoryOfficer(orgRevisionRef, req, "DELETE");
|
||||
await removeProfileInOrganize(profile.id, "OFFICER");
|
||||
}
|
||||
const clearProfile = await checkCommandType(String(item.commandId));
|
||||
|
|
@ -4628,8 +4647,8 @@ export class CommandController extends Controller {
|
|||
orgRevisionIsDraft: false,
|
||||
},
|
||||
});
|
||||
// const orgRevisionRef =
|
||||
// profile?.current_holders?.find((x) => x.orgRevisionId == orgRevision?.id) ?? null;
|
||||
const orgRevisionRef =
|
||||
profile?.current_holders?.find((x) => x.orgRevisionId == orgRevision?.id) ?? null;
|
||||
// const orgRootRef = orgRevisionRef?.orgRoot ?? null;
|
||||
// const orgChild1Ref = orgRevisionRef?.orgChild1 ?? null;
|
||||
// const orgChild2Ref = orgRevisionRef?.orgChild2 ?? null;
|
||||
|
|
@ -4770,6 +4789,9 @@ export class CommandController extends Controller {
|
|||
_profile.leaveDate = item.commandDateAffect ?? _null;
|
||||
_profile.leaveType = exceptClear.LeaveType ?? _null;
|
||||
} else {
|
||||
if (orgRevisionRef) {
|
||||
await CreatePosMasterHistoryOfficer(orgRevisionRef.id, req, "DELETE");
|
||||
}
|
||||
await removeProfileInOrganize(_profile.id, "OFFICER");
|
||||
}
|
||||
}
|
||||
|
|
@ -5701,6 +5723,9 @@ export class CommandController extends Controller {
|
|||
posNumCodeSit: _posNumCodeSit,
|
||||
posNumCodeSitAbb: _posNumCodeSitAbb,
|
||||
});
|
||||
if (orgRevisionRef) {
|
||||
await CreatePosMasterHistoryOfficer(orgRevisionRef.id, req, "DELETE");
|
||||
}
|
||||
await removeProfileInOrganize(profile.id, "OFFICER");
|
||||
const clearProfile = await checkCommandType(String(item.commandId));
|
||||
const _null: any = null;
|
||||
|
|
@ -6021,6 +6046,7 @@ export class CommandController extends Controller {
|
|||
profile.isProbation = item.bodyProfile.isProbation;
|
||||
//เพิ่มใหม่จากรับโอน
|
||||
profile.prefix = item.bodyProfile.prefix ?? null;
|
||||
profile.prefixMain = item.bodyProfile.prefix ?? null;
|
||||
profile.firstName = item.bodyProfile.firstName ?? null;
|
||||
profile.lastName = item.bodyProfile.lastName ?? null;
|
||||
profile.birthDate = item.bodyProfile.birthDate ?? null;
|
||||
|
|
@ -6073,6 +6099,7 @@ export class CommandController extends Controller {
|
|||
profile.amountSpecial = item.bodyProfile.amountSpecial ?? null;
|
||||
profile.isProbation = item.bodyProfile.isProbation;
|
||||
profile.prefix = item.bodyProfile.prefix ?? null;
|
||||
profile.prefixMain = item.bodyProfile.prefix ?? null;
|
||||
profile.firstName = item.bodyProfile.firstName ?? null;
|
||||
profile.lastName = item.bodyProfile.lastName ?? null;
|
||||
profile.birthDate = item.bodyProfile.birthDate ?? null;
|
||||
|
|
@ -6132,6 +6159,7 @@ export class CommandController extends Controller {
|
|||
item.bodyProfile.prefix && item.bodyProfile.prefix != ""
|
||||
? item.bodyProfile.prefix
|
||||
: profile.prefix;
|
||||
profile.prefixMain = item.bodyProfile.prefix ?? null;
|
||||
profile.firstName =
|
||||
item.bodyProfile.firstName && item.bodyProfile.firstName != ""
|
||||
? item.bodyProfile.firstName
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ export class DevelopmentRequestController extends Controller {
|
|||
if (!profile) {
|
||||
throw new HttpError(HttpStatus.BAD_REQUEST, "ไม่พบ profile ดังกล่าว");
|
||||
}
|
||||
|
||||
|
||||
let query = await AppDataSource.getRepository(DevelopmentRequest)
|
||||
.createQueryBuilder("developmentRequest")
|
||||
.andWhere(
|
||||
|
|
@ -104,16 +104,13 @@ export class DevelopmentRequestController extends Controller {
|
|||
);
|
||||
}),
|
||||
)
|
||||
.orderBy("developmentRequest.createdAt", "DESC")
|
||||
.orderBy("developmentRequest.createdAt", "DESC");
|
||||
|
||||
if (sortBy) {
|
||||
query = query.orderBy(
|
||||
`developmentRequest.${sortBy}`,
|
||||
descending ? "DESC" : "ASC"
|
||||
);
|
||||
}
|
||||
if (sortBy) {
|
||||
query = query.orderBy(`developmentRequest.${sortBy}`, descending ? "DESC" : "ASC");
|
||||
}
|
||||
|
||||
const [lists, total] = await query
|
||||
const [lists, total] = await query
|
||||
.skip((page - 1) * pageSize)
|
||||
.take(pageSize)
|
||||
.getManyAndCount();
|
||||
|
|
@ -166,7 +163,7 @@ export class DevelopmentRequestController extends Controller {
|
|||
data.child1 != undefined && data.child1 != null
|
||||
? data.child1[0] != null
|
||||
? `current_holders.orgChild1Id IN (:...child1)`
|
||||
: `current_holders.orgChild1Id is null`
|
||||
: `current_holders.orgChild1Id is ${data.privilege == "PARENT" ? "not null" : "null"}`
|
||||
: "1=1",
|
||||
{
|
||||
child1: data.child1,
|
||||
|
|
@ -250,21 +247,17 @@ export class DevelopmentRequestController extends Controller {
|
|||
);
|
||||
}),
|
||||
)
|
||||
.orderBy("developmentRequest.createdAt", "DESC")
|
||||
|
||||
.orderBy("developmentRequest.createdAt", "DESC");
|
||||
|
||||
if (sortBy) {
|
||||
query = query.orderBy(
|
||||
`developmentRequest.${sortBy}`,
|
||||
descending ? "DESC" : "ASC"
|
||||
);
|
||||
query = query.orderBy(`developmentRequest.${sortBy}`, descending ? "DESC" : "ASC");
|
||||
}
|
||||
|
||||
const [lists, total] = await query
|
||||
.skip((page - 1) * pageSize)
|
||||
.take(pageSize)
|
||||
.getManyAndCount();
|
||||
|
||||
const [lists, total] = await query
|
||||
.skip((page - 1) * pageSize)
|
||||
.take(pageSize)
|
||||
.getManyAndCount();
|
||||
|
||||
const _data = lists.map((item) => ({ ...item, profile: null }));
|
||||
return new HttpSuccess({ data: _data, total });
|
||||
}
|
||||
|
|
|
|||
|
|
@ -132,6 +132,8 @@ export class EducationLevelController extends Controller {
|
|||
"id",
|
||||
"name",
|
||||
"rank",
|
||||
"educationLevel",
|
||||
"isHigh",
|
||||
"createdAt",
|
||||
"lastUpdatedAt",
|
||||
"createdFullName",
|
||||
|
|
@ -157,6 +159,8 @@ export class EducationLevelController extends Controller {
|
|||
"id",
|
||||
"name",
|
||||
"rank",
|
||||
"educationLevel",
|
||||
"isHigh",
|
||||
"createdAt",
|
||||
"lastUpdatedAt",
|
||||
"createdFullName",
|
||||
|
|
|
|||
|
|
@ -10,6 +10,8 @@ import { Religion } from "../entities/Religion";
|
|||
import { Rank } from "../entities/Rank";
|
||||
import { EducationLevel } from "../entities/EducationLevel";
|
||||
import { Province } from "../entities/Province";
|
||||
import { District } from "../entities/District";
|
||||
import { SubDistrict } from "../entities/SubDistrict";
|
||||
|
||||
@Route("api/v1/org/metadata")
|
||||
@Tags("Profile")
|
||||
|
|
@ -28,6 +30,8 @@ export class MainController extends Controller {
|
|||
private rankRepo = AppDataSource.getRepository(Rank);
|
||||
private educationLevelRepo = AppDataSource.getRepository(EducationLevel);
|
||||
private provinceRepo = AppDataSource.getRepository(Province);
|
||||
private districtRepo = AppDataSource.getRepository(District);
|
||||
private subDistrictRepo = AppDataSource.getRepository(SubDistrict);
|
||||
/**
|
||||
* API ข้อมูลหลัก
|
||||
*
|
||||
|
|
@ -36,14 +40,16 @@ export class MainController extends Controller {
|
|||
*/
|
||||
@Get("main/person")
|
||||
async getMainPerson() {
|
||||
const bloodGroups = await this.bloodGroupRepo.find();
|
||||
const genders = await this.genderRepo.find();
|
||||
const prefixs = await this.prefixeRepo.find();
|
||||
const relationships = await this.relationshipRepo.find();
|
||||
const religions = await this.religionRepo.find();
|
||||
const rank = await this.rankRepo.find();
|
||||
const educationLevels = await this.educationLevelRepo.find();
|
||||
const provinces = await this.provinceRepo.find();
|
||||
const bloodGroups = await this.bloodGroupRepo.find({order: { name: "ASC" }});
|
||||
const genders = await this.genderRepo.find({order: { name: "ASC" }});
|
||||
const prefixs = await this.prefixeRepo.find({order: { name: "ASC" }});
|
||||
const relationships = await this.relationshipRepo.find({order: { name: "ASC" }});
|
||||
const religions = await this.religionRepo.find({order: { name: "ASC" }});
|
||||
const rank = await this.rankRepo.find({order: { name: "ASC" }});
|
||||
const educationLevels = await this.educationLevelRepo.find({order: { rank: "ASC" }});
|
||||
const provinces = await this.provinceRepo.find({order: { name: "ASC" }});
|
||||
const districts = await this.districtRepo.find({order: { name: "ASC" }});
|
||||
const subDistricts = await this.subDistrictRepo.find({order: { name: "ASC" }});
|
||||
|
||||
return new HttpSuccess({
|
||||
bloodGroups,
|
||||
|
|
@ -54,6 +60,8 @@ export class MainController extends Controller {
|
|||
rank,
|
||||
educationLevels,
|
||||
provinces,
|
||||
districts,
|
||||
subDistricts,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1211,6 +1211,7 @@ export class OrganizationDotnetController extends Controller {
|
|||
let pos = await this.posMasterRepository.findOne({
|
||||
relations: ["current_holder"],
|
||||
where: {
|
||||
current_holder: Not(IsNull()),
|
||||
orgRevision: {
|
||||
orgRevisionIsCurrent: true,
|
||||
orgRevisionIsDraft: false,
|
||||
|
|
@ -1234,6 +1235,7 @@ export class OrganizationDotnetController extends Controller {
|
|||
let pos = await this.posMasterRepository.findOne({
|
||||
relations: ["current_holder"],
|
||||
where: {
|
||||
current_holder: Not(IsNull()),
|
||||
orgRevision: {
|
||||
orgRevisionIsCurrent: true,
|
||||
orgRevisionIsDraft: false,
|
||||
|
|
@ -1256,6 +1258,7 @@ export class OrganizationDotnetController extends Controller {
|
|||
let pos = await this.posMasterRepository.findOne({
|
||||
relations: ["current_holder"],
|
||||
where: {
|
||||
current_holder: Not(IsNull()),
|
||||
orgRevision: {
|
||||
orgRevisionIsCurrent: true,
|
||||
orgRevisionIsDraft: false,
|
||||
|
|
@ -1278,6 +1281,7 @@ export class OrganizationDotnetController extends Controller {
|
|||
let pos = await this.posMasterRepository.findOne({
|
||||
relations: ["current_holder"],
|
||||
where: {
|
||||
current_holder: Not(IsNull()),
|
||||
orgRevision: {
|
||||
orgRevisionIsCurrent: true,
|
||||
orgRevisionIsDraft: false,
|
||||
|
|
@ -1300,6 +1304,7 @@ export class OrganizationDotnetController extends Controller {
|
|||
let pos = await this.posMasterRepository.findOne({
|
||||
relations: ["current_holder"],
|
||||
where: {
|
||||
current_holder: Not(IsNull()),
|
||||
orgRevision: {
|
||||
orgRevisionIsCurrent: true,
|
||||
orgRevisionIsDraft: false,
|
||||
|
|
@ -1511,6 +1516,7 @@ export class OrganizationDotnetController extends Controller {
|
|||
let pos = await this.posMasterRepository.findOne({
|
||||
relations: ["current_holder"],
|
||||
where: {
|
||||
current_holder: Not(IsNull()),
|
||||
orgRevision: {
|
||||
orgRevisionIsCurrent: true,
|
||||
orgRevisionIsDraft: false,
|
||||
|
|
@ -1534,6 +1540,7 @@ export class OrganizationDotnetController extends Controller {
|
|||
let pos = await this.posMasterRepository.findOne({
|
||||
relations: ["current_holder"],
|
||||
where: {
|
||||
current_holder: Not(IsNull()),
|
||||
orgRevision: {
|
||||
orgRevisionIsCurrent: true,
|
||||
orgRevisionIsDraft: false,
|
||||
|
|
@ -1556,6 +1563,7 @@ export class OrganizationDotnetController extends Controller {
|
|||
let pos = await this.posMasterRepository.findOne({
|
||||
relations: ["current_holder"],
|
||||
where: {
|
||||
current_holder: Not(IsNull()),
|
||||
orgRevision: {
|
||||
orgRevisionIsCurrent: true,
|
||||
orgRevisionIsDraft: false,
|
||||
|
|
@ -1578,6 +1586,7 @@ export class OrganizationDotnetController extends Controller {
|
|||
let pos = await this.posMasterRepository.findOne({
|
||||
relations: ["current_holder"],
|
||||
where: {
|
||||
current_holder: Not(IsNull()),
|
||||
orgRevision: {
|
||||
orgRevisionIsCurrent: true,
|
||||
orgRevisionIsDraft: false,
|
||||
|
|
@ -1600,6 +1609,7 @@ export class OrganizationDotnetController extends Controller {
|
|||
let pos = await this.posMasterRepository.findOne({
|
||||
relations: ["current_holder"],
|
||||
where: {
|
||||
current_holder: Not(IsNull()),
|
||||
orgRevision: {
|
||||
orgRevisionIsCurrent: true,
|
||||
orgRevisionIsDraft: false,
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import { viewProfileEmployeeEvaluation } from "../entities/view/viewProfileEmplo
|
|||
import Extension from "../interfaces/extension";
|
||||
import { resetPassword } from "../keycloak";
|
||||
import { viewEmployeePosMaster } from "../entities/view/viewEmployeePosMaster";
|
||||
import { EmployeePosDict } from "../entities/EmployeePosDict";
|
||||
@Route("api/v1/org/unauthorize")
|
||||
@Tags("OrganizationUnauthorize")
|
||||
@Response(
|
||||
|
|
@ -37,6 +38,7 @@ export class OrganizationUnauthorizeController extends Controller {
|
|||
private viewProfileEmployeeEvaluationRepo = AppDataSource.getRepository(
|
||||
viewProfileEmployeeEvaluation,
|
||||
);
|
||||
private employeePosDictRepository = AppDataSource.getRepository(EmployeePosDict);
|
||||
|
||||
@Post("user/reset-password")
|
||||
async forgetPassword(
|
||||
|
|
@ -278,8 +280,8 @@ export class OrganizationUnauthorizeController extends Controller {
|
|||
`${new Date(x.date).getFullYear()}-${String(new Date(x.date).getMonth() + 1).padStart(2, "0")}-${String(new Date(x.date).getDate() + 1).padStart(2, "0")}T00:00:00.000Z`,
|
||||
) <= datePeriodEnd,
|
||||
).length > 0
|
||||
? true
|
||||
: false,
|
||||
? false
|
||||
: true,
|
||||
isSuspension: item.current_holder.dateRetire == null ? false : true,
|
||||
isAbsent: item.current_holder.profileDisciplines.length > 0 ? true : false,
|
||||
isLeave: item.current_holder.profileLeaves.length > 0 ? true : false,
|
||||
|
|
@ -338,6 +340,7 @@ export class OrganizationUnauthorizeController extends Controller {
|
|||
const [findPosMaster, total] = await AppDataSource.getRepository(viewPosMaster)
|
||||
.createQueryBuilder("viewPosMaster")
|
||||
.where({orgRevisionId: findRevision?.id})
|
||||
.andWhere({positionIsSelected: true})
|
||||
// .andWhere("viewPosMaster.rootId IN (:...rootIds)", { rootIds })
|
||||
.andWhere(
|
||||
new Brackets((qb) => {
|
||||
|
|
@ -515,8 +518,8 @@ export class OrganizationUnauthorizeController extends Controller {
|
|||
new Date(
|
||||
`${new Date(item.disCriplineDate).getFullYear()}-${String(new Date(item.disCriplineDate).getMonth() + 1).padStart(2, "0")}-${String(new Date(item.disCriplineDate).getDate() + 1).padStart(2, "0")}T00:00:00.000Z`,
|
||||
) <= datePeriodEnd
|
||||
? true
|
||||
: false,
|
||||
? false
|
||||
: true,
|
||||
isSuspension: item.dateRetire == null ? false : true,
|
||||
isAbsent: item.profileDisciplineId ? true : false,
|
||||
isLeave: item.profileLeaveId ? true : false,
|
||||
|
|
@ -737,8 +740,8 @@ export class OrganizationUnauthorizeController extends Controller {
|
|||
`${new Date(x.date).getFullYear()}-${String(new Date(x.date).getMonth() + 1).padStart(2, "0")}-${String(new Date(x.date).getDate() + 1).padStart(2, "0")}T00:00:00.000Z`,
|
||||
) <= datePeriodEnd,
|
||||
).length > 0
|
||||
? true
|
||||
: false,
|
||||
? false
|
||||
: true,
|
||||
isSuspension: item.current_holder.dateRetire == null ? false : true,
|
||||
isAbsent: item.current_holder.profileDisciplines.length > 0 ? true : false,
|
||||
isLeave: item.current_holder.profileLeaves.length > 0 ? true : false,
|
||||
|
|
@ -969,8 +972,8 @@ export class OrganizationUnauthorizeController extends Controller {
|
|||
new Date(
|
||||
`${new Date(item.disCriplineDate).getFullYear()}-${String(new Date(item.disCriplineDate).getMonth() + 1).padStart(2, "0")}-${String(new Date(item.disCriplineDate).getDate() + 1).padStart(2, "0")}T00:00:00.000Z`,
|
||||
) <= datePeriodEnd
|
||||
? true
|
||||
: false,
|
||||
? false
|
||||
: true,
|
||||
isSuspension: item.dateRetire == null ? false : true,
|
||||
isAbsent: item.profileDisciplineId ? true : false,
|
||||
isLeave: item.profileLeaveId ? true : false,
|
||||
|
|
@ -1505,22 +1508,25 @@ export class OrganizationUnauthorizeController extends Controller {
|
|||
return new HttpSuccess(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 3. API Get Profile จาก keycloak id
|
||||
*
|
||||
* @summary 3. API Get Profile จาก keycloak id
|
||||
*
|
||||
* @param {string} keycloakId Id keycloak
|
||||
*/
|
||||
@Get("root/officer/{rootId}")
|
||||
async GetProfileByRootIdAsync(@Path() rootId: string) {
|
||||
const profiles = await this.profileRepo.find({
|
||||
relations: {
|
||||
posLevel: true,
|
||||
posType: true,
|
||||
profileSalary: true,
|
||||
profileInsignias: true,
|
||||
},
|
||||
relations: [
|
||||
"posLevel",
|
||||
"posType",
|
||||
"profileSalary",
|
||||
"profileInsignias",
|
||||
"profileInsignias.insignia",
|
||||
"profileDisciplines",
|
||||
"profileAssessments",
|
||||
"current_holders",
|
||||
"current_holders.orgRevision",
|
||||
"current_holders.orgRoot",
|
||||
"current_holders.orgChild1",
|
||||
"current_holders.orgChild2",
|
||||
"current_holders.orgChild3",
|
||||
"current_holders.orgChild4",
|
||||
],
|
||||
where: { current_holders: { orgRootId: rootId } },
|
||||
order: {
|
||||
profileSalary: {
|
||||
|
|
@ -1531,55 +1537,267 @@ export class OrganizationUnauthorizeController extends Controller {
|
|||
},
|
||||
},
|
||||
});
|
||||
// if (!profile) throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล");
|
||||
|
||||
const mapProfile = profiles.map((profile) => ({
|
||||
id: profile.id,
|
||||
avatar: profile.avatar,
|
||||
avatarName: profile.avatarName,
|
||||
rank: profile.rank,
|
||||
prefix: profile.prefix,
|
||||
firstName: profile.firstName,
|
||||
lastName: profile.lastName,
|
||||
citizenId: profile.citizenId,
|
||||
position: profile.position,
|
||||
posLevelId: profile.posLevelId,
|
||||
email: profile.email,
|
||||
phone: profile.phone,
|
||||
keycloak: profile.keycloak,
|
||||
isProbation: profile.isProbation,
|
||||
isLeave: profile.isLeave,
|
||||
leaveReason: profile.leaveReason,
|
||||
dateRetire: profile.dateRetire,
|
||||
dateAppoint: profile.dateAppoint,
|
||||
dateRetireLaw: profile.dateRetireLaw,
|
||||
dateStart: profile.dateStart,
|
||||
govAgeAbsent: profile.govAgeAbsent,
|
||||
govAgePlus: profile.govAgePlus,
|
||||
birthDate: profile.birthDate,
|
||||
reasonSameDate: profile.reasonSameDate,
|
||||
telephoneNumber: profile.phone,
|
||||
nationality: profile.nationality,
|
||||
gender: profile.gender,
|
||||
relationship: profile.relationship,
|
||||
religion: profile.religion,
|
||||
bloodGroup: profile.bloodGroup,
|
||||
registrationAddress: profile.registrationAddress,
|
||||
registrationProvinceId: profile.registrationProvinceId,
|
||||
registrationDistrictId: profile.registrationDistrictId,
|
||||
registrationSubDistrictId: profile.registrationSubDistrictId,
|
||||
registrationZipCode: profile.registrationZipCode,
|
||||
currentAddress: profile.currentAddress,
|
||||
currentProvinceId: profile.currentProvinceId,
|
||||
currentSubDistrictId: profile.currentSubDistrictId,
|
||||
currentZipCode: profile.currentZipCode,
|
||||
dutyTimeId: profile.dutyTimeId,
|
||||
dutyTimeEffectiveDate: profile.dutyTimeEffectiveDate,
|
||||
posLevel: profile.posLevel ? profile.posLevel : null,
|
||||
posType: profile.posType ? profile.posType : null,
|
||||
profileSalary: profile.profileSalary,
|
||||
profileInsignia: profile.profileInsignias,
|
||||
}));
|
||||
const currentYear = new Date().getFullYear();
|
||||
const years = [currentYear, currentYear - 1, currentYear - 2, currentYear - 3, currentYear - 4];
|
||||
|
||||
// APR Averages
|
||||
const aprAverages: { [year: number]: number | null } = {};
|
||||
const aprSums: { [year: number]: number } = {};
|
||||
const aprCounts: { [year: number]: number } = {};
|
||||
|
||||
// OCT Averages
|
||||
const octAverages: { [year: number]: number | null } = {};
|
||||
const octSums: { [year: number]: number } = {};
|
||||
const octCounts: { [year: number]: number } = {};
|
||||
|
||||
years.forEach((year) => {
|
||||
aprAverages[year] = null;
|
||||
aprSums[year] = 0;
|
||||
aprCounts[year] = 0;
|
||||
|
||||
octAverages[year] = null;
|
||||
octSums[year] = 0;
|
||||
octCounts[year] = 0;
|
||||
});
|
||||
|
||||
profiles.forEach((profile) => {
|
||||
const assessments = profile.profileAssessments || [];
|
||||
|
||||
assessments.forEach((assessment) => {
|
||||
const year = Number(assessment.year);
|
||||
|
||||
if (years.includes(year)) {
|
||||
if (assessment.period === "APR") {
|
||||
aprSums[year] += assessment.pointSum;
|
||||
aprCounts[year] += 1;
|
||||
}
|
||||
|
||||
if (assessment.period === "OCT") {
|
||||
octSums[year] += assessment.pointSum;
|
||||
octCounts[year] += 1;
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
years.forEach((year) => {
|
||||
aprAverages[year] = aprCounts[year] > 0 ? aprSums[year] / aprCounts[year] : null;
|
||||
octAverages[year] = octCounts[year] > 0 ? octSums[year] / octCounts[year] : null;
|
||||
});
|
||||
|
||||
const findRevision = await this.orgRevisionRepository.findOne({
|
||||
where: { orgRevisionIsCurrent: true },
|
||||
});
|
||||
|
||||
const mapProfile = profiles.map((profile) => {
|
||||
const shortName =
|
||||
profile.current_holders.length == 0
|
||||
? null
|
||||
: profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) != null &&
|
||||
profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.orgChild4 !=
|
||||
null
|
||||
? `${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.orgChild4.orgChild4ShortName} ${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.posMasterNo}`
|
||||
: profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) != null &&
|
||||
profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)
|
||||
?.orgChild3 != null
|
||||
? `${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.orgChild3.orgChild3ShortName} ${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.posMasterNo}`
|
||||
: profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) != null &&
|
||||
profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)
|
||||
?.orgChild2 != null
|
||||
? `${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.orgChild2.orgChild2ShortName} ${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.posMasterNo}`
|
||||
: profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) !=
|
||||
null &&
|
||||
profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)
|
||||
?.orgChild1 != null
|
||||
? `${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.orgChild1.orgChild1ShortName} ${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.posMasterNo}`
|
||||
: profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) !=
|
||||
null &&
|
||||
profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)
|
||||
?.orgRoot != null
|
||||
? `${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.orgRoot.orgRootShortName} ${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.posMasterNo}`
|
||||
: null;
|
||||
|
||||
return {
|
||||
id: profile.id,
|
||||
avatar: profile.avatar,
|
||||
avatarName: profile.avatarName,
|
||||
rank: profile.rank ?? "",
|
||||
prefix: profile.prefix ?? "",
|
||||
firstName: profile.firstName ?? "",
|
||||
lastName: profile.lastName ?? "",
|
||||
citizenId: profile.citizenId ?? "",
|
||||
position: profile.position ?? "",
|
||||
posLevelId: profile.posLevelId,
|
||||
posTypeId: profile.posTypeId,
|
||||
email: profile.email,
|
||||
phone: profile.phone,
|
||||
keycloak: profile.keycloak,
|
||||
isProbation: profile.isProbation,
|
||||
isLeave: profile.isLeave,
|
||||
leaveReason: profile.leaveReason,
|
||||
dateRetire: profile.dateRetire,
|
||||
dateAppoint: profile.dateAppoint,
|
||||
dateRetireLaw: profile.dateRetireLaw,
|
||||
dateStart: profile.dateStart,
|
||||
govAgeAbsent: profile.govAgeAbsent,
|
||||
govAgePlus: profile.govAgePlus,
|
||||
birthDate: profile.birthDate ?? new Date(),
|
||||
reasonSameDate: profile.reasonSameDate,
|
||||
telephoneNumber: profile.phone,
|
||||
nationality: profile.nationality,
|
||||
gender: profile.gender ?? "",
|
||||
relationship: profile.relationship ?? "",
|
||||
religion: profile.religion ?? "",
|
||||
bloodGroup: profile.bloodGroup ?? "",
|
||||
registrationAddress: profile.registrationAddress,
|
||||
registrationProvinceId: profile.registrationProvinceId,
|
||||
registrationDistrictId: profile.registrationDistrictId,
|
||||
registrationSubDistrictId: profile.registrationSubDistrictId,
|
||||
registrationZipCode: profile.registrationZipCode,
|
||||
currentAddress: profile.currentAddress,
|
||||
currentProvinceId: profile.currentProvinceId,
|
||||
currentSubDistrictId: profile.currentSubDistrictId,
|
||||
currentZipCode: profile.currentZipCode,
|
||||
dutyTimeId: profile.dutyTimeId,
|
||||
dutyTimeEffectiveDate: profile.dutyTimeEffectiveDate,
|
||||
posLevel: profile.posLevel?.posLevelName ?? "",
|
||||
posType: profile.posType?.posTypeName ?? "",
|
||||
profileSalary: profile.profileSalary,
|
||||
profileInsignia: profile.profileInsignias.map((x) => {
|
||||
return { ...x, insignia: x.insignia.name };
|
||||
}),
|
||||
amount: profile.amount,
|
||||
positionSalaryAmount: profile.positionSalaryAmount,
|
||||
mouthSalaryAmount: profile.mouthSalaryAmount,
|
||||
profileType: "OFFICER",
|
||||
root:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgRoot?.orgRootName ?? null,
|
||||
rootId:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgRootId ?? null,
|
||||
rootDnaId:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgRoot?.ancestorDNA ?? null,
|
||||
child1:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgChild1?.orgChild1Name ?? null,
|
||||
child1Id:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgChild1Id ?? null,
|
||||
child1DnaId:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgChild1?.ancestorDNA ?? null,
|
||||
child2:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgChild2?.orgChild2Name ?? null,
|
||||
child2Id:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgChild2Id ?? null,
|
||||
child2DnaId:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgChild2?.ancestorDNA ?? null,
|
||||
child3:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgChild3?.orgChild3Name ?? null,
|
||||
child3Id:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgChild3Id ?? null,
|
||||
child3DnaId:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgChild3?.ancestorDNA ?? null,
|
||||
child4:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgChild4?.orgChild4Name ?? null,
|
||||
child4Id:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgChild4Id ?? null,
|
||||
child4DnaId:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgChild4?.ancestorDNA ?? null,
|
||||
posNo: shortName ?? "",
|
||||
markDiscipline: profile.profileDisciplines.length > 0 ? true : false,
|
||||
markLeave: false,
|
||||
markRate: profile.profileAssessments.length > 0 ? true : false,
|
||||
markInsignia: profile.profileInsignias.length > 0 ? true : false,
|
||||
apr1: aprAverages[currentYear]
|
||||
? Extension.textPoint(aprAverages[currentYear] as number)
|
||||
: null,
|
||||
apr2: aprAverages[currentYear - 1]
|
||||
? Extension.textPoint(aprAverages[currentYear - 1] as number)
|
||||
: null,
|
||||
apr3: aprAverages[currentYear - 2]
|
||||
? Extension.textPoint(aprAverages[currentYear - 2] as number)
|
||||
: null,
|
||||
apr4: aprAverages[currentYear - 3]
|
||||
? Extension.textPoint(aprAverages[currentYear - 3] as number)
|
||||
: null,
|
||||
apr5: aprAverages[currentYear - 4]
|
||||
? Extension.textPoint(aprAverages[currentYear - 4] as number)
|
||||
: null,
|
||||
oct1: octAverages[currentYear]
|
||||
? Extension.textPoint(octAverages[currentYear] as number)
|
||||
: null,
|
||||
oct2: octAverages[currentYear - 1]
|
||||
? Extension.textPoint(octAverages[currentYear - 1] as number)
|
||||
: null,
|
||||
oct3: octAverages[currentYear - 2]
|
||||
? Extension.textPoint(octAverages[currentYear - 2] as number)
|
||||
: null,
|
||||
oct4: octAverages[currentYear - 3]
|
||||
? Extension.textPoint(octAverages[currentYear - 3] as number)
|
||||
: null,
|
||||
oct5: octAverages[currentYear - 4]
|
||||
? Extension.textPoint(octAverages[currentYear - 4] as number)
|
||||
: null,
|
||||
};
|
||||
});
|
||||
|
||||
return new HttpSuccess(mapProfile);
|
||||
}
|
||||
|
|
@ -1663,6 +1881,315 @@ export class OrganizationUnauthorizeController extends Controller {
|
|||
return new HttpSuccess(mapProfile);
|
||||
}
|
||||
|
||||
@Post("find/employee/position")
|
||||
async GetProfileByPositionEmpAsync(
|
||||
@Body()
|
||||
body: {
|
||||
empPosId: string[];
|
||||
rootId: string;
|
||||
},
|
||||
) {
|
||||
const findRevision = await this.orgRevisionRepository.findOne({
|
||||
where: { orgRevisionIsCurrent: true },
|
||||
});
|
||||
const employeePosDict = await this.employeePosDictRepository.find({
|
||||
where: { id: In(body.empPosId) },
|
||||
});
|
||||
|
||||
const profiles = await this.profileEmpRepo.find({
|
||||
relations: [
|
||||
"posLevel",
|
||||
"posType",
|
||||
"profileSalary",
|
||||
"profileInsignias",
|
||||
"profileInsignias.insignia",
|
||||
"profileDisciplines",
|
||||
"profileAssessments",
|
||||
"current_holders",
|
||||
"current_holders.orgRevision",
|
||||
"current_holders.orgRoot",
|
||||
"current_holders.orgChild1",
|
||||
"current_holders.orgChild2",
|
||||
"current_holders.orgChild3",
|
||||
"current_holders.orgChild4",
|
||||
],
|
||||
where: employeePosDict.map((entry) => ({
|
||||
posLevelId: entry.posLevelId,
|
||||
posTypeId: entry.posTypeId,
|
||||
position: entry.posDictName,
|
||||
current_holders: { orgRootId: body.rootId },
|
||||
})),
|
||||
order: {
|
||||
profileSalary: {
|
||||
commandDateAffect: "DESC",
|
||||
},
|
||||
profileInsignias: {
|
||||
receiveDate: "DESC",
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const currentYear = new Date().getFullYear();
|
||||
const years = [currentYear, currentYear - 1, currentYear - 2, currentYear - 3, currentYear - 4];
|
||||
|
||||
// APR Averages
|
||||
const aprAverages: { [year: number]: number | null } = {};
|
||||
const aprSums: { [year: number]: number } = {};
|
||||
const aprCounts: { [year: number]: number } = {};
|
||||
|
||||
// OCT Averages
|
||||
const octAverages: { [year: number]: number | null } = {};
|
||||
const octSums: { [year: number]: number } = {};
|
||||
const octCounts: { [year: number]: number } = {};
|
||||
|
||||
years.forEach((year) => {
|
||||
aprAverages[year] = null;
|
||||
aprSums[year] = 0;
|
||||
aprCounts[year] = 0;
|
||||
|
||||
octAverages[year] = null;
|
||||
octSums[year] = 0;
|
||||
octCounts[year] = 0;
|
||||
});
|
||||
|
||||
profiles.forEach((profile) => {
|
||||
const assessments = profile.profileAssessments || [];
|
||||
|
||||
assessments.forEach((assessment) => {
|
||||
const year = Number(assessment.year);
|
||||
|
||||
if (years.includes(year)) {
|
||||
if (assessment.period === "APR") {
|
||||
aprSums[year] += assessment.pointSum;
|
||||
aprCounts[year] += 1;
|
||||
}
|
||||
|
||||
if (assessment.period === "OCT") {
|
||||
octSums[year] += assessment.pointSum;
|
||||
octCounts[year] += 1;
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
years.forEach((year) => {
|
||||
aprAverages[year] = aprCounts[year] > 0 ? aprSums[year] / aprCounts[year] : null;
|
||||
octAverages[year] = octCounts[year] > 0 ? octSums[year] / octCounts[year] : null;
|
||||
});
|
||||
|
||||
const mapProfile = profiles.map((profile) => {
|
||||
const shortName =
|
||||
profile.current_holders.length == 0
|
||||
? null
|
||||
: profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) != null &&
|
||||
profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.orgChild4 !=
|
||||
null
|
||||
? `${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.orgChild4.orgChild4ShortName} ${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.posMasterNo}`
|
||||
: profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) != null &&
|
||||
profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)
|
||||
?.orgChild3 != null
|
||||
? `${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.orgChild3.orgChild3ShortName} ${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.posMasterNo}`
|
||||
: profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) != null &&
|
||||
profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)
|
||||
?.orgChild2 != null
|
||||
? `${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.orgChild2.orgChild2ShortName} ${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.posMasterNo}`
|
||||
: profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) !=
|
||||
null &&
|
||||
profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)
|
||||
?.orgChild1 != null
|
||||
? `${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.orgChild1.orgChild1ShortName} ${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.posMasterNo}`
|
||||
: profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id) !=
|
||||
null &&
|
||||
profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)
|
||||
?.orgRoot != null
|
||||
? `${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.orgRoot.orgRootShortName} ${profile.current_holders.find((x) => x.orgRevisionId == findRevision?.id)?.posMasterNo}`
|
||||
: null;
|
||||
return {
|
||||
id: profile.id,
|
||||
avatar: profile.avatar,
|
||||
avatarName: profile.avatarName,
|
||||
rank: profile.rank ?? "",
|
||||
prefix: profile.prefix ?? "",
|
||||
firstName: profile.firstName ?? "",
|
||||
lastName: profile.lastName ?? "",
|
||||
citizenId: profile.citizenId ?? "",
|
||||
position: profile.position ?? "",
|
||||
posLevelId: profile.posLevelId,
|
||||
email: profile.email,
|
||||
phone: profile.phone,
|
||||
keycloak: profile.keycloak,
|
||||
isProbation: profile.isProbation,
|
||||
isLeave: profile.isLeave,
|
||||
leaveReason: profile.leaveReason,
|
||||
dateRetire: profile.dateRetire,
|
||||
dateAppoint: profile.dateAppoint,
|
||||
dateRetireLaw: profile.dateRetireLaw,
|
||||
dateStart: profile.dateStart,
|
||||
govAgeAbsent: profile.govAgeAbsent,
|
||||
govAgePlus: profile.govAgePlus,
|
||||
birthDate: profile.birthDate ?? new Date(),
|
||||
reasonSameDate: profile.reasonSameDate,
|
||||
telephoneNumber: profile.phone,
|
||||
nationality: profile.nationality,
|
||||
gender: profile.gender ?? "",
|
||||
relationship: profile.relationship ?? "",
|
||||
religion: profile.religion ?? "",
|
||||
bloodGroup: profile.bloodGroup ?? "",
|
||||
registrationAddress: profile.registrationAddress,
|
||||
registrationProvinceId: profile.registrationProvinceId,
|
||||
registrationDistrictId: profile.registrationDistrictId,
|
||||
registrationSubDistrictId: profile.registrationSubDistrictId,
|
||||
registrationZipCode: profile.registrationZipCode,
|
||||
currentAddress: profile.currentAddress,
|
||||
currentProvinceId: profile.currentProvinceId,
|
||||
currentSubDistrictId: profile.currentSubDistrictId,
|
||||
currentZipCode: profile.currentZipCode,
|
||||
posLevel:
|
||||
(profile.posType == null || profile.posType?.posTypeShortName == null
|
||||
? ""
|
||||
: profile.posType?.posTypeShortName + " ") + (profile.posLevel?.posLevelName ?? ""),
|
||||
posType: profile.posType?.posTypeName ?? "",
|
||||
profileSalary: profile.profileSalary.map((x) => {
|
||||
return { ...x, date: x.commandDateAffect ?? new Date() };
|
||||
}),
|
||||
profileInsignia: profile.profileInsignias.map((x) => {
|
||||
return { ...x, insignia: x.insignia.name };
|
||||
}),
|
||||
amount: profile.amount,
|
||||
positionSalaryAmount: profile.positionSalaryAmount,
|
||||
mouthSalaryAmount: profile.mouthSalaryAmount,
|
||||
profileType: "EMPLOYEE",
|
||||
root:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgRoot?.orgRootName ?? null,
|
||||
rootId:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgRootId ?? null,
|
||||
rootDnaId:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgRoot?.ancestorDNA ?? null,
|
||||
child1:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgChild1?.orgChild1Name ?? null,
|
||||
child1Id:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgChild1Id ?? null,
|
||||
child1DnaId:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgChild1?.ancestorDNA ?? null,
|
||||
child2:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgChild2?.orgChild2Name ?? null,
|
||||
child2Id:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgChild2Id ?? null,
|
||||
child2DnaId:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgChild2?.ancestorDNA ?? null,
|
||||
child3:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgChild3?.orgChild3Name ?? null,
|
||||
child3Id:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgChild3Id ?? null,
|
||||
child3DnaId:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgChild3?.ancestorDNA ?? null,
|
||||
child4:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgChild4?.orgChild4Name ?? null,
|
||||
child4Id:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgChild4Id ?? null,
|
||||
child4DnaId:
|
||||
profile?.current_holders?.find(
|
||||
(x) =>
|
||||
x.orgRevision?.orgRevisionIsDraft == false &&
|
||||
x.orgRevision?.orgRevisionIsCurrent == true,
|
||||
)?.orgChild4?.ancestorDNA ?? null,
|
||||
posNo: shortName ?? "",
|
||||
markDiscipline: profile.profileDisciplines.length > 0 ? true : false,
|
||||
markLeave: false,
|
||||
markRate: profile.profileAssessments.length > 0 ? true : false,
|
||||
markInsignia: profile.profileInsignias.length > 0 ? true : false,
|
||||
apr1: aprAverages[currentYear]
|
||||
? Extension.textPoint(aprAverages[currentYear] as number)
|
||||
: null,
|
||||
apr2: aprAverages[currentYear - 1]
|
||||
? Extension.textPoint(aprAverages[currentYear - 1] as number)
|
||||
: null,
|
||||
apr3: aprAverages[currentYear - 2]
|
||||
? Extension.textPoint(aprAverages[currentYear - 2] as number)
|
||||
: null,
|
||||
apr4: aprAverages[currentYear - 3]
|
||||
? Extension.textPoint(aprAverages[currentYear - 3] as number)
|
||||
: null,
|
||||
apr5: aprAverages[currentYear - 4]
|
||||
? Extension.textPoint(aprAverages[currentYear - 4] as number)
|
||||
: null,
|
||||
oct1: octAverages[currentYear]
|
||||
? Extension.textPoint(octAverages[currentYear] as number)
|
||||
: null,
|
||||
oct2: octAverages[currentYear - 1]
|
||||
? Extension.textPoint(octAverages[currentYear - 1] as number)
|
||||
: null,
|
||||
oct3: octAverages[currentYear - 2]
|
||||
? Extension.textPoint(octAverages[currentYear - 2] as number)
|
||||
: null,
|
||||
oct4: octAverages[currentYear - 3]
|
||||
? Extension.textPoint(octAverages[currentYear - 3] as number)
|
||||
: null,
|
||||
oct5: octAverages[currentYear - 4]
|
||||
? Extension.textPoint(octAverages[currentYear - 4] as number)
|
||||
: null,
|
||||
};
|
||||
});
|
||||
|
||||
return new HttpSuccess(mapProfile);
|
||||
}
|
||||
|
||||
/**
|
||||
* API ยืนยัน Email
|
||||
*
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ import { ProfileSalaryHistory } from "../entities/ProfileSalaryHistory";
|
|||
import { ProfileAssistance } from "../entities/ProfileAssistance";
|
||||
import { CommandRecive } from "../entities/CommandRecive";
|
||||
import { EmployeePosMaster } from "../entities/EmployeePosMaster";
|
||||
import { getTopDegrees } from "../services/PositionService";
|
||||
import { CreatePosMasterHistoryOfficer, getTopDegrees } from "../services/PositionService";
|
||||
import { ProfileLeaveService } from "../services/ProfileLeaveService";
|
||||
|
||||
@Route("api/v1/org/profile")
|
||||
|
|
@ -2219,7 +2219,7 @@ export class ProfileController extends Controller {
|
|||
_data.child1 != undefined && _data.child1 != null
|
||||
? _data.child1[0] != null
|
||||
? `current_holders.orgChild1Id IN (:...child1)`
|
||||
: `current_holders.orgChild1Id is null`
|
||||
: `current_holders.orgChild1Id is ${_data.privilege == "PARENT" ? "not null" : "null"}`
|
||||
: "1=1",
|
||||
{
|
||||
child1: _data.child1,
|
||||
|
|
@ -3302,10 +3302,7 @@ export class ProfileController extends Controller {
|
|||
citizenIdDigits[10] * 3 +
|
||||
citizenIdDigits[11] * 2;
|
||||
const calStp2 = cal % 11;
|
||||
let chkDigit = 11 - calStp2;
|
||||
if (chkDigit >= 10) {
|
||||
chkDigit = 0;
|
||||
}
|
||||
const chkDigit = (11 - calStp2) % 10;
|
||||
|
||||
if (citizenIdDigits[12] !== chkDigit) {
|
||||
throw new HttpError(HttpStatus.NOT_FOUND, "ข้อมูลรหัสบัตรประจำตัวประชาชนไม่ถูกต้อง");
|
||||
|
|
@ -3338,10 +3335,7 @@ export class ProfileController extends Controller {
|
|||
citizenIdDigits[10] * 3 +
|
||||
citizenIdDigits[11] * 2;
|
||||
const calStp2 = cal % 11;
|
||||
let chkDigit = 11 - calStp2;
|
||||
if (chkDigit >= 10) {
|
||||
chkDigit = 0;
|
||||
}
|
||||
const chkDigit = (11 - calStp2) % 10;
|
||||
// else if(chkDigit === 11){
|
||||
// chkDigit = cal % 10;
|
||||
// }
|
||||
|
|
@ -3416,10 +3410,7 @@ export class ProfileController extends Controller {
|
|||
citizenIdDigits[10] * 3 +
|
||||
citizenIdDigits[11] * 2;
|
||||
const calStp2 = cal % 11;
|
||||
let chkDigit = 11 - calStp2;
|
||||
if (chkDigit >= 10) {
|
||||
chkDigit = 0;
|
||||
}
|
||||
const chkDigit = (11 - calStp2) % 10;
|
||||
|
||||
if (citizenIdDigits[12] !== chkDigit) {
|
||||
throw new HttpError(HttpStatus.NOT_FOUND, "ข้อมูลรหัสบัตรประจำตัวประชาชนไม่ถูกต้อง");
|
||||
|
|
@ -3484,10 +3475,7 @@ export class ProfileController extends Controller {
|
|||
citizenIdDigits[10] * 3 +
|
||||
citizenIdDigits[11] * 2;
|
||||
const calStp2 = cal % 11;
|
||||
let chkDigit = 11 - calStp2;
|
||||
if (chkDigit >= 10) {
|
||||
chkDigit = 0;
|
||||
}
|
||||
const chkDigit = (11 - calStp2) % 10;
|
||||
|
||||
if (citizenIdDigits[12] !== chkDigit) {
|
||||
throw new HttpError(HttpStatus.NOT_FOUND, "ข้อมูลรหัสบัตรประจำตัวประชาชนไม่ถูกต้อง");
|
||||
|
|
@ -5249,10 +5237,7 @@ export class ProfileController extends Controller {
|
|||
citizenIdDigits[10] * 3 +
|
||||
citizenIdDigits[11] * 2;
|
||||
const calStp2 = cal % 11;
|
||||
let chkDigit = 11 - calStp2;
|
||||
if (chkDigit >= 10) {
|
||||
chkDigit = 0;
|
||||
}
|
||||
const chkDigit = (11 - calStp2) % 10;
|
||||
|
||||
if (citizenIdDigits[12] !== chkDigit) {
|
||||
throw new HttpError(HttpStatus.NOT_FOUND, "ข้อมูลรหัสบัตรประจำตัวประชาชนไม่ถูกต้อง");
|
||||
|
|
@ -6152,7 +6137,7 @@ export class ProfileController extends Controller {
|
|||
_data.child1 != undefined && _data.child1 != null
|
||||
? _data.child1[0] != null
|
||||
? `current_holders.orgChild1Id IN (:...child1)`
|
||||
: `current_holders.orgChild1Id is null`
|
||||
: `current_holders.orgChild1Id is ${_data.privilege == "PARENT" ? "not null" : "null"}`
|
||||
: "1=1",
|
||||
{ child1: _data.child1 },
|
||||
)
|
||||
|
|
@ -6539,7 +6524,7 @@ export class ProfileController extends Controller {
|
|||
_data.child1 != undefined && _data.child1 != null
|
||||
? _data.child1[0] != null
|
||||
? `current_holders.orgChild1Id IN (:...child1)`
|
||||
: `current_holders.orgChild1Id is null`
|
||||
: `current_holders.orgChild1Id is ${_data.privilege == "PARENT" ? "not null" : "null"}`
|
||||
: "1=1",
|
||||
{ child1: _data.child1 },
|
||||
)
|
||||
|
|
@ -6647,6 +6632,7 @@ export class ProfileController extends Controller {
|
|||
position: _data.position,
|
||||
posNo: shortName ?? null,
|
||||
rootId: holder?.orgRoot?.id ?? null,
|
||||
child1Id: holder?.orgChild1Id ?? null,
|
||||
root: holder?.orgRoot?.orgRootName ?? null,
|
||||
rootDnaId: holder?.orgRoot == null ? null : holder?.orgRoot?.ancestorDNA,
|
||||
orgRootShortName: holder?.orgRoot?.orgRootShortName ?? null,
|
||||
|
|
@ -7367,10 +7353,10 @@ export class ProfileController extends Controller {
|
|||
nodeDnaId: null,
|
||||
type: profile.employeeClass,
|
||||
salary: profile.amount,
|
||||
posNo: null
|
||||
// root?.orgRootShortName && posMaster?.posMasterNo
|
||||
// ? `${root?.orgRootShortName} ${posMaster?.posMasterNo}`
|
||||
// : "",
|
||||
posNo: null,
|
||||
// root?.orgRootShortName && posMaster?.posMasterNo
|
||||
// ? `${root?.orgRootShortName} ${posMaster?.posMasterNo}`
|
||||
// : "",
|
||||
};
|
||||
if (_profile.child4Id != null) {
|
||||
_profile.node = 4;
|
||||
|
|
@ -7536,10 +7522,10 @@ export class ProfileController extends Controller {
|
|||
nodeDnaId: null,
|
||||
salary: profile ? profile.amount : null,
|
||||
amountSpecial: profile ? profile.amountSpecial : null,
|
||||
posNo: null
|
||||
// root?.orgRootShortName && posMaster?.posMasterNo
|
||||
// ? `${root?.orgRootShortName} ${posMaster?.posMasterNo}`
|
||||
// : "",
|
||||
posNo: null,
|
||||
// root?.orgRootShortName && posMaster?.posMasterNo
|
||||
// ? `${root?.orgRootShortName} ${posMaster?.posMasterNo}`
|
||||
// : "",
|
||||
};
|
||||
|
||||
if (_profile.child4Id != null) {
|
||||
|
|
@ -8584,6 +8570,7 @@ export class ProfileController extends Controller {
|
|||
node: null,
|
||||
nodeId: null,
|
||||
amount: profile ? profile.amount : null,
|
||||
AmountOld: profile ? profile.amount : null,
|
||||
positionSalaryAmount: profile ? profile.positionSalaryAmount : null,
|
||||
mouthSalaryAmount: profile ? profile.mouthSalaryAmount : null,
|
||||
education:
|
||||
|
|
@ -8881,7 +8868,7 @@ export class ProfileController extends Controller {
|
|||
_data.child1 != undefined && _data.child1 != null
|
||||
? _data.child1[0] != null
|
||||
? `current_holders.orgChild1Id IN (:...child1)`
|
||||
: `current_holders.orgChild1Id is null`
|
||||
: `current_holders.orgChild1Id is ${_data.privilege == "PARENT" ? "not null" : "null"}`
|
||||
: "1=1",
|
||||
{ child1: _data.child1 },
|
||||
)
|
||||
|
|
@ -9404,7 +9391,7 @@ export class ProfileController extends Controller {
|
|||
_data.child1 != undefined && _data.child1 != null
|
||||
? _data.child1[0] != null
|
||||
? `current_holders.orgChild1Id IN (:...child1)`
|
||||
: `current_holders.orgChild1Id is null`
|
||||
: `current_holders.orgChild1Id is ${_data.privilege == "PARENT" ? "not null" : "null"}`
|
||||
: "1=1",
|
||||
{
|
||||
child1: _data.child1,
|
||||
|
|
@ -9795,21 +9782,26 @@ export class ProfileController extends Controller {
|
|||
.leftJoinAndSelect("current_holders.positions", "positions")
|
||||
.leftJoinAndSelect("positions.posExecutive", "posExecutive")
|
||||
.andWhere(
|
||||
new Brackets(qb => {
|
||||
new Brackets((qb) => {
|
||||
qb.where("profile.position LIKE :keyword", { keyword: `%${body.keyword}%` })
|
||||
.orWhere("posLevel.posLevelName LIKE :keyword", { keyword: `%${body.keyword}%` })
|
||||
.orWhere("posType.posTypeName LIKE :keyword", { keyword: `%${body.keyword}%` })
|
||||
.orWhere("CONCAT(profile.prefix, profile.firstName, ' ', profile.lastName) LIKE :keyword", { keyword: `%${body.keyword}%` });
|
||||
})
|
||||
.orWhere(
|
||||
"CONCAT(profile.prefix, profile.firstName, ' ', profile.lastName) LIKE :keyword",
|
||||
{ keyword: `%${body.keyword}%` },
|
||||
);
|
||||
}),
|
||||
)
|
||||
.andWhere("profile.isLeave = false")
|
||||
.andWhere("current_holders.orgRevisionId = :orgRevisionId", { orgRevisionId: orgRevisionActive.id });
|
||||
.andWhere("current_holders.orgRevisionId = :orgRevisionId", {
|
||||
orgRevisionId: orgRevisionActive.id,
|
||||
});
|
||||
|
||||
const [findProfile, total] = await query
|
||||
.orderBy("profile.citizenId", "ASC")
|
||||
.skip((body.page - 1) * body.pageSize)
|
||||
.take(body.pageSize)
|
||||
.getManyAndCount();
|
||||
const [findProfile, total] = await query
|
||||
.orderBy("profile.citizenId", "ASC")
|
||||
.skip((body.page - 1) * body.pageSize)
|
||||
.take(body.pageSize)
|
||||
.getManyAndCount();
|
||||
|
||||
const mapDataProfile = await Promise.all(
|
||||
findProfile.map(async (item: Profile) => {
|
||||
|
|
@ -9821,9 +9813,10 @@ export class ProfileController extends Controller {
|
|||
: item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id);
|
||||
const position =
|
||||
posMaster == null ||
|
||||
item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.positions == null ||
|
||||
item.current_holders?.find((x) => x.orgRevisionId == orgRevisionActive.id)?.positions.length ==
|
||||
0 ||
|
||||
item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.positions ==
|
||||
null ||
|
||||
item.current_holders?.find((x) => x.orgRevisionId == orgRevisionActive.id)?.positions
|
||||
.length == 0 ||
|
||||
item.current_holders
|
||||
.find((x) => x.orgRevisionId == orgRevisionActive.id)
|
||||
?.positions?.find((position) => position.positionIsSelected == true) == null
|
||||
|
|
@ -9851,18 +9844,20 @@ export class ProfileController extends Controller {
|
|||
item.current_holders.length == 0
|
||||
? null
|
||||
: item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id) != null &&
|
||||
item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.orgChild4 !=
|
||||
null
|
||||
item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)
|
||||
?.orgChild4 != null
|
||||
? `${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.orgChild4.orgChild4ShortName} ${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.posMasterNo}`
|
||||
: item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id) != null &&
|
||||
item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.orgChild3 !=
|
||||
null
|
||||
item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)
|
||||
?.orgChild3 != null
|
||||
? `${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.orgChild3.orgChild3ShortName} ${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.posMasterNo}`
|
||||
: item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id) != null &&
|
||||
: item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id) !=
|
||||
null &&
|
||||
item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)
|
||||
?.orgChild2 != null
|
||||
? `${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.orgChild2.orgChild2ShortName} ${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.posMasterNo}`
|
||||
: item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id) != null &&
|
||||
: item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id) !=
|
||||
null &&
|
||||
item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)
|
||||
?.orgChild1 != null
|
||||
? `${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.orgChild1.orgChild1ShortName} ${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.posMasterNo}`
|
||||
|
|
@ -10789,6 +10784,9 @@ export class ProfileController extends Controller {
|
|||
await this.profileRepo.save(profile, { data: request });
|
||||
setLogDataDiff(request, { before, after: profile });
|
||||
if (requestBody.isLeave == true) {
|
||||
if (orgRevisionRef) {
|
||||
await CreatePosMasterHistoryOfficer(orgRevisionRef.id, request, "DELETE");
|
||||
}
|
||||
await removeProfileInOrganize(profile.id, "OFFICER");
|
||||
}
|
||||
return new HttpSuccess();
|
||||
|
|
|
|||
|
|
@ -75,19 +75,16 @@ export class ProfileEditController extends Controller {
|
|||
);
|
||||
}),
|
||||
)
|
||||
.orderBy("ProfileEdit.createdAt", "DESC")
|
||||
.orderBy("ProfileEdit.createdAt", "DESC");
|
||||
|
||||
if (sortBy) {
|
||||
query = query.orderBy(
|
||||
`ProfileEdit.${sortBy}`,
|
||||
descending ? "DESC" : "ASC"
|
||||
);
|
||||
query = query.orderBy(`ProfileEdit.${sortBy}`, descending ? "DESC" : "ASC");
|
||||
}
|
||||
|
||||
const [getProfileEdit, total] = await query
|
||||
.skip((page - 1) * pageSize)
|
||||
.take(pageSize)
|
||||
.getManyAndCount();
|
||||
.skip((page - 1) * pageSize)
|
||||
.take(pageSize)
|
||||
.getManyAndCount();
|
||||
|
||||
const _data = getProfileEdit.map((item) => ({
|
||||
id: item.id,
|
||||
|
|
@ -153,7 +150,7 @@ export class ProfileEditController extends Controller {
|
|||
data.child1 != undefined && data.child1 != null
|
||||
? data.child1[0] != null
|
||||
? `current_holders.orgChild1Id IN (:...child1)`
|
||||
: `current_holders.orgChild1Id is null`
|
||||
: `current_holders.orgChild1Id is ${data.privilege == "PARENT" ? "not null" : "null"}`
|
||||
: "1=1",
|
||||
{
|
||||
child1: data.child1,
|
||||
|
|
@ -216,26 +213,20 @@ export class ProfileEditController extends Controller {
|
|||
);
|
||||
}),
|
||||
)
|
||||
.orderBy("ProfileEdit.createdAt", "DESC")
|
||||
|
||||
.orderBy("ProfileEdit.createdAt", "DESC");
|
||||
|
||||
if (sortBy) {
|
||||
if(sortBy == "fullname"){
|
||||
query = query.orderBy(
|
||||
`profile.firstName`,
|
||||
descending ? "DESC" : "ASC"
|
||||
);
|
||||
}else{
|
||||
query = query.orderBy(
|
||||
`ProfileEdit.${sortBy}`,
|
||||
descending ? "DESC" : "ASC"
|
||||
);
|
||||
if (sortBy == "fullname") {
|
||||
query = query.orderBy(`profile.firstName`, descending ? "DESC" : "ASC");
|
||||
} else {
|
||||
query = query.orderBy(`ProfileEdit.${sortBy}`, descending ? "DESC" : "ASC");
|
||||
}
|
||||
}
|
||||
|
||||
const [getProfileEdit, total] = await query
|
||||
.skip((page - 1) * pageSize)
|
||||
.take(pageSize)
|
||||
.getManyAndCount();
|
||||
.skip((page - 1) * pageSize)
|
||||
.take(pageSize)
|
||||
.getManyAndCount();
|
||||
|
||||
const _data = getProfileEdit.map((item) => ({
|
||||
id: item.id,
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@ export class ProfileEditEmployeeController extends Controller {
|
|||
.where("orgRevision.orgRevisionIsDraft = false")
|
||||
.andWhere("orgRevision.orgRevisionIsCurrent = true")
|
||||
.getOne();
|
||||
|
||||
|
||||
let query = await AppDataSource.getRepository(ProfileEdit)
|
||||
.createQueryBuilder("ProfileEdit")
|
||||
.leftJoinAndSelect("ProfileEdit.profileEmployee", "profileEmployee")
|
||||
|
|
@ -148,7 +148,7 @@ export class ProfileEditEmployeeController extends Controller {
|
|||
data.child1 != undefined && data.child1 != null
|
||||
? data.child1[0] != null
|
||||
? `current_holders.orgChild1Id IN (:...child1)`
|
||||
: `current_holders.orgChild1Id is null`
|
||||
: `current_holders.orgChild1Id is ${data.privilege == "PARENT" ? "not null" : "null"}`
|
||||
: "1=1",
|
||||
{
|
||||
child1: data.child1,
|
||||
|
|
@ -211,26 +211,20 @@ export class ProfileEditEmployeeController extends Controller {
|
|||
);
|
||||
}),
|
||||
)
|
||||
.orderBy("ProfileEdit.createdAt", "DESC")
|
||||
|
||||
.orderBy("ProfileEdit.createdAt", "DESC");
|
||||
|
||||
if (sortBy) {
|
||||
if(sortBy == "fullname"){
|
||||
query = query.orderBy(
|
||||
`profileEmployee.firstName`,
|
||||
descending ? "DESC" : "ASC"
|
||||
);
|
||||
}else{
|
||||
query = query.orderBy(
|
||||
`ProfileEdit.${sortBy}`,
|
||||
descending ? "DESC" : "ASC"
|
||||
);
|
||||
if (sortBy == "fullname") {
|
||||
query = query.orderBy(`profileEmployee.firstName`, descending ? "DESC" : "ASC");
|
||||
} else {
|
||||
query = query.orderBy(`ProfileEdit.${sortBy}`, descending ? "DESC" : "ASC");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
let [getProfileEdit, total] = await query
|
||||
.skip((page - 1) * pageSize)
|
||||
.take(pageSize)
|
||||
.getManyAndCount();
|
||||
.skip((page - 1) * pageSize)
|
||||
.take(pageSize)
|
||||
.getManyAndCount();
|
||||
|
||||
const _data = getProfileEdit.map((item) => ({
|
||||
id: item.id,
|
||||
|
|
|
|||
|
|
@ -1891,10 +1891,7 @@ export class ProfileEmployeeController extends Controller {
|
|||
citizenIdDigits[10] * 3 +
|
||||
citizenIdDigits[11] * 2;
|
||||
const calStp2 = cal % 11;
|
||||
let chkDigit = 11 - calStp2;
|
||||
if (chkDigit >= 10) {
|
||||
chkDigit = 0;
|
||||
}
|
||||
const chkDigit = (11 - calStp2) % 10;
|
||||
|
||||
if (citizenIdDigits[12] !== chkDigit) {
|
||||
throw new HttpError(HttpStatus.NOT_FOUND, "ข้อมูลรหัสบัตรประจำตัวประชาชนไม่ถูกต้อง");
|
||||
|
|
@ -1983,10 +1980,7 @@ export class ProfileEmployeeController extends Controller {
|
|||
citizenIdDigits[10] * 3 +
|
||||
citizenIdDigits[11] * 2;
|
||||
const calStp2 = cal % 11;
|
||||
let chkDigit = 11 - calStp2;
|
||||
if (chkDigit >= 10) {
|
||||
chkDigit = 0;
|
||||
}
|
||||
const chkDigit = (11 - calStp2) % 10;
|
||||
|
||||
if (citizenIdDigits[12] !== chkDigit) {
|
||||
throw new HttpError(HttpStatus.NOT_FOUND, "ข้อมูลรหัสบัตรประจำตัวประชาชนไม่ถูกต้อง");
|
||||
|
|
@ -2040,12 +2034,15 @@ export class ProfileEmployeeController extends Controller {
|
|||
if (!result) {
|
||||
throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล");
|
||||
}
|
||||
try{
|
||||
try {
|
||||
await new permission().PermissionOrgUserDelete(request, "SYS_REGISTRY_EMP", result.id);
|
||||
await this.informationHistoryRepository.delete({ profileEmployeeId: id });
|
||||
await this.profileRepo.remove(result);
|
||||
} catch {
|
||||
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่สามารถลบข้อมูลได้ เนื่องจากข้อมูลนี้ถูกใช้งานในระบบอื่น");
|
||||
throw new HttpError(
|
||||
HttpStatusCode.NOT_FOUND,
|
||||
"ไม่สามารถลบข้อมูลได้ เนื่องจากข้อมูลนี้ถูกใช้งานในระบบอื่น",
|
||||
);
|
||||
}
|
||||
return new HttpSuccess();
|
||||
}
|
||||
|
|
@ -2843,7 +2840,7 @@ export class ProfileEmployeeController extends Controller {
|
|||
_data.child1 != undefined && _data.child1 != null
|
||||
? _data.child1[0] != null
|
||||
? `current_holders.orgChild1Id IN (:...child1)`
|
||||
: `current_holders.orgChild1Id is null`
|
||||
: `current_holders.orgChild1Id is ${_data.privilege == "PARENT" ? "not null" : "null"}`
|
||||
: "1=1",
|
||||
{
|
||||
child1: _data.child1,
|
||||
|
|
@ -3588,10 +3585,10 @@ export class ProfileEmployeeController extends Controller {
|
|||
nodeDnaId: null,
|
||||
salary: profile ? profile.amount : null,
|
||||
amountSpecial: profile ? profile.amountSpecial : null,
|
||||
posNo: null
|
||||
// root?.orgRootShortName && posMaster?.posMasterNo
|
||||
// ? `${root?.orgRootShortName} ${posMaster?.posMasterNo}`
|
||||
// : "",
|
||||
posNo: null,
|
||||
// root?.orgRootShortName && posMaster?.posMasterNo
|
||||
// ? `${root?.orgRootShortName} ${posMaster?.posMasterNo}`
|
||||
// : "",
|
||||
};
|
||||
if (_profile.child4Id != null) {
|
||||
_profile.node = 4;
|
||||
|
|
@ -3722,7 +3719,7 @@ export class ProfileEmployeeController extends Controller {
|
|||
_data.child1 != undefined && _data.child1 != null
|
||||
? _data.child1[0] != null
|
||||
? `current_holders.orgChild1Id IN (:...child1)`
|
||||
: `current_holders.orgChild1Id is null`
|
||||
: `current_holders.orgChild1Id is ${_data.privilege == "PARENT" ? "not null" : "null"}`
|
||||
: "1=1",
|
||||
{ child1: _data.child1 },
|
||||
)
|
||||
|
|
@ -4280,7 +4277,7 @@ export class ProfileEmployeeController extends Controller {
|
|||
_data.child1 != undefined && _data.child1 != null
|
||||
? _data.child1[0] != null
|
||||
? `current_holders.orgChild1Id IN (:...child1)`
|
||||
: `current_holders.orgChild1Id is null`
|
||||
: `current_holders.orgChild1Id is ${_data.privilege == "PARENT" ? "not null" : "null"}`
|
||||
: "1=1",
|
||||
{
|
||||
child1: _data.child1,
|
||||
|
|
@ -4441,22 +4438,26 @@ export class ProfileEmployeeController extends Controller {
|
|||
.leftJoinAndSelect("current_holders.orgChild4", "orgChild4")
|
||||
.leftJoinAndSelect("current_holders.positions", "positions")
|
||||
.andWhere(
|
||||
new Brackets(qb => {
|
||||
new Brackets((qb) => {
|
||||
qb.where("profileEmployee.position LIKE :keyword", { keyword: `%${body.keyword}%` })
|
||||
.orWhere("posLevel.posLevelName LIKE :keyword", { keyword: `%${body.keyword}%` })
|
||||
.orWhere("posType.posTypeName LIKE :keyword", { keyword: `%${body.keyword}%` })
|
||||
.orWhere("CONCAT(profileEmployee.prefix, profileEmployee.firstName, ' ', profileEmployee.lastName) LIKE :keyword", { keyword: `%${body.keyword}%` });
|
||||
})
|
||||
.orWhere(
|
||||
"CONCAT(profileEmployee.prefix, profileEmployee.firstName, ' ', profileEmployee.lastName) LIKE :keyword",
|
||||
{ keyword: `%${body.keyword}%` },
|
||||
);
|
||||
}),
|
||||
)
|
||||
.andWhere("profileEmployee.isLeave = false")
|
||||
.andWhere("current_holders.orgRevisionId = :orgRevisionId", { orgRevisionId: orgRevisionActive.id });
|
||||
.andWhere("current_holders.orgRevisionId = :orgRevisionId", {
|
||||
orgRevisionId: orgRevisionActive.id,
|
||||
});
|
||||
|
||||
if (body.type) {
|
||||
const typeUpper = body.type.trim().toUpperCase();
|
||||
if (typeUpper === "EMPLOYEE") {
|
||||
query = query.andWhere("profileEmployee.employeeClass = 'PERM'");
|
||||
}
|
||||
else if (typeUpper === "TEMP"){
|
||||
} else if (typeUpper === "TEMP") {
|
||||
query = query.andWhere("profileEmployee.employeeClass = 'TEMP'");
|
||||
}
|
||||
}
|
||||
|
|
@ -4477,9 +4478,10 @@ export class ProfileEmployeeController extends Controller {
|
|||
: item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id);
|
||||
const position =
|
||||
posMaster == null ||
|
||||
item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.positions == null ||
|
||||
item.current_holders?.find((x) => x.orgRevisionId == orgRevisionActive.id)?.positions.length ==
|
||||
0 ||
|
||||
item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.positions ==
|
||||
null ||
|
||||
item.current_holders?.find((x) => x.orgRevisionId == orgRevisionActive.id)?.positions
|
||||
.length == 0 ||
|
||||
item.current_holders
|
||||
.find((x) => x.orgRevisionId == orgRevisionActive.id)
|
||||
?.positions?.find((position) => position.positionIsSelected == true) == null
|
||||
|
|
@ -4492,18 +4494,20 @@ export class ProfileEmployeeController extends Controller {
|
|||
item.current_holders.length == 0
|
||||
? null
|
||||
: item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id) != null &&
|
||||
item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.orgChild4 !=
|
||||
null
|
||||
item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)
|
||||
?.orgChild4 != null
|
||||
? `${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.orgChild4.orgChild4ShortName} ${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.posMasterNo}`
|
||||
: item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id) != null &&
|
||||
item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.orgChild3 !=
|
||||
null
|
||||
item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)
|
||||
?.orgChild3 != null
|
||||
? `${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.orgChild3.orgChild3ShortName} ${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.posMasterNo}`
|
||||
: item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id) != null &&
|
||||
: item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id) !=
|
||||
null &&
|
||||
item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)
|
||||
?.orgChild2 != null
|
||||
? `${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.orgChild2.orgChild2ShortName} ${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.posMasterNo}`
|
||||
: item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id) != null &&
|
||||
: item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id) !=
|
||||
null &&
|
||||
item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)
|
||||
?.orgChild1 != null
|
||||
? `${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.orgChild1.orgChild1ShortName} ${item.current_holders.find((x) => x.orgRevisionId == orgRevisionActive.id)?.posMasterNo}`
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ export class ProfileSalaryTempController extends Controller {
|
|||
_data.child1 != undefined && _data.child1 != null
|
||||
? _data.child1[0] != null
|
||||
? `current_holders.orgChild1Id IN (:...child1)`
|
||||
: `current_holders.orgChild1Id is null`
|
||||
: `current_holders.orgChild1Id is ${_data.privilege == "PARENT" ? "not null" : "null"}`
|
||||
: "1=1",
|
||||
{
|
||||
child1: _data.child1,
|
||||
|
|
@ -322,52 +322,42 @@ export class ProfileSalaryTempController extends Controller {
|
|||
.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)
|
||||
.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("orgChild4.orgChild4ShortName",descending ? "DESC" : "ASC")
|
||||
.addOrderBy("orgChild3.orgChild3ShortName",descending ? "DESC" : "ASC")
|
||||
.addOrderBy("orgChild2.orgChild2ShortName",descending ? "DESC" : "ASC")
|
||||
.addOrderBy("orgChild1.orgChild1ShortName",descending ? "DESC" : "ASC")
|
||||
.addOrderBy("orgRoot.orgRootShortName",descending ? "DESC" : "ASC")
|
||||
.addOrderBy("current_holders.posMasterNo",descending ? "DESC" : "ASC")
|
||||
}else{
|
||||
query = query.orderBy(
|
||||
`profile.${sortBy}`,
|
||||
descending ? "DESC" : "ASC"
|
||||
);
|
||||
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("orgChild4.orgChild4ShortName", descending ? "DESC" : "ASC")
|
||||
.addOrderBy("orgChild3.orgChild3ShortName", descending ? "DESC" : "ASC")
|
||||
.addOrderBy("orgChild2.orgChild2ShortName", descending ? "DESC" : "ASC")
|
||||
.addOrderBy("orgChild1.orgChild1ShortName", descending ? "DESC" : "ASC")
|
||||
.addOrderBy("orgRoot.orgRootShortName", descending ? "DESC" : "ASC")
|
||||
.addOrderBy("current_holders.posMasterNo", 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")
|
||||
} 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();
|
||||
.skip((page - 1) * pageSize)
|
||||
.take(pageSize)
|
||||
.getManyAndCount();
|
||||
|
||||
const data = await Promise.all(
|
||||
record.map((_data) => {
|
||||
|
|
@ -541,7 +531,7 @@ export class ProfileSalaryTempController extends Controller {
|
|||
_data.child1 != undefined && _data.child1 != null
|
||||
? _data.child1[0] != null
|
||||
? `current_holders.orgChild1Id IN (:...child1)`
|
||||
: `current_holders.orgChild1Id is null`
|
||||
: `current_holders.orgChild1Id is ${_data.privilege == "PARENT" ? "not null" : "null"}`
|
||||
: "1=1",
|
||||
{
|
||||
child1: _data.child1,
|
||||
|
|
@ -755,36 +745,24 @@ export class ProfileSalaryTempController extends Controller {
|
|||
.andWhere("current_holders.orgRootId = :rootId", {
|
||||
rootId: rootId,
|
||||
})
|
||||
.orderBy("current_holders.posMasterNo", "ASC")
|
||||
// .orderBy(`${sortBy}`, sort)
|
||||
.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"
|
||||
);
|
||||
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();
|
||||
.skip((page - 1) * pageSize)
|
||||
.take(pageSize)
|
||||
.getManyAndCount();
|
||||
|
||||
const data = await Promise.all(
|
||||
record.map((_data) => {
|
||||
|
|
@ -1192,7 +1170,7 @@ export class ProfileSalaryTempController extends Controller {
|
|||
order: { order: "DESC" },
|
||||
});
|
||||
if (salary) {
|
||||
dest_item = salary.order+1;
|
||||
dest_item = salary.order + 1;
|
||||
}
|
||||
// const profile = await this.profileRepo.findOneBy({ id: body.profileId });
|
||||
// if (!profile) {
|
||||
|
|
@ -1210,7 +1188,7 @@ export class ProfileSalaryTempController extends Controller {
|
|||
order: { order: "DESC" },
|
||||
});
|
||||
if (salary) {
|
||||
dest_item = salary.order+1;
|
||||
dest_item = salary.order + 1;
|
||||
}
|
||||
// const profile = await this.profileEmployeeRepo.findOneBy({ id: body.profileId });
|
||||
// if (!profile) {
|
||||
|
|
|
|||
|
|
@ -47,8 +47,8 @@ export const AppDataSource = new DataSource({
|
|||
logging: true,
|
||||
// timezone: "Z",
|
||||
entities:
|
||||
process.env.NODE_ENV !== "production"
|
||||
? ["src/entities/**/*.ts"]
|
||||
process.env.NODE_ENV !== "production"
|
||||
? ["src/entities/**/*.ts"]
|
||||
: ["dist/entities/**/*{.ts,.js}"],
|
||||
migrations:
|
||||
process.env.NODE_ENV !== "production"
|
||||
|
|
|
|||
|
|
@ -17,6 +17,21 @@ export class EducationLevel extends EntityBase {
|
|||
default: null,
|
||||
})
|
||||
rank: number;
|
||||
|
||||
@Column({
|
||||
nullable: true,
|
||||
comment: "ขีดจำกัดวุฒิการศึกษา",
|
||||
length: 50,
|
||||
default: null,
|
||||
})
|
||||
educationLevel?: string;
|
||||
|
||||
@Column({
|
||||
nullable: true,
|
||||
comment: "วุฒิการศึกษาสูงสุด",
|
||||
default: null,
|
||||
})
|
||||
isHigh?: boolean;
|
||||
}
|
||||
|
||||
export class CreateEducationLevel {
|
||||
|
|
@ -25,6 +40,12 @@ export class CreateEducationLevel {
|
|||
|
||||
@Column()
|
||||
rank: number;
|
||||
|
||||
@Column()
|
||||
educationLevel?: string;
|
||||
|
||||
@Column()
|
||||
isHigh?: boolean;
|
||||
}
|
||||
|
||||
export type UpdateEducationLevel = Partial<CreateEducationLevel>;
|
||||
|
|
|
|||
|
|
@ -78,14 +78,18 @@ import { ViewColumn, ViewEntity } from "typeorm";
|
|||
LEFT JOIN
|
||||
posExecutive ON position.posExecutiveId = posExecutive.id
|
||||
LEFT JOIN (
|
||||
SELECT *
|
||||
FROM profileDiscipline pd1
|
||||
WHERE pd1.date = (
|
||||
SELECT MAX(pd2.date)
|
||||
FROM profileDiscipline pd2
|
||||
WHERE pd2.profileId = pd1.profileId
|
||||
)
|
||||
) AS profileDiscipline ON profileDiscipline.profileId = profile.id
|
||||
SELECT *
|
||||
FROM (
|
||||
SELECT
|
||||
pd.*,
|
||||
ROW_NUMBER() OVER (
|
||||
PARTITION BY profileId
|
||||
ORDER BY date DESC, id DESC
|
||||
) AS rn
|
||||
FROM profileDiscipline pd
|
||||
) t
|
||||
WHERE rn = 1
|
||||
) AS profileDiscipline ON profileDiscipline.profileId = profile.id
|
||||
LEFT JOIN (
|
||||
SELECT pl1.*
|
||||
FROM profileLeave pl1
|
||||
|
|
|
|||
|
|
@ -275,10 +275,7 @@ class Extension {
|
|||
citizenIdDigits[10] * 3 +
|
||||
citizenIdDigits[11] * 2;
|
||||
const calStp2 = cal % 11;
|
||||
let chkDigit = 11 - calStp2;
|
||||
if (chkDigit >= 10) {
|
||||
chkDigit = 0;
|
||||
}
|
||||
const chkDigit = (11 - calStp2) % 10;
|
||||
|
||||
// if (citizenIdDigits[12] !== chkDigit) {
|
||||
// throw new HttpError(HttpStatus.NOT_FOUND, "ข้อมูลรหัสบัตรประจำตัวประชาชนไม่ถูกต้อง");
|
||||
|
|
|
|||
|
|
@ -97,7 +97,7 @@ class CheckAuth {
|
|||
} else if (privilege == "PARENT") {
|
||||
data = {
|
||||
root: [x.orgRootId],
|
||||
child1: null,
|
||||
child1: [null],
|
||||
child2: null,
|
||||
child3: null,
|
||||
child4: null,
|
||||
|
|
|
|||
|
|
@ -259,7 +259,13 @@ export async function removeProfileInOrganize(profileId: string, type: string) {
|
|||
.andWhere("orgRevision.orgRevisionIsCurrent = true")
|
||||
.getOne();
|
||||
|
||||
if (!currentRevision) {
|
||||
const draftRevision = await AppDataSource.getRepository(OrgRevision)
|
||||
.createQueryBuilder("orgRevision")
|
||||
.where("orgRevision.orgRevisionIsDraft = true")
|
||||
.andWhere("orgRevision.orgRevisionIsCurrent = false")
|
||||
.getOne();
|
||||
|
||||
if (!currentRevision && !draftRevision) {
|
||||
return;
|
||||
}
|
||||
if (type === "OFFICER") {
|
||||
|
|
@ -276,7 +282,20 @@ export async function removeProfileInOrganize(profileId: string, type: string) {
|
|||
.where("id = :id", { id: findProfileInposMaster?.id })
|
||||
.execute();
|
||||
|
||||
if (!findProfileInposMaster) {
|
||||
const findProfileInposMasterDraft = await AppDataSource.getRepository(PosMaster)
|
||||
.createQueryBuilder("posMaster")
|
||||
.where("posMaster.orgRevisionId = :orgRevisionId", { orgRevisionId: draftRevision?.id })
|
||||
.andWhere("posMaster.next_holderId = :profileId", { profileId })
|
||||
.getOne();
|
||||
|
||||
await AppDataSource.getRepository(PosMaster)
|
||||
.createQueryBuilder()
|
||||
.update(PosMaster)
|
||||
.set({ next_holderId: null })
|
||||
.where("id = :id", { id: findProfileInposMasterDraft?.id })
|
||||
.execute();
|
||||
|
||||
if (!findProfileInposMaster && !findProfileInposMasterDraft) {
|
||||
return;
|
||||
}
|
||||
const findPosition = await AppDataSource.getRepository(Position)
|
||||
|
|
|
|||
|
|
@ -27,6 +27,14 @@ export async function expressAuthentication(
|
|||
securityName: string,
|
||||
_scopes?: string[],
|
||||
) {
|
||||
// // API_KEY bypass logic (support api_key, x-api-key, apikey)
|
||||
// const apiKeyHeader =
|
||||
// request.headers["api-key"] || request.headers["x-api-key"] || request.headers["apikey"];
|
||||
// if (apiKeyHeader !== undefined) {
|
||||
// if (apiKeyHeader === process.env.API_KEY) {
|
||||
// return { preferred_username: "api_key_bypass", apiKeyBypass: true };
|
||||
// }
|
||||
// }
|
||||
if (process.env.NODE_ENV !== "production" && process.env.AUTH_BYPASS) {
|
||||
return { preferred_username: "bypassed" };
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,24 +0,0 @@
|
|||
import { MigrationInterface, QueryRunner } from "typeorm";
|
||||
|
||||
export class UpdateTableApiKeyAddAccessType1761330464755 implements MigrationInterface {
|
||||
name = 'UpdateTableApiKeyAddAccessType1761330464755'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE \`apiKey\` ADD \`accessType\` varchar(40) NULL COMMENT 'accessType'`);
|
||||
await queryRunner.query(`ALTER TABLE \`apiKey\` ADD \`dnaRootId\` varchar(40) NULL COMMENT 'dnaRootId'`);
|
||||
await queryRunner.query(`ALTER TABLE \`apiKey\` ADD \`dnaChild1Id\` varchar(40) NULL COMMENT 'dnaChild1Id'`);
|
||||
await queryRunner.query(`ALTER TABLE \`apiKey\` ADD \`dnaChild2Id\` varchar(40) NULL COMMENT 'dnaChild2Id'`);
|
||||
await queryRunner.query(`ALTER TABLE \`apiKey\` ADD \`dnaChild3Id\` varchar(40) NULL COMMENT 'dnaChild3Id'`);
|
||||
await queryRunner.query(`ALTER TABLE \`apiKey\` ADD \`dnaChild4Id\` varchar(40) NULL COMMENT 'dnaChild4Id'`);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE \`apiKey\` DROP COLUMN \`dnaChild4Id\``);
|
||||
await queryRunner.query(`ALTER TABLE \`apiKey\` DROP COLUMN \`dnaChild3Id\``);
|
||||
await queryRunner.query(`ALTER TABLE \`apiKey\` DROP COLUMN \`dnaChild2Id\``);
|
||||
await queryRunner.query(`ALTER TABLE \`apiKey\` DROP COLUMN \`dnaChild1Id\``);
|
||||
await queryRunner.query(`ALTER TABLE \`apiKey\` DROP COLUMN \`dnaRootId\``);
|
||||
await queryRunner.query(`ALTER TABLE \`apiKey\` DROP COLUMN \`accessType\``);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
import { MigrationInterface, QueryRunner } from "typeorm";
|
||||
|
||||
export class UpdateSizeKeyapiField1762159481993 implements MigrationInterface {
|
||||
name = 'UpdateSizeKeyapiField1762159481993'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE \`apiKey\` DROP COLUMN \`keyApi\``);
|
||||
await queryRunner.query(`ALTER TABLE \`apiKey\` ADD \`keyApi\` longtext NULL COMMENT 'keyApi'`);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE \`apiKey\` DROP COLUMN \`keyApi\``);
|
||||
await queryRunner.query(`ALTER TABLE \`apiKey\` ADD \`keyApi\` varchar(255) NULL COMMENT 'keyApi'`);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
import { MigrationInterface, QueryRunner } from "typeorm";
|
||||
|
||||
export class UpdateSizePlaceField1762159824907 implements MigrationInterface {
|
||||
name = 'UpdateSizePlaceField1762159824907'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE \`profileTraining\` DROP COLUMN \`place\``);
|
||||
await queryRunner.query(`ALTER TABLE \`profileTraining\` ADD \`place\` longtext NULL COMMENT 'สถานที่ฝึกอบรม/ดูงาน'`);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE \`profileTraining\` DROP COLUMN \`place\``);
|
||||
await queryRunner.query(`ALTER TABLE \`profileTraining\` ADD \`place\` varchar(200) NULL COMMENT 'สถานที่ฝึกอบรม/ดูงาน '`);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
import { MigrationInterface, QueryRunner } from "typeorm";
|
||||
|
||||
export class AddFieldIsAdminVisibledTableAuthRole1762165716863 implements MigrationInterface {
|
||||
name = 'AddFieldIsAdminVisibledTableAuthRole1762165716863'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE \`authRole\` ADD \`isAdminVisibled\` tinyint NULL COMMENT 'ข้อมูลที่ role admin สามารถเห็นได้'`);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE \`authRole\` DROP COLUMN \`isAdminVisibled\``);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
import { MigrationInterface, QueryRunner } from "typeorm";
|
||||
|
||||
export class UpdateSizeHeaderApiAndTokenApiFieldApiHistoryTable1762243747843 implements MigrationInterface {
|
||||
name = 'UpdateSizeHeaderApiAndTokenApiFieldApiHistoryTable1762243747843'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE \`apiHistory\` DROP COLUMN \`headerApi\``);
|
||||
await queryRunner.query(`ALTER TABLE \`apiHistory\` ADD \`headerApi\` longtext NULL COMMENT 'header'`);
|
||||
await queryRunner.query(`ALTER TABLE \`apiHistory\` DROP COLUMN \`tokenApi\``);
|
||||
await queryRunner.query(`ALTER TABLE \`apiHistory\` ADD \`tokenApi\` longtext NULL COMMENT 'token'`);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE \`apiHistory\` DROP COLUMN \`tokenApi\``);
|
||||
await queryRunner.query(`ALTER TABLE \`apiHistory\` ADD \`tokenApi\` varchar(255) NULL COMMENT 'token'`);
|
||||
await queryRunner.query(`ALTER TABLE \`apiHistory\` DROP COLUMN \`headerApi\``);
|
||||
await queryRunner.query(`ALTER TABLE \`apiHistory\` ADD \`headerApi\` varchar(255) NULL COMMENT 'header'`);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,292 +0,0 @@
|
|||
import { MigrationInterface, QueryRunner } from "typeorm";
|
||||
|
||||
export class UpdateViewDirectiorAndViewDirectiorActing1762489522691 implements MigrationInterface {
|
||||
name = 'UpdateViewDirectiorAndViewDirectiorActing1762489522691'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`DELETE FROM \`hrms_organization\`.\`typeorm_metadata\` WHERE \`type\` = ? AND \`name\` = ? AND \`schema\` = ?`, ["VIEW", "view_director_acting", "hrms_organization"]);
|
||||
await queryRunner.query(`DROP VIEW IF EXISTS \`view_director_acting\``);
|
||||
// await queryRunner.query(`INSERT INTO \`hrms_organization\`.\`typeorm_metadata\`(\`database\`, \`schema\`, \`table\`, \`type\`, \`name\`, \`value\`) VALUES (DEFAULT, ?, DEFAULT, ?, ?, ?)`, ["hrms_organization", "VIEW", "view_director", "SELECT \n profile.id AS Id,\n profile.prefix AS prefix,\n profile.firstName AS firstName,\n profile.lastName AS lastName,\n profile.citizenId AS citizenId,\n profile.position AS position,\n CONCAT(\n CASE \n WHEN posMaster.orgChild1Id IS NULL THEN orgRoot.orgRootShortName\n WHEN posMaster.orgChild2Id IS NULL THEN orgChild1.orgChild1ShortName\n WHEN posMaster.orgChild3Id IS NULL THEN orgChild2.orgChild2ShortName\n WHEN posMaster.orgChild4Id IS NULL THEN orgChild3.orgChild3ShortName\n ELSE orgChild4.orgChild4ShortName\n END,\n posMaster.posMasterNo\n ) AS posNo,\n posMaster.isDirector AS isDirector,\n posLevel.posLevelName AS posLevel,\n posType.posTypeName AS posType,\n posExecutive.posExecutiveName AS posExecutiveName,\n orgRoot.isDeputy AS isDeputy,\n orgChild1.isOfficer AS isOfficer,\n posMaster.orgRevisionId AS orgRevisionId,\n posMaster.orgRootId AS orgRootId,\n posMaster.orgChild1Id AS orgChild1Id,\n posMaster.orgChild2Id AS orgChild2Id,\n posMaster.orgChild3Id AS orgChild3Id,\n posMaster.orgChild4Id AS orgChild4Id,\n CONCAT(posMaster.id, profile.id) AS `key`,\n (\n SELECT hrms_organization.acting.actFullNameKeycloakId\n FROM hrms_organization.view_director_acting acting\n WHERE ((hrms_organization.acting.Id = hrms_organization.posMaster.current_holderId)\n AND (hrms_organization.acting.orgRootId = hrms_organization.posMaster.orgRootId)\n AND ((hrms_organization.acting.orgChild1Id = hrms_organization.posMaster.orgChild1Id)\n OR (hrms_organization.acting.orgChild1Id IS NULL))\n AND ((hrms_organization.acting.orgChild2Id = hrms_organization.posMaster.orgChild2Id)\n OR (hrms_organization.acting.orgChild2Id IS NULL))\n AND ((hrms_organization.acting.orgChild3Id = hrms_organization.posMaster.orgChild3Id)\n OR (hrms_organization.acting.orgChild3Id IS NULL))\n AND ((hrms_organization.acting.orgChild4Id = hrms_organization.posMaster.orgChild4Id)\n OR (hrms_organization.acting.orgChild4Id IS NULL)))\n LIMIT 1\n ) AS actFullNameKeycloakId,\n (\n SELECT actFullNameId \n FROM view_director_acting AS acting\n WHERE acting.Id = posMaster.current_holderId \n AND acting.orgRootId = posMaster.orgRootId \n AND (acting.orgChild1Id = posMaster.orgChild1Id OR acting.orgChild1Id IS NULL)\n AND (acting.orgChild2Id = posMaster.orgChild2Id OR acting.orgChild2Id IS NULL)\n AND (acting.orgChild3Id = posMaster.orgChild3Id OR acting.orgChild3Id IS NULL)\n AND (acting.orgChild4Id = posMaster.orgChild4Id OR acting.orgChild4Id IS NULL)\n LIMIT 1\n ) AS actFullNameId,\n (\n SELECT actFullName \n FROM view_director_acting AS acting\n WHERE acting.Id = posMaster.current_holderId \n AND acting.orgRootId = posMaster.orgRootId \n AND (acting.orgChild1Id = posMaster.orgChild1Id OR acting.orgChild1Id IS NULL)\n AND (acting.orgChild2Id = posMaster.orgChild2Id OR acting.orgChild2Id IS NULL)\n AND (acting.orgChild3Id = posMaster.orgChild3Id OR acting.orgChild3Id IS NULL)\n AND (acting.orgChild4Id = posMaster.orgChild4Id OR acting.orgChild4Id IS NULL)\n LIMIT 1\n ) AS actFullName\n FROM\n posMaster\n JOIN profile ON posMaster.current_holderId = profile.id\n LEFT JOIN orgRoot ON posMaster.orgRootId = orgRoot.id\n LEFT JOIN orgChild1 ON posMaster.orgChild1Id = orgChild1.id\n LEFT JOIN orgChild2 ON posMaster.orgChild2Id = orgChild2.id\n LEFT JOIN orgChild3 ON posMaster.orgChild3Id = orgChild3.id\n LEFT JOIN orgChild4 ON posMaster.orgChild4Id = orgChild4.id\n JOIN posLevel ON profile.posLevelId = posLevel.id\n JOIN posType ON profile.posTypeId = posType.id\n LEFT JOIN position ON posMaster.id = position.posMasterId\n LEFT JOIN posExecutive ON position.posExecutiveId = posExecutive.id\n INNER JOIN orgRevision ON posMaster.orgRevisionId = orgRevision.id\n WHERE\n (position.positionIsSelected = TRUE)\n AND (orgRevision.orgRevisionIsCurrent = TRUE\n AND orgRevision.orgRevisionIsDraft = FALSE)"]);
|
||||
await queryRunner.query(`CREATE VIEW \`view_director_acting\` AS SELECT
|
||||
\`profileChild\`.\`id\` AS \`Id\`,
|
||||
\`profileChild\`.\`prefix\` AS \`prefix\`,
|
||||
\`profileChild\`.\`firstName\` AS \`firstName\`,
|
||||
\`profileChild\`.\`lastName\` AS \`lastName\`,
|
||||
\`profileChild\`.\`citizenId\` AS \`citizenId\`,
|
||||
\`profileChild\`.\`position\` AS \`position\`,
|
||||
\`profile\`.\`isProbation\` AS \`isProbation\`,
|
||||
CONCAT((CASE
|
||||
WHEN (\`posMaster\`.\`orgChild1Id\` IS NULL) THEN \`orgRootChild\`.\`orgRootShortName\`
|
||||
WHEN (\`posMaster\`.\`orgChild2Id\` IS NULL) THEN \`orgChild1Child\`.\`orgChild1ShortName\`
|
||||
WHEN (\`posMaster\`.\`orgChild3Id\` IS NULL) THEN \`orgChild2Child\`.\`orgChild2ShortName\`
|
||||
WHEN (\`posMaster\`.\`orgChild4Id\` IS NULL) THEN \`orgChild3Child\`.\`orgChild3ShortName\`
|
||||
ELSE \`orgChild4Child\`.\`orgChild4ShortName\`
|
||||
END),
|
||||
\`posMaster\`.\`posMasterNo\`) AS \`posNo\`,
|
||||
\`posMasterChild\`.\`isDirector\` AS \`isDirectorChild\`,
|
||||
\`posMaster\`.\`isDirector\` AS \`isDirector\`,
|
||||
\`posLevel\`.\`posLevelName\` AS \`posLevel\`,
|
||||
\`posType\`.\`posTypeName\` AS \`posType\`,
|
||||
\`posExecutive\`.\`posExecutiveName\` AS \`posExecutiveName\`,
|
||||
\`orgRoot\`.\`isDeputy\` AS \`isDeputy\`,
|
||||
\`orgChild1\`.\`isOfficer\` AS \`isOfficer\`,
|
||||
\`posMaster\`.\`orgRevisionId\` AS \`orgRevisionId\`,
|
||||
\`posMaster\`.\`orgRootId\` AS \`orgRootId\`,
|
||||
\`posMaster\`.\`orgChild1Id\` AS \`orgChild1Id\`,
|
||||
\`posMaster\`.\`orgChild2Id\` AS \`orgChild2Id\`,
|
||||
\`posMaster\`.\`orgChild3Id\` AS \`orgChild3Id\`,
|
||||
\`posMaster\`.\`orgChild4Id\` AS \`orgChild4Id\`,
|
||||
CONCAT(\`hrms_organization\`.\`profile\`.\`keycloak\`) AS \`actFullNameKeycloakId\`,
|
||||
CONCAT(\`posMaster\`.\`id\`, \`profileChild\`.\`id\`) AS \`key\`,
|
||||
\`profile\`.\`id\` AS \`actFullNameId\`,
|
||||
CONCAT(\`profile\`.\`prefix\`,
|
||||
\`profile\`.\`firstName\`,
|
||||
' ',
|
||||
\`profile\`.\`lastName\`) AS \`actFullName\`
|
||||
FROM
|
||||
(((((((((((((((\`posMasterAct\`
|
||||
JOIN \`posMaster\` \`posMasterChild\` ON ((\`posMasterAct\`.\`posMasterChildId\` = \`posMasterChild\`.\`id\`)))
|
||||
JOIN \`profile\` \`profileChild\` ON ((\`posMasterChild\`.\`current_holderId\` = \`profileChild\`.\`id\`)))
|
||||
LEFT JOIN \`orgRoot\` \`orgRootChild\` ON ((\`posMasterChild\`.\`orgRootId\` = \`orgRootChild\`.\`id\`)))
|
||||
LEFT JOIN \`orgChild1\` \`orgChild1Child\` ON ((\`posMasterChild\`.\`orgChild1Id\` = \`orgChild1Child\`.\`id\`)))
|
||||
LEFT JOIN \`orgChild2\` \`orgChild2Child\` ON ((\`posMasterChild\`.\`orgChild2Id\` = \`orgChild2Child\`.\`id\`)))
|
||||
LEFT JOIN \`orgChild3\` \`orgChild3Child\` ON ((\`posMasterChild\`.\`orgChild3Id\` = \`orgChild3Child\`.\`id\`)))
|
||||
LEFT JOIN \`orgChild4\` \`orgChild4Child\` ON ((\`posMasterChild\`.\`orgChild4Id\` = \`orgChild4Child\`.\`id\`)))
|
||||
JOIN \`posLevel\` ON ((\`profileChild\`.\`posLevelId\` = \`posLevel\`.\`id\`)))
|
||||
JOIN \`posType\` ON ((\`profileChild\`.\`posTypeId\` = \`posType\`.\`id\`)))
|
||||
JOIN \`posMaster\` ON ((\`posMasterAct\`.\`posMasterId\` = \`posMaster\`.\`id\`)))
|
||||
LEFT JOIN \`orgRoot\` ON ((\`posMaster\`.\`orgRootId\` = \`orgRoot\`.\`id\`)))
|
||||
LEFT JOIN \`orgChild1\` ON ((\`posMaster\`.\`orgChild1Id\` = \`orgChild1\`.\`id\`)))
|
||||
JOIN \`profile\` ON ((\`posMaster\`.\`current_holderId\` = \`profile\`.\`id\`)))
|
||||
LEFT JOIN \`position\` ON ((\`posMasterChild\`.\`id\` = \`position\`.\`posMasterId\`)))
|
||||
LEFT JOIN \`posExecutive\` ON ((\`position\`.\`posExecutiveId\` = \`posExecutive\`.\`id\`)))
|
||||
WHERE
|
||||
(\`position\`.\`positionIsSelected\` = TRUE)`);
|
||||
|
||||
await queryRunner.query(`DELETE FROM \`hrms_organization\`.\`typeorm_metadata\` WHERE \`type\` = ? AND \`name\` = ? AND \`schema\` = ?`, ["VIEW", "view_director", "hrms_organization"]);
|
||||
await queryRunner.query(`DROP VIEW IF EXISTS \`view_director\``);
|
||||
// await queryRunner.query(`INSERT INTO \`hrms_organization\`.\`typeorm_metadata\`(\`database\`, \`schema\`, \`table\`, \`type\`, \`name\`, \`value\`) VALUES (DEFAULT, ?, DEFAULT, ?, ?, ?)`, ["hrms_organization", "VIEW", "view_employee_pos_master", "SELECT \n employeePosMaster.id,\n employeePosMaster.posMasterNoPrefix,\n employeePosMaster.posMasterNo,\n employeePosMaster.posMasterNoSuffix,\n employeePosMaster.orgRevisionId,\n employeePosMaster.orgRootId,\n employeePosMaster.orgChild1Id,\n employeePosMaster.orgChild2Id,\n employeePosMaster.orgChild3Id,\n employeePosMaster.orgChild4Id,\n employeePosMaster.current_holderId,\n profileEmployee.id as profileId,\n profileEmployee.prefix,\n profileEmployee.firstName,\n profileEmployee.lastName,\n profileEmployee.citizenId,\n profileEmployee.position,\n profileEmployee.amount,\n profileEmployee.dateRetire,\n profileEmployee.birthDate,\n profileEmployee.salaryLevel,\n profileEmployee.group,\n orgRoot.id as rootId,\n orgRoot.orgRootShortName,\n orgRoot.orgRootOrder,\n orgRoot.orgRootName,\n orgChild1.id as child1Id,\n orgChild1.orgChild1ShortName,\n orgChild1.orgChild1Order,\n orgChild1.orgChild1Name,\n orgChild2.id as child2Id,\n orgChild2.orgChild2ShortName,\n orgChild2.orgChild2Order,\n orgChild2.orgChild2Name,\n orgChild3.id as child3Id,\n orgChild3.orgChild3ShortName,\n orgChild3.orgChild3Order,\n orgChild3.orgChild3Name,\n orgChild4.id as child4Id,\n orgChild4.orgChild4ShortName,\n orgChild4.orgChild4Order,\n orgChild4.orgChild4Name,\n position.id as positionId,\n position.positionIsSelected,\n position.posExecutiveId as positionPosExecutiveId,\n position.isSpecial,\n posExecutive.id as posExecutiveId,\n posExecutive.posExecutiveName,\n profileDiscipline.id as profileDisciplineId,\n profileDiscipline.date as disCriplineDate,\n profileLeave.id as profileLeaveId,\n profileAssessment.id as profileAssessmentId,\n profileAssessment.pointSum,\n employeePosLevel.id as posLevelId,\n employeePosLevel.posLevelName,\n\temployeePosType.id as posTypeId,\n employeePosType.posTypeName,\n employeePosType.posTypeShortName\n FROM \n employeePosMaster\n LEFT JOIN \n profileEmployee ON employeePosMaster.current_holderId = profileEmployee.id \n LEFT JOIN \n orgRoot ON employeePosMaster.orgRootId = orgRoot.id\n LEFT JOIN \n orgChild1 ON employeePosMaster.orgChild1Id = orgChild1.id\n LEFT JOIN \n orgChild2 ON employeePosMaster.orgChild2Id = orgChild2.id\n LEFT JOIN \n orgChild3 ON employeePosMaster.orgChild3Id = orgChild3.id\n LEFT JOIN \n orgChild4 ON employeePosMaster.orgChild4Id = orgChild4.id\n LEFT JOIN \n position ON employeePosMaster.id = position.posMasterId\n LEFT JOIN \n posExecutive ON position.posExecutiveId = posExecutive.id\n LEFT JOIN (\n SELECT *\n FROM profileDisciplineEmployee pd1\n WHERE pd1.date = (\n SELECT MAX(pd2.date)\n FROM profileDisciplineEmployee pd2\n WHERE pd2.profileId = pd1.profileId\n )\n ) AS profileDiscipline ON profileDiscipline.profileId = profileEmployee.id\n LEFT JOIN (\n SELECT pl1.*\n FROM profileLeave pl1\n INNER JOIN (\n SELECT profileId, MAX(createdAt) AS maxDate\n FROM profileLeave\n GROUP BY profileId\n ) pl2 ON pl1.profileId = pl2.profileId\n AND pl1.createdAt = pl2.maxDate\n ) AS profileLeave ON profileLeave.profileId = employeePosMaster.current_holderId\n LEFT JOIN (\n SELECT pa1.*\n FROM profileAssessment pa1\n INNER JOIN (\n SELECT profileId, MAX(createdAt) AS maxDate\n FROM profileAssessment\n GROUP BY profileId\n ) pa2 ON pa1.profileId = pa2.profileId\n AND pa1.createdAt = pa2.maxDate\n ) AS profileAssessment \n ON profileAssessment.profileId = profileEmployee.id\n LEFT JOIN \n employeePosLevel ON profileEmployee.posLevelId = employeePosLevel.id\n LEFT JOIN \n employeePosType ON profileEmployee.posTypeId = employeePosType.id\n WHERE \t\n employeePosMaster.current_holderId IS NOT NULL\n ORDER BY \n profileEmployee.citizenId ASC"]);
|
||||
await queryRunner.query(`CREATE VIEW \`view_director\` AS SELECT
|
||||
profile.id AS Id,
|
||||
profile.prefix AS prefix,
|
||||
profile.firstName AS firstName,
|
||||
profile.lastName AS lastName,
|
||||
profile.citizenId AS citizenId,
|
||||
profile.position AS position,
|
||||
profile.keycloak AS keycloakId,
|
||||
profile.isProbation AS isProbation,
|
||||
CONCAT(
|
||||
CASE
|
||||
WHEN posMaster.orgChild1Id IS NULL THEN orgRoot.orgRootShortName
|
||||
WHEN posMaster.orgChild2Id IS NULL THEN orgChild1.orgChild1ShortName
|
||||
WHEN posMaster.orgChild3Id IS NULL THEN orgChild2.orgChild2ShortName
|
||||
WHEN posMaster.orgChild4Id IS NULL THEN orgChild3.orgChild3ShortName
|
||||
ELSE orgChild4.orgChild4ShortName
|
||||
END,
|
||||
posMaster.posMasterNo
|
||||
) AS posNo,
|
||||
posMaster.isDirector AS isDirector,
|
||||
posLevel.posLevelName AS posLevel,
|
||||
posType.posTypeName AS posType,
|
||||
posExecutive.posExecutiveName AS posExecutiveName,
|
||||
orgRoot.isDeputy AS isDeputy,
|
||||
orgChild1.isOfficer AS isOfficer,
|
||||
posMaster.orgRevisionId AS orgRevisionId,
|
||||
posMaster.orgRootId AS orgRootId,
|
||||
posMaster.orgChild1Id AS orgChild1Id,
|
||||
posMaster.orgChild2Id AS orgChild2Id,
|
||||
posMaster.orgChild3Id AS orgChild3Id,
|
||||
posMaster.orgChild4Id AS orgChild4Id,
|
||||
CONCAT(posMaster.id, profile.id) AS \`key\`,
|
||||
(
|
||||
SELECT hrms_organization.acting.actFullNameKeycloakId
|
||||
FROM hrms_organization.view_director_acting acting
|
||||
WHERE ((hrms_organization.acting.Id = hrms_organization.posMaster.current_holderId)
|
||||
AND (hrms_organization.acting.orgRootId = hrms_organization.posMaster.orgRootId)
|
||||
AND ((hrms_organization.acting.orgChild1Id = hrms_organization.posMaster.orgChild1Id)
|
||||
OR (hrms_organization.acting.orgChild1Id IS NULL))
|
||||
AND ((hrms_organization.acting.orgChild2Id = hrms_organization.posMaster.orgChild2Id)
|
||||
OR (hrms_organization.acting.orgChild2Id IS NULL))
|
||||
AND ((hrms_organization.acting.orgChild3Id = hrms_organization.posMaster.orgChild3Id)
|
||||
OR (hrms_organization.acting.orgChild3Id IS NULL))
|
||||
AND ((hrms_organization.acting.orgChild4Id = hrms_organization.posMaster.orgChild4Id)
|
||||
OR (hrms_organization.acting.orgChild4Id IS NULL)))
|
||||
LIMIT 1
|
||||
) AS actFullNameKeycloakId,
|
||||
(
|
||||
SELECT actFullNameId
|
||||
FROM view_director_acting AS acting
|
||||
WHERE acting.Id = posMaster.current_holderId
|
||||
AND acting.orgRootId = posMaster.orgRootId
|
||||
AND (acting.orgChild1Id = posMaster.orgChild1Id OR acting.orgChild1Id IS NULL)
|
||||
AND (acting.orgChild2Id = posMaster.orgChild2Id OR acting.orgChild2Id IS NULL)
|
||||
AND (acting.orgChild3Id = posMaster.orgChild3Id OR acting.orgChild3Id IS NULL)
|
||||
AND (acting.orgChild4Id = posMaster.orgChild4Id OR acting.orgChild4Id IS NULL)
|
||||
LIMIT 1
|
||||
) AS actFullNameId,
|
||||
(
|
||||
SELECT actFullName
|
||||
FROM view_director_acting AS acting
|
||||
WHERE acting.Id = posMaster.current_holderId
|
||||
AND acting.orgRootId = posMaster.orgRootId
|
||||
AND (acting.orgChild1Id = posMaster.orgChild1Id OR acting.orgChild1Id IS NULL)
|
||||
AND (acting.orgChild2Id = posMaster.orgChild2Id OR acting.orgChild2Id IS NULL)
|
||||
AND (acting.orgChild3Id = posMaster.orgChild3Id OR acting.orgChild3Id IS NULL)
|
||||
AND (acting.orgChild4Id = posMaster.orgChild4Id OR acting.orgChild4Id IS NULL)
|
||||
LIMIT 1
|
||||
) AS actFullName
|
||||
FROM
|
||||
posMaster
|
||||
JOIN profile ON posMaster.current_holderId = profile.id
|
||||
LEFT JOIN orgRoot ON posMaster.orgRootId = orgRoot.id
|
||||
LEFT JOIN orgChild1 ON posMaster.orgChild1Id = orgChild1.id
|
||||
LEFT JOIN orgChild2 ON posMaster.orgChild2Id = orgChild2.id
|
||||
LEFT JOIN orgChild3 ON posMaster.orgChild3Id = orgChild3.id
|
||||
LEFT JOIN orgChild4 ON posMaster.orgChild4Id = orgChild4.id
|
||||
JOIN posLevel ON profile.posLevelId = posLevel.id
|
||||
JOIN posType ON profile.posTypeId = posType.id
|
||||
LEFT JOIN position ON posMaster.id = position.posMasterId
|
||||
LEFT JOIN posExecutive ON position.posExecutiveId = posExecutive.id
|
||||
INNER JOIN orgRevision ON posMaster.orgRevisionId = orgRevision.id
|
||||
WHERE
|
||||
(position.positionIsSelected = TRUE)
|
||||
AND (orgRevision.orgRevisionIsCurrent = TRUE
|
||||
AND orgRevision.orgRevisionIsDraft = FALSE)`);
|
||||
|
||||
await queryRunner.query(`INSERT INTO \`hrms_organization\`.\`typeorm_metadata\`(\`database\`, \`schema\`, \`table\`, \`type\`, \`name\`, \`value\`) VALUES (DEFAULT, ?, DEFAULT, ?, ?, ?)`, ["hrms_organization", "VIEW", "view_current_tenure_employee", "WITH resultData AS (\n SELECT\n commandDateAffect,\n positionName,\n positionCee,\n TIMESTAMPDIFF(\n DAY,\n LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) AS days_diff,\n TIMESTAMPDIFF(\n DAY,\n LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) / 365.2524 AS 'Years',\n TIMESTAMPDIFF(\n DAY,\n LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) / 30.4375 % 12 AS 'Months',\n TIMESTAMPDIFF(\n DAY,\n LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) % 30.4375 AS 'Days',\n posNo,\n positionExecutive,\n positionType,\n positionLevel,\n OrgRoot,\n orgChild1,\n orgChild2,\n orgChild3,\n orgChild4,\n commandCode,\n commandName,\n commandNo,\n commandYear,\n remark,\n profileEmployeeId,\n ROW_NUMBER() OVER (PARTITION BY profileEmployeeId ORDER BY commandDateAffect ASC) AS orderNumber\n FROM (\n SELECT\n commandDateAffect,\n commandDateSign,\n positionName,\n positionCee,\n posNo,\n positionExecutive,\n positionType,\n positionLevel,\n OrgRoot,\n orgChild1,\n orgChild2,\n orgChild3,\n orgChild4,\n commandCode,\n commandName,\n commandNo,\n commandYear,\n remark,\n profileEmployeeId,\n LAG(commandDateSign) OVER (ORDER BY commandDateAffect ASC, commandDateSign ASC) AS prevCommandDateSign,\n ROW_NUMBER() OVER (ORDER BY commandDateAffect ASC, commandDateSign ASC) -\n ROW_NUMBER() OVER (PARTITION BY positionName ORDER BY commandDateAffect ASC, commandDateSign ASC) as groupedId\n FROM\n profileSalary\n WHERE\n commandCode IN (1, 2, 3, 4, 8, 10, 11, 12, 15, 16)\n ORDER BY\n commandDateAffect ASC, commandDateSign ASC\n ) AS groupedPosition\n WHERE\n prevCommandDateSign IS NULL OR commandDateSign >= prevCommandDateSign\n GROUP BY\n profileEmployeeId, groupedId, positionName\n )\n SELECT\n commandDateAffect,\n positionName,\n positionCee,\n days_diff,\n Years,\n Months,\n Days,\n posNo,\n positionExecutive,\n positionType,\n positionLevel,\n OrgRoot,\n orgChild1,\n orgChild2,\n orgChild3,\n orgChild4,\n commandCode,\n commandName,\n commandNo,\n commandYear,\n remark,\n profileEmployeeId,\n orderNumber\n FROM resultData\n\n UNION ALL\n\n SELECT\n CURDATE() AS commandDateAffect,\n NULL AS positionName,\n NULL AS positionCee,\n TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) AS days_diff,\n TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) / 365.2524 AS 'Years',\n TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) / 30.4375 % 12 AS 'Months',\n TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) % 30.4375 AS 'Days',\n NULL AS posNo,\n NULL AS positionExecutive,\n NULL AS positionType,\n NULL AS positionLevel,\n NULL AS OrgRoot,\n NULL AS orgChild1,\n NULL AS orgChild2,\n NULL AS orgChild3,\n NULL AS orgChild4,\n NULL AS commandCode,\n NULL AS commandName,\n NULL AS commandNo,\n NULL AS commandYear,\n NULL AS remark,\n profileEmployeeId,\n NULL AS orderNumber\n FROM resultData"]);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`DELETE FROM \`hrms_organization\`.\`typeorm_metadata\` WHERE \`type\` = ? AND \`name\` = ? AND \`schema\` = ?`, ["VIEW", "view_director_acting", "hrms_organization"]);
|
||||
await queryRunner.query(`DROP VIEW IF EXISTS \`view_director_acting\``);
|
||||
await queryRunner.query(`CREATE VIEW \`view_director_acting\` AS SELECT
|
||||
\`profileChild\`.\`id\` AS \`Id\`,
|
||||
\`profileChild\`.\`prefix\` AS \`prefix\`,
|
||||
\`profileChild\`.\`firstName\` AS \`firstName\`,
|
||||
\`profileChild\`.\`lastName\` AS \`lastName\`,
|
||||
\`profileChild\`.\`citizenId\` AS \`citizenId\`,
|
||||
\`profileChild\`.\`position\` AS \`position\`,
|
||||
CONCAT((CASE
|
||||
WHEN (\`posMaster\`.\`orgChild1Id\` IS NULL) THEN \`orgRootChild\`.\`orgRootShortName\`
|
||||
WHEN (\`posMaster\`.\`orgChild2Id\` IS NULL) THEN \`orgChild1Child\`.\`orgChild1ShortName\`
|
||||
WHEN (\`posMaster\`.\`orgChild3Id\` IS NULL) THEN \`orgChild2Child\`.\`orgChild2ShortName\`
|
||||
WHEN (\`posMaster\`.\`orgChild4Id\` IS NULL) THEN \`orgChild3Child\`.\`orgChild3ShortName\`
|
||||
ELSE \`orgChild4Child\`.\`orgChild4ShortName\`
|
||||
END),
|
||||
\`posMaster\`.\`posMasterNo\`) AS \`posNo\`,
|
||||
\`posMasterChild\`.\`isDirector\` AS \`isDirectorChild\`,
|
||||
\`posMaster\`.\`isDirector\` AS \`isDirector\`,
|
||||
\`posLevel\`.\`posLevelName\` AS \`posLevel\`,
|
||||
\`posType\`.\`posTypeName\` AS \`posType\`,
|
||||
\`posExecutive\`.\`posExecutiveName\` AS \`posExecutiveName\`,
|
||||
\`orgRoot\`.\`isDeputy\` AS \`isDeputy\`,
|
||||
\`orgChild1\`.\`isOfficer\` AS \`isOfficer\`,
|
||||
\`posMaster\`.\`orgRevisionId\` AS \`orgRevisionId\`,
|
||||
\`posMaster\`.\`orgRootId\` AS \`orgRootId\`,
|
||||
\`posMaster\`.\`orgChild1Id\` AS \`orgChild1Id\`,
|
||||
\`posMaster\`.\`orgChild2Id\` AS \`orgChild2Id\`,
|
||||
\`posMaster\`.\`orgChild3Id\` AS \`orgChild3Id\`,
|
||||
\`posMaster\`.\`orgChild4Id\` AS \`orgChild4Id\`,
|
||||
CONCAT(\`posMaster\`.\`id\`, \`profileChild\`.\`id\`) AS \`key\`,
|
||||
\`profile\`.\`id\` AS \`actFullNameId\`,
|
||||
CONCAT(\`profile\`.\`prefix\`,
|
||||
\`profile\`.\`firstName\`,
|
||||
' ',
|
||||
\`profile\`.\`lastName\`) AS \`actFullName\`
|
||||
FROM
|
||||
(((((((((((((((\`posMasterAct\`
|
||||
JOIN \`posMaster\` \`posMasterChild\` ON ((\`posMasterAct\`.\`posMasterChildId\` = \`posMasterChild\`.\`id\`)))
|
||||
JOIN \`profile\` \`profileChild\` ON ((\`posMasterChild\`.\`current_holderId\` = \`profileChild\`.\`id\`)))
|
||||
LEFT JOIN \`orgRoot\` \`orgRootChild\` ON ((\`posMasterChild\`.\`orgRootId\` = \`orgRootChild\`.\`id\`)))
|
||||
LEFT JOIN \`orgChild1\` \`orgChild1Child\` ON ((\`posMasterChild\`.\`orgChild1Id\` = \`orgChild1Child\`.\`id\`)))
|
||||
LEFT JOIN \`orgChild2\` \`orgChild2Child\` ON ((\`posMasterChild\`.\`orgChild2Id\` = \`orgChild2Child\`.\`id\`)))
|
||||
LEFT JOIN \`orgChild3\` \`orgChild3Child\` ON ((\`posMasterChild\`.\`orgChild3Id\` = \`orgChild3Child\`.\`id\`)))
|
||||
LEFT JOIN \`orgChild4\` \`orgChild4Child\` ON ((\`posMasterChild\`.\`orgChild4Id\` = \`orgChild4Child\`.\`id\`)))
|
||||
JOIN \`posLevel\` ON ((\`profileChild\`.\`posLevelId\` = \`posLevel\`.\`id\`)))
|
||||
JOIN \`posType\` ON ((\`profileChild\`.\`posTypeId\` = \`posType\`.\`id\`)))
|
||||
JOIN \`posMaster\` ON ((\`posMasterAct\`.\`posMasterId\` = \`posMaster\`.\`id\`)))
|
||||
LEFT JOIN \`orgRoot\` ON ((\`posMaster\`.\`orgRootId\` = \`orgRoot\`.\`id\`)))
|
||||
LEFT JOIN \`orgChild1\` ON ((\`posMaster\`.\`orgChild1Id\` = \`orgChild1\`.\`id\`)))
|
||||
JOIN \`profile\` ON ((\`posMaster\`.\`current_holderId\` = \`profile\`.\`id\`)))
|
||||
LEFT JOIN \`position\` ON ((\`posMasterChild\`.\`id\` = \`position\`.\`posMasterId\`)))
|
||||
LEFT JOIN \`posExecutive\` ON ((\`position\`.\`posExecutiveId\` = \`posExecutive\`.\`id\`)))
|
||||
WHERE
|
||||
(\`position\`.\`positionIsSelected\` = TRUE)`);
|
||||
|
||||
// await queryRunner.query(`INSERT INTO \`hrms_organization\`.\`typeorm_metadata\`(\`database\`, \`schema\`, \`table\`, \`type\`, \`name\`, \`value\`) VALUES (DEFAULT, ?, DEFAULT, ?, ?, ?)`, ["hrms_organization", "VIEW", "view_director_acting", "SELECT \n `profileChild`.`id` AS `Id`,\n `profileChild`.`prefix` AS `prefix`,\n `profileChild`.`firstName` AS `firstName`,\n `profileChild`.`lastName` AS `lastName`,\n `profileChild`.`citizenId` AS `citizenId`,\n `profileChild`.`position` AS `position`,\n CONCAT((CASE\n WHEN (`posMaster`.`orgChild1Id` IS NULL) THEN `orgRootChild`.`orgRootShortName`\n WHEN (`posMaster`.`orgChild2Id` IS NULL) THEN `orgChild1Child`.`orgChild1ShortName`\n WHEN (`posMaster`.`orgChild3Id` IS NULL) THEN `orgChild2Child`.`orgChild2ShortName`\n WHEN (`posMaster`.`orgChild4Id` IS NULL) THEN `orgChild3Child`.`orgChild3ShortName`\n ELSE `orgChild4Child`.`orgChild4ShortName`\n END),\n `posMaster`.`posMasterNo`) AS `posNo`,\n `posMasterChild`.`isDirector` AS `isDirectorChild`,\n `posMaster`.`isDirector` AS `isDirector`,\n `posLevel`.`posLevelName` AS `posLevel`,\n `posType`.`posTypeName` AS `posType`,\n `posExecutive`.`posExecutiveName` AS `posExecutiveName`,\n `orgRoot`.`isDeputy` AS `isDeputy`,\n `orgChild1`.`isOfficer` AS `isOfficer`,\n `posMaster`.`orgRevisionId` AS `orgRevisionId`,\n `posMaster`.`orgRootId` AS `orgRootId`,\n `posMaster`.`orgChild1Id` AS `orgChild1Id`,\n `posMaster`.`orgChild2Id` AS `orgChild2Id`,\n `posMaster`.`orgChild3Id` AS `orgChild3Id`,\n `posMaster`.`orgChild4Id` AS `orgChild4Id`,\n CONCAT(`posMaster`.`id`, `profileChild`.`id`) AS `key`,\n `profile`.`id` AS `actFullNameId`,\n CONCAT(`profile`.`prefix`,\n `profile`.`firstName`,\n ' ',\n `profile`.`lastName`) AS `actFullName`\n FROM\n (((((((((((((((`posMasterAct`\n JOIN `posMaster` `posMasterChild` ON ((`posMasterAct`.`posMasterChildId` = `posMasterChild`.`id`)))\n JOIN `profile` `profileChild` ON ((`posMasterChild`.`current_holderId` = `profileChild`.`id`)))\n LEFT JOIN `orgRoot` `orgRootChild` ON ((`posMasterChild`.`orgRootId` = `orgRootChild`.`id`)))\n LEFT JOIN `orgChild1` `orgChild1Child` ON ((`posMasterChild`.`orgChild1Id` = `orgChild1Child`.`id`)))\n LEFT JOIN `orgChild2` `orgChild2Child` ON ((`posMasterChild`.`orgChild2Id` = `orgChild2Child`.`id`)))\n LEFT JOIN `orgChild3` `orgChild3Child` ON ((`posMasterChild`.`orgChild3Id` = `orgChild3Child`.`id`)))\n LEFT JOIN `orgChild4` `orgChild4Child` ON ((`posMasterChild`.`orgChild4Id` = `orgChild4Child`.`id`)))\n JOIN `posLevel` ON ((`profileChild`.`posLevelId` = `posLevel`.`id`)))\n JOIN `posType` ON ((`profileChild`.`posTypeId` = `posType`.`id`)))\n JOIN `posMaster` ON ((`posMasterAct`.`posMasterId` = `posMaster`.`id`)))\n LEFT JOIN `orgRoot` ON ((`posMaster`.`orgRootId` = `orgRoot`.`id`)))\n LEFT JOIN `orgChild1` ON ((`posMaster`.`orgChild1Id` = `orgChild1`.`id`)))\n JOIN `profile` ON ((`posMaster`.`current_holderId` = `profile`.`id`)))\n LEFT JOIN `position` ON ((`posMasterChild`.`id` = `position`.`posMasterId`)))\n LEFT JOIN `posExecutive` ON ((`position`.`posExecutiveId` = `posExecutive`.`id`)))\n WHERE\n (`position`.`positionIsSelected` = TRUE)"]);
|
||||
await queryRunner.query(`DELETE FROM \`hrms_organization\`.\`typeorm_metadata\` WHERE \`type\` = ? AND \`name\` = ? AND \`schema\` = ?`, ["VIEW", "view_director", "hrms_organization"]);
|
||||
await queryRunner.query(`DROP VIEW IF EXISTS \`view_director\``);
|
||||
await queryRunner.query(`CREATE VIEW \`view_director\` AS SELECT
|
||||
profile.id AS Id,
|
||||
profile.prefix AS prefix,
|
||||
profile.firstName AS firstName,
|
||||
profile.lastName AS lastName,
|
||||
profile.citizenId AS citizenId,
|
||||
profile.position AS position,
|
||||
CONCAT(
|
||||
CASE
|
||||
WHEN posMaster.orgChild1Id IS NULL THEN orgRoot.orgRootShortName
|
||||
WHEN posMaster.orgChild2Id IS NULL THEN orgChild1.orgChild1ShortName
|
||||
WHEN posMaster.orgChild3Id IS NULL THEN orgChild2.orgChild2ShortName
|
||||
WHEN posMaster.orgChild4Id IS NULL THEN orgChild3.orgChild3ShortName
|
||||
ELSE orgChild4.orgChild4ShortName
|
||||
END,
|
||||
posMaster.posMasterNo
|
||||
) AS posNo,
|
||||
posMaster.isDirector AS isDirector,
|
||||
posLevel.posLevelName AS posLevel,
|
||||
posType.posTypeName AS posType,
|
||||
posExecutive.posExecutiveName AS posExecutiveName,
|
||||
orgRoot.isDeputy AS isDeputy,
|
||||
orgChild1.isOfficer AS isOfficer,
|
||||
posMaster.orgRevisionId AS orgRevisionId,
|
||||
posMaster.orgRootId AS orgRootId,
|
||||
posMaster.orgChild1Id AS orgChild1Id,
|
||||
posMaster.orgChild2Id AS orgChild2Id,
|
||||
posMaster.orgChild3Id AS orgChild3Id,
|
||||
posMaster.orgChild4Id AS orgChild4Id,
|
||||
CONCAT(posMaster.id, profile.id) AS \`key\`,
|
||||
(
|
||||
SELECT actFullNameId
|
||||
FROM view_director_acting AS acting
|
||||
WHERE acting.Id = posMaster.current_holderId
|
||||
AND acting.orgRootId = posMaster.orgRootId
|
||||
AND (acting.orgChild1Id = posMaster.orgChild1Id OR acting.orgChild1Id IS NULL)
|
||||
AND (acting.orgChild2Id = posMaster.orgChild2Id OR acting.orgChild2Id IS NULL)
|
||||
AND (acting.orgChild3Id = posMaster.orgChild3Id OR acting.orgChild3Id IS NULL)
|
||||
AND (acting.orgChild4Id = posMaster.orgChild4Id OR acting.orgChild4Id IS NULL)
|
||||
LIMIT 1
|
||||
) AS actFullNameId,
|
||||
(
|
||||
SELECT actFullName
|
||||
FROM view_director_acting AS acting
|
||||
WHERE acting.Id = posMaster.current_holderId
|
||||
AND acting.orgRootId = posMaster.orgRootId
|
||||
AND (acting.orgChild1Id = posMaster.orgChild1Id OR acting.orgChild1Id IS NULL)
|
||||
AND (acting.orgChild2Id = posMaster.orgChild2Id OR acting.orgChild2Id IS NULL)
|
||||
AND (acting.orgChild3Id = posMaster.orgChild3Id OR acting.orgChild3Id IS NULL)
|
||||
AND (acting.orgChild4Id = posMaster.orgChild4Id OR acting.orgChild4Id IS NULL)
|
||||
LIMIT 1
|
||||
) AS actFullName
|
||||
FROM
|
||||
posMaster
|
||||
JOIN profile ON posMaster.current_holderId = profile.id
|
||||
LEFT JOIN orgRoot ON posMaster.orgRootId = orgRoot.id
|
||||
LEFT JOIN orgChild1 ON posMaster.orgChild1Id = orgChild1.id
|
||||
LEFT JOIN orgChild2 ON posMaster.orgChild2Id = orgChild2.id
|
||||
LEFT JOIN orgChild3 ON posMaster.orgChild3Id = orgChild3.id
|
||||
LEFT JOIN orgChild4 ON posMaster.orgChild4Id = orgChild4.id
|
||||
JOIN posLevel ON profile.posLevelId = posLevel.id
|
||||
JOIN posType ON profile.posTypeId = posType.id
|
||||
LEFT JOIN position ON posMaster.id = position.posMasterId
|
||||
LEFT JOIN posExecutive ON position.posExecutiveId = posExecutive.id
|
||||
INNER JOIN orgRevision ON posMaster.orgRevisionId = orgRevision.id
|
||||
WHERE
|
||||
(position.positionIsSelected = TRUE)
|
||||
AND (orgRevision.orgRevisionIsCurrent = TRUE
|
||||
AND orgRevision.orgRevisionIsDraft = FALSE)`);
|
||||
|
||||
// await queryRunner.query(`INSERT INTO \`hrms_organization\`.\`typeorm_metadata\`(\`database\`, \`schema\`, \`table\`, \`type\`, \`name\`, \`value\`) VALUES (DEFAULT, ?, DEFAULT, ?, ?, ?)`, ["hrms_organization", "VIEW", "view_director", "SELECT \n profile.id AS Id,\n profile.prefix AS prefix,\n profile.firstName AS firstName,\n profile.lastName AS lastName,\n profile.citizenId AS citizenId,\n profile.position AS position,\n CONCAT(\n CASE \n WHEN posMaster.orgChild1Id IS NULL THEN orgRoot.orgRootShortName\n WHEN posMaster.orgChild2Id IS NULL THEN orgChild1.orgChild1ShortName\n WHEN posMaster.orgChild3Id IS NULL THEN orgChild2.orgChild2ShortName\n WHEN posMaster.orgChild4Id IS NULL THEN orgChild3.orgChild3ShortName\n ELSE orgChild4.orgChild4ShortName\n END,\n posMaster.posMasterNo\n ) AS posNo,\n posMaster.isDirector AS isDirector,\n posLevel.posLevelName AS posLevel,\n posType.posTypeName AS posType,\n posExecutive.posExecutiveName AS posExecutiveName,\n orgRoot.isDeputy AS isDeputy,\n orgChild1.isOfficer AS isOfficer,\n posMaster.orgRevisionId AS orgRevisionId,\n posMaster.orgRootId AS orgRootId,\n posMaster.orgChild1Id AS orgChild1Id,\n posMaster.orgChild2Id AS orgChild2Id,\n posMaster.orgChild3Id AS orgChild3Id,\n posMaster.orgChild4Id AS orgChild4Id,\n CONCAT(posMaster.id, profile.id) AS `key`,\n (\n SELECT actFullNameId \n FROM view_director_acting AS acting\n WHERE acting.Id = posMaster.current_holderId \n AND acting.orgRootId = posMaster.orgRootId \n AND (acting.orgChild1Id = posMaster.orgChild1Id OR acting.orgChild1Id IS NULL)\n AND (acting.orgChild2Id = posMaster.orgChild2Id OR acting.orgChild2Id IS NULL)\n AND (acting.orgChild3Id = posMaster.orgChild3Id OR acting.orgChild3Id IS NULL)\n AND (acting.orgChild4Id = posMaster.orgChild4Id OR acting.orgChild4Id IS NULL)\n LIMIT 1\n ) AS actFullNameId,\n (\n SELECT actFullName \n FROM view_director_acting AS acting\n WHERE acting.Id = posMaster.current_holderId \n AND acting.orgRootId = posMaster.orgRootId \n AND (acting.orgChild1Id = posMaster.orgChild1Id OR acting.orgChild1Id IS NULL)\n AND (acting.orgChild2Id = posMaster.orgChild2Id OR acting.orgChild2Id IS NULL)\n AND (acting.orgChild3Id = posMaster.orgChild3Id OR acting.orgChild3Id IS NULL)\n AND (acting.orgChild4Id = posMaster.orgChild4Id OR acting.orgChild4Id IS NULL)\n LIMIT 1\n ) AS actFullName\n FROM\n posMaster\n JOIN profile ON posMaster.current_holderId = profile.id\n LEFT JOIN orgRoot ON posMaster.orgRootId = orgRoot.id\n LEFT JOIN orgChild1 ON posMaster.orgChild1Id = orgChild1.id\n LEFT JOIN orgChild2 ON posMaster.orgChild2Id = orgChild2.id\n LEFT JOIN orgChild3 ON posMaster.orgChild3Id = orgChild3.id\n LEFT JOIN orgChild4 ON posMaster.orgChild4Id = orgChild4.id\n JOIN posLevel ON profile.posLevelId = posLevel.id\n JOIN posType ON profile.posTypeId = posType.id\n LEFT JOIN position ON posMaster.id = position.posMasterId\n LEFT JOIN posExecutive ON position.posExecutiveId = posExecutive.id\n INNER JOIN orgRevision ON posMaster.orgRevisionId = orgRevision.id\n WHERE\n (position.positionIsSelected = TRUE)\n AND (orgRevision.orgRevisionIsCurrent = TRUE\n AND orgRevision.orgRevisionIsDraft = FALSE)"]);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
import { MigrationInterface, QueryRunner } from "typeorm";
|
||||
|
||||
export class UpdateTableEducationLeaveAddFields1764244579743 implements MigrationInterface {
|
||||
name = 'UpdateTableEducationLeaveAddFields1764244579743'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE \`educationLevel\` ADD \`educationLevel\` varchar(50) NULL COMMENT 'ขีดจำกัดวุฒิการศึกษา'`);
|
||||
await queryRunner.query(`ALTER TABLE \`educationLevel\` ADD \`isHigh\` tinyint NULL COMMENT 'วุฒิการศึกษาสูงสุด'`);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE \`educationLevel\` DROP COLUMN \`isHigh\``);
|
||||
await queryRunner.query(`ALTER TABLE \`educationLevel\` DROP COLUMN \`educationLevel\``);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -445,7 +445,6 @@ async function handler_command_noti(msg: amqp.ConsumeMessage): Promise<boolean>
|
|||
isSendNotification: true,
|
||||
}))
|
||||
: [];
|
||||
|
||||
const payloadStr = await PayloadSendNoti(command.id);
|
||||
const profilesSendRequest = new CallAPI()
|
||||
.PostData(
|
||||
|
|
@ -475,7 +474,14 @@ async function handler_command_noti(msg: amqp.ConsumeMessage): Promise<boolean>
|
|||
console.error("Full error object:", error);
|
||||
});
|
||||
|
||||
await Promise.all([profilesNotiRequest, profilesSendRequest]);
|
||||
/*เฉพาะคำสั่ง C-PM-10 ให้ตัด profilesNotiRequest ที่ส่ง noti ครั้งแรกออก*/
|
||||
if (command && command.commandType && ["C-PM-10"].includes(command.commandType.code)) {
|
||||
await Promise.all([profilesSendRequest]);
|
||||
}
|
||||
else {
|
||||
await Promise.all([profilesNotiRequest, profilesSendRequest]);
|
||||
}
|
||||
|
||||
|
||||
console.log("[AMQ] Send Notification Success");
|
||||
return true;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue