|
@@ -2,10 +2,8 @@ package orm
|
|
|
|
|
|
import (
|
|
import (
|
|
"errors"
|
|
"errors"
|
|
- "fmt"
|
|
|
|
|
|
|
|
"github.com/jinzhu/gorm"
|
|
"github.com/jinzhu/gorm"
|
|
- "gogs.carducci-dante.gov.it/karmen/config"
|
|
|
|
)
|
|
)
|
|
|
|
|
|
type Teacher struct {
|
|
type Teacher struct {
|
|
@@ -81,6 +79,13 @@ func GetTeachersAll() ([]*Teacher, error) {
|
|
return teachers, nil
|
|
return teachers, nil
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+func (t *Teacher) Save(teacher *Teacher) (*Teacher, error) {
|
|
|
|
+ if err := DB().Save(teacher).Error; err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+ return t, nil
|
|
|
|
+}
|
|
|
|
+
|
|
func (t *Teacher) GetClasses() ([]*Class, error) {
|
|
func (t *Teacher) GetClasses() ([]*Class, error) {
|
|
if err := DB().Raw(selectUniqueTeacherClasses, t.ID).Scan(&t.Classes).Error; err != nil {
|
|
if err := DB().Raw(selectUniqueTeacherClasses, t.ID).Scan(&t.Classes).Error; err != nil {
|
|
return nil, err
|
|
return nil, err
|
|
@@ -100,7 +105,6 @@ func (t *Teacher) GetActivitiesByClass(id string) ([]*Activity, error) {
|
|
return nil, err
|
|
return nil, err
|
|
}
|
|
}
|
|
return t.Activities, nil
|
|
return t.Activities, nil
|
|
-
|
|
|
|
}
|
|
}
|
|
|
|
|
|
func (t *Teacher) Create(db *gorm.DB, record map[string]interface{}) error {
|
|
func (t *Teacher) Create(db *gorm.DB, record map[string]interface{}) error {
|
|
@@ -122,80 +126,27 @@ func (t *Teacher) Create(db *gorm.DB, record map[string]interface{}) error {
|
|
return nil
|
|
return nil
|
|
}
|
|
}
|
|
|
|
|
|
-func (t *Teacher) CalcHours(tx *gorm.DB) {
|
|
|
|
|
|
+func (t Teacher) IsCoordinator() []Class {
|
|
var (
|
|
var (
|
|
- activities []Activity
|
|
|
|
- sum int
|
|
|
|
|
|
+ classes []Class
|
|
|
|
+ output []Class
|
|
)
|
|
)
|
|
|
|
|
|
- if err := tx.Model(t).Related(&activities).Error; err != nil {
|
|
|
|
- panic(err)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- for _, a := range activities {
|
|
|
|
- sum += a.Hours
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if err := tx.Model(t).Update("curr_hours", sum).Error; err != nil {
|
|
|
|
- panic(err)
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-func (t Teacher) GetSubjectsByClassID(classID uint) []Subject {
|
|
|
|
- var (
|
|
|
|
- activities []Activity
|
|
|
|
- subjects []Subject
|
|
|
|
- )
|
|
|
|
-
|
|
|
|
- if err := DB().Model(t).Preload("Subject").Related(&activities).Error; err != nil {
|
|
|
|
|
|
+ if err := DB().Model(t).Related(&classes, "Classes").Error; err != nil {
|
|
panic(err)
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
|
|
- for _, a := range activities {
|
|
|
|
- if a.ClassID == classID {
|
|
|
|
- subjects = append(subjects, a.Subject)
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return subjects
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-func (t *Teacher) IsCoordinator() ([]*Class, error) {
|
|
|
|
- var output []*Class
|
|
|
|
-
|
|
|
|
- classes, err := t.GetClasses()
|
|
|
|
- if err != nil {
|
|
|
|
- return nil, err
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
for _, class := range classes {
|
|
for _, class := range classes {
|
|
if class.CoordinatorID == t.ID {
|
|
if class.CoordinatorID == t.ID {
|
|
output = append(output, class)
|
|
output = append(output, class)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- return output, nil
|
|
|
|
-
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-func (t *Teacher) IsMinuter() ([]*Class, error) {
|
|
|
|
- var output []*Class
|
|
|
|
-
|
|
|
|
- classes, err := t.GetClasses()
|
|
|
|
- if err != nil {
|
|
|
|
- return nil, err
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- for _, class := range classes {
|
|
|
|
- if class.MinuterID == t.ID {
|
|
|
|
- output = append(output, class)
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ return output
|
|
|
|
|
|
- return output, nil
|
|
|
|
}
|
|
}
|
|
|
|
|
|
-func (t *Teacher) IsCoordinatorInClass(className string) bool {
|
|
|
|
|
|
+func (t Teacher) IsCoordinatorInClass(className string) bool {
|
|
var classes []Class
|
|
var classes []Class
|
|
|
|
|
|
if err := DB().Model(t).Where("name = ?", className).Related(&classes, "Classes").Error; err != nil {
|
|
if err := DB().Model(t).Where("name = ?", className).Related(&classes, "Classes").Error; err != nil {
|
|
@@ -212,143 +163,22 @@ func (t *Teacher) IsCoordinatorInClass(className string) bool {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
-func (t Teacher) HasClass(name string) bool {
|
|
|
|
- var classes []Class
|
|
|
|
|
|
+func (t Teacher) IsMinuter() []Class {
|
|
|
|
+ var (
|
|
|
|
+ classes []Class
|
|
|
|
+ output []Class
|
|
|
|
+ )
|
|
|
|
|
|
if err := DB().Model(t).Related(&classes, "Classes").Error; err != nil {
|
|
if err := DB().Model(t).Related(&classes, "Classes").Error; err != nil {
|
|
panic(err)
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
|
|
for _, class := range classes {
|
|
for _, class := range classes {
|
|
- if class.Name == name {
|
|
|
|
- return true
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return false
|
|
|
|
-
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-func (t Teacher) HasSubject(name string) bool {
|
|
|
|
- var subjects []Subject
|
|
|
|
-
|
|
|
|
- if err := DB().Model(t).Related(&subjects, "Subjects").Error; err != nil {
|
|
|
|
- panic(err)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- for _, subject := range subjects {
|
|
|
|
- if subject.Name == name {
|
|
|
|
- return true
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return false
|
|
|
|
-
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-func (t Teacher) HasSubjectInClass(subjectName string, className string) bool {
|
|
|
|
- var classes []Class
|
|
|
|
-
|
|
|
|
- if err := DB().Where("name = ?", className).Find(&classes).Error; err != nil {
|
|
|
|
- panic(err)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- subjects := t.GetSubjectsByClassID(classes[0].ID)
|
|
|
|
-
|
|
|
|
- for _, s := range subjects {
|
|
|
|
- if s.Name == subjectName {
|
|
|
|
- return true
|
|
|
|
|
|
+ if class.MinuterID == t.ID {
|
|
|
|
+ output = append(output, class)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- return false
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-// func (t *Teacher) CheckForIssues(tx *gorm.DB) {
|
|
|
|
-// if t.CurrHours != t.Hours {
|
|
|
|
-// var issues []Issue
|
|
|
|
-// if err := tx.Where("type = ? and reported = ?", IssueTeacherHours, 1).Model(t).Related(&issues).Error; err != nil {
|
|
|
|
-// panic(err)
|
|
|
|
-// }
|
|
|
|
-// if len(issues) == 0 {
|
|
|
|
-// desc := fmt.Sprintf(
|
|
|
|
-// "Le ore relative alla cattedra del docente %s %s non coincidono con la somma delle ore delle sue attività (%d/%d)",
|
|
|
|
-// t.Surname, t.Name,
|
|
|
|
-// t.CurrHours, t.Hours)
|
|
|
|
-// issue := Issue{
|
|
|
|
-// Type: IssueTeacherHours,
|
|
|
|
-// Description: desc,
|
|
|
|
-// Reported: true,
|
|
|
|
-// TeacherID: t.ID,
|
|
|
|
-// }
|
|
|
|
-// if err := tx.Save(&issue).Error; err != nil {
|
|
|
|
-// panic(err)
|
|
|
|
-// }
|
|
|
|
-// } else {
|
|
|
|
-// issues[0].Description = fmt.Sprintf(
|
|
|
|
-// "Le ore relative alla cattedra del docente %s %s non coincidono con la somma delle ore delle sue attività (%d/%d)",
|
|
|
|
-// t.Surname, t.Name,
|
|
|
|
-// t.CurrHours, t.Hours)
|
|
|
|
-// if err := tx.Save(&issues[0]).Error; err != nil {
|
|
|
|
-// panic(err)
|
|
|
|
-// }
|
|
|
|
-// }
|
|
|
|
-// } else {
|
|
|
|
-// var issues []Issue
|
|
|
|
-// if err := tx.Where("type = ? and reported = ?", IssueTeacherHours, 1).Model(t).Related(&issues).Error; err != nil {
|
|
|
|
-// panic(err)
|
|
|
|
-// }
|
|
|
|
-// if len(issues) > 0 {
|
|
|
|
-// if err := tx.Delete(&issues[0]).Error; err != nil {
|
|
|
|
-// panic(err)
|
|
|
|
-// }
|
|
|
|
-// }
|
|
|
|
-
|
|
|
|
-// }
|
|
|
|
-// }
|
|
|
|
-
|
|
|
|
-func (t *Teacher) generateCredential() error {
|
|
|
|
- t.Username = t.GenerateUsername()
|
|
|
|
- t.Password = t.GenerateSaltedPassword(t.Username)
|
|
|
|
- t.Email = fmt.Sprintf("%s@%s", t.Username, config.Config.Domain)
|
|
|
|
- return nil
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-func (t *Teacher) CheckForIssues(tx *gorm.DB) {
|
|
|
|
- // issue := newTeacherMaxHoursIssue(t)
|
|
|
|
- // if t.CurrHours != t.Hours {
|
|
|
|
- // issue.createIfNotExist(t)
|
|
|
|
- // } else {
|
|
|
|
- // issue.resetIfExist(t)
|
|
|
|
- // }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-func (t *Teacher) BeforeCreate(tx *gorm.DB) error {
|
|
|
|
- // FIXME: should re-generate only if related columns are modified
|
|
|
|
- t.generateCredential()
|
|
|
|
- return nil
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-func (t *Teacher) BeforeUpdate(tx *gorm.DB) error {
|
|
|
|
- // FIXME: should re-generate only if related columns are modified
|
|
|
|
- t.generateCredential()
|
|
|
|
- return nil
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-// func (t *Teacher) AfterUpdate(tx *gorm.DB) error {
|
|
|
|
-// // FIXME: should re-generate only if related columns are modified
|
|
|
|
-// t.generateCredential()
|
|
|
|
-// // t.CheckForIssues(tx)
|
|
|
|
-// return nil
|
|
|
|
-// }
|
|
|
|
|
|
+ return output
|
|
|
|
|
|
-func (t *Teacher) AfterDelete(tx *gorm.DB) error {
|
|
|
|
- var issues []Issue
|
|
|
|
- if err := tx.Where("type = ?", IssueTeacherHours).Model(t).Related(&issues).Error; err != nil {
|
|
|
|
- panic(err)
|
|
|
|
- }
|
|
|
|
- if err := tx.Delete(&issues).Error; err != nil {
|
|
|
|
- panic(err)
|
|
|
|
- }
|
|
|
|
- return nil
|
|
|
|
}
|
|
}
|