/
model.go
103 lines (79 loc) · 2.29 KB
/
model.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package project
import (
"log"
"time"
"github.com/haad/worktracker/sql"
)
type ProjectInt interface {
GetID() uint
GetName() string
GetEstimate() int64
GetEstimateString() string
GetWorkLogged() int64
GetWorkLoggedString() string
GetCustomerName() string
GetFinished() bool
}
func ProjectCreate(name string, estimate string, customerName string) {
var customer sql.Customer
var est int64 = 0
if err := sql.GetCustomerByName(customerName, &customer); err != nil {
log.Println("Customer: ", customerName, "doesn't exist. Error: ", err.Error())
return
}
if estimate != "" {
d, err := time.ParseDuration(estimate)
if err != nil {
panic(err)
}
est = int64(d.Seconds())
}
log.Println("Creating project:", name, "under customer:", customer)
sql.DBc.Create(&sql.Project{Name: name, Estimate: est, CustomerID: customer.GetID()})
}
func ProjectEdit(id uint, name string, estimate string, finished bool) {
var project sql.Project
sql.DBc.Set("gorm:auto_preload", true).Where("ID = ?", id).First(&project)
if estimate != "" {
d, err := time.ParseDuration(estimate)
if err != nil {
panic(err)
}
project.Estimate = int64(d.Seconds())
}
if name != "" {
project.Name = name
}
project.Finished = finished
log.Println("Editing project:", name, "with estimate:", estimate)
sql.DBc.Save(&project)
}
func ProjectDelete(id uint) {
var project sql.Project
sql.DBc.Set("gorm:auto_preload", true).Where("ID = ?", id).First(&project)
for _, entry := range project.Entries {
log.Println("Deleting entry:", entry.GetName())
sql.DBc.Unscoped().Delete(&entry)
}
log.Println("Deleting project:", project.GetName())
sql.DBc.Unscoped().Delete(&project)
}
func ProjectList(customerName string, includeFinished bool) []ProjectInt {
var projects []sql.Project
var pint []ProjectInt
var customer sql.Customer
if customerName != "" {
if err := sql.GetCustomerByName(customerName, &customer); err != nil {
log.Fatalln("Customer: ", customerName, "doesn't exist. Error: ", err.Error())
}
sql.DBc.Set("gorm:auto_preload", true).Where("customer_id = ?", customer.GetID()).Find(&projects)
} else {
sql.DBc.Set("gorm:auto_preload", true).Find(&projects)
}
for _, p := range projects {
if !p.GetFinished() || includeFinished {
pint = append(pint, p)
}
}
return pint
}