Selaa lähdekoodia

Work in progress

Andrea Fazzi 6 vuotta sitten
vanhempi
commit
5e439abe6a
7 muutettua tiedostoa jossa 82 lisäystä ja 76 poistoa
  1. 0 46
      handlers/classes.go
  2. 18 6
      orm/class.go
  3. 1 1
      orm/orm.go
  4. 24 0
      orm/orm_test.go
  5. 22 6
      orm/teacher.go
  6. 1 1
      templates/classes.html.tpl
  7. 16 16
      templates/classes_show.html.tpl

+ 0 - 46
handlers/classes.go

@@ -16,14 +16,6 @@ import (
 	"gogs.carducci-dante.gov.it/karmen/datasource/edt"
 	"gogs.carducci-dante.gov.it/karmen/datasource/edt"
 )
 )
 
 
-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 `
-)
-
 func classesHandler() http.Handler {
 func classesHandler() http.Handler {
 	fn := func(w http.ResponseWriter, r *http.Request) {
 	fn := func(w http.ResponseWriter, r *http.Request) {
 		classes, err := orm.GetClassesAll()
 		classes, err := orm.GetClassesAll()
@@ -46,44 +38,6 @@ func classesShowHandler() http.Handler {
 			renderer.Render[r.URL.Query()["format"][0]](w, r, class, r.URL.Query()["options"]...)
 			renderer.Render[r.URL.Query()["format"][0]](w, r, class, r.URL.Query()["options"]...)
 		}
 		}
 
 
-		// type teacherActivity struct {
-		// 	ActivityID int
-		// 	Name       string
-		// 	Surname    string
-		// 	Subject    string
-		// 	Hours      int
-		// }
-
-		// var data struct {
-		// 	Class             orm.Class
-		// 	TeacherActivities []teacherActivity
-		// }
-		// if err := orm.DB().First(&data.Class, mux.Vars(r)["id"]).Error; err != nil {
-		// 	panic(err)
-		// }
-
-		// orm.DB().Raw(selectClassActivities, mux.Vars(r)["id"]).Scan(&data.TeacherActivities)
-
-		// 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 !orm.DB().First(&data.Class.Coordinator, data.Class.CoordinatorID).RecordNotFound() {
-		// 		if err := orm.DB().First(&data.Class.Coordinator, data.Class.CoordinatorID).Error; err != nil {
-		// 			panic(err)
-		// 		}
-		// 	}
-		// }
-
-		// if data.Class.MinuterID != 0 {
-		// 	if !orm.DB().First(&data.Class.Minuter, data.Class.MinuterID).RecordNotFound() {
-		// 		if err := orm.DB().First(&data.Class.Minuter, data.Class.MinuterID).Error; err != nil {
-		// 			panic(err)
-		// 		}
-		// 	}
-		// }
-
 		// if err := renderer.Render(w, "base", "classes_show", data); err != nil {
 		// if err := renderer.Render(w, "base", "classes_show", data); err != nil {
 		// 	panic(err)
 		// 	panic(err)
 		// }
 		// }

+ 18 - 6
orm/class.go

@@ -2,16 +2,18 @@ package orm
 
 
 import (
 import (
 	"errors"
 	"errors"
+	"strconv"
 
 
 	"github.com/jinzhu/gorm"
 	"github.com/jinzhu/gorm"
 )
 )
 
 
 var (
 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 `
+	selectClassActivities = "SELECT * FROM activities WHERE class_id=?"
+
+	// 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 = `
 	selectUniqueClassTeachers = `
 SELECT surname FROM (SELECT activities.id as activity_id,teachers.name,teachers.surname,subjects.name as subject,activities.hours from activities 
 SELECT surname FROM (SELECT activities.id as activity_id,teachers.name,teachers.surname,subjects.name as subject,activities.hours from activities 
@@ -28,6 +30,7 @@ type Class struct {
 	Coordinator   Teacher
 	Coordinator   Teacher
 	Minuter       Teacher
 	Minuter       Teacher
 	Teachers      []*Teacher
 	Teachers      []*Teacher
+	Activities    []*Activity
 	Students      []*Student
 	Students      []*Student
 }
 }
 
 
@@ -64,7 +67,16 @@ func GetClass(id string) (*Class, error) {
 		return nil, err
 		return nil, err
 	}
 	}
 
 
-	DB().Raw(selectUniqueClassTeachers, id).Scan(&class.Teachers)
+	if err := DB().Raw(selectUniqueClassTeachers, id).Scan(&class.Teachers).Error; err != nil {
+		return nil, err
+	}
+	if err := DB().Raw(selectClassActivities, id).Scan(&class.Activities).Error; err != nil {
+		return nil, err
+	}
+
+	for _, teacher := range class.Teachers {
+		teacher.GetActivitiesByClass(strconv.Itoa(int(class.ID)))
+	}
 
 
 	if class.CoordinatorID != 0 {
 	if class.CoordinatorID != 0 {
 		if !DB().First(&class.Coordinator, class.CoordinatorID).RecordNotFound() {
 		if !DB().First(&class.Coordinator, class.CoordinatorID).RecordNotFound() {

+ 1 - 1
orm/orm.go

@@ -291,7 +291,7 @@ func AutoMigrate() {
 
 
 }
 }
 
 
-func GetTeacher(username string) (*Teacher, error) {
+func GetTeacherByUsername(username string) (*Teacher, error) {
 	teacher := Teacher{}
 	teacher := Teacher{}
 	currDB.Where(fmt.Sprintf("username='%s'", username)).Find(&teacher)
 	currDB.Where(fmt.Sprintf("username='%s'", username)).Find(&teacher)
 	return &teacher, nil
 	return &teacher, nil

+ 24 - 0
orm/orm_test.go

@@ -59,6 +59,19 @@ func (t *testSuite) TestGetTeachers() {
 	t.Equal("1 A", class.Name)
 	t.Equal("1 A", class.Name)
 }
 }
 
 
+func (t *testSuite) TestGetTeacherActivitiesByClass() {
+	teacher, err := GetTeacher("1")
+	t.Nil(err)
+	if !t.Failed() {
+		_, err := teacher.GetActivitiesByClass("1")
+		t.Nil(err)
+		if !t.Failed() {
+			t.True(len(teacher.Activities) > 0)
+		}
+	}
+
+}
+
 func (t *testSuite) TestGetClasses() {
 func (t *testSuite) TestGetClasses() {
 	classes, err := GetClasses()
 	classes, err := GetClasses()
 	t.Nil(err)
 	t.Nil(err)
@@ -84,12 +97,23 @@ func (t *testSuite) TestGetClass() {
 	class, err := GetClass("1")
 	class, err := GetClass("1")
 	t.Nil(err)
 	t.Nil(err)
 	if !t.Failed() {
 	if !t.Failed() {
+
 		t.Equal("1 A", class.Name)
 		t.Equal("1 A", class.Name)
+
+		// Test teachers
+
 		t.True(len(class.Teachers) > 0)
 		t.True(len(class.Teachers) > 0)
 		t.Equal("AGOSTINO", class.Teachers[0].Surname)
 		t.Equal("AGOSTINO", class.Teachers[0].Surname)
 		t.Equal("PETRUZZELLI", class.Teachers[8].Surname)
 		t.Equal("PETRUZZELLI", class.Teachers[8].Surname)
 		t.Equal("LUNGA", class.Coordinator.Surname)
 		t.Equal("LUNGA", class.Coordinator.Surname)
 		t.Equal("DONADONI", class.Minuter.Surname)
 		t.Equal("DONADONI", class.Minuter.Surname)
+
+		t.True(len(class.Teachers[0].Activities) > 0)
+
+		// Test activities
+
+		t.True(len(class.Activities) > 0)
+		t.Equal("1 A MATEMATICA 2h", class.Activities[0].Name)
 	}
 	}
 
 
 }
 }

+ 22 - 6
orm/teacher.go

@@ -11,11 +11,11 @@ import (
 type Teacher struct {
 type Teacher struct {
 	gorm.Model
 	gorm.Model
 	Credential
 	Credential
-	Classes     []Class
-	Subjects    []Subject
-	Activities  []Activity
-	Departments []Department
-	Issues      []Issue
+	Classes     []*Class
+	Subjects    []*Subject
+	Activities  []*Activity
+	Departments []*Department
+	Issues      []*Issue
 	Hours       int
 	Hours       int
 	CurrHours   int
 	CurrHours   int
 	TheBossId   uint
 	TheBossId   uint
@@ -33,6 +33,14 @@ INNER JOIN subjects on subjects.id=activities.subject_id
 WHERE activities.teacher_id=?`
 WHERE activities.teacher_id=?`
 )
 )
 
 
+func GetTeacher(id string) (*Teacher, error) {
+	var teacher Teacher
+	if err := DB().Find(&teacher, id).Error; err != nil {
+		return nil, err
+	}
+	return &teacher, nil
+}
+
 func GetTeachers() ([]*Teacher, error) {
 func GetTeachers() ([]*Teacher, error) {
 	var teachers []*Teacher
 	var teachers []*Teacher
 	if err := DB().Order("surname,name").Find(&teachers).Error; err != nil {
 	if err := DB().Order("surname,name").Find(&teachers).Error; err != nil {
@@ -41,13 +49,21 @@ func GetTeachers() ([]*Teacher, error) {
 	return teachers, nil
 	return teachers, 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
 	}
 	}
 	return t.Classes, nil
 	return t.Classes, nil
 }
 }
 
 
+func (t *Teacher) GetActivitiesByClass(id string) ([]*Activity, error) {
+	if err := DB().Debug().Where("class_id=? AND teacher_id=?", id, t.ID).Find(&t.Activities).Error; err != nil {
+		return nil, err
+	}
+	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 {
 	result := new(Teacher)
 	result := new(Teacher)
 
 

+ 1 - 1
templates/classes.html.tpl

@@ -45,7 +45,7 @@
   {{else}}
   {{else}}
   <div class="list-group" id="myUL">
   <div class="list-group" id="myUL">
     {{range $class := .}}
     {{range $class := .}}
-    <a class="list-group-item clearfix" href="/classes/{{$class.ID}}">
+    <a class="list-group-item clearfix" href="/classes/{{$class.ID}}?format=html&options=base&options=classes_show">
       <span class="glyphicon glyphicon-blackboard"></span>
       <span class="glyphicon glyphicon-blackboard"></span>
       {{$class.Name}}
       {{$class.Name}}
       <div class="text-right">
       <div class="text-right">

+ 16 - 16
templates/classes_show.html.tpl

@@ -4,22 +4,22 @@
 
 
   <ol class="breadcrumb">
   <ol class="breadcrumb">
     <li><a href="/classes">Classi</a></li>
     <li><a href="/classes">Classi</a></li>
-    <li class="active"><a href="#">{{.Class.Name}}</a></li>
+    <li class="active"><a href="#">{{.Name}}</a></li>
   </ol>
   </ol>
 
 
   <div class="karmen-info-header">
   <div class="karmen-info-header">
     <div class="row">
     <div class="row">
       <div class="col-md-8">
       <div class="col-md-8">
-	<h1>{{.Class.Name}}</h1>
+	<h1>{{.Name}}</h1>
       </div>
       </div>
       <div class="col-md-4">
       <div class="col-md-4">
 	<div class="btn-group pull-right" role="group">
 	<div class="btn-group pull-right" role="group">
-	  <a href="/classes/{{.Class.ID}}/update" class="btn btn-primary">
+	  <a href="/classes/{{.ID}}/update" class="btn btn-primary">
 	    <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
 	    <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
 	    Modifica
 	    Modifica
 	  </a>
 	  </a>
-	  <button href="/classes/{{.Class.ID}}/delete"
-		  data-url="/classes/{{.Class.ID}}/delete"
+	  <button href="/classes/{{.ID}}/delete"
+		  data-url="/classes/{{.ID}}/delete"
 		  class="btn btn-danger karmen-ajax-delete">
 		  class="btn btn-danger karmen-ajax-delete">
 	    <span class="glyphicon glyphicon-trash" aria-hidden="true"></span>
 	    <span class="glyphicon glyphicon-trash" aria-hidden="true"></span>
 	    Elimina
 	    Elimina
@@ -29,15 +29,15 @@
     </div>
     </div>
   </div>
   </div>
 
 
-  <h2 class="karmen-relation-header">Docenti della {{.Class.Name}}</h2>
+  <h2 class="karmen-relation-header">Docenti della {{.Name}}</h2>
   <div class="list-group" id="classes_list_group">
   <div class="list-group" id="classes_list_group">
-    {{if not .TeacherActivities}}
+    {{if not .Teachers}}
     <p>Alla classe non è associata alcuna attività
     <p>Alla classe non è associata alcuna attività
 	didattica. Clicca <a href="/activities/add">qui</a> per creare
 	didattica. Clicca <a href="/activities/add">qui</a> per creare
 	una nuova attività didattica da associare alla classe.</p>
 	una nuova attività didattica da associare alla classe.</p>
     {{else}}
     {{else}}
-    {{range $teacher := .TeacherActivities}}
-      <a href="/activities/{{$teacher.ActivityID}}/update" class="list-group-item clearfix">
+    {{range $teacher := .Teachers}}
+      <a href="/activities/{{$teacher.ID}}/update" class="list-group-item clearfix">
 	<span class="glyphicon glyphicon-user"></span>
 	<span class="glyphicon glyphicon-user"></span>
 	{{$teacher.Surname}} {{$teacher.Name}}
 	{{$teacher.Surname}} {{$teacher.Name}}
 	<div class="text-right">
 	<div class="text-right">
@@ -50,16 +50,16 @@
 
 
   <h2 class="karmen-relation-header">Coordinatore e verbalizzante</h2>
   <h2 class="karmen-relation-header">Coordinatore e verbalizzante</h2>
   <div class="list-group" id="classes_list_group">
   <div class="list-group" id="classes_list_group">
-    {{if not .TeacherActivities}}
+    {{if not .Teachers}}
     <p>Alla classe non è associata alcuna attività
     <p>Alla classe non è associata alcuna attività
 	didattica. Clicca <a href="/activities/add">qui</a> per creare
 	didattica. Clicca <a href="/activities/add">qui</a> per creare
 	una nuova attività didattica da associare alla classe.</p>
 	una nuova attività didattica da associare alla classe.</p>
     {{else}}
     {{else}}
 
 
-    {{if .Class.CoordinatorID}}
-    <a href="/teachers/{{.Class.Coordinator.ID}}" class="list-group-item clearfix">
+    {{if .CoordinatorID}}
+    <a href="/teachers/{{.Coordinator.ID}}" class="list-group-item clearfix">
       <span class="glyphicon glyphicon-user"></span>
       <span class="glyphicon glyphicon-user"></span>
-      {{.Class.Coordinator.Name}} {{.Class.Coordinator.Surname}}
+      {{.Coordinator.Name}} {{.Coordinator.Surname}}
       <div class="text-right">
       <div class="text-right">
 	<small>Coordinatore</small>
 	<small>Coordinatore</small>
       </div>
       </div>
@@ -68,10 +68,10 @@
     <span class="list-group-item clearfix">Nessun coordinatore</span>
     <span class="list-group-item clearfix">Nessun coordinatore</span>
     {{end}}
     {{end}}
 
 
-    {{if .Class.MinuterID}}
-    <a href="/teachers/{{.Class.Minuter.ID}}" class="list-group-item clearfix">
+    {{if .MinuterID}}
+    <a href="/teachers/{{.Minuter.ID}}" class="list-group-item clearfix">
       <span class="glyphicon glyphicon-user"></span>
       <span class="glyphicon glyphicon-user"></span>
-      {{.Class.Minuter.Name}} {{.Class.Minuter.Surname}}
+      {{.Minuter.Name}} {{.Minuter.Surname}}
       <div class="text-right">
       <div class="text-right">
 	<small>Verbalizzante</small>
 	<small>Verbalizzante</small>
       </div>
       </div>