From 3b4bc634700694a4d84a23f6b6700a5484065736 Mon Sep 17 00:00:00 2001 From: Nikolaus Gotsche Date: Mon, 10 Sep 2018 01:29:27 +0200 Subject: Tasks Checked Bills nicely TeX Rendered --- sqlite.go | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 71 insertions(+), 8 deletions(-) (limited to 'sqlite.go') 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,×tr,&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() { -- cgit v1.2.3