summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--interact.go33
-rw-r--r--main.go15
-rw-r--r--sqlite.go83
3 files changed, 129 insertions, 2 deletions
diff --git a/interact.go b/interact.go
index f1ffb53..8e25c97 100644
--- a/interact.go
+++ b/interact.go
@@ -33,6 +33,16 @@ func interact() {
showLastProject()
},
})
+
+ shell.AddCmd(&ishell.Cmd{
+ Name: "add",
+ Help: "Add new Customer",
+ Func: func(c *ishell.Context) {
+ //c.Print("\033[H\033[2J")
+ //c.Println(boldGreen("Start New Project"))
+ addCustomer()
+ },
+ })
shell.AddCmd(&ishell.Cmd{
Name: "startnow",
@@ -56,6 +66,29 @@ func interact() {
})
shell.AddCmd(&ishell.Cmd{
+ Name: "deletetask",
+ Help: "<id> Delete a Task with the following id",
+ Func: func(c *ishell.Context) {
+ //c.Print("\033[H\033[2J")
+ arg := "none"
+ if len(c.Args) > 0 {
+ arg = strings.Join(c.Args, " ")
+ argi,err := strconv.Atoi(arg)
+ if err == nil{
+ //c.Println(boldGreen("Opening Project",argi))
+ deleteTask(argi)
+ stdOut()
+ }else{
+ c.Println(boldRed(arg,"is not a valid id!"))
+ }
+ }else{
+ c.Println(boldRed("deletetask <id> - Please enter an id"))
+ allProjects()
+ }
+ },
+ })
+
+ shell.AddCmd(&ishell.Cmd{
Name: "project",
Help: "<id> Open a Project of the following id",
Func: func(c *ishell.Context) {
diff --git a/main.go b/main.go
index 5fc8050..0d73a7a 100644
--- a/main.go
+++ b/main.go
@@ -14,6 +14,8 @@ import (
//var svar string
var starttime,stoptime string
var projectid, edittaskid, editprojectid int
+var deltask int
+var addcustomer bool
var newproject, newtask, stoptask, allproj, runinter bool
//var red, green, yellow, cyan color
@@ -28,6 +30,10 @@ func init() {
//boldGreen := color.New(color.FgGreen, color.Bold)
//boldRed := color.New(color.FgRed, color.Bold)
+ flag.BoolVar(&addcustomer,
+ "addcustomer",
+ false,
+ "Adds a new Customer")
flag.BoolVar(&allproj,
"all",
false,
@@ -40,6 +46,10 @@ func init() {
"startnow",
false,
"Start a new Task in current project")
+ flag.IntVar(&deltask,
+ "deletetask",
+ 0,
+ "Specify which Task to delete")
flag.IntVar(&edittaskid,
"edittask",
0,
@@ -102,6 +112,9 @@ func main() {
if newproject {
newProject()
os.Exit(0)
+ } else if addcustomer {
+ addCustomer()
+ os.Exit(0)
} else if newtask {
newTask(projectid)
stdOut()
@@ -124,6 +137,8 @@ func main() {
//showLastProject()
//getClosedTasks(0)
//showOpenTask()
+ } else if (deltask>0) {
+ deleteTask(deltask)
} else if (edittaskid>0) {
editTask(edittaskid)
} else if (editprojectid>0) {
diff --git a/sqlite.go b/sqlite.go
index 9c310b2..12cfc93 100644
--- a/sqlite.go
+++ b/sqlite.go
@@ -244,7 +244,19 @@ func showLastProject() {
fmt.Println(" Last Changes",currproject.last.Local().Format("2006 Mon Jan _2 15:04"))
}
}
+func addCustomer() {
+ nam := getInput("Enter Customer Name: ")
+ add := getInput("Enter Address (separate lines by ;): ")
+ satstr := getInput("Hourly Rate: ")
+ sat,err := strconv.ParseFloat(satstr,64)
+ checkErr(err)
+ stmt, err := db.Prepare("INSERT INTO customers(name, address, satz) values(?, ?, ?)")
+ checkErr(err)
+ _, err = stmt.Exec(nam,add,sat)
+ checkErr(err)
+ fmt.Println(" Customer Added:",nam, add, sat)
+}
func newProject() {
boldRed := color.New(color.FgRed, color.Bold).SprintFunc()
@@ -352,9 +364,10 @@ func setProject (nid int) {
var first time.Time
var last time.Time
var finish int
+ var custo int
for rows.Next() {
- err = rows.Scan(&uid, &prname, &first, &last, &finish)
+ err = rows.Scan(&uid, &prname, &first, &last, &finish, &custo)
checkErr(err)
}
rows.Close() //good habit to close
@@ -363,6 +376,7 @@ func setProject (nid int) {
currproject.first = first
currproject.last = last
currproject.finish = finish != 0
+ currproject.customer = custo
updateProject(uid)
} else {
fmt.Println(boldRed("There is an Open Task"))
@@ -380,16 +394,55 @@ func allProjects() {
var last time.Time
var finish int
var customer int
+ var start,stop time.Time
fmt.Println("___All Projects________________")
for rows.Next() {
err = rows.Scan(&uid, &prname, &first, &last, &finish, &customer)
checkErr(err)
- fmt.Println(" ",uid,prname,first.Local().Format("2006-09-02 19:13"),last.Local().Format("2006-09-02 19:13"),finish,customer)
+ rows2,err := db.Query("SELECT start, stop FROM timetable WHERE project = $1 AND checkout = 0 AND stop != '1791-09-30 19:07'",uid)
+ checkErr(err)
+ sum := 0.0
+ for rows2.Next() {
+ err = rows2.Scan(&start,&stop)
+ checkErr(err)
+ sum += float64(stop.Sub(start))/(1000000000*60*60)
+ }
+
+ fmt.Printf(" %v:%s First: %s, Last:%s, Total:%.2f(h) ,Fin:%v, For:%v\n",uid,prname,first.Local().Format("2006-09-02 19:13"),last.Local().Format("2006-09-02 19:13"),sum,finish,customer)
}
rows.Close() //good habit to close
}
+func deleteTask(id int) {
+ boldGreen := color.New(color.FgGreen, color.Bold).SprintFunc()
+ boldRed := color.New(color.FgRed, color.Bold).SprintFunc()
+ var chk,prj int
+ var start,stop time.Time
+ var task string
+ rows,err := db.Query("SELECT project, start, stop, task, checkout FROM timetable WHERE id = $1",id)
+ checkErr(err)
+ if rows.Next() {
+ err = rows.Scan(&prj, &start, &stop, &task, &chk)
+ checkErr(err)
+ rows.Close() //good habit to close
+ fmt.Println(boldGreen("Delete Task", id))
+ dur := float64(stop.Sub(start))/(1000000000*60*60)
+ fmt.Printf("%v: %v (%v-%v) - %.2f h\n",prj,task,start.Local().Format("2006 Mon Jan _2 15:04"),stop.Local().Format("15:04"),dur)
+ if isSure() {
+ stmt, err := db.Prepare("DELETE FROM timetable WHERE id = ?")
+ checkErr(err)
+ _, err = stmt.Exec(id)
+ checkErr(err)
+ fmt.Println(boldGreen(id," deleted successfully!"))
+ } else {
+ return
+ }
+ }else{
+ fmt.Println(boldRed(id," is Not a known Task!"))
+ }
+}
+
func editTask(id int) {
boldGreen := color.New(color.FgGreen, color.Bold).SprintFunc()
boldRed := color.New(color.FgRed, color.Bold).SprintFunc()
@@ -521,6 +574,18 @@ func editProject(id int) {
fmt.Println("...Project",id,"Updated")
}
+func isTask(id int) bool {
+
+ rows,err := db.Query("SELECT * FROM timetable WHERE id = $1",id)
+ checkErr(err)
+ defer rows.Close()
+ if rows.Next() {
+ return true
+ } else {
+ return false
+ }
+}
+
func isProject(id int) bool {
rows,err := db.Query("SELECT * FROM projects WHERE id = $1",id)
@@ -574,6 +639,20 @@ func getInput(quest string) string {
return line
}
+func isSure() bool {
+ fmt.Print("Are You Sure ? (type 'yes' to confirm) : ")
+ in := bufio.NewReader(os.Stdin)
+ line, err := in.ReadString('\n')
+ line = strings.TrimSuffix(line, "\n")
+ checkErr(err)
+
+ if line == "yes" {
+ return true
+ } else {
+ return false
+ }
+}
+
func checkErr(err error) {
if err != nil {
panic(err)