Merge branch 'develop' into dev
All checks were successful
Build & Deploy on Dev / build (push) Successful in 55s

This commit is contained in:
harid 2026-01-30 16:54:44 +07:00
commit cc43355394
2 changed files with 55 additions and 33 deletions

View file

@ -2966,13 +2966,13 @@ export class DevelopmentController extends Controller {
.GetData(request, `/org/unauthorize/officer/citizen/${citizenId}`)
.then(async (x: any) => {
development = Object.assign(development, x);
development.dateStart = Extension.checkDateTime(item["วันที่เริ่มต้น"], "dd/MM/yyyy") as Date;
development.dateEnd = Extension.checkDateTime(item["วันที่สิ้นสุด"], "dd/MM/yyyy")as Date;
development.dateStart = Extension.checkDateTime(item["วันที่เริ่มต้น"]) as Date;
development.dateEnd = Extension.checkDateTime(item["วันที่สิ้นสุด"])as Date;
development.order =
item["เลขที่คำสั่ง/เลขที่หนังสืออนุมัติ"] == null
? null
: item["เลขที่คำสั่ง/เลขที่หนังสืออนุมัติ"].toString();
development.dateOrder = Extension.checkDateTime(item["คำสั่งลงวันที่/หนังสืออนุมัติลงวันที่"], "dd/MM/yyyy")as Date;
development.dateOrder = Extension.checkDateTime(item["คำสั่งลงวันที่/หนังสืออนุมัติลงวันที่"])as Date;
development.trainingDays =
item["จำนวนวันที่อบรม"] == null ? null : item["จำนวนวันที่อบรม"].toString();
development.posLevelId = x.posLevelId;
@ -2998,15 +2998,15 @@ export class DevelopmentController extends Controller {
development.lastName = item["นามสกุล"] == null ? null : item["นามสกุล"].toString();
development.position = item["ตำแหน่ง"] == null ? null : item["ตำแหน่ง"].toString();
development.org = item["สังกัด"] == null ? null : item["สังกัด"].toString();
development.dateStart = Extension.checkDateTime(item["วันที่เริ่มต้น"], "dd/MM/yyyy") as Date;
development.dateEnd = Extension.checkDateTime(item["วันที่สิ้นสุด"], "dd/MM/yyyy") as Date;
development.dateStart = Extension.checkDateTime(item["วันที่เริ่มต้น"]) as Date;
development.dateEnd = Extension.checkDateTime(item["วันที่สิ้นสุด"]) as Date;
development.citizenId = citizenId;
development.type = "OFFICER" == null ? _null : "OFFICER";
development.order =
item["เลขที่คำสั่ง/เลขที่หนังสืออนุมัติ"] == null
? null
: item["เลขที่คำสั่ง/เลขที่หนังสืออนุมัติ"].toString();
development.dateOrder = Extension.checkDateTime(item["คำสั่งลงวันที่/หนังสืออนุมัติลงวันที่"], "dd/MM/yyyy") as Date;
development.dateOrder = Extension.checkDateTime(item["คำสั่งลงวันที่/หนังสืออนุมัติลงวันที่"]) as Date;
development.trainingDays =
item["จำนวนวันที่อบรม"] == null ? null : item["จำนวนวันที่อบรม"].toString();
development.posLevelId = x.posLevelId;
@ -3030,13 +3030,13 @@ export class DevelopmentController extends Controller {
.GetData(request, `/org/unauthorize/employee/citizen/${citizenId}`)
.then(async (x: any) => {
development = Object.assign(development, x);
development.dateStart = Extension.checkDateTime(item["วันที่เริ่มต้น"], "dd/MM/yyyy") as Date;
development.dateEnd = Extension.checkDateTime(item["วันที่สิ้นสุด"], "dd/MM/yyyy") as Date;
development.dateStart = Extension.checkDateTime(item["วันที่เริ่มต้น"]) as Date;
development.dateEnd = Extension.checkDateTime(item["วันที่สิ้นสุด"]) as Date;
development.order =
item["เลขที่คำสั่ง/เลขที่หนังสืออนุมัติ"] == null
? null
: item["เลขที่คำสั่ง/เลขที่หนังสืออนุมัติ"].toString();
development.dateOrder = Extension.checkDateTime(item["คำสั่งลงวันที่/หนังสืออนุมัติลงวันที่"], "dd/MM/yyyy") as Date;
development.dateOrder = Extension.checkDateTime(item["คำสั่งลงวันที่/หนังสืออนุมัติลงวันที่"]) as Date;
development.trainingDays =
item["จำนวนวันที่อบรม"] == null ? null : item["จำนวนวันที่อบรม"].toString();
development.posLevelId = null;
@ -3061,15 +3061,15 @@ export class DevelopmentController extends Controller {
development.lastName = item["นามสกุล"] == null ? null : item["นามสกุล"].toString();
development.position = item["ตำแหน่ง"] == null ? null : item["ตำแหน่ง"].toString();
development.org = item["สังกัด"] == null ? null : item["สังกัด"].toString();
development.dateStart = Extension.checkDateTime(item["วันที่เริ่มต้น"], "dd/MM/yyyy") as Date;
development.dateEnd = Extension.checkDateTime(item["วันที่สิ้นสุด"], "dd/MM/yyyy") as Date;
development.dateStart = Extension.checkDateTime(item["วันที่เริ่มต้น"]) as Date;
development.dateEnd = Extension.checkDateTime(item["วันที่สิ้นสุด"]) as Date;
development.citizenId = citizenId;
development.type = "EMPLOYEE" == null ? _null : "EMPLOYEE";
development.order =
item["เลขที่คำสั่ง/เลขที่หนังสืออนุมัติ"] == null
? null
: item["เลขที่คำสั่ง/เลขที่หนังสืออนุมัติ"].toString();
development.dateOrder = Extension.checkDateTime(item["คำสั่งลงวันที่/หนังสืออนุมัติลงวันที่"], "dd/MM/yyyy") as Date;
development.dateOrder = Extension.checkDateTime(item["คำสั่งลงวันที่/หนังสืออนุมัติลงวันที่"]) as Date;
development.trainingDays =
item["จำนวนวันที่อบรม"] == null ? null : item["จำนวนวันที่อบรม"].toString();
development.posLevelId = x.posLevelId;
@ -3096,15 +3096,15 @@ export class DevelopmentController extends Controller {
development.lastName = item["นามสกุล"] == null ? null : item["นามสกุล"].toString();
development.position = item["ตำแหน่ง"] == null ? null : item["ตำแหน่ง"].toString();
development.org = item["สังกัด"] == null ? null : item["สังกัด"].toString();
development.dateStart = Extension.checkDateTime(item["วันที่เริ่มต้น"], "dd/MM/yyyy") as Date;
development.dateEnd = Extension.checkDateTime(item["วันที่สิ้นสุด"], "dd/MM/yyyy") as Date;
development.dateStart = Extension.checkDateTime(item["วันที่เริ่มต้น"]) as Date;
development.dateEnd = Extension.checkDateTime(item["วันที่สิ้นสุด"]) as Date;
development.citizenId = citizenId;
development.type = "OTHER";
development.order =
item["เลขที่คำสั่ง/เลขที่หนังสืออนุมัติ"] == null
? null
: item["เลขที่คำสั่ง/เลขที่หนังสืออนุมัติ"].toString();
development.dateOrder = Extension.checkDateTime(item["คำสั่งลงวันที่/หนังสืออนุมัติลงวันที่"], "dd/MM/yyyy") as Date;
development.dateOrder = Extension.checkDateTime(item["คำสั่งลงวันที่/หนังสืออนุมัติลงวันที่"]) as Date;
development.trainingDays =
item["จำนวนวันที่อบรม"] == null ? null : item["จำนวนวันที่อบรม"] .toString();
development.posLevelId = null;

View file

@ -1,38 +1,60 @@
class Extension {
public static checkDateTime(value: any, format: "dd/MM/yyyy" | "yyyy-MM-dd"): Date | null {
if (value == null) return null;
public static checkDateTime(
value: any,
format?: "dd/MM/yyyy" | "yyyy-MM-dd",
): Date | null {
if (value == null || value === "") return null;
let dateStr = String(value).trim();
if (!dateStr) return null;
// ===== Excel serial number =====
if (typeof value === "number") {
if (value < 1) return null;
return new Date(Math.round((value - 25569) * 86400 * 1000));
}
const parts = dateStr.replace(/-/g, "/").split("/");
const raw = String(value).trim();
if (!raw) return null;
const parts = raw.replace(/-/g, "/").split("/");
if (parts.length !== 3) return null;
let year = 0, month = 0, day = 0;
switch (format) {
case "dd/MM/yyyy":
year = Number(parts[2]);
month = Number(parts[1]);
day = Number(parts[0]);
break;
case "yyyy-MM-dd":
// ===== use format if provided =====
if (format === "dd/MM/yyyy") {
day = Number(parts[0]);
month = Number(parts[1]);
year = Number(parts[2]);
} else if (format === "yyyy-MM-dd") {
year = Number(parts[0]);
month = Number(parts[1]);
day = Number(parts[2]);
}
// ===== auto detect =====
else {
if (parts[0].length === 4) {
// yyyy/MM/dd
year = Number(parts[0]);
month = Number(parts[1]);
day = Number(parts[2]);
break;
} else if (parts[2].length === 4) {
// dd/MM/yyyy
day = Number(parts[0]);
month = Number(parts[1]);
year = Number(parts[2]);
} else {
return null;
}
}
if (isNaN(year) || isNaN(month) || isNaN(day)) return null;
if ([year, month, day].some(Number.isNaN)) return null;
// พ.ศ. → ค.ศ.
// ===== Buddhist year =====
if (year > 2500) year -= 543;
if (year < 1800 || year > 2500) return null;
// clamp month
// ===== normalize =====
if (month < 1 || month > 12) month = 1;
// clamp day
const maxDay = new Date(year, month, 0).getDate();
if (day < 1) day = 1;
else if (day > maxDay) day = maxDay;