Przeglądaj źródła

Handle teacher->students relation

Andrea Fazzi 6 lat temu
rodzic
commit
e2bbfd76fa
3 zmienionych plików z 51 dodań i 2 usunięć
  1. 8 1
      handlers/handlers.go
  2. 21 1
      orm/teacher.go
  3. 22 0
      templates/teachers_show.html.tpl

+ 8 - 1
handlers/handlers.go

@@ -51,7 +51,14 @@ var (
 		SigningMethod: jwt.SigningMethodHS256,
 	})
 
-	models = []string{"teachers", "classes", "subjects", "departments", "activities", "students"}
+	models = []string{
+		"teachers",
+		"classes",
+		"subjects",
+		"departments",
+		"activities",
+		"students",
+	}
 )
 
 func (pp PathPattern) RedirectPath(model string, id ...uint) string {

+ 21 - 1
orm/teacher.go

@@ -12,6 +12,7 @@ type Teacher struct {
 	gorm.Model
 	Credential
 	Classes     []*Class
+	Students    []*Student
 	Subjects    []*Subject
 	Activities  []*Activity
 	Departments []*Department
@@ -32,6 +33,11 @@ WHERE teacher_id=?`
 	selectUniqueTeacherSubjects = `
 SELECT DISTINCT subjects.* FROM activities 
 INNER JOIN subjects on subjects.id=activities.subject_id 
+WHERE activities.teacher_id=?`
+
+	selectUniqueTeacherStudents = `
+SELECT DISTINCT students.* FROM activities 
+INNER JOIN students on students.id=activities.student_id 
 WHERE activities.teacher_id=?`
 )
 
@@ -62,7 +68,11 @@ func GetTeacherAll(args map[string]string) (interface{}, error) {
 		return nil, err
 	}
 
-	if err := DB().Preload("Teacher").Preload("Subject").Preload("Class").Where("teacher_id=?", id).Find(&teacher.Activities).Error; err != nil {
+	if err := DB().Raw(selectUniqueTeacherStudents, id).Scan(&teacher.Students).Error; err != nil {
+		return nil, err
+	}
+
+	if err := DB().Preload("Teacher").Preload("Subject").Preload("Student").Preload("Class").Where("teacher_id=?", id).Find(&teacher.Activities).Error; err != nil {
 		return nil, err
 	}
 
@@ -88,6 +98,9 @@ func GetTeachersAll(args map[string]string) (interface{}, error) {
 	for _, teacher := range teachers {
 		teacher.GetSubjects()
 	}
+	for _, teacher := range teachers {
+		teacher.GetStudents()
+	}
 	for _, teacher := range teachers {
 		teacher.GetActivities()
 	}
@@ -171,6 +184,13 @@ func (t *Teacher) GetSubjects() ([]*Subject, error) {
 	return t.Subjects, nil
 }
 
+func (t *Teacher) GetStudents() ([]*Student, error) {
+	if err := DB().Raw(selectUniqueTeacherStudents, t.ID).Scan(&t.Students).Error; err != nil {
+		return nil, err
+	}
+	return t.Students, nil
+}
+
 func (t *Teacher) GetActivities() ([]*Activity, error) {
 	if err := DB().Preload("Teacher").Preload("Subject").Preload("Class").Where("teacher_id=?", t.ID).Find(&t.Activities).Error; err != nil {
 		return nil, err

+ 22 - 0
templates/teachers_show.html.tpl

@@ -73,6 +73,28 @@
     
   </div>
 
+  <div class="row">
+    <div class="col-md-12">
+      
+      <h2 class="karmen-relation-header">Studenti</h2>
+      {{if .Data.Students}}
+      <div class="list-group" id="students_list_group">
+	{{range $student := .Data.Students}}
+	<a href="/students/{{$student.ID}}?{{query "tpl_layout" "base" "tpl_content" "students_show"}}" class="list-group-item clearfix">
+	  <span class="glyphicon glyphicon-blackboard"></span>
+	  {{$student.Surname}} {{$student.Name}}
+	  {{end}}
+	</a>
+      </div>
+      {{else}}
+      <p>Al docente non è associata alcuna attività
+	didattica. Clicca <a href="/activities/add/?{{query "tpl_layout" "base" "tpl_content" "activities_add_update"}}">qui</a> per
+	creare una nuova attività didattica da associare al docente.</p>
+      {{end}}
+    </div>
+    
+  </div>
+
   <div class="row">
     <div class="col-md-12">