diff --git a/src/controllers/CommandController.ts b/src/controllers/CommandController.ts index 42685c20..0b2c1b12 100644 --- a/src/controllers/CommandController.ts +++ b/src/controllers/CommandController.ts @@ -3834,6 +3834,7 @@ export class CommandController extends Controller { const positionBy7Fields = await this.positionRepository.findOne({ where: whereCondition, relations: ["posExecutive"], + order: { orderNo: "ASC" } }); if (positionBy7Fields) { @@ -3849,10 +3850,11 @@ export class CommandController extends Controller { where: { posMasterId: posMaster.id, positionName: item.positionName, - posTypeId: item.positionType, // positionType = posTypeId - posLevelId: item.positionLevel, // positionLevel = posLevelId + posTypeId: item.positionType, + posLevelId: item.positionLevel, }, relations: ["posExecutive"], + order: { orderNo: "ASC" } }); if (positionBy3Fields) { @@ -4138,6 +4140,7 @@ export class CommandController extends Controller { commandCode?: string | null; commandName?: string | null; remark: string | null; + positionId?: string | null; positionTypeNew?: string | null; positionLevelNew?: string | null; positionNameNew?: string | null; @@ -4403,11 +4406,36 @@ export class CommandController extends Controller { // posMaster.isCondition = false; await this.posMasterRepository.save(posMaster); - // Match position ตามลำดับ priority + // Match position ตามลำดับ priority: + // Condition 1: match จาก positionId + // Condition 2: match 7 ฟิลด์ (positionName, posTypeId, posLevelId, positionField, positionArea, positionExecutiveField, posExecutiveId) + // Condition 3: match 3 ฟิลด์ (positionName, posTypeId, posLevelId) + // Fallback: เลือก position แรกใน posMaster + let positionNew: Position | null = null; - // CONDITION 1: Match 7 ฟิลด์ (ไม่มี positionId ใน body สำหรับกรณีพักราชการ) - if (item.positionNameNew && item.positionTypeNew && item.positionLevelNew) { + // ═══════════════════════════════════════════════════════════ + // CONDITION 1: เช็คจาก positionId ตรง + // ═══════════════════════════════════════════════════════════ + if (item.positionId) { + const positionById = await this.positionRepository.findOne({ + where: { + id: item.positionId, + posMasterId: posMaster.id, // ต้องอยู่ใน posMaster ที่ถูกต้อง + }, + relations: ["posExecutive"], + }); + + if (positionById) { + positionNew = positionById; + } + } + + // ═══════════════════════════════════════════════════════════ + // CONDITION 2: Match 7 ฟิลด์ (ถ้า Condition 1 ไม่ match) + // ═══════════════════════════════════════════════════════════ + if (!positionNew && item.positionNameNew && item.positionTypeNew && item.positionLevelNew) { + // สร้าง where clause แบบ dynamic - ใส่เฉพาะฟิลด์ที่มีค่า const whereCondition: any = { posMasterId: posMaster.id, positionName: item.positionNameNew, @@ -4431,6 +4459,7 @@ export class CommandController extends Controller { const positionBy7Fields = await this.positionRepository.findOne({ where: whereCondition, relations: ["posExecutive"], + order: { orderNo: "ASC" } }); if (positionBy7Fields) { @@ -4438,7 +4467,9 @@ export class CommandController extends Controller { } } - // CONDITION 2: Match 3 ฟิลด์ (ถ้า Condition 1 ไม่ match) + // ═══════════════════════════════════════════════════════════ + // CONDITION 3: Match 3 ฟิลด์ (ถ้า Condition 2 ไม่ match) + // ═══════════════════════════════════════════════════════════ if (!positionNew && item.positionNameNew && item.positionTypeNew && item.positionLevelNew) { const positionBy3Fields = await this.positionRepository.findOne({ where: { @@ -4448,6 +4479,7 @@ export class CommandController extends Controller { posLevelId: item.positionLevelNew, }, relations: ["posExecutive"], + order: { orderNo: "ASC" } }); if (positionBy3Fields) { @@ -7305,6 +7337,7 @@ export class CommandController extends Controller { const positionBy7Fields = await this.positionRepository.findOne({ where: whereCondition, relations: ["posExecutive"], + order: { orderNo: "ASC" } }); if (positionBy7Fields) { @@ -7324,6 +7357,7 @@ export class CommandController extends Controller { posLevelId: item.bodyPosition.posLevelId, }, relations: ["posExecutive"], + order: { orderNo: "ASC" } }); if (positionBy3Fields) {