fix ui
All checks were successful
Deploy on Master Change / deploy (push) Successful in 1m30s

This commit is contained in:
2026-07-14 07:39:18 +07:00
parent 7d3fdefa3f
commit 487e9eb8ea
9 changed files with 145 additions and 17 deletions

View File

@@ -565,11 +565,40 @@ func GetLeaveRequestsHandler(db *gorm.DB, qldtClient *qldt.Client) fiber.Handler
return c.Status(fiber.StatusBadGateway).JSON(fiber.Map{"error": err.Error()})
}
var data any
var data []map[string]interface{}
if err := json.Unmarshal(body, &data); err != nil {
var fallback any
if errFallback := json.Unmarshal(body, &fallback); errFallback == nil {
return c.JSON(fallback)
}
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": "Failed to parse QLDT response"})
}
// Ghi đè trạng thái duyệt local nếu có
var localReqs []models.LocalLeaveRequest
if err := db.Find(&localReqs).Error; err == nil && len(localReqs) > 0 {
localMap := make(map[int64]string)
for _, lr := range localReqs {
localMap[lr.LeaveID] = lr.Status
}
for i, item := range data {
if idVal, ok := item["id"]; ok {
var idInt int64
switch v := idVal.(type) {
case float64:
idInt = int64(v)
case int64:
idInt = v
case int:
idInt = int64(v)
}
if localStatus, found := localMap[idInt]; found {
data[i]["status"] = localStatus
}
}
}
}
return c.JSON(data)
}
}
@@ -594,15 +623,24 @@ func UpdateLeaveStatusHandler(db *gorm.DB, qldtClient *qldt.Client) fiber.Handle
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Trạng thái phê duyệt không hợp lệ"})
}
token := GetQldtToken(db)
if token == "" {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "QLDT_TOKEN chưa cấu hình"})
}
// 1. Gửi lệnh cập nhật status qua QLDT Portal API
body, err := qldtClient.UpdateLeaveStatus(context.Background(), token, leaveID, req.Status)
if err != nil {
return c.Status(fiber.StatusBadGateway).JSON(fiber.Map{"error": err.Error(), "body": string(body)})
// 1. Lưu trạng thái đơn phép vào database local thay vì gọi QLDT Portal API
var localLeave models.LocalLeaveRequest
errLocal := db.Where("leave_id = ?", leaveID).First(&localLeave).Error
if errLocal == gorm.ErrRecordNotFound {
localLeave = models.LocalLeaveRequest{
LeaveID: leaveID,
Status: req.Status,
}
if err := db.Create(&localLeave).Error; err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": "Lỗi lưu đơn phép local: " + err.Error()})
}
} else if errLocal == nil {
localLeave.Status = req.Status
if err := db.Save(&localLeave).Error; err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": "Lỗi cập nhật đơn phép local: " + err.Error()})
}
} else {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": errLocal.Error()})
}
// 2. Nếu status là "Phê duyệt", tự động cập nhật điểm danh trong hệ thống của chúng ta thành "Nghỉ có phép"