summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--analyze.go52
-rw-r--r--interact.go34
-rw-r--r--utils.go7
3 files changed, 90 insertions, 3 deletions
diff --git a/analyze.go b/analyze.go
index 8fb56aa..aa18053 100644
--- a/analyze.go
+++ b/analyze.go
@@ -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)
}
/*
diff --git a/utils.go b/utils.go
index 5b5be5a..3f04959 100644
--- a/utils.go
+++ b/utils.go
@@ -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)