Răsfoiți Sursa

Continue working on templates

Andrea Fazzi 5 ani în urmă
părinte
comite
2d75bb9f33

+ 1 - 1
cron/sync/sync.go

@@ -399,7 +399,7 @@ func (syncJob *SyncJob) Run() {
 
 	for _, department := range departments {
 
-		departmentsCoordinators = append(departmentsCoordinators, &department.Coordinator)
+		departmentsCoordinators = append(departmentsCoordinators, department.Coordinator)
 
 		users := make([]orm.User, 0)
 		for _, teacher := range department.Teachers {

+ 1 - 0
main.go

@@ -33,6 +33,7 @@ var (
 
 	models = []interface{}{
 		&orm.Teacher{},
+		&orm.Department{},
 	}
 )
 

+ 54 - 42
orm/department.go

@@ -12,7 +12,7 @@ type Department struct {
 	Name string
 
 	CoordinatorID uint `schema:"coordinator_id"`
-	Coordinator   Teacher
+	Coordinator   *Teacher
 
 	Subjects []*Subject
 	Teachers []*Teacher
@@ -43,15 +43,29 @@ WHERE department_id=?`
 
 func (d *Department) GetID() uint { return d.ID }
 
-func GetDepartment(args map[string]string) (interface{}, error) {
-	var department Department
-	if err := DB().First(&department, args["id"]).Error; err != nil {
-		return nil, err
+func (d *Department) String() string {
+	return d.Name
+}
+
+func (d *Department) Create(args map[string]string, r *http.Request) (interface{}, error) {
+	if r.Method == "GET" {
+		return nil, nil
+	} else {
+		department := new(Department)
+		err := renderer.Decode(department, r)
+		if err != nil {
+			return nil, err
+		}
+		department, err = CreateDepartment(department)
+		if err != nil {
+			return nil, err
+		}
+
+		return department, nil
 	}
-	return &department, nil
 }
 
-func GetDepartmentAll(args map[string]string) (interface{}, error) {
+func (d *Department) Read(args map[string]string, r *http.Request) (interface{}, error) {
 	var department Department
 
 	id := args["id"]
@@ -79,15 +93,7 @@ func GetDepartmentAll(args map[string]string) (interface{}, error) {
 	return &department, nil
 }
 
-func GetDepartments(args map[string]string) (interface{}, error) {
-	var departments []*Department
-	if err := DB().Order("name").Find(&departments).Error; err != nil {
-		return nil, err
-	}
-	return departments, nil
-}
-
-func GetDepartmentsAll(args map[string]string) (interface{}, error) {
+func (d *Department) ReadAll(args map[string]string, r *http.Request) (interface{}, error) {
 	var departments []*Department
 	if err := DB().Preload("Coordinator").Preload("Subjects").Order("name").Find(&departments).Error; err != nil {
 		return nil, err
@@ -98,31 +104,48 @@ func GetDepartmentsAll(args map[string]string) (interface{}, error) {
 	return departments, nil
 }
 
-func SaveDepartment(department interface{}) (interface{}, error) {
-	if err := DB().Omit("Teachers", "Subjects").Save(department).Error; err != nil {
-		return nil, err
+func (d *Department) Update(args map[string]string, r *http.Request) (interface{}, error) {
+	if r.Method == "GET" {
+		return d.Read(args, r)
+	} else {
+
+		department, err := d.Read(args, r)
+		if err != nil {
+			return nil, err
+		}
+		err = renderer.Decode(department, r)
+		if err != nil {
+			return nil, err
+		}
+		_, err = SaveDepartment(department)
+		if err != nil {
+			return nil, err
+		}
+		department, err = d.Read(args, r)
+		if err != nil {
+			return nil, err
+		}
+
+		return department.(*Department), nil
 	}
-	return department, nil
 }
 
-func UpdateDepartment(args map[string]string, r *http.Request) (IDer, error) {
-	department, err := GetDepartment(args)
-	if err != nil {
-		return nil, err
-	}
-	err = renderer.Decode(department, r)
+func (d *Department) Delete(args map[string]string, r *http.Request) (interface{}, error) {
+	department, err := d.Read(args, r)
 	if err != nil {
 		return nil, err
 	}
-	_, err = SaveDepartment(department)
-	if err != nil {
+	if err := DB().Unscoped().Delete(department.(*Department)).Error; err != nil {
 		return nil, err
 	}
-	department, err = GetDepartment(args)
-	if err != nil {
+	return department.(*Department), nil
+}
+
+func SaveDepartment(department interface{}) (interface{}, error) {
+	if err := DB().Omit("Teachers", "Subjects").Save(department).Error; err != nil {
 		return nil, err
 	}
-	return department.(*Department), nil
+	return department, nil
 }
 
 func AddDepartment(args map[string]string, r *http.Request) (IDer, error) {
@@ -146,17 +169,6 @@ func CreateDepartment(department *Department) (*Department, error) {
 	return department, nil
 }
 
-func DeleteDepartment(args map[string]string, r *http.Request) (IDer, error) {
-	department, err := GetDepartment(args)
-	if err != nil {
-		return nil, err
-	}
-	if err := DB().Unscoped().Delete(department.(*Department)).Error; err != nil {
-		return nil, err
-	}
-	return department.(*Department), nil
-}
-
 func GetDepartmentForAdd(args map[string]string) (interface{}, error) {
 	var data DepartmentForAdd
 

+ 30 - 1
renderer/funcmap.go

@@ -22,9 +22,31 @@ var (
 		"yaml":        yaml,
 		"create":      create,
 		"show":        show,
+		"all":         all,
+		"isSlice":     isSlice,
+		"toSlice":     toSlice,
+		"string":      callString,
+		"incr":        incr,
+		"mod2":        mod2,
 	}
 )
 
+func mod2(value int) bool {
+	return value%2 == 0
+}
+
+func incr(value int) int {
+	return value + 1
+}
+
+func callString(value interface{}) string {
+	return reflect.ValueOf(value).MethodByName("String").Interface().(func() string)()
+}
+
+func isSlice(value interface{}) bool {
+	return reflect.TypeOf(value).Kind() == reflect.Slice
+}
+
 func yaml(content string) (interface{}, error) {
 	var result interface{}
 	err := yml.Unmarshal([]byte(content), &result)
@@ -49,7 +71,7 @@ func dict(values ...interface{}) (map[string]interface{}, error) {
 	return dict, nil
 }
 
-func slice(values ...string) []string {
+func toSlice(values ...string) interface{} {
 	var result []string
 	result = append(result, values...)
 	return result
@@ -106,6 +128,13 @@ func modelPath(model string, action string, id uint) string {
 	return fmt.Sprintf("/%s?%s", plural, q)
 }
 
+func all(model string) string {
+	plural := inflection.Plural(strings.ToLower(model))
+	q := query("tpl_layout", "base", "tpl_content", plural)
+
+	return fmt.Sprintf("/%s?%s", plural, q)
+}
+
 func create(model string) string {
 	action := "create"
 	plural := inflection.Plural(strings.ToLower(model))

+ 20 - 40
templates/departments.html.tpl

@@ -1,55 +1,35 @@
 {{ define "content" }}
 
-<div class="container">
-  
-  <div class="karmen-info-header">
-    <div class="row">
-      <div class="col-md-8">
-	<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 float-right">
-	  <span class="fa fa-plus-circle" aria-hidden="true"></span>
-	  Crea nuovo dipartimento
-	</a>
-      </div>
-    </div>
-  </div>
+<div class="container">  
 
-  <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>
+  {{$options := `
+  title: "Dipartimenti"
+  buttonTitle: "Crea nuovo dipartimento"
+  `}}
   
-  {{if not .Data}}
-  <p>Non c'è alcun elemento da visualizzare</p>
+  {{template "read_all_header" dict  "options" ($options | yaml) "lengthData" (len .Data) "modelPath" (create "department")}}
+  {{template "search_input"}}
+    
+  {{if not .}}
+  {{template "display_no_elements"}}
   {{else}}
   <div class="list-group" id="myUL">
     {{range $department := .Data}}
-    <a class="list-group-item list-group-item-action" href="/departments/{{$department.ID}}?{{query "tpl_layout" "base" "tpl_content" "departments_show"}}">
-      <span class="fa fa-layer-group"></span>
+    <a class="list-group-item list-group-item-action" href={{$department.ID|show "department"}}>
+      <span class="fa fa-user"></span>
       {{$department.Name}}
-
       <div class="text-right">
-	
-	{{if $department.Subjects}}
-	{{range $subject := $department.Subjects}}
-	<small>{{$subject.Name}}</small>
-	{{end}}
-	{{end}}
-
-	{{if $department.Teachers}}
-	{{range $teacher := $department.Teachers}}
-	<small>{{$teacher.Surname}}</small>
-	{{end}}
-	{{end}}
-
+        {{$options := `noElements: "no coordinatore"`}}
+        {{template "small" dict "options" ($options | yaml) "data" $department.Coordinator}}
+        {{$options := `noElements: "no materie"`}}
+        {{template "small" dict "options" ($options | yaml) "data" $department.Subjects}}
       </div>
-
     </a>
     {{end}}
+    {{end}}
   </div>
-  {{end}}
+
 </div>
-  
+
 {{ end }}
+

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

@@ -43,10 +43,10 @@
 	     <a class="nav-item nav-link" href="/administratives?{{query "tpl_layout" "base" "tpl_content" "administratives"}}">ATA</a>
 	   </li>
            <li class="nav-item">
-	     <a class="nav-item nav-link" href="/groups?{{query "tpl_layout" "base" "tpl_content" "groups"}}">Gruppi<span class="badge badge-danger experimental">Sperimentale</span></a>
+	     <a class="nav-item nav-link" href="/groups?{{query "tpl_layout" "base" "tpl_content" "groups"}}">Gruppi<span class="badge badge-danger experimental">EXP</span></a>
 	   </li>           
            <li class="nav-item">
-	     <a class="nav-item nav-link" href="/documents?{{query "tpl_layout" "base" "tpl_content" "documents"}}">Documenti<span class="badge badge-danger experimental">Sperimentale</span></a>
+	     <a class="nav-item nav-link" href="/documents?{{query "tpl_layout" "base" "tpl_content" "documents"}}">Documenti<span class="badge badge-danger experimental">EXP</span></a>
 	   </li>
 	  </ul>
 

+ 17 - 0
templates/layout/breadcrumb.html.tpl

@@ -0,0 +1,17 @@
+{{define "breadcrumb"}}
+<nav aria-label="breadcrumb">
+  <ol class="breadcrumb">
+    {{$data:=.}}
+    {{range $i,$el := .}}
+    {{if ($i|mod2)}}
+    {{$url:=index $data ($i|incr)}}
+    {{if eq $url "current"}}
+    <li class="breadcrumb-item active" aria-current="page">{{$el}}</li>
+    {{else}}
+    <li class="breadcrumb-item"><a href="{{$url}}">{{$el}}</a></li>
+    {{end}}
+    {{end}}
+    {{end}}
+  </ol>
+</nav>
+{{end}}

+ 5 - 1
templates/layout/small.html.tpl

@@ -1,9 +1,13 @@
 {{define "small"}}
 {{if .data}}
+{{if .data | isSlice}}
 {{range $el := .data}}
 <small>{{$el.Name}}</small>
 {{end}}
 {{else}}
-<small>.options.noElements</small>
+<small>{{.data|string}}</small>
+{{end}}
+{{else}}
+<small>{{.options.noElements}}</small>
 {{end}}
 {{end}}

+ 4 - 15
templates/teachers.html.tpl

@@ -19,22 +19,10 @@
       <span class="fa fa-user"></span>
       {{$teacher.Surname}} {{$teacher.Name}}
       <div class="text-right">
-	{{if $teacher.Classes}}
-        {{$options := `noElements: "no classe"`}}
+        {{$options := `noElements: "no classi"`}}
         {{template "small" dict "options" ($options | yaml) "data" $teacher.Classes}}
-	<!-- {{range $class := $teacher.Classes}} -->
-	<!-- <small>{{$class.Name}}</small> -->
-	<!-- {{end}} -->
-	{{else}}
-	<small>no classi</small>
-	{{end}}
-	{{if $teacher.Subjects}}
-	{{range $subject := $teacher.Subjects}}
-	<small>{{$subject.Name}}</small>
-	{{end}}
-	{{else}}
-	<small>no materie</small>
-        {{end}}
+        {{$options := `noElements: "no materie"`}}
+        {{template "small" dict "options" ($options | yaml) "data" $teacher.Subjects}}
       </div>
     </a>
     {{end}}
@@ -42,4 +30,5 @@
   </div>
 
 </div>
+
 {{ end }}

+ 1 - 6
templates/teachers_show.html.tpl

@@ -2,12 +2,7 @@
 
 <div class="container">
 
-  <nav aria-label="breadcrumb">
-    <ol class="breadcrumb">
-      <li class="breadcrumb-item"><a href="{{modelPath "Teacher" "" 0}}">Docenti</a></li>
-      <li class="breadcrumb-item active"><a href="#">{{.Data.Name}} {{.Data.Surname}}</a></li>
-    </ol>
-  </nav>
+  {{template "breadcrumb" toSlice "Docenti" (all "Teacher") (.Data|string) "current"}}
 
   <div class="karmen-info-header">
     <div class="row">