Implemented project-related config

This commit is contained in:
マリウス 2020-10-17 01:33:38 +01:00
parent 12f226c324
commit b7d64baeef
No known key found for this signature in database
GPG key ID: C228EF0A530AF06F

View file

@ -3,9 +3,10 @@ package z
import ( import (
"fmt" "fmt"
"time" "time"
"strings"
"github.com/shopspring/decimal" "github.com/shopspring/decimal"
"github.com/jinzhu/now" "github.com/jinzhu/now"
"github.com/gookit/color" // "github.com/gookit/color"
) )
type Statistic struct { type Statistic struct {
@ -36,11 +37,24 @@ func NewCalendar(entries []Entry) (Calendar, error) {
cal.Distribution = make(map[string]Statistic) cal.Distribution = make(map[string]Statistic)
projects := make(map[string]Project)
for _, entry := range entries { for _, entry := range entries {
endOfBeginDay := now.With(entry.Begin).EndOfDay() endOfBeginDay := now.With(entry.Begin).EndOfDay()
sameDayHours := decimal.NewFromInt(0) sameDayHours := decimal.NewFromInt(0)
nextDayHours := decimal.NewFromInt(0) nextDayHours := decimal.NewFromInt(0)
projectId := GetProjectIdFromName(entry.Project)
if projects[projectId].Name == "" {
project, err := database.GetProject(entry.User, entry.Project)
if err != nil {
return cal, err
}
projects[projectId] = project
}
/* /*
* Apparently the activity end is on a new day. * Apparently the activity end is on a new day.
* This means we have to split the activity across two days. * This means we have to split the activity across two days.
@ -72,7 +86,7 @@ func NewCalendar(entries []Entry) (Calendar, error) {
stat := Statistic{ stat := Statistic{
Hours: sameDayHours, Hours: sameDayHours,
Project: entry.Project, Project: entry.Project,
Color: color.FgCyan.Render, Color: GetColorFnFromHex(projects[projectId].Color),
} }
if cal.Months[month0].Weeks[weeknumber0].Statistics == nil { if cal.Months[month0].Weeks[weeknumber0].Statistics == nil {
@ -92,7 +106,7 @@ func NewCalendar(entries []Entry) (Calendar, error) {
stat := Statistic{ stat := Statistic{
Hours: nextDayHours, Hours: nextDayHours,
Project: entry.Project, Project: entry.Project,
Color: color.FgCyan.Render, // TODO: Make configurable Color: GetColorFnFromHex(projects[projectId].Color),
} }
if cal.Months[month0].Weeks[weeknumber0].Statistics == nil { if cal.Months[month0].Weeks[weeknumber0].Statistics == nil {
@ -106,7 +120,7 @@ func NewCalendar(entries []Entry) (Calendar, error) {
dist.Project = entry.Project dist.Project = entry.Project
dist.Hours = dist.Hours.Add(sameDayHours) dist.Hours = dist.Hours.Add(sameDayHours)
dist.Hours = dist.Hours.Add(nextDayHours) dist.Hours = dist.Hours.Add(nextDayHours)
dist.Color = color.FgCyan.Render // TODO: Make configurable dist.Color = GetColorFnFromHex(projects[projectId].Color)
cal.Distribution[entry.Project] = dist cal.Distribution[entry.Project] = dist
// fmt.Printf("Same Day: %s \n Next Day: %s \n Project Hours: %s\n", sameDayHours.String(), nextDayHours.String(), dist.Hours.String()) // fmt.Printf("Same Day: %s \n Next Day: %s \n Project Hours: %s\n", sameDayHours.String(), nextDayHours.String(), dist.Hours.String())
@ -152,18 +166,24 @@ func (calendar *Calendar) GetOutputForWeekCalendar(date time.Time, month int, we
func (calendar *Calendar) GetOutputForDistribution() (string) { func (calendar *Calendar) GetOutputForDistribution() (string) {
var output string = "" var output string = ""
output = fmt.Sprintf("DISTRIBUTION\n\n");
output = fmt.Sprintf("%s████████████████████████████████████████████████████████████████████████████████\n\n", output)
// fmt.Printf("%s\n", calendar.TotalHours.String()) // fmt.Printf("%s\n", calendar.TotalHours.String())
var bar string = ""
for _, stat := range calendar.Distribution { for _, stat := range calendar.Distribution {
divided := stat.Hours.Div(calendar.TotalHours) divided := stat.Hours.Div(calendar.TotalHours)
percentage := divided.Mul(decimal.NewFromInt(100)) percentage := divided.Mul(decimal.NewFromInt(100))
hoursStr := stat.Hours.StringFixed(2) hoursStr := stat.Hours.StringFixed(2)
percentageStr := percentage.StringFixed(2) percentageStr := percentage.StringFixed(2)
output = fmt.Sprintf("%s%s%*s H / %*s %%\n", output, stat.Project, (68 - len(stat.Project)), hoursStr, 5, percentageStr)
dividedByBarLength := percentage.Div(decimal.NewFromInt(100))
percentageForBar := dividedByBarLength.Mul(decimal.NewFromInt(80))
percentageForBarInt := int(percentageForBar.Round(0).IntPart())
bar = fmt.Sprintf("%s%s", bar, stat.Color(strings.Repeat("█", percentageForBarInt)))
output = fmt.Sprintf("%s%s%*s H / %*s %%\n", output, stat.Color(stat.Project), (68 - len(stat.Project)), hoursStr, 5, percentageStr)
} }
output = fmt.Sprintf("DISTRIBUTION\n\n%s\n\n%s\n", bar, output)
return output return output
} }