| 
					
				 | 
			
			
				@@ -2,10 +2,8 @@ package orm 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"errors" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	"fmt" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"github.com/jinzhu/gorm" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	"gogs.carducci-dante.gov.it/karmen/config" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 type Teacher struct { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -81,6 +79,13 @@ func GetTeachersAll() ([]*Teacher, error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	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) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if err := DB().Raw(selectUniqueTeacherClasses, t.ID).Scan(&t.Classes).Error; err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return nil, err 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -100,7 +105,6 @@ func (t *Teacher) GetActivitiesByClass(id string) ([]*Activity, error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return nil, err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	return t.Activities, nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 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 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-func (t *Teacher) CalcHours(tx *gorm.DB) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func (t Teacher) IsCoordinator() []Class { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	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) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	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 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if class.CoordinatorID == t.ID { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			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 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	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 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		panic(err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	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 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |