86 lines
6.9 KiB
Markdown
86 lines
6.9 KiB
Markdown
ช่วยแก้ไขฟีเจอร์ 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. สรุปผลการแก้ไขเป็นรายงานหลังทำเสร็จ
|