This commit is contained in:
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user