Andrea Fazzi 6 жил өмнө
parent
commit
c30c2deea9

+ 1 - 1
handlers/handlers.go

@@ -71,7 +71,7 @@ func Handlers() *mux.Router {
 
 
 	// Generate model handlers
 	// Generate model handlers
 
 
-	for _, model := range []string{"teachers", "classes", "activities"} {
+	for _, model := range []string{"teachers", "classes", "subjects", "activities"} {
 		generateHandler(r, model)
 		generateHandler(r, model)
 	}
 	}
 
 

+ 60 - 1
orm/class.go

@@ -29,6 +29,17 @@ type Class struct {
 	Students      []*Student
 	Students      []*Student
 }
 }
 
 
+type ClassForUpdate struct {
+	Class               Class
+	AllTeachers         []*Teacher
+	SelectedCoordinator map[uint]string
+	SelectedMinuter     map[uint]string
+}
+
+type ClassForAdd struct {
+	AllTeachers []*Teacher
+}
+
 func (t *Class) GetID() uint { return t.ID }
 func (t *Class) GetID() uint { return t.ID }
 
 
 func GetClass(args map[string]string) (interface{}, error) {
 func GetClass(args map[string]string) (interface{}, error) {
@@ -52,10 +63,26 @@ func GetClassAll(args map[string]string) (interface{}, error) {
 		return nil, err
 		return nil, err
 	}
 	}
 
 
-	if err := DB().Preload("Class").Preload("Subject").Preload("Class").Where("class_id=?", id).Find(&class.Activities).Error; err != nil {
+	if err := DB().Preload("Teacher").Preload("Subject").Preload("Class").Where("class_id=?", id).Find(&class.Activities).Error; err != nil {
 		return nil, err
 		return nil, err
 	}
 	}
 
 
+	if class.CoordinatorID != 0 {
+		if !DB().First(&class.Coordinator, class.CoordinatorID).RecordNotFound() {
+			if err := DB().First(&class.Coordinator, class.CoordinatorID).Error; err != nil {
+				return nil, err
+			}
+		}
+	}
+
+	if class.MinuterID != 0 {
+		if !DB().First(&class.Minuter, class.MinuterID).RecordNotFound() {
+			if err := DB().First(&class.Minuter, class.MinuterID).Error; err != nil {
+				return nil, err
+			}
+		}
+	}
+
 	return &class, nil
 	return &class, nil
 }
 }
 
 
@@ -144,6 +171,38 @@ func (c *Class) GetTeachers() ([]*Teacher, error) {
 	return c.Teachers, nil
 	return c.Teachers, nil
 }
 }
 
 
+func GetClassForUpdate(args map[string]string) (interface{}, error) {
+	var data ClassForUpdate
+
+	id := args["id"]
+
+	if err := DB().Preload("Coordinator").Preload("Minuter").First(&data.Class, id).Error; err != nil {
+		return nil, err
+	}
+
+	if err := DB().Find(&data.AllTeachers).Error; err != nil {
+		return nil, err
+	}
+
+	data.SelectedMinuter = make(map[uint]string)
+	data.SelectedMinuter[data.Class.MinuterID] = "selected"
+
+	data.SelectedCoordinator = make(map[uint]string)
+	data.SelectedCoordinator[data.Class.CoordinatorID] = "selected"
+
+	return data, nil
+}
+
+func GetClassForAdd(args map[string]string) (interface{}, error) {
+	var data ClassForAdd
+
+	if err := DB().Find(&data.AllTeachers).Error; err != nil {
+		return nil, err
+	}
+
+	return data, nil
+}
+
 // func GetClasses() ([]*Class, error) {
 // func GetClasses() ([]*Class, error) {
 // 	var classes []*Class
 // 	var classes []*Class
 // 	if err := DB().Order("name").Find(&classes).Error; err != nil {
 // 	if err := DB().Order("name").Find(&classes).Error; err != nil {

+ 14 - 3
orm/orm.go

@@ -108,8 +108,14 @@ var (
 		// Classes
 		// Classes
 		"/classes":             GetClassesAll,
 		"/classes":             GetClassesAll,
 		"/classes/{id}":        GetClassAll,
 		"/classes/{id}":        GetClassAll,
-		"/classes/{id}/update": GetClass,
-		"/classes/add/":        GetNothing,
+		"/classes/{id}/update": GetClassForUpdate,
+		"/classes/add/":        GetClassForAdd,
+
+		// Subjects
+		"/subjects":             GetSubjectsAll,
+		"/subjects/{id}":        GetSubjectAll,
+		"/subjects/{id}/update": GetSubjectForUpdate,
+		"/subjects/add/":        GetSubjectForAdd,
 
 
 		// Activity
 		// Activity
 		"/activities":             GetActivitiesAll,
 		"/activities":             GetActivitiesAll,
@@ -124,11 +130,16 @@ var (
 		"/teachers/{id}/delete": DeleteTeacher,
 		"/teachers/{id}/delete": DeleteTeacher,
 		"/teachers/add/":        AddTeacher,
 		"/teachers/add/":        AddTeacher,
 
 
-		// Teacher
+		// Classes
 		"/classes/{id}/update": UpdateClass,
 		"/classes/{id}/update": UpdateClass,
 		"/classes/{id}/delete": DeleteClass,
 		"/classes/{id}/delete": DeleteClass,
 		"/classes/add/":        AddClass,
 		"/classes/add/":        AddClass,
 
 
+		// Subjects
+		"/subjects/{id}/update": UpdateSubject,
+		"/subjects/{id}/delete": DeleteSubject,
+		"/subjects/add/":        AddSubject,
+
 		// Activity
 		// Activity
 		"/activities/{id}/update": UpdateActivity,
 		"/activities/{id}/update": UpdateActivity,
 		"/activities/{id}/delete": DeleteActivity,
 		"/activities/{id}/delete": DeleteActivity,

+ 144 - 10
orm/subject.go

@@ -1,25 +1,159 @@
 package orm
 package orm
 
 
 import (
 import (
-	"errors"
+	"net/http"
 
 
 	"github.com/jinzhu/gorm"
 	"github.com/jinzhu/gorm"
+	"gogs.carducci-dante.gov.it/karmen/core/renderer"
 )
 )
 
 
+var selectUniqueSubjectTeachers = `
+SELECT teachers.* FROM activities
+INNER JOIN teachers on teachers.id=activities.subject_id
+WHERE subject_id=?
+`
+
 type Subject struct {
 type Subject struct {
 	gorm.Model
 	gorm.Model
 	Name         string
 	Name         string
 	DepartmentId uint
 	DepartmentId uint
-	Teachers     []Teacher `gorm:"many2many:teacher_subjects;"`
+	Teachers     []*Teacher
+	Activities   []*Activity
+}
+
+type SubjectForUpdate struct {
+	Subject Subject
+}
+
+type SubjectForAdd struct{}
+
+func (s *Subject) GetID() uint { return s.ID }
+
+func GetSubject(args map[string]string) (interface{}, error) {
+	var subject Subject
+	if err := DB().First(&subject, args["id"]).Error; err != nil {
+		return nil, err
+	}
+	return &subject, nil
+}
+
+func GetSubjectAll(args map[string]string) (interface{}, error) {
+	var subject Subject
+
+	id := args["id"]
+
+	if err := DB().First(&subject, id).Error; err != nil {
+		return nil, err
+	}
+
+	if err := DB().Raw(selectUniqueSubjectTeachers, id).Scan(&subject.Teachers).Error; err != nil {
+		return nil, err
+	}
+
+	if err := DB().Preload("Teacher").Preload("Subject").Preload("Class").Where("subject_id=?", id).Find(&subject.Activities).Error; err != nil {
+		return nil, err
+	}
+
+	return &subject, nil
+}
+
+func GetSubjects(args map[string]string) (interface{}, error) {
+	var subjects []*Subject
+	if err := DB().Order("name").Find(&subjects).Error; err != nil {
+		return nil, err
+	}
+	return subjects, nil
+}
+
+func GetSubjectsAll(args map[string]string) (interface{}, error) {
+	var subjects []*Subject
+	if err := DB().Order("name").Find(&subjects).Error; err != nil {
+		return nil, err
+	}
+	for _, subject := range subjects {
+		subject.GetTeachers()
+	}
+
+	return subjects, nil
+}
+
+func SaveSubject(subject interface{}) (interface{}, error) {
+	if err := DB().Save(subject).Error; err != nil {
+		return nil, err
+	}
+	return subject, nil
+}
+
+func UpdateSubject(args map[string]string, r *http.Request) (IDer, error) {
+	subject, err := GetSubject(args)
+	if err != nil {
+		return nil, err
+	}
+	err = renderer.Decode(subject, r)
+	if err != nil {
+		return nil, err
+	}
+	_, err = SaveSubject(subject)
+	if err != nil {
+		return nil, err
+	}
+	subject, err = GetSubject(args)
+	if err != nil {
+		return nil, err
+	}
+	return subject.(*Subject), nil
 }
 }
 
 
-func (s *Subject) Create(db *gorm.DB, record map[string]interface{}) error {
-	result := new(Subject)
-	if name := record["name"]; name == nil {
-		return errors.New("Error in updating subject: field name is empty")
-	} else {
-		result.Name = name.(string)
+func AddSubject(args map[string]string, r *http.Request) (IDer, error) {
+	subject := new(Subject)
+	err := renderer.Decode(subject, r)
+	if err != nil {
+		return nil, err
+	}
+	subject, err = CreateSubject(subject)
+	if err != nil {
+		return nil, err
 	}
 	}
-	db.Create(result)
-	return nil
+	return subject, nil
+}
+
+func CreateSubject(subject *Subject) (*Subject, error) {
+	if err := DB().Create(subject).Error; err != nil {
+		return nil, err
+	}
+	return subject, nil
+}
+
+func DeleteSubject(args map[string]string, r *http.Request) (IDer, error) {
+	subject, err := GetSubject(args)
+	if err != nil {
+		return nil, err
+	}
+	if err := DB().Unscoped().Delete(subject.(*Subject)).Error; err != nil {
+		return nil, err
+	}
+	return subject.(*Subject), nil
+}
+
+func (c *Subject) GetTeachers() ([]*Teacher, error) {
+	if err := DB().Raw(selectUniqueSubjectTeachers, c.ID).Scan(&c.Teachers).Error; err != nil {
+		return nil, err
+	}
+	return c.Teachers, nil
+}
+
+func GetSubjectForUpdate(args map[string]string) (interface{}, error) {
+	var data SubjectForUpdate
+
+	id := args["id"]
+
+	if err := DB().First(&data.Subject, id).Error; err != nil {
+		return nil, err
+	}
+
+	return data, nil
+}
+
+func GetSubjectForAdd(args map[string]string) (interface{}, error) {
+	return nil, nil
 }
 }

+ 4 - 0
templates/activities.html.tpl

@@ -35,7 +35,11 @@
 	{{else}}
 	{{else}}
 	<small>{{$activity.Teacher.Surname}}</small>
 	<small>{{$activity.Teacher.Surname}}</small>
 	{{end}}
 	{{end}}
+	{{if not $activity.Class}}
+	<small>no classe</small>
+	{{else}}
 	<small>{{$activity.Class.Name}}</small>
 	<small>{{$activity.Class.Name}}</small>
+	{{end}}
 	<small>{{$activity.Hours}}h</small>
 	<small>{{$activity.Hours}}h</small>
       </div>
       </div>
     </a>
     </a>

+ 5 - 5
templates/activities_show.html.tpl

@@ -35,14 +35,14 @@
       <h2 class="karmen-relation-header">Materia</h2>
       <h2 class="karmen-relation-header">Materia</h2>
       {{if .Data.Subject}}
       {{if .Data.Subject}}
       <div class="list-group" id="materie_list_group">
       <div class="list-group" id="materie_list_group">
-    	<a href="/subjects/{{.Data.Subject.ID}}?{{query "base" "subjects_show"}}" class="list-group-item clearfix">
+    	<a href="/subjects/{{.Data.Subject.ID}}?{{query "tpl_layout" "base" "tpl_content" "subjects_show"}}" class="list-group-item clearfix">
     	  <span class="glyphicon glyphicon-book"></span>
     	  <span class="glyphicon glyphicon-book"></span>
     	  {{.Data.Subject.Name}}
     	  {{.Data.Subject.Name}}
     	</a>
     	</a>
       </div>
       </div>
       {{else}}
       {{else}}
       <p>All'attività non è associata alcuna materia
       <p>All'attività non è associata alcuna materia
-    	didattica. Clicca <a href="/activities/update?{{query "base" "activities_add_update"}}">qui</a> per
+    	didattica. Clicca <a href="/activities/update?{{query "tpl_layout" "base" "tpl_content" "activities_add_update"}}">qui</a> per
     	modificare questa attività didattica.</p>
     	modificare questa attività didattica.</p>
       {{end}}
       {{end}}
     </div>
     </div>
@@ -56,7 +56,7 @@
       {{if .Data.Class}}
       {{if .Data.Class}}
       <div class="list-group" id="classes_list_group">
       <div class="list-group" id="classes_list_group">
 
 
-	<a href="/classes/{{.Data.Class.ID}}?{{query "base" "classes_show"}}" class="list-group-item clearfix">
+	<a href="/classes/{{.Data.Class.ID}}?{{query "tpl_layout" "base" "tpl_content" "classes_show"}}" class="list-group-item clearfix">
 	  <span class="glyphicon glyphicon-blackboard"></span>
 	  <span class="glyphicon glyphicon-blackboard"></span>
 	  {{.Data.Class.Name}}
 	  {{.Data.Class.Name}}
 	</a>
 	</a>
@@ -65,7 +65,7 @@
       {{else}}
       {{else}}
       
       
       <p>All'attività non è associata alcuna classe
       <p>All'attività non è associata alcuna classe
-    	didattica. Clicca <a href="/activities/update?{{query "base" "activities_add_update"}}">qui</a> per
+    	didattica. Clicca <a href="/activities/update?{{query "tpl_layout" "base" "tpl_content" "activities_add_update"}}">qui</a> per
     	modificare questa attività didattica.</p>
     	modificare questa attività didattica.</p>
       
       
       {{end}}
       {{end}}
@@ -79,7 +79,7 @@
       <h2 class="karmen-relation-header">Docente</h2>
       <h2 class="karmen-relation-header">Docente</h2>
       {{if .Data.Teacher}}
       {{if .Data.Teacher}}
       <div class="list-group" id="classes_list_group">
       <div class="list-group" id="classes_list_group">
-	<a href="/teachers/{{.Data.Teacher.ID}}?{{query "base" "teachers_show"}}" class="list-group-item clearfix">
+	<a href="/teachers/{{.Data.Teacher.ID}}?{{query "tpl_layout" "base" "tpl_content" "teachers_show"}}" class="list-group-item clearfix">
 	  <span class="glyphicon glyphicon-briefcase"></span>
 	  <span class="glyphicon glyphicon-briefcase"></span>
 	  {{.Data.Teacher.Surname}} {{.Data.Teacher.Name}}
 	  {{.Data.Teacher.Surname}} {{.Data.Teacher.Name}}
 	</a>
 	</a>

+ 24 - 24
templates/classes.html.tpl

@@ -10,36 +10,36 @@
       <div class="col-md-4">
       <div class="col-md-4">
 	<div class="btn-group pull-right">
 	<div class="btn-group pull-right">
 
 
-	  <a href="/classes/add?{{query "tpl_layout" "base" "tpl_content" "classes_add_update"}}" class="btn btn-primary">
+	  <a href="/classes/add/?{{query "tpl_layout" "base" "tpl_content" "classes_add_update"}}" class="btn btn-primary">
 	    <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
 	    <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
 	    Crea nuova classe
 	    Crea nuova classe
 	  </a>
 	  </a>
-	
+	  
+	</div>
       </div>
       </div>
     </div>
     </div>
-  </div>
 
 
-  <div class="input-group" style="margin-bottom: 20px">
-    <span class="input-group-addon" id="search-query"><span class="glyphicon glyphicon-search"></span></span>
-    <input type="text" id="myInput" class="form-control" aria-describedby="search-query">
-  </div>
-  {{if not .Data}}
-  <p>Non c'è alcun elemento da visualizzare.</p>
-  {{else}}
-  <div class="list-group" id="myUL">
-    {{range $class := .Data}}
-    <a class="list-group-item clearfix" href="/classes/{{$class.ID}}?{{query "tpl_layout" "base" "tpl_content" "classes_show"}}">
-      <span class="glyphicon glyphicon-blackboard"></span>
-      {{$class.Name}}
-      <div class="text-right">
-	{{range $teacher := $class.Teachers}}
-	<small>{{$teacher.Surname}}</small>
-	{{end}}
-      </div>
-    </a>
+    <div class="input-group" style="margin-bottom: 20px">
+      <span class="input-group-addon" id="search-query"><span class="glyphicon glyphicon-search"></span></span>
+      <input type="text" id="myInput" class="form-control" aria-describedby="search-query">
+    </div>
+    {{if not .Data}}
+    <p>Non c'è alcun elemento da visualizzare.</p>
+    {{else}}
+    <div class="list-group" id="myUL">
+      {{range $class := .Data}}
+      <a class="list-group-item clearfix" href="/classes/{{$class.ID}}?{{query "tpl_layout" "base" "tpl_content" "classes_show"}}">
+	<span class="glyphicon glyphicon-blackboard"></span>
+	{{$class.Name}}
+	<div class="text-right">
+	  {{range $teacher := $class.Teachers}}
+	  <small>{{$teacher.Surname}}</small>
+	  {{end}}
+	</div>
+      </a>
+      {{end}}
+    </div>
     {{end}}
     {{end}}
   </div>
   </div>
-  {{end}}
-</div>
   
   
-{{ end }}
+  {{ end }}

+ 21 - 18
templates/classes_add_update.html.tpl

@@ -2,41 +2,45 @@
 
 
 <div class="container">
 <div class="container">
 
 
-  {{if .Update}}
+  {{if .Options.Get "update"}}
   <ol class="breadcrumb">
   <ol class="breadcrumb">
     <li><a href="/classes">Classi</a></li>
     <li><a href="/classes">Classi</a></li>
-    <li><a href="/classes/{{.Class.ID}}">{{.Class.Name}}</a></li>
+    <li><a href="/classes/{{.Data.Class.ID}}">{{.Data.Class.Name}}</a></li>
     <li class="active"><a href="#">Aggiorna la classe</a></li>
     <li class="active"><a href="#">Aggiorna la classe</a></li>
   </ol>  
   </ol>  
   {{else}}  
   {{else}}  
   <ol class="breadcrumb">
   <ol class="breadcrumb">
-    <li><a href="/classes">Classi</a></li>
+    <li><a href="/classes/?{{query "tpl_layout" "base" "tpl_content" "classes"}}">Classi</a></li>
     <li class="active"><a href="#">Aggiungi</a></li>
     <li class="active"><a href="#">Aggiungi</a></li>
   </ol>
   </ol>
   {{end}}
   {{end}}
 
 
-  {{if .Update}}
-  <h1 class="karmen-info-header">Aggiorna la classe "{{.Class.Name}}"</h1>
+  {{if .Options.Get "update"}}
+  <h1 class="karmen-info-header">Aggiorna la classe "{{.Data.Class.Name}}"</h1>
   {{else}}
   {{else}}
   <h1 class="karmen-info-header">Crea una nuova classe</h1>
   <h1 class="karmen-info-header">Crea una nuova classe</h1>
   {{end}}
   {{end}}
-  
-  <form id="form_classes_add_update" action="{{.SubmitUrl}}" method="POST" role="form" data-toggle="validator">
+
+  {{if .Options.Get "update"}}
+  <form id="form_classes_add_update" action="/classes/{{.Data.Class.ID}}/update" method="POST" role="form" data-toggle="validator">
+  {{else}}
+  <form id="form_classes_add_update" action="/classes/add/" method="POST" role="form" data-toggle="validator">
+  {{end}}  
     
     
     <div class="form-group has-feedback">
     <div class="form-group has-feedback">
       <label class="control-label" for="class_name">Nome</label>
       <label class="control-label" for="class_name">Nome</label>
-      <input type="text" name="Name" class="form-control" id="class_name" placeholder="Nome" {{if .Update}} value="{{.Class.Name}}" {{end}} required>
+      <input type="text" name="Name" class="form-control" id="class_name" placeholder="Nome" {{if .Options.Get "update"}} value="{{.Data.Class.Name}}" {{end}} required>
     </div>
     </div>
 
 
     <div class="form-group">
     <div class="form-group">
       <label class="control-label" for="coordinator_id">Coordinatore</label>
       <label class="control-label" for="coordinator_id">Coordinatore</label>
       <select name="coordinator_id" class="form-control selectpicker" id="coordinator_id" placeholder="Coordinatore" data-live-search="true" form="form_classes_add_update" title="Seleziona il nome del coordinatore" data-dropup-auto="false">
       <select name="coordinator_id" class="form-control selectpicker" id="coordinator_id" placeholder="Coordinatore" data-live-search="true" form="form_classes_add_update" title="Seleziona il nome del coordinatore" data-dropup-auto="false">
 	<option value="0"></option>
 	<option value="0"></option>
-  	{{range $teacher := .Teachers}}
-	{{if $.Update}}
+  	{{range $teacher := .Data.AllTeachers}}
+	{{if $.Options.Get "update"}}
   	<option
   	<option
 	   value="{{$teacher.ID}}"
 	   value="{{$teacher.ID}}"
-	   {{index $.SelectedCoordinator $teacher.ID}}>{{$teacher.Name}} {{$teacher.Surname}}
+	   {{index $.Data.SelectedCoordinator $teacher.ID}}>{{$teacher.Name}} {{$teacher.Surname}}
 	</option>
 	</option>
 	{{else}}
 	{{else}}
   	<option value="{{$teacher.ID}}">{{$teacher.Name}} {{$teacher.Surname}}</option>
   	<option value="{{$teacher.ID}}">{{$teacher.Name}} {{$teacher.Surname}}</option>
@@ -50,11 +54,11 @@
       <label class="control-label" for="minuter_id">Verbalizzante</label>
       <label class="control-label" for="minuter_id">Verbalizzante</label>
       <select name="minuter_id" class="form-control selectpicker" id="minuter_id" placeholder="Verbalizzante" data-live-search="true" form="form_classes_add_update" title="Seleziona il nome del verbalizzante" data-dropup-auto="false">
       <select name="minuter_id" class="form-control selectpicker" id="minuter_id" placeholder="Verbalizzante" data-live-search="true" form="form_classes_add_update" title="Seleziona il nome del verbalizzante" data-dropup-auto="false">
 	<option value="0"></option>
 	<option value="0"></option>
-  	{{range $teacher := .Teachers}}
-	{{if $.Update}}
+  	{{range $teacher := .Data.AllTeachers}}
+	{{if $.Options.Get "update"}}
   	<option
   	<option
 	   value="{{$teacher.ID}}"
 	   value="{{$teacher.ID}}"
-	   {{index $.SelectedMinuter $teacher.ID}}>{{$teacher.Name}} {{$teacher.Surname}}
+	   {{index $.Data.SelectedMinuter $teacher.ID}}>{{$teacher.Name}} {{$teacher.Surname}}
 	</option>
 	</option>
 	{{else}}
 	{{else}}
   	<option value="{{$teacher.ID}}">{{$teacher.Name}} {{$teacher.Surname}}</option>
   	<option value="{{$teacher.ID}}">{{$teacher.Name}} {{$teacher.Surname}}</option>
@@ -65,16 +69,15 @@
 
 
     <div class="form-group">
     <div class="form-group">
       <button type="submit" class="btn btn-primary">Salva</button>
       <button type="submit" class="btn btn-primary">Salva</button>
-      {{if .Update}}
-      <a href="/classes/{{.Class.ID}}" class="btn btn-default">Annulla</a>
+      {{if .Options.Get "update"}}
+      <a href="/classes/{{.Data.Class.ID}}?{{query "tpl_layout" "base" "tpl_content" "classes_show"}}" class="btn btn-default">Annulla</a>
       {{else}}
       {{else}}
-      <a href="/classes" class="btn btn-default">Annulla</a>
+      <a href="/classes/?{{query "tpl_layout" "base" "tpl_content" "classes"}}" class="btn btn-default">Annulla</a>
       {{end}}
       {{end}}
     </div>
     </div>
     
     
   </form>
   </form>
 
 
-  
 </div>
 </div>
 
 
 {{ end }}
 {{ end }}

+ 17 - 16
templates/classes_show.html.tpl

@@ -4,22 +4,23 @@
 
 
   <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="#">{{.Name}}</a></li>
+    <li class="active"><a href="#">{{.Data.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>{{.Name}}</h1>
+	<h1>{{.Data.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/{{.ID}}/update" class="btn btn-primary">
+	  <a href="/classes/{{.Data.ID}}/update?{{query "tpl_layout" "base" "tpl_content" "classes_add_update" "update" "true"}}" 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/{{.ID}}/delete"
-		  data-url="/classes/{{.ID}}/delete"
+	  <button href="/classes/{{.Data.ID}}/delete"
+		  data-url="/classes/{{.Data.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 +30,15 @@
     </div>
     </div>
   </div>
   </div>
 
 
-  <h2 class="karmen-relation-header">Docenti della {{.Name}}</h2>
+  <h2 class="karmen-relation-header">Docenti della {{.Data.Name}}</h2>
   <div class="list-group" id="classes_list_group">
   <div class="list-group" id="classes_list_group">
-    {{if not .Teachers}}
+    {{if not .Data.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 $activity := .Activities}}
-      <a href="/activities/{{$activity.ID}}/update" class="list-group-item clearfix">
+    {{range $activity := .Data.Activities}}
+      <a href="/activities/{{$activity.ID}}/update?{{query "tpl_layout" "base" "tpl_content" "activities_show"}}" class="list-group-item clearfix">
 	<span class="glyphicon glyphicon-user"></span>
 	<span class="glyphicon glyphicon-user"></span>
 	{{$activity.Teacher.Surname}} {{$activity.Teacher.Name}}
 	{{$activity.Teacher.Surname}} {{$activity.Teacher.Name}}
 	<div class="text-right">
 	<div class="text-right">
@@ -50,16 +51,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 .Teachers}}
+    {{if not .Data.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 .CoordinatorID}}
-    <a href="/teachers/{{.Coordinator.ID}}" class="list-group-item clearfix">
+    {{if .Data.CoordinatorID}}
+    <a href="/teachers/{{.Data.Coordinator.ID}}?{{query "tpl_layout" "base" "tpl_content" "teachers_show"}}" class="list-group-item clearfix">
       <span class="glyphicon glyphicon-user"></span>
       <span class="glyphicon glyphicon-user"></span>
-      {{.Coordinator.Name}} {{.Coordinator.Surname}}
+      {{.Data.Coordinator.Name}} {{.Data.Coordinator.Surname}}
       <div class="text-right">
       <div class="text-right">
 	<small>Coordinatore</small>
 	<small>Coordinatore</small>
       </div>
       </div>
@@ -68,10 +69,10 @@
     <span class="list-group-item clearfix">Nessun coordinatore</span>
     <span class="list-group-item clearfix">Nessun coordinatore</span>
     {{end}}
     {{end}}
 
 
-    {{if .MinuterID}}
-    <a href="/teachers/{{.Minuter.ID}}" class="list-group-item clearfix">
+    {{if .Data.MinuterID}}
+    <a href="/teachers/{{.Data.Minuter.ID}}?{{query "tpl_layout" "base" "tpl_content" "teachers_show"}}" class="list-group-item clearfix">
       <span class="glyphicon glyphicon-user"></span>
       <span class="glyphicon glyphicon-user"></span>
-      {{.Minuter.Name}} {{.Minuter.Surname}}
+      {{.Data.Minuter.Name}} {{.Data.Minuter.Surname}}
       <div class="text-right">
       <div class="text-right">
 	<small>Verbalizzante</small>
 	<small>Verbalizzante</small>
       </div>
       </div>

+ 2 - 2
templates/layout/base.html.tpl

@@ -20,11 +20,11 @@
             <span class="icon-bar"></span>
             <span class="icon-bar"></span>
             <span class="icon-bar"></span>
             <span class="icon-bar"></span>
           </button>
           </button>
-          <a class="navbar-brand" href="/teachers">karmen</a>
+          <a class="navbar-brand" href="/teachers?{{query "tpl_layout" "base" "tpl_content" "teachers"}}">karmen</a>
         </div>
         </div>
         <div id="navbar" class="collapse navbar-collapse">
         <div id="navbar" class="collapse navbar-collapse">
           <ul class="nav navbar-nav">
           <ul class="nav navbar-nav">
-	    <li><a href="/school/1?{{query "tpl_layout" "base" "tpl_content" "school_show"}}">Scuola</a></li>
+	    <!-- <li><a href="/school/1?{{query "tpl_layout" "base" "tpl_content" "school_show"}}">Scuola</a></li> -->
             <li><a href="/teachers?{{query "tpl_layout" "base" "tpl_content" "teachers"}}">Docenti</a></li>
             <li><a href="/teachers?{{query "tpl_layout" "base" "tpl_content" "teachers"}}">Docenti</a></li>
 	    <li><a href="/subjects?{{query "tpl_layout" "base" "tpl_content" "subjects"}}">Materie</a></li>
 	    <li><a href="/subjects?{{query "tpl_layout" "base" "tpl_content" "subjects"}}">Materie</a></li>
 	    <li><a href="/classes?{{query "tpl_layout" "base" "tpl_content" "classes"}}">Classi</a></li>
 	    <li><a href="/classes?{{query "tpl_layout" "base" "tpl_content" "classes"}}">Classi</a></li>

+ 13 - 31
templates/subjects.html.tpl

@@ -8,33 +8,14 @@
 	<h1>Materie</h1>
 	<h1>Materie</h1>
       </div>
       </div>
       <div class="col-md-4">
       <div class="col-md-4">
-
 	<div class="btn-group pull-right">
 	<div class="btn-group pull-right">
-	  
-	  <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
-	    <span class="glyphicon glyphicon-floppy-open" aria-hidden="true"></span>
-	    Importa<span class="caret"></span>
-	  </button>
-	  
-	  <div class="dropdown-menu">
-	    <div class="container">  
-	      <form role="form" id="form_subjects_upload" action="/subjects/import" method="post" enctype="multipart/form-data">
-		<div class="form-group">
-		  <label class="control-label">Seleziona il file</label>
-		  <input id="input-1" type="file" class="file" data-show-preview="false" name="subjects_import">
-		</div>
-	      </form>
-	    </div>  
-	  </div>
-	</div>
 
 
-	<a href="/subjects/add" class="btn btn-primary pull-right">
-	  <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
-	  Crea nuova materia
-	</a>
+	  <a href="/subjects/add/?{{query "tpl_layout" "base" "tpl_content" "subjects_add_update"}}" class="btn btn-primary">
+	    <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
+	    Crea nuova materia
+	  </a>
 	
 	
       </div>
       </div>
-      
     </div>
     </div>
   </div>
   </div>
 
 
@@ -42,26 +23,27 @@
     <span class="input-group-addon" id="search-query"><span class="glyphicon glyphicon-search"></span></span>
     <span class="input-group-addon" id="search-query"><span class="glyphicon glyphicon-search"></span></span>
     <input type="text" id="myInput" class="form-control" aria-describedby="search-query">
     <input type="text" id="myInput" class="form-control" aria-describedby="search-query">
   </div>
   </div>
-
-  {{if not .}}
+  {{if not .Data}}
   <p>Non c'è alcun elemento da visualizzare.</p>
   <p>Non c'è alcun elemento da visualizzare.</p>
   {{else}}
   {{else}}
   <div class="list-group" id="myUL">
   <div class="list-group" id="myUL">
-    {{range $subject := .}}
-    <a class="list-group-item clearfix" href="/subjects/{{$subject.ID}}">
-      <span class="glyphicon glyphicon-book"></span>
+    {{range $subject := .Data}}
+    <a class="list-group-item clearfix" href="/subjects/{{$subject.ID}}?{{query "tpl_layout" "base" "tpl_content" "subjects_show"}}">
+      <span class="glyphicon glyphicon-blackboard"></span>
       {{$subject.Name}}
       {{$subject.Name}}
       <div class="text-right">
       <div class="text-right">
+	{{if $subject.Teachers}}
 	{{range $teacher := $subject.Teachers}}
 	{{range $teacher := $subject.Teachers}}
 	<small>{{$teacher.Surname}}</small>
 	<small>{{$teacher.Surname}}</small>
 	{{end}}
 	{{end}}
+	{{else}}
+	<small>no docente</small>
+	{{end}}
       </div>
       </div>
-
     </a>
     </a>
     {{end}}
     {{end}}
-    {{end}}
   </div>
   </div>
-  
+  {{end}}
 </div>
 </div>
   
   
 {{ end }}
 {{ end }}

+ 14 - 10
templates/subjects_add_update.html.tpl

@@ -2,10 +2,10 @@
 
 
 <div class="container">
 <div class="container">
 
 
-  {{if .Update}}
+  {{if .Options.Get "update"}}
   <ol class="breadcrumb">
   <ol class="breadcrumb">
     <li><a href="/subjects">Materie</a></li>
     <li><a href="/subjects">Materie</a></li>
-    <li><a href="/subjects/{{.Subject.ID}}">{{.Subject.Name}}</a></li>
+    <li><a href="/subjects/{{.Data.Subject.ID}}">{{.Data.Subject.Name}}</a></li>
     <li class="active"><a href="#">Aggiorna materia</a></li>
     <li class="active"><a href="#">Aggiorna materia</a></li>
   </ol>  
   </ol>  
   {{else}}  
   {{else}}  
@@ -15,25 +15,29 @@
   </ol>
   </ol>
   {{end}}
   {{end}}
 
 
-  {{if .Update}}
-  <h1 class="karmen-info-header">Aggiorna la materia "{{.Subject.Name}}"</h1>
+  {{if .Options.Get "update"}}
+  <h1 class="karmen-info-header">Aggiorna la materia "{{.Data.Subject.Name}}"</h1>
   {{else}}
   {{else}}
   <h1 class="karmen-info-header">Crea una nuova materia</h1>
   <h1 class="karmen-info-header">Crea una nuova materia</h1>
   {{end}}
   {{end}}
-  
-  <form action="{{.SubmitUrl}}" method="POST" role="form" data-toggle="validator">
+
+  {{if .Options.Get "update"}}
+  <form id="form_subjects_add_update" action="/subjects/{{.Data.Subject.ID}}/update" method="POST" role="form" data-toggle="validator">
+  {{else}}
+  <form id="form_subjects_add_update" action="/subjects/add/" method="POST" role="form" data-toggle="validator">
+  {{end}}  
     
     
     <div class="form-group has-feedback">
     <div class="form-group has-feedback">
       <label class="control-label" for="subject_name">Nome</label>
       <label class="control-label" for="subject_name">Nome</label>
-      <input type="text" name="Name" class="form-control" id="subject_name" placeholder="Nome" {{if .Update}} value="{{.Subject.Name}}" {{end}} required>
+      <input type="text" name="Name" class="form-control" id="subject_name" placeholder="Nome" {{if .Options.Get "update"}} value="{{.Data.Subject.Name}}" {{end}} required>
     </div>
     </div>
         
         
     <div class="form-group">
     <div class="form-group">
       <button type="submit" class="btn btn-primary">Salva</button>
       <button type="submit" class="btn btn-primary">Salva</button>
-      {{if .Update}}
-      <a href="/subjects/{{.Subject.ID}}" class="btn btn-default">Annulla</a>
+      {{if .Options.Get "update"}}
+      <a href="/subjects/{{.Data.Subject.ID}}?{{query "tpl_layout" "base" "tpl_content" "subjects_show"}}" class="btn btn-default">Annulla</a>
       {{else}}
       {{else}}
-      <a href="/subjects" class="btn btn-default">Annulla</a>
+      <a href="/subjects/?{{query "tpl_layout" "base" "tpl_content" "subjects"}}" class="btn btn-default">Annulla</a>
       {{end}}
       {{end}}
     </div>
     </div>
     
     

+ 15 - 12
templates/subjects_show.html.tpl

@@ -4,22 +4,22 @@
 
 
   <ol class="breadcrumb">
   <ol class="breadcrumb">
     <li><a href="/subjects">Materie</a></li>
     <li><a href="/subjects">Materie</a></li>
-    <li class="active"><a href="#">{{.Name}}</a></li>
+    <li class="active"><a href="#">{{.Data.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>{{.Name}}</h1>
+	<h1>{{.Data.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="/subjects/{{.ID}}/update" class="btn btn-primary">
+	  <a href="/subjects/{{.Data.ID}}/update?{{query "tpl_layout" "base" "tpl_content" "subjects_add_update" "update" "true"}}" 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="/subjects/{{.ID}}/delete"
-		  data-url="/subjects/{{.ID}}/delete"
+	  <button href="/subjects/{{.Data.ID}}/delete"
+		  data-url="/subjects/{{.Data.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,17 +29,20 @@
     </div>
     </div>
   </div>
   </div>
 
 
-  <h2 class="karmen-relation-header">Docenti di {{.Name}}</h2>
-  <div class="list-group" id="materie_list_group">
-    {{if not .Teachers}}
+  <h2 class="karmen-relation-header">Docenti di {{.Data.Name}}</h2>
+  <div class="list-group" id="subjects_list_group">
+    {{if not .Data.Teachers}}
     <p>Alla materia non è associata alcuna attività
     <p>Alla materia non è associata alcuna attività
-      didattica. Clicca <a href="/activities/add">qui</a> per creare
+      didattica. Clicca <a href="/activities/add?{{query "tpl_layout" "base" "tpl_content" "activities_add_update"}}">qui</a> per creare
       una nuova attività didattica da associare alla materia.</p>
       una nuova attività didattica da associare alla materia.</p>
     {{else}}
     {{else}}
-    {{range $teacher := .Teachers}}
-    <a href="/teachers/{{$teacher.ID}}" class="list-group-item clearfix">
+    {{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-user"></span>
       <span class="glyphicon glyphicon-user"></span>
-      {{$teacher.Name}} {{$teacher.Surname}}
+      {{$activity.Teacher.Surname}} {{$activity.Teacher.Name}}
+      <div class="text-right">
+	<small>{{$activity.Subject.Name}} {{$activity.Hours}}h</small>
+      </div>
     </a>
     </a>
     {{end}}
     {{end}}
     {{end}}
     {{end}}

+ 1 - 1
templates/teachers.html.tpl

@@ -32,7 +32,7 @@
     {{range $teacher := .Data}}
     {{range $teacher := .Data}}
     <a class="list-group-item clearfix" href="/teachers/{{$teacher.ID}}?{{query "tpl_layout" "base" "tpl_content" "teachers_show"}}">
     <a class="list-group-item clearfix" href="/teachers/{{$teacher.ID}}?{{query "tpl_layout" "base" "tpl_content" "teachers_show"}}">
       <span class="glyphicon glyphicon-user"></span>
       <span class="glyphicon glyphicon-user"></span>
-      {{$teacher.Name}} {{$teacher.Surname}}
+      {{$teacher.Surname}} {{$teacher.Name}}
       <div class="text-right">
       <div class="text-right">
 	{{if $teacher.Classes}}
 	{{if $teacher.Classes}}
 	{{range $class := $teacher.Classes}}
 	{{range $class := $teacher.Classes}}

+ 3 - 3
templates/teachers_add_update.html.tpl

@@ -10,7 +10,7 @@
   </ol>  
   </ol>  
   {{else}}  
   {{else}}  
   <ol class="breadcrumb">
   <ol class="breadcrumb">
-    <li><a href="/teachers">Docenti</a></li>
+    <li><a href="/teachers/?{{query "tpl_layout" "base" "tpl_content" "teachers"}}">Docenti</a></li>
     <li class="active"><a href="#">Aggiungi</a></li>
     <li class="active"><a href="#">Aggiungi</a></li>
   </ol>
   </ol>
   {{end}}
   {{end}}
@@ -61,9 +61,9 @@
     <div class="form-group">
     <div class="form-group">
       <button type="submit" class="btn btn-primary">Salva</button>
       <button type="submit" class="btn btn-primary">Salva</button>
       {{if .Options.Get "update"}}
       {{if .Options.Get "update"}}
-      <a href="/teachers/{{.Data.ID}}{{query "tpl_layout" "base" "tpl_content" "teachers_show"}}" class="btn btn-default">Annulla</a>
+      <a href="/teachers/{{.Data.ID}}?{{query "tpl_layout" "base" "tpl_content" "teachers_show"}}" class="btn btn-default">Annulla</a>
       {{else}}
       {{else}}
-      <a href="/teachers{{query "tpl_layout" "base" "tpl_content" "teachers"}}" class="btn btn-default">Annulla</a>
+      <a href="/teachers/?{{query "tpl_layout" "base" "tpl_content" "teachers"}}" class="btn btn-default">Annulla</a>
       {{end}}
       {{end}}
     </div>
     </div>
     
     

+ 3 - 3
templates/teachers_show.html.tpl

@@ -44,7 +44,7 @@
       </div>
       </div>
       {{else}}
       {{else}}
       <p>Al docente non è associata alcuna attività
       <p>Al docente non è associata alcuna attività
-    	didattica. Clicca <a href="/activities/add?{{query "tpl_layout" "base" "tpl_content" "activities_add_update"}}">qui</a> per
+    	didattica. Clicca <a href="/activities/add/?{{query "tpl_layout" "base" "tpl_content" "activities_add_update"}}">qui</a> per
     	creare una nuova attività didattica da associare al docente.</p>
     	creare una nuova attività didattica da associare al docente.</p>
       {{end}}
       {{end}}
     </div>
     </div>
@@ -66,7 +66,7 @@
       </div>
       </div>
       {{else}}
       {{else}}
       <p>Al docente non è associata alcuna attività
       <p>Al docente non è associata alcuna attività
-	didattica. Clicca <a href="/activities/add?{{query "tpl_layout" "base" "tpl_content" "activities_add_update"}}">qui</a> per
+	didattica. Clicca <a href="/activities/add/?{{query "tpl_layout" "base" "tpl_content" "activities_add_update"}}">qui</a> per
 	creare una nuova attività didattica da associare al docente.</p>
 	creare una nuova attività didattica da associare al docente.</p>
       {{end}}
       {{end}}
     </div>
     </div>
@@ -114,7 +114,7 @@
       
       
       {{else}}
       {{else}}
       <p>Al docente non è associata alcuna attività
       <p>Al docente non è associata alcuna attività
-	didattica. Clicca <a href="/activities/add?{{query "base" "activities_add_update"}}">qui</a> per
+	didattica. Clicca <a href="/activities/add/?{{query "base" "activities_add_update"}}">qui</a> per
 	creare una nuova attività didattica da associare al docente.</p>
 	creare una nuova attività didattica da associare al docente.</p>
       {{end}}
       {{end}}
     </div>
     </div>