diff options
| author | Nikolaus Gotsche <n@softwarefools.com> | 2019-05-22 23:46:20 +0200 |
|---|---|---|
| committer | Nikolaus Gotsche <n@softwarefools.com> | 2019-05-22 23:46:20 +0200 |
| commit | 06c765d4691dd65b926343e5391f627ac8a9c983 (patch) | |
| tree | 2cbe1107396eef52ad4d2d6b738dc840538f6476 | |
| parent | 83410ee498d56f18ccab0abb9c69f112f4d9f008 (diff) | |
interactive analysis
| -rw-r--r-- | analyze.go | 52 | ||||
| -rw-r--r-- | interact.go | 34 | ||||
| -rw-r--r-- | utils.go | 7 |
3 files changed, 90 insertions, 3 deletions
@@ -5,12 +5,24 @@ import ( "fmt" ) +// Daydata +type Daydata struct { + Day int + + Taskcount int + Projectcount int + + Workhours float64 + Workvalue float64 +} + // Data for Month type Month struct { Month int MonthName string Year int Days []int + Daydatas []Daydata Earnings float64 @@ -36,6 +48,11 @@ type Year struct { Projects []int } +func (d Daydata)Show()(out string){ + out = fmt.Sprintf("%v. : %v Tasks in %v Projects: %.2f [h] for %.2f[€]",d.Day,d.Taskcount,d.Projectcount,d.Workhours,d.Workvalue) + return +} + var analysis []Month var yearly []Year @@ -57,21 +74,34 @@ func MakeAnalysis() { val := ta.Money() if exist { + dex,dexid := DaydataExists(day,analysis[exid].Daydatas) if !isElement(day,analysis[exid].Days){ analysis[exid].Days = append(analysis[exid].Days,day) + }else{ + if dex { + analysis[exid].Daydatas[dexid].Workvalue += val + analysis[exid].Daydatas[dexid].Workhours += dur + analysis[exid].Daydatas[dexid].Taskcount += 1 + } } analysis[exid].Workvalue += val analysis[exid].Workhours += dur analysis[exid].Tasks = append(analysis[exid].Tasks,ta.Id) if !isElement(ta.Projectid,analysis[exid].Projects){ analysis[exid].Projects = append(analysis[exid].Projects,ta.Projectid) + }else{ + if dex { + analysis[exid].Daydatas[dexid].Projectcount += 1 + } } }else{ + daydat := Daydata{day,1,1, dur,val} analysis = append(analysis,Month{ month, monthstr, year, []int{day}, + []Daydata{daydat}, 0.0, //Earning @@ -96,6 +126,7 @@ func MakeAnalysis() { monthstr, year, []int{}, + []Daydata{}, py.Amount, //Earning @@ -137,8 +168,8 @@ func MakeAnalysis() { } } - ShowMonthlyAnalysis() - ShowYearlyAnalysis() +// ShowMonthlyAnalysis() +// ShowYearlyAnalysis() } @@ -173,7 +204,7 @@ func ShowMonthlyAnalysis() { for _,mo := range analysis { cnt, hr, dur := AnalyzeTasks(GetSelectedTasks(mo.Tasks)) - fmt.Println(sli,mo.Year,mo.MonthName) + fmt.Println(sub(fmt.Sprint(mo.Year,mo.MonthName))) fmt.Printf("%s Workhours: %.2f[h]\n",nli,mo.Workhours) fmt.Printf("%s Earnings: %.2f[€]\n",nli,mo.Earnings) fmt.Printf("%s Workvalue: %.2f[€]\n",nli,mo.Workvalue) @@ -183,7 +214,11 @@ func ShowMonthlyAnalysis() { fmt.Printf("%s %s\n",nli,dur) fmt.Printf("%s Hourly Rate: %.2f[€/h]\n",nli,mo.Earnings/mo.Workhours) fmt.Printf("%s Productivity: %.2f[h/d]\n",nli,mo.Workhours/float64(len(mo.Days))) + fmt.Println(sli,"Days:") + for _,dt := range mo.Daydatas { + fmt.Println(nli,dt.Show()) + } fmt.Println(nli) } fmt.Println(frame("",false)) @@ -209,3 +244,14 @@ func YearExists(year int) (exist bool, id int) { } return false,-1 } + +// Test if yearly slice conatins the year already and return its id if +func DaydataExists(day int, data []Daydata) (exist bool, id int) { + for i,dat := range data { + if dat.Day == day { + return true,i + } + } + return false,-1 +} + diff --git a/interact.go b/interact.go index d849eca..b8e5903 100644 --- a/interact.go +++ b/interact.go @@ -754,6 +754,40 @@ func interact(fulldb bool) { c.Println(promptcol("______________________")) }, }) + // Analysis commands + + analcmd := &ishell.Cmd{ + Name: "analysis", + Help: "monthly / yearly", + LongHelp: ` Usage: show analysis <command>`, +// Show all Projects with a small summary sorted by Customer.`, + } + analcmd.AddCmd(&ishell.Cmd{ + Name: "monthly", + Help: "Show a montly Report of all available data", + LongHelp: ` Usage: show analysis monthly + Show a monthly report of all available data.`, + Func: func(c *ishell.Context) { + MakeAnalysis() + ShowMonthlyAnalysis() + stdOut() + c.Println(promptcol("______________________")) + }, + }) + analcmd.AddCmd(&ishell.Cmd{ + Name: "yearly", + Help: "Show a yearly Report of all available data", + LongHelp: ` Usage: show analysis yearly + Show a yearly report of all available data.`, + Func: func(c *ishell.Context) { + MakeAnalysis() + ShowYearlyAnalysis() + stdOut() + c.Println(promptcol("______________________")) + }, + }) + + showcmd.AddCmd(analcmd) shell.AddCmd(showcmd) } /* @@ -276,6 +276,13 @@ func Round(x, unit float64) float64 { return RetardRound(x/unit) * unit } +// TEst if two time objects happen on same date +func DateEqual(date1, date2 time.Time) bool { + y1, m1, d1 := date1.Date() + y2, m2, d2 := date2.Date() + return y1 == y2 && m1 == m2 && d1 == d2 +} + func cleanString(in string) (out string) { work := strings.Replace(in, "/", "-", -1) work = strings.Replace(work, "*", "-", -1) |
