summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--interact.go26
-rw-r--r--sqlite.go91
2 files changed, 91 insertions, 26 deletions
diff --git a/interact.go b/interact.go
index bbce1bb..f1ffb53 100644
--- a/interact.go
+++ b/interact.go
@@ -11,12 +11,13 @@ import (
func interact() {
+ stdOut()
shell := ishell.New()
cyan := color.New(color.FgCyan).SprintFunc()
yellow := color.New(color.FgYellow).SprintFunc()
green := color.New(color.FgGreen).SprintFunc()
- boldGreen := color.New(color.FgGreen, color.Bold).SprintFunc()
+// boldGreen := color.New(color.FgGreen, color.Bold).SprintFunc()
boldRed := color.New(color.FgRed, color.Bold).SprintFunc()
// display info.
@@ -26,7 +27,8 @@ func interact() {
Name: "new",
Help: "Start new Project",
Func: func(c *ishell.Context) {
- c.Println(boldGreen("Start New Project"))
+ //c.Print("\033[H\033[2J")
+ //c.Println(boldGreen("Start New Project"))
newProject()
showLastProject()
},
@@ -36,7 +38,7 @@ func interact() {
Name: "startnow",
Help: "Start a new Task immediately",
Func: func(c *ishell.Context) {
- c.Println(boldGreen("New Task"))
+ //c.Println(boldGreen("New Task"))
newTask(projectid)
stdOut()
},
@@ -46,7 +48,8 @@ func interact() {
Name: "stopnow",
Help: "Stop the currently Open Task immediately",
Func: func(c *ishell.Context) {
- c.Println(boldGreen("Stoping Task",opentask.id))
+ //c.Print("\033[H\033[2J")
+ //c.Println(boldGreen("Stoping Task",opentask.id))
closeTask()
stdOut()
},
@@ -56,12 +59,13 @@ func interact() {
Name: "project",
Help: "<id> Open a Project of 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))
+ //c.Println(boldGreen("Opening Project",argi))
setProject(argi)
stdOut()
}else{
@@ -78,12 +82,13 @@ func interact() {
Name: "edittask",
Help: "<id> Edit a Task of 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("Editing Task",argi))
+ //c.Println(boldGreen("Editing Task",argi))
editTask(argi)
//stdOut()
}else{
@@ -99,12 +104,13 @@ func interact() {
Name: "editproject",
Help: "<id> Edit the Project of 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("Edit Project",argi))
+ //c.Println(boldGreen("Edit Project",argi))
editProject(argi)
allProjects()
//stdOut()
@@ -125,7 +131,7 @@ func interact() {
arg := "none"
if len(c.Args) > 0 {
arg = strings.Join(c.Args, " ")
- c.Println(boldGreen("Start Project at",arg))
+ //c.Println(boldGreen("Start Project at",arg))
newTaskTime(projectid,arg)
// editProject(argi)
stdOut()
@@ -139,10 +145,11 @@ func interact() {
Name: "stop",
Help: "<DateTime> - Stop Open Task at a specific Time 'YYYY-MM-DD HH:MM' Or 'HH:MM'",
Func: func(c *ishell.Context) {
+ //c.Print("\033[H\033[2J")
arg := "none"
if len(c.Args) > 0 {
arg = strings.Join(c.Args, " ")
- c.Println(boldGreen("Stop Task at",arg))
+ //c.Println(boldGreen("Stop Task at",arg))
closeTaskTime(arg)
stdOut()
}else{
@@ -155,6 +162,7 @@ func interact() {
Name: "all",
Help: "Show all Projects Project",
Func: func(c *ishell.Context) {
+ //c.Print("\033[H\033[2J")
//c.Println(boldGreen("Start New Project"))
allProjects()
stdOut()
diff --git a/sqlite.go b/sqlite.go
index 273c91b..9c310b2 100644
--- a/sqlite.go
+++ b/sqlite.go
@@ -19,7 +19,8 @@ type project struct{
name string
first time.Time
last time.Time
- finish int
+ finish bool
+ customer int
}
type task struct{
@@ -47,7 +48,8 @@ func initDB(filename string) {
name VARCHAR(240) NOT NULL,
first TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
last TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- finished INTEGER NOT NULL);
+ finished INTEGER NOT NULL,
+ customer INTEGER DEFAULT NULL);
CREATE TABLE timetable(
id INTEGER PRIMARY KEY AUTOINCREMENT,
project INTEGER NOT NULL,
@@ -55,6 +57,12 @@ func initDB(filename string) {
stop TIMESTAMP DEFAULT '1791-09-30 19:07',
task VARCHAR(240) NOT NULL,
checkout INTEGER NOT NULL);
+ CREATE TABLE customers(
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ name VARCHAR(240),
+ address VARCHAR(240),
+ satz REAL,
+ lastbill TIMESTAMP DEFAULT '1791-09-30 19:07');
`
_, err = db.Exec(sqlstmt)
checkErr(err)
@@ -66,7 +74,9 @@ func initDB(filename string) {
}
func newTaskTime(proj int, tim string) {
+ boldGreen := color.New(color.FgGreen, color.Bold).SprintFunc()
boldRed := color.New(color.FgRed, color.Bold).SprintFunc()
+ fmt.Println(boldGreen("Start Project at ",tim))
if (opentask.id == 0) {
timstr := "1791-09-30 19:07"
if isDate(tim) {
@@ -101,7 +111,9 @@ func newTaskTime(proj int, tim string) {
}
func newTask(proj int) {
+ boldGreen := color.New(color.FgGreen, color.Bold).SprintFunc()
boldRed := color.New(color.FgRed, color.Bold).SprintFunc()
+ fmt.Println(boldGreen("Starting new Task"))
if (opentask.id == 0) {
task := getInput("Specify Task: ")
stmt, err := db.Prepare("INSERT INTO timetable(project, task, checkout) values(?, ?, ?)")
@@ -122,7 +134,9 @@ func newTask(proj int) {
}
func closeTaskTime(tim string) {
+ boldGreen := color.New(color.FgGreen, color.Bold).SprintFunc()
boldRed := color.New(color.FgRed, color.Bold).SprintFunc()
+ fmt.Println(boldGreen("Stoping Task ",opentask.id,":",opentask.taskname))
if opentask.id==0 {
fmt.Println(boldRed("There is no Open Task"))
return
@@ -162,7 +176,9 @@ func closeTaskTime(tim string) {
}
func closeTask() {
+ boldGreen := color.New(color.FgGreen, color.Bold).SprintFunc()
boldRed := color.New(color.FgRed, color.Bold).SprintFunc()
+ fmt.Println(boldGreen("Stoping Task ",opentask.id,":",opentask.taskname))
if opentask.id==0 {
fmt.Println(boldRed("There is no Open Task"))
return
@@ -234,9 +250,19 @@ func newProject() {
boldRed := color.New(color.FgRed, color.Bold).SprintFunc()
if (opentask.id == 0) {
nam := getInput("Enter Project Name: ")
- stmt, err := db.Prepare("INSERT INTO projects(name, finished) values(?, ?)")
+ icust := 0
+ for{
+ cust := getInput("Enter Customer id (0 for none): ")
+ icust,err = strconv.Atoi(cust)
+ if (err == nil && (isCustomer(icust) || icust == 0)) {
+ break
+ } else {
+ fmt.Println(cust,boldRed("is an invalid ID or Not a known Customer"))
+ }
+ }
+ stmt, err := db.Prepare("INSERT INTO projects(name, finished,customer) values(?, ?, ?)")
checkErr(err)
- _, err = stmt.Exec(nam,0)
+ _, err = stmt.Exec(nam,0,icust)
checkErr(err)
fmt.Println(" Project Created:",nam)
getLastProject()
@@ -285,16 +311,18 @@ func getLastProject() {
var first,nfirst time.Time
var last,nlast time.Time
var finish,nfinish int
+ var custom,ncustom int
for rows.Next() {
- err = rows.Scan(&uid, &prname, &first, &last, &finish)
+ err = rows.Scan(&uid, &prname, &first, &last, &finish, &custom)
checkErr(err)
if (last.After(nlast)){
nuid=uid
nprname=prname
nfirst=first
nlast=last
- nfinish=finish
+ nfinish=finish
+ ncustom=custom
}
}
rows.Close() //good habit to close
@@ -303,11 +331,14 @@ func getLastProject() {
currproject.name = nprname
currproject.first = nfirst
currproject.last = nlast
- currproject.finish = nfinish
+ currproject.finish = nfinish != 0
+ currproject.customer = ncustom
}
func setProject (nid int) {
+ boldGreen := color.New(color.FgGreen, color.Bold).SprintFunc()
boldRed := color.New(color.FgRed, color.Bold).SprintFunc()
+ fmt.Println(boldGreen("Opening Project ",nid))
if !isProject(nid){
fmt.Println(boldRed("There is no Project"),nid)
return
@@ -331,7 +362,7 @@ func setProject (nid int) {
currproject.name = prname
currproject.first = first
currproject.last = last
- currproject.finish = finish
+ currproject.finish = finish != 0
updateProject(uid)
} else {
fmt.Println(boldRed("There is an Open Task"))
@@ -348,17 +379,19 @@ func allProjects() {
var first time.Time
var last time.Time
var finish int
+ var customer int
fmt.Println("___All Projects________________")
for rows.Next() {
- err = rows.Scan(&uid, &prname, &first, &last, &finish)
+ 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)
+ fmt.Println(" ",uid,prname,first.Local().Format("2006-09-02 19:13"),last.Local().Format("2006-09-02 19:13"),finish,customer)
}
rows.Close() //good habit to close
}
func editTask(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
@@ -375,7 +408,7 @@ func editTask(id int) {
}
rows.Close() //good habit to close
- fmt.Println("Edit Task",id)
+ fmt.Println(boldGreen("Edit Task ",id))
fmt.Println("Old Name:",task)
in := getInput("Enter New:")
if in!=""{
@@ -433,16 +466,17 @@ func editTask(id int) {
}
func editProject(id int) {
+ boldGreen := color.New(color.FgGreen, color.Bold).SprintFunc()
boldRed := color.New(color.FgRed, color.Bold).SprintFunc()
- var fin int
+ var fin,cust int
var first time.Time
var name,nfirst string
- rows,err := db.Query("SELECT name, first, finished FROM projects WHERE id = $1",id)
+ rows,err := db.Query("SELECT name, first, finished, customer FROM projects WHERE id = $1",id)
checkErr(err)
if rows.Next() {
- err = rows.Scan(&name, &first, &fin)
+ err = rows.Scan(&name, &first, &fin, &cust)
checkErr(err)
- fmt.Println("Edit Project",id)
+ fmt.Println(boldGreen("Edit Project ",id))
fmt.Println("Old Name:",name)
in := getInput("Enter New:")
if in!=""{
@@ -462,15 +496,26 @@ func editProject(id int) {
}
}else{break}
}
+ fmt.Println("Old Customer:",cust)
+ for{
+ custs := getInput("Enter Customer id (0 for none): ")
+ icust,err := strconv.Atoi(custs)
+ if (err == nil && (isCustomer(icust) || icust == 0)) {
+ cust = icust
+ break
+ } else {
+ fmt.Println(custs,boldRed("is an invalid ID or Not a known Customer"))
+ }
+ }
}else{
fmt.Println(boldRed("There Is No Project"),id)
return
//os.Exit(0)
}
rows.Close() //good habit to close
- stmt, err := db.Prepare("UPDATE projects SET name = ?, last = datetime(?,'utc') WHERE id = ?")
+ stmt, err := db.Prepare("UPDATE projects SET name = ?, last = datetime(?,'utc'), customer = ? WHERE id = ?")
checkErr(err)
- _, err = stmt.Exec(name,nfirst,id)
+ _, err = stmt.Exec(name,nfirst,cust,id)
checkErr(err)
updateProject(id)
fmt.Println("...Project",id,"Updated")
@@ -488,6 +533,18 @@ func isProject(id int) bool {
}
}
+func isCustomer(id int) bool {
+
+ rows,err := db.Query("SELECT * FROM customers WHERE id = $1",id)
+ checkErr(err)
+ defer rows.Close()
+ if rows.Next() {
+ return true
+ } else {
+ return false
+ }
+}
+
func getDate(in string) string {
r := regexp.MustCompile(`(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2})`)
return r.FindString(in)