|
@@ -18,18 +18,36 @@ import (
|
|
"gogs.carducci-dante.gov.it/karmen/orm"
|
|
"gogs.carducci-dante.gov.it/karmen/orm"
|
|
)
|
|
)
|
|
|
|
|
|
|
|
+var (
|
|
|
|
+ selectClassActivities = `
|
|
|
|
+SELECT activities.id AS activity_id,teachers.name,teachers.surname,subjects.name AS subject,activities.hours FROM activities
|
|
|
|
+INNER JOIN teachers ON teachers.id=activities.teacher_id
|
|
|
|
+INNER JOIN subjects ON subjects.id=activities.subject_id
|
|
|
|
+WHERE class_id=? AND activities.deleted_at IS NULL `
|
|
|
|
+
|
|
|
|
+ selectUniqueClassTeachers = `
|
|
|
|
+SELECT surname FROM (SELECT activities.id as activity_id,teachers.name,teachers.surname,subjects.name as subject,activities.hours from activities
|
|
|
|
+inner join teachers on teachers.id=activities.teacher_id
|
|
|
|
+inner join subjects on subjects.id=activities.subject_id
|
|
|
|
+where class_id=?) as activities GROUP BY surname`
|
|
|
|
+)
|
|
|
|
+
|
|
func classesHandler() http.Handler {
|
|
func classesHandler() http.Handler {
|
|
fn := func(w http.ResponseWriter, r *http.Request) {
|
|
fn := func(w http.ResponseWriter, r *http.Request) {
|
|
- var data struct {
|
|
|
|
- Classes []orm.Class
|
|
|
|
- }
|
|
|
|
- if err := orm.DB().Preload("Teachers").Find(&data.Classes).Error; err != nil {
|
|
|
|
|
|
+ var classes []*orm.Class
|
|
|
|
+
|
|
|
|
+ if err := orm.DB().Find(&classes).Error; err != nil {
|
|
panic(err)
|
|
panic(err)
|
|
}
|
|
}
|
|
- sort.Slice(data.Classes, func(i, j int) bool {
|
|
|
|
- return strings.ToLower(data.Classes[i].Name) < strings.ToLower(data.Classes[j].Name)
|
|
|
|
|
|
+
|
|
|
|
+ for _, class := range classes {
|
|
|
|
+ orm.DB().Raw(selectUniqueClassTeachers, class.ID).Scan(&class.Teachers)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ sort.Slice(classes, func(i, j int) bool {
|
|
|
|
+ return strings.ToLower(classes[i].Name) < strings.ToLower(classes[j].Name)
|
|
})
|
|
})
|
|
- if err := renderer.Render(w, "base", "classes", data); err != nil {
|
|
|
|
|
|
+ if err := renderer.Render(w, "base", "classes", classes); err != nil {
|
|
panic(err)
|
|
panic(err)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -38,20 +56,27 @@ func classesHandler() http.Handler {
|
|
|
|
|
|
func classesShowHandler() http.Handler {
|
|
func classesShowHandler() http.Handler {
|
|
fn := func(w http.ResponseWriter, r *http.Request) {
|
|
fn := func(w http.ResponseWriter, r *http.Request) {
|
|
|
|
+
|
|
|
|
+ type teacherActivity struct {
|
|
|
|
+ ActivityID int
|
|
|
|
+ Name string
|
|
|
|
+ Surname string
|
|
|
|
+ Subject string
|
|
|
|
+ Hours int
|
|
|
|
+ }
|
|
|
|
+
|
|
var data struct {
|
|
var data struct {
|
|
- Class orm.Class
|
|
|
|
- Teachers []orm.Teacher
|
|
|
|
|
|
+ Class orm.Class
|
|
|
|
+ TeacherActivities []teacherActivity
|
|
}
|
|
}
|
|
if err := orm.DB().First(&data.Class, mux.Vars(r)["id"]).Error; err != nil {
|
|
if err := orm.DB().First(&data.Class, mux.Vars(r)["id"]).Error; err != nil {
|
|
panic(err)
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
|
|
- if err := orm.DB().Model(&data.Class).Preload("Subjects").Related(&data.Teachers, "Teachers").Error; err != nil {
|
|
|
|
- panic(err)
|
|
|
|
- }
|
|
|
|
|
|
+ orm.DB().Raw(selectClassActivities, mux.Vars(r)["id"]).Scan(&data.TeacherActivities)
|
|
|
|
|
|
- sort.Slice(data.Teachers, func(i, j int) bool {
|
|
|
|
- return strings.ToLower(data.Teachers[i].Surname) < strings.ToLower(data.Teachers[j].Surname)
|
|
|
|
|
|
+ sort.Slice(data.TeacherActivities, func(i, j int) bool {
|
|
|
|
+ return strings.ToLower(data.TeacherActivities[i].Surname) < strings.ToLower(data.TeacherActivities[j].Surname)
|
|
})
|
|
})
|
|
|
|
|
|
if data.Class.CoordinatorID != 0 {
|
|
if data.Class.CoordinatorID != 0 {
|