fix ui
This commit is contained in:
@@ -366,6 +366,69 @@ func UpdateAttendanceStatusHandler(db *gorm.DB) fiber.Handler {
|
||||
}
|
||||
}
|
||||
|
||||
// PUT /api/classes/:rkId/attendance/bulk-status
|
||||
func UpdateAttendanceBulkStatusHandler(db *gorm.DB) fiber.Handler {
|
||||
return func(c *fiber.Ctx) error {
|
||||
classRkID, _ := strconv.ParseInt(c.Params("rkId"), 10, 64)
|
||||
var req struct {
|
||||
Date string `json:"date"`
|
||||
Period int `json:"period"`
|
||||
StudentRkIDs []int64 `json:"studentRkIds"`
|
||||
Status int `json:"status"`
|
||||
}
|
||||
if err := c.BodyParser(&req); err != nil {
|
||||
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid payload"})
|
||||
}
|
||||
if req.Date == "" {
|
||||
req.Date = qldt.NowDateVN()
|
||||
}
|
||||
if req.Period < 1 {
|
||||
req.Period = 1
|
||||
}
|
||||
if len(req.StudentRkIDs) == 0 {
|
||||
return c.JSON(fiber.Map{"ok": true, "message": "No students selected"})
|
||||
}
|
||||
|
||||
label := qldt.AttendanceStatusLabel(req.Status)
|
||||
tx := db.Begin()
|
||||
for _, studentRkID := range req.StudentRkIDs {
|
||||
var row models.AttendanceResult
|
||||
err := tx.Where("class_rk_id = ? AND session_date = ? AND period = ? AND student_rk_id = ?",
|
||||
classRkID, req.Date, req.Period, studentRkID).First(&row).Error
|
||||
if err == gorm.ErrRecordNotFound {
|
||||
row = models.AttendanceResult{
|
||||
ClassRkID: classRkID,
|
||||
SessionDate: req.Date,
|
||||
Period: req.Period,
|
||||
StudentRkID: studentRkID,
|
||||
Status: req.Status,
|
||||
StatusLabel: label,
|
||||
StatusEditedByTeacher: true,
|
||||
}
|
||||
if err := tx.Create(&row).Error; err != nil {
|
||||
tx.Rollback()
|
||||
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
|
||||
}
|
||||
} else if err != nil {
|
||||
tx.Rollback()
|
||||
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
|
||||
} else {
|
||||
row.Status = req.Status
|
||||
row.StatusLabel = label
|
||||
row.StatusEditedByTeacher = true
|
||||
if err := tx.Save(&row).Error; err != nil {
|
||||
tx.Rollback()
|
||||
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
|
||||
}
|
||||
}
|
||||
}
|
||||
if err := tx.Commit().Error; err != nil {
|
||||
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
|
||||
}
|
||||
return c.JSON(fiber.Map{"ok": true})
|
||||
}
|
||||
}
|
||||
|
||||
// POST /api/classes/:rkId/attendance/push-qldt
|
||||
func PushAttendanceToQLDTHandler(db *gorm.DB, qldtClient *qldt.Client, token string) fiber.Handler {
|
||||
return func(c *fiber.Ctx) error {
|
||||
|
||||
@@ -158,6 +158,7 @@ func main() {
|
||||
staff.Get("/classes/:rkId/attendance", handlers.GetClassAttendanceHandler(gormDB))
|
||||
staff.Get("/classes/:rkId/attendance/shifts", handlers.ListAttendanceShiftsHandler(gormDB))
|
||||
staff.Put("/classes/:rkId/attendance/status", handlers.UpdateAttendanceStatusHandler(gormDB))
|
||||
staff.Put("/classes/:rkId/attendance/bulk-status", handlers.UpdateAttendanceBulkStatusHandler(gormDB))
|
||||
staff.Post("/classes/:rkId/attendance/push-qldt", handlers.PushAttendanceToQLDTHandler(gormDB, qldtClient, qldtToken))
|
||||
|
||||
// Chat & quản lý tài khoản
|
||||
|
||||
Reference in New Issue
Block a user