diff --git a/src/controllers/ApiWebServiceController.ts b/src/controllers/ApiWebServiceController.ts index 15eb5459..fbf0ab78 100644 --- a/src/controllers/ApiWebServiceController.ts +++ b/src/controllers/ApiWebServiceController.ts @@ -525,20 +525,19 @@ export class ApiWebServiceController extends Controller { // สำหรับ ProfileLeave: ตรวจสอบฟิลด์ที่ต้องการ join และแปลง propertyKey const profileLeaveFieldJoins: Record = {}; // alias -> relationName - if (tbMain === "ProfileLeave") { - propertyKey = propertyKey.map((key) => { - const [table, field] = key.split("."); - if (table === "ProfileLeave") { - const replacement = this.PROFILELEAVE_FIELD_REPLACEMENTS[field]; - if (replacement) { - const alias = `${table}_${replacement.joinRelation}`; - profileLeaveFieldJoins[alias] = replacement.joinRelation; - return `${alias}.${replacement.joinField}`; - } + // Process ProfileLeave fields regardless of main table + propertyKey = propertyKey.map((key) => { + const [table, field] = key.split("."); + if (table === "ProfileLeave") { + const replacement = this.PROFILELEAVE_FIELD_REPLACEMENTS[field]; + if (replacement) { + const alias = `${table}_${replacement.joinRelation}`; + profileLeaveFieldJoins[alias] = replacement.joinRelation; + return `${alias}.${replacement.joinField}`; } - return key; - }); - } + } + return key; + }); const queryBuilder = repo.createQueryBuilder(tbMain); @@ -615,10 +614,19 @@ export class ApiWebServiceController extends Controller { } // join สำหรับฟิลด์ ProfileLeave ที่ต้องการดึงค่าจากตารางอื่น - if (tbMain === "ProfileLeave" && Object.keys(profileLeaveFieldJoins).length > 0) { - Object.entries(profileLeaveFieldJoins).forEach(([alias, relationName]) => { - queryBuilder.leftJoin(`${tbMain}.${relationName}`, alias); - }); + if (Object.keys(profileLeaveFieldJoins).length > 0) { + if (tbMain === "ProfileLeave") { + // ProfileLeave is the main table - direct join + Object.entries(profileLeaveFieldJoins).forEach(([alias, relationName]) => { + queryBuilder.leftJoin(`${tbMain}.${relationName}`, alias); + }); + } else { + // ProfileLeave is a related table - the base join is already created by propertyOtherKey logic + // Join from the ProfileLeave alias (not from nested path) + Object.entries(profileLeaveFieldJoins).forEach(([alias, relationName]) => { + queryBuilder.leftJoin(`ProfileLeave.${relationName}`, alias); + }); + } } // join สำหรับ PosMaster เมื่อต้องการดึงค่าจาก Profile (ข้อมูลคนครอง) diff --git a/src/controllers/CommandController.ts b/src/controllers/CommandController.ts index 4630a4f1..5fda4063 100644 --- a/src/controllers/CommandController.ts +++ b/src/controllers/CommandController.ts @@ -343,9 +343,11 @@ export class CommandController extends Controller { .andWhere( new Brackets((qb) => { qb.where( - keyword != null && keyword != "" ? "command.commandNo LIKE :baseKeyword" : "1=1", + keyword != null && keyword != "" + ? "TRIM(CONCAT(COALESCE(command.shortName, ''), ' ', command.commandNo, '/', command.commandYear + 543)) LIKE :keyword" + : "1=1", { - baseKeyword: `%${baseKeyword}%`, + keyword: `%${keyword}%`, }, ) .orWhere(keyword != null && keyword != "" ? "command.issue LIKE :keyword" : "1=1", { @@ -356,14 +358,6 @@ export class CommandController extends Controller { { keyword: `%${keyword}%`, }, - ) - .orWhere( - keyword != null && keyword != "" - ? "CONCAT(command.shortName, ' ', command.commandNo) LIKE :keyword" - : "1=1", - { - keyword: `%${keyword}%`, - }, ); }), )