Prechádzať zdrojové kódy

Add SupplyTeacher feature

Andrea Fazzi 6 rokov pred
rodič
commit
6a5f6b5491

+ 1 - 1
generator/templates/all.tpl

@@ -5,7 +5,7 @@
   <div class="karmen-info-header">
     <div class="row">
       <div class="col-md-8">
-	<h1>{{.Models}}</h1>
+	<h1>{{.Models}} {{"({{len .Data}})"}}</h1>
       </div>
       <div class="col-md-4">
 	<a href="/{{.Models}}/add/?{{"{{query \"tpl_layout\" \"base\" \"tpl_content\" \""}}{{.Models}}{{"_add_update\"}}\""}} class="btn btn-primary pull-right">

+ 20 - 14
orm/activity.go

@@ -10,15 +10,17 @@ import (
 type Activity struct {
 	gorm.Model
 
-	Class   *Class
-	Teacher *Teacher
-	Subject *Subject
-	Student *Student
-
-	ClassID   uint `schema:"class_id"`
-	TeacherID uint `schema:"teacher_id"`
-	SubjectID uint `schema:"subject_id"`
-	StudentID uint `schema:"student_id"`
+	Class         *Class
+	Teacher       *Teacher
+	SupplyTeacher *Teacher
+	Subject       *Subject
+	Student       *Student
+
+	ClassID         uint `schema:"class_id"`
+	TeacherID       uint `schema:"teacher_id"`
+	SupplyTeacherID uint `schema:"supply_teacher_id"`
+	SubjectID       uint `schema:"subject_id"`
+	StudentID       uint `schema:"student_id"`
 
 	Hours int
 
@@ -33,10 +35,11 @@ type ActivityForUpdate struct {
 	AllTeachers []*Teacher
 	AllStudents []*Student
 
-	SelectedStudent map[uint]string
-	SelectedTeacher map[uint]string
-	SelectedSubject map[uint]string
-	SelectedClass   map[uint]string
+	SelectedStudent       map[uint]string
+	SelectedTeacher       map[uint]string
+	SelectedSupplyTeacher map[uint]string
+	SelectedSubject       map[uint]string
+	SelectedClass         map[uint]string
 }
 
 type ActivityForAdd struct {
@@ -72,7 +75,7 @@ func GetActivityForUpdate(args map[string]string) (interface{}, error) {
 
 	id := args["id"]
 
-	if err := DB().Preload("Teacher").Preload("Subject").Preload("Class").First(&data.Activity, id).Error; err != nil {
+	if err := DB().Preload("SupplyTeacher").Preload("Teacher").Preload("Subject").Preload("Class").First(&data.Activity, id).Error; err != nil {
 		return nil, err
 	}
 
@@ -95,6 +98,9 @@ func GetActivityForUpdate(args map[string]string) (interface{}, error) {
 	data.SelectedTeacher = make(map[uint]string)
 	data.SelectedTeacher[data.Activity.TeacherID] = "selected"
 
+	data.SelectedSupplyTeacher = make(map[uint]string)
+	data.SelectedSupplyTeacher[data.Activity.SupplyTeacherID] = "selected"
+
 	data.SelectedStudent = make(map[uint]string)
 	data.SelectedStudent[data.Activity.StudentID] = "selected"
 

+ 12 - 17
orm/teacher.go

@@ -17,28 +17,23 @@ type Teacher struct {
 	Activities  []*Activity
 	Departments []*Department
 	Hours       int
-	CurrHours   int
 }
 
 var (
-	selectDistinctTeachers = `
-SELECT teachers.* FROM activities
-INNER JOIN teachers ON activities.teacher_id=teachers.id
-`
 	selectUniqueTeacherClasses = `
 SELECT DISTINCT classes.* FROM activities 
 INNER JOIN classes on classes.id=activities.class_id 
-WHERE teacher_id=?`
+WHERE (teacher_id=? OR supply_teacher_id=?)`
 
 	selectUniqueTeacherSubjects = `
 SELECT DISTINCT subjects.* FROM activities 
 INNER JOIN subjects on subjects.id=activities.subject_id 
-WHERE activities.teacher_id=?`
+WHERE (teacher_id=? OR supply_teacher_id=?)`
 
 	selectUniqueTeacherStudents = `
 SELECT DISTINCT students.* FROM activities 
 INNER JOIN students on students.id=activities.student_id 
-WHERE activities.teacher_id=?`
+WHERE (teacher_id=? OR supply_teacher_id=?)`
 )
 
 func (t *Teacher) GetID() uint { return t.ID }
@@ -60,19 +55,19 @@ func GetTeacherAll(args map[string]string) (interface{}, error) {
 		return nil, err
 	}
 
-	if err := DB().Raw(selectUniqueTeacherClasses, id).Scan(&teacher.Classes).Error; err != nil {
+	if err := DB().Raw(selectUniqueTeacherClasses, id, id).Scan(&teacher.Classes).Error; err != nil {
 		return nil, err
 	}
 
-	if err := DB().Raw(selectUniqueTeacherSubjects, id).Scan(&teacher.Subjects).Error; err != nil {
+	if err := DB().Raw(selectUniqueTeacherSubjects, id, id).Scan(&teacher.Subjects).Error; err != nil {
 		return nil, err
 	}
 
-	if err := DB().Raw(selectUniqueTeacherStudents, id).Scan(&teacher.Students).Error; err != nil {
+	if err := DB().Raw(selectUniqueTeacherStudents, id, 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 {
+	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
 	}
 
@@ -192,35 +187,35 @@ func DeleteTeacher(args map[string]string, r *http.Request) (IDer, 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, t.ID).Scan(&t.Classes).Error; err != nil {
 		return nil, err
 	}
 	return t.Classes, nil
 }
 
 func (t *Teacher) GetSubjects() ([]*Subject, error) {
-	if err := DB().Raw(selectUniqueTeacherSubjects, t.ID).Scan(&t.Subjects).Error; err != nil {
+	if err := DB().Raw(selectUniqueTeacherSubjects, t.ID, t.ID).Scan(&t.Subjects).Error; err != nil {
 		return nil, err
 	}
 	return t.Subjects, nil
 }
 
 func (t *Teacher) GetStudents() ([]*Student, error) {
-	if err := DB().Raw(selectUniqueTeacherStudents, t.ID).Scan(&t.Students).Error; err != nil {
+	if err := DB().Raw(selectUniqueTeacherStudents, t.ID, 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 {
+	if err := DB().Preload("SupplyTeacher").Preload("Teacher").Preload("Subject").Preload("Class").Where("teacher_id=? OR supply_teacher_id=?", t.ID, t.ID).Find(&t.Activities).Error; err != nil {
 		return nil, err
 	}
 	return t.Activities, nil
 }
 
 func (t *Teacher) GetActivitiesByClass(id string) ([]*Activity, error) {
-	if err := DB().Preload("Teacher").Where("class_id=? AND teacher_id=?", id, t.ID).Find(&t.Activities).Error; err != nil {
+	if err := DB().Preload("Teacher").Where("class_id=? AND (teacher_id=? or supply_teacher_id=?)", id, t.ID, t.ID).Find(&t.Activities).Error; err != nil {
 		return nil, err
 	}
 	return t.Activities, nil

+ 1 - 1
templates/activities.html.tpl

@@ -5,7 +5,7 @@
   <div class="karmen-info-header">
     <div class="row">
       <div class="col-md-8">
-	<h1>Attività</h1>
+	<h1>Attività ({{len .Data}})</h1>
       </div>
       <div class="col-md-4">
 	<a href="/activities/add/?{{query "tpl_layout" "base" "tpl_content" "activities_add_update"}}" class="btn btn-primary pull-right">

+ 17 - 0
templates/activities_add_update.html.tpl

@@ -109,6 +109,23 @@
       </select>
     </div>
 
+    <div class="form-group">
+      <label class="control-label" for="supply_teacher_id">Docente supplente</label>
+      <select name="supply_teacher_id" class="form-control selectpicker" id="supply_teacher_id" placeholder="Docente supplente" data-live-search="true" form="form_activities_add_update" title="Seleziona il nome del docente supplente" data-dropup-auto="false">
+	<option value="0"></option>
+  	{{range $supplyTeacher := .Data.AllTeachers}}
+	{{if $.Options.Get "update"}}
+  	<option
+	   value="{{$supplyTeacher.ID}}"
+	   {{index $.Data.SelectedSupplyTeacher $supplyTeacher.ID}}>{{$supplyTeacher.Name}} {{$supplyTeacher.Surname}}
+	</option>
+	{{else}}
+  	<option value="{{$supplyTeacher.ID}}">{{$supplyTeacher.Name}} {{$supplyTeacher.Surname}}</option>
+	{{end}}
+  	{{end}}
+      </select>
+    </div>
+
     <div class="form-group">
       <label class="control-label" for="hours">Numero di ore</label>
       <input class="form-control" min="0" type="number" name="hours" id="hours" {{if .Options.Get "update"}}value="{{.Data.Activity.Hours}}"{{end}} required>

+ 1 - 1
templates/classes.html.tpl

@@ -5,7 +5,7 @@
   <div class="karmen-info-header">
     <div class="row">
       <div class="col-md-8">
-	<h1>Classi</h1>
+	<h1>Classi ({{len .Data}})</h1>
       </div>
       <div class="col-md-4">
 	<div class="btn-group pull-right">

+ 1 - 1
templates/departments.html.tpl

@@ -5,7 +5,7 @@
   <div class="karmen-info-header">
     <div class="row">
       <div class="col-md-8">
-	<h1>Dipartimenti</h1>
+	<h1>Dipartimenti ({{len .Data}})</h1>
       </div>
       <div class="col-md-4">
 	<a href="/departments/add/?{{query "tpl_layout" "base" "tpl_content" "departments_add_update"}}" class="btn btn-primary pull-right">

+ 1 - 1
templates/students.html.tpl

@@ -5,7 +5,7 @@
   <div class="karmen-info-header">
     <div class="row">
       <div class="col-md-8">
-	<h1>Studenti</h1>
+	<h1>Studenti ({{len .Data}})</h1>
       </div>
       <div class="col-md-4">
 	<a href="/students/add/?{{query "tpl_layout" "base" "tpl_content" "students_add_update"}}" class="btn btn-primary pull-right">

+ 1 - 1
templates/subjects.html.tpl

@@ -5,7 +5,7 @@
   <div class="karmen-info-header">
     <div class="row">
       <div class="col-md-8">
-	<h1>Materie</h1>
+	<h1>Materie ({{len .Data}})</h1>
       </div>
       <div class="col-md-4">
 	<div class="btn-group pull-right">

+ 1 - 1
templates/teachers.html.tpl

@@ -5,7 +5,7 @@
   <div class="karmen-info-header">
     <div class="row">
       <div class="col-md-8">
-	<h1>Docenti</h1>
+	<h1>Docenti ({{len .Data}})</h1>
       </div>
       <div class="col-md-4">
 	

+ 1 - 1
templates/teachers_show.html.tpl

@@ -104,7 +104,7 @@
 	{{range $activity := .Data.Activities}}
 	<a href="/activities/{{$activity.ID}}?{{query "tpl_layout" "base" "tpl_content" "activities_show"}}" class="list-group-item clearfix">
 	  <span class="glyphicon glyphicon-briefcase"></span>
-	  {{$activity.Subject.Name}} {{$activity.Class.Name}} {{$activity.Hours}}h
+	  {{$activity.Subject.Name}} {{$activity.Class.Name}} {{$activity.Hours}}h{{if $activity.SupplyTeacher}}{{if ne $activity.SupplyTeacher.Surname $.Data.Surname}} ({{$activity.SupplyTeacher.Surname}}){{end}}{{end}}
 	  {{end}}
 	</a>
       </div>