ช่วยแก้ไขฟีเจอร์ Import รายชื่อพนักงานของระบบ Training System ## เป้าหมาย ปรับการนำเข้าพนักงานให้รองรับกรณีที่พนักงาน 1 คน มีข้อมูลประวัติการอบรมหรือหลักสูตรหลายรายการในไฟล์ Import โดยระบบต้องนับรหัสพนักงานเป็นพนักงานเพียง 1 คน แต่ต้องบันทึกประวัติการอบรมทั้งหมด และสรุปจำนวนชั่วโมงอบรมตามประเภทหลักสูตรให้ถูกต้อง ## เงื่อนไขหลัก 1. ใช้ `employeeCode` หรือรหัสพนักงานเป็นตัวระบุพนักงานหลัก 2. หากพบรหัสพนักงานซ้ำในไฟล์ Import เดียวกัน ให้ถือว่าเป็นพนักงานคนเดียวกัน 3. ห้ามสร้างข้อมูลพนักงานซ้ำตามจำนวนแถวในไฟล์ Import 4. พนักงาน 1 คน สามารถมีประวัติการอบรมได้หลายรายการ 5. ทุกแถวของไฟล์ Import ที่มีข้อมูลหลักสูตร ต้องถูกบันทึกเป็น Training History / Training Record 6. หลังนำเข้า ต้องคำนวณและสรุปชั่วโมงอบรมของพนักงานคนนั้นใหม่ 7. การสรุปชั่วโมงต้องแยกตามประเภทหลักสูตร เช่น K, S, A และรวม Total 8. หาก Import เพิ่มในภายหลัง และพบรหัสพนักงานเดิมในระบบ - ไม่ต้องสร้าง Employee ใหม่ - ให้เพิ่มเฉพาะประวัติการอบรมใหม่ - อัปเดตยอดรวมชั่วโมงของพนักงานใหม่ ## พฤติกรรมที่ต้องการ ตัวอย่างไฟล์ Import: | employeeCode | employeeName | courseName | category | hours | | ------------ | ------------ | -------------- | -------- | ----- | | 66001 | นาย A | React Basic | K | 6 | | 66001 | นาย A | Next.js | S | 8 | | 66001 | นาย A | Cyber Security | A | 3 | หลัง Import ต้องได้ผลลัพธ์เป็น: Employee: - 66001 นาย A จำนวน 1 รายการเท่านั้น Training History: - React Basic 6 ชั่วโมง ประเภท K - Next.js 8 ชั่วโมง ประเภท S - Cyber Security 3 ชั่วโมง ประเภท A Training Summary: - K = 6 ชั่วโมง - S = 8 ชั่วโมง - A = 3 ชั่วโมง - Total = 17 ชั่วโมง ## แนวทางการแก้ไข 1. ตรวจสอบโค้ด Import เดิมก่อนแก้ไข 2. ตรวจสอบ schema/model ที่เกี่ยวข้อง เช่น Employee, TrainingRecord, TrainingHistory, TrainingSummary 3. แก้ logic การ import ให้ group ข้อมูลตาม `employeeCode` 4. ใช้ `upsert` หรือ find existing employee ก่อนสร้าง Employee 5. เพิ่ม Training Record ทุกแถวที่เป็นหลักสูตรของพนักงาน 6. ป้องกันการสร้าง Employee ซ้ำทั้งในไฟล์เดียวกันและในฐานข้อมูลเดิม 7. หลังเพิ่ม Training Record ให้คำนวณชั่วโมงรวมใหม่จากข้อมูล Training Record จริง 8. อัปเดต summary ชั่วโมงของพนักงานตาม category K/S/A/Total 9. ตรวจสอบ transaction เพื่อให้ข้อมูล Employee, Training Record และ Summary ถูกบันทึกครบหรือ rollback เมื่อเกิด error 10. เพิ่ม validation สำหรับข้อมูลสำคัญ เช่น employeeCode, courseName, category, hours 11. เพิ่มรายงานผลหลัง Import เช่น จำนวนพนักงานใหม่, จำนวนพนักงานเดิมที่อัปเดต, จำนวนประวัติอบรมที่เพิ่ม, จำนวนแถวที่ error ## Acceptance Criteria - Import ไฟล์ที่มีรหัสพนักงานซ้ำหลายแถวแล้วระบบสร้าง Employee เพียง 1 คน - Training Record ถูกสร้างครบทุกหลักสูตร - พนักงานเดิมในระบบไม่ถูกสร้างซ้ำ - Summary ชั่วโมง K/S/A/Total ถูกต้อง - Import ซ้ำหรือ Import เพิ่มภายหลังต้องไม่ทำให้ Employee ซ้ำ - มี error message ที่เข้าใจง่ายสำหรับแถวที่ข้อมูลไม่ครบ - โค้ดต้องสอดคล้องกับโครงสร้างเดิมของโปรเจกต์ - ห้ามสร้าง service/component/schema ใหม่โดยไม่ตรวจสอบของเดิมก่อน - หลังแก้ไขเสร็จ ให้สร้างรายงานสรุปไฟล์ที่แก้ไข จุดที่แก้ และวิธีทดสอบ ## ขอให้ทำงานตามลำดับนี้ 1. อ่านโครงสร้าง Import เดิม 2. ระบุไฟล์ที่เกี่ยวข้อง 3. วางแผนการแก้ไขก่อนลงมือ 4. แก้ไข logic การ Import 5. เพิ่ม/แก้ validation ที่จำเป็น 6. ทดสอบด้วยกรณีรหัสพนักงานซ้ำหลายแถว 7. ทดสอบกรณีพนักงานเดิมในระบบ 8. สรุปผลการแก้ไขเป็นรายงานหลังทำเสร็จ