summaryrefslogtreecommitdiff
path: root/sqlite.go
diff options
context:
space:
mode:
authorNikolaus Gotsche <n@softwarefools.com>2018-09-10 01:29:27 +0200
committerNikolaus Gotsche <n@softwarefools.com>2018-09-10 01:29:27 +0200
commit3b4bc634700694a4d84a23f6b6700a5484065736 (patch)
treea6d91817b907d9a8de87e7fede1fc187b7d8b959 /sqlite.go
parent4a4f372605d56f2241699da6a5bf8dae7eda2b86 (diff)
Tasks Checked Bills nicely TeX Rendered
Diffstat (limited to 'sqlite.go')
-rw-r--r--sqlite.go79
1 files changed, 71 insertions, 8 deletions
diff --git a/sqlite.go b/sqlite.go
index f51a459..3335f11 100644
--- a/sqlite.go
+++ b/sqlite.go
@@ -183,7 +183,7 @@ func newBill(proj int) (int,string) {
//boldRed := color.New(color.FgRed, color.Bold).SprintFunc()
fmt.Println(boldGreen("Creating New Bill"))
//Show 5 recent bills
-
+ showLastBills(5)
invno := getInput("Invoice Number: ")
stmt, err := db.Prepare("INSERT INTO bills (identity, project, date) values(?, ?, datetime('now'))")
checkErr(err)
@@ -204,6 +204,28 @@ func saveBill(in bill) {
checkErr(err)
}
+func showLastBills(count int) {
+ //boldRed := color.New(color.FgRed, color.Bold).SprintFunc()
+ rows, err := db.Query("SELECT * FROM bills ORDER BY date DESC LIMIT ?",count)
+ checkErr(err)
+ var id,proj int
+ var ident,timerange string
+ var date,paid time.Time
+ var taskstr,timestr,hourstr,moneystr string
+ defer rows.Close()
+
+ //fmt.Println("___Open Task________________")
+ fmt.Printf("___Previous %v Bills________\n",count)
+ for rows.Next() {
+ err = rows.Scan(&id,&ident,&timerange,&proj,&taskstr,&timestr,&hourstr,&moneystr,&paid,&date)
+ checkErr(err)
+ prn,_ := getProjectName(proj)
+ hsum := sumFloatArray(string2FloatArray(hourstr,";"))
+ msum := sumFloatArray(string2FloatArray(moneystr,";"))
+ fmt.Printf(" %s - %s (%v) %.1f[h]: %.2f[€]\n",ident,prn,date,hsum,msum)
+ }
+}
+
func loadBills(in []int) (out []bill){
ins := strings.Trim(strings.Replace(fmt.Sprint(in)," "," , ",-1),"[]")
que := fmt.Sprintf("SELECT * FROM bills WHERE id IN (%s) ORDER BY project DESC",ins)
@@ -225,6 +247,7 @@ func loadBills(in []int) (out []bill){
}
return
}
+
func strings2items(tasks, times, hours, moneys string) (out []billitem) {
ta := string2StringArray(tasks,";")
ti := string2StringArray(times,";")
@@ -277,7 +300,7 @@ func closeTaskTime(tim string) {
}
timt,err := time.Parse("2006-01-02 15:04 MST",timst)
checkErr(err)
-
+
//fmt.Println(timst,timt,opentask.start)
if (timt.After(opentask.start)) {
//timstr := timt.UTC().Format("2006-01-02 15:04")
@@ -315,6 +338,26 @@ func closeTask() {
}
}
+func checkTasks(in []int,billid int) {
+ ins := strings.Trim(strings.Replace(fmt.Sprint(in)," "," , ",-1),"[]")
+ que := fmt.Sprintf("UPDATE timetable SET checkout = ? WHERE id IN (%s)",ins)
+ //rows,err := db.Query(que)
+ stmt, err := db.Prepare(que)
+ checkErr(err)
+ _, err = stmt.Exec(billid)
+ checkErr(err)
+}
+
+func uncheckTasks(in []int) {
+ ins := strings.Trim(strings.Replace(fmt.Sprint(in)," "," , ",-1),"[]")
+ que := fmt.Sprintf("UPDATE timetable SET checkout = ? WHERE id IN (%s)",ins)
+ //rows,err := db.Query(que)
+ stmt, err := db.Prepare(que)
+ checkErr(err)
+ _, err = stmt.Exec(0)
+ checkErr(err)
+}
+
func updateProject(id int) {
stmt, err := db.Prepare("UPDATE projects SET last = datetime('now') WHERE id = ?")
checkErr(err)
@@ -581,7 +624,7 @@ func showLastProject() {
func addCustomer() {
com := getInput("Enter Customer Company: ")
nam := getInput("Enter Customer Name: ")
- add := getInput("Enter Address (separate lines by ; [Street;Zip;City]): ")
+ add := getInput("Enter Address (separate lines by ; [Street;Zip;City;Country]): ")
satstr := getInput("Hourly Rate: ")
sat,err := strconv.ParseFloat(satstr,64)
checkErr(err)
@@ -621,14 +664,14 @@ func newProject() {
}
func getClosedTasks(num int) {
- fmt.Println("___Past Tasks_______________")
+ fmt.Println("___Billed Tasks_______________")
rows,err := db.Query("SELECT * FROM timetable WHERE stop != '1791-09-30 19:07' ORDER BY datetime(start)",currproject.id)
checkErr(err)
if num > 0 {
- rows,err = db.Query("SELECT * FROM timetable WHERE project = $1 AND stop != '1791-09-30 19:07'ORDER BY datetime(start) DESC LIMIT $2",currproject.id,num)
+ rows,err = db.Query("SELECT * FROM timetable WHERE project = $1 AND checkout > 0 AND stop != '1791-09-30 19:07'ORDER BY datetime(start) DESC LIMIT $2",currproject.id,num)
checkErr(err)
} else {
- rows,err = db.Query("SELECT * FROM timetable WHERE project = $1 AND stop != '1791-09-30 19:07'ORDER BY datetime(start)",currproject.id)
+ rows,err = db.Query("SELECT * FROM timetable WHERE project = $1 AND checkout > 0 AND stop != '1791-09-30 19:07'ORDER BY datetime(start)",currproject.id)
checkErr(err)
}
var id, proj,check int
@@ -646,8 +689,28 @@ func getClosedTasks(num int) {
sum += dur
}
rows.Close()
+ fmt.Printf("Billed: %.2f h\n",sum)
+ fmt.Println("___Past Tasks_______________")
+
+ if num > 0 {
+ rows,err = db.Query("SELECT * FROM timetable WHERE project = $1 AND checkout = 0 AND stop != '1791-09-30 19:07'ORDER BY datetime(start) DESC LIMIT $2",currproject.id,num)
+ checkErr(err)
+ } else {
+ rows,err = db.Query("SELECT * FROM timetable WHERE project = $1 AND checkout = 0 AND stop != '1791-09-30 19:07'ORDER BY datetime(start)",currproject.id)
+ checkErr(err)
+ }
+ sum2 := 0.0
+ for rows.Next() {
+ err = rows.Scan(&id, &proj, &sta, &sto, &tas, &check)
+ checkErr(err)
+ dur = float64(sto.Sub(sta))/(1000000000*60*60)
+ fmt.Printf("%v: %v (%v-%v) - %.2f h\n",id,tas,sta.Local().Format("2006 Mon Jan _2 15:04"),sto.Local().Format("15:04"),dur)
+ //fmt.Println(id,tas,sta.Local().Format("2006 Mon Jan _2 15:04"),sto.Local().Format("15:04"),dur,"h")
+ sum2 += dur
+ }
+ rows.Close()
fmt.Println("____________________________")
- fmt.Printf("Gesamt: %.2f h\n",sum)
+ fmt.Printf("Unbilled: %.2f[h] Total: %.2f[h]\n",sum2,sum+sum2)
}
func getLastProject() {
@@ -772,7 +835,7 @@ func allProjects() {
for rows.Next() {
err = rows.Scan(&uid, &prname, &first, &last, &finish, &customer)
checkErr(err)
- rows2,err := db.Query("SELECT start, stop FROM timetable WHERE project = $1 AND checkout = 0 AND stop != '1791-09-30 19:07'",uid)
+ rows2,err := db.Query("SELECT start, stop FROM timetable WHERE project = $1 AND stop != '1791-09-30 19:07'",uid)
checkErr(err)
sum := 0.0
for rows2.Next() {