瀏覽代碼

Count the actual hours for teachers

Andrea Fazzi 6 年之前
父節點
當前提交
16c7e8e8c0
共有 2 個文件被更改,包括 22 次插入1 次删除
  1. 2 0
      orm/orm_test.go
  2. 20 1
      orm/teacher.go

+ 2 - 0
orm/orm_test.go

@@ -130,6 +130,8 @@ func (t *testSuite) TestGetTeacherAll() {
 
 
 		t.Equal("1 A", teacher.(*Teacher).Activities[0].Class.Name)
 		t.Equal("1 A", teacher.(*Teacher).Activities[0].Class.Name)
 		t.Equal("1 B", teacher.(*Teacher).Activities[1].Class.Name)
 		t.Equal("1 B", teacher.(*Teacher).Activities[1].Class.Name)
+
+		t.Equal(4, teacher.(*Teacher).ActualHours)
 	}
 	}
 
 
 }
 }

+ 20 - 1
orm/teacher.go

@@ -22,7 +22,8 @@ type Teacher struct {
 
 
 	SubjectsByClass map[uint][]*Subject `gorm:"-"`
 	SubjectsByClass map[uint][]*Subject `gorm:"-"`
 
 
-	Hours int
+	Hours       int
+	ActualHours int `gorm:"-"`
 }
 }
 
 
 var (
 var (
@@ -51,6 +52,10 @@ WHERE (activities.teacher_id=? OR activities.supply_teacher_id=?) AND (activitie
 SELECT teachers.*,1 as supply FROM activities 
 SELECT teachers.*,1 as supply FROM activities 
 INNER JOIN teachers on teachers.id=activities.teacher_id 
 INNER JOIN teachers on teachers.id=activities.teacher_id 
 WHERE supply_teacher_id <> 0 ORDER BY surname,name
 WHERE supply_teacher_id <> 0 ORDER BY surname,name
+`
+	countActualTeacherHours = `
+ SELECT sum(hours) as actual_hours FROM activities WHERE (teacher_id=? OR supply_teacher_id=?);
+
 `
 `
 )
 )
 
 
@@ -85,6 +90,15 @@ func GetTeacherAll(args map[string]string) (interface{}, error) {
 		return nil, err
 		return nil, err
 	}
 	}
 
 
+	var result struct {
+		ActualHours int
+	}
+
+	if err := DB().Raw(countActualTeacherHours, id, id).Scan(&result).Error; err != nil {
+		return nil, err
+	}
+	teacher.ActualHours = result.ActualHours
+
 	if err := DB().Preload("SupplyTeacher").Preload("Teacher").Preload("Subject").Preload("Student").Preload("Class").Where("teacher_id=? OR supply_teacher_id=?", id, id).Find(&teacher.Activities).Error; err != nil {
 	if err := DB().Preload("SupplyTeacher").Preload("Teacher").Preload("Subject").Preload("Student").Preload("Class").Where("teacher_id=? OR supply_teacher_id=?", id, id).Find(&teacher.Activities).Error; err != nil {
 		return nil, err
 		return nil, err
 	}
 	}
@@ -127,6 +141,11 @@ func GetTeachersAll(args map[string]string) (interface{}, error) {
 			}
 			}
 			teacher.SubjectsByClass[c.ID] = subjects
 			teacher.SubjectsByClass[c.ID] = subjects
 		}
 		}
+
+		// if err := DB().Raw(countActualTeacherHours, teacher.ID, teacher.ID).Scan(&teacher.ActualHours).Error; err != nil {
+		// 	return nil, err
+		// }
+
 	}
 	}
 
 
 	return teachers, nil
 	return teachers, nil