diff --git a/cmd/cli/config.go b/cmd/cli/config.go index 9b8d9f8..1189989 100644 --- a/cmd/cli/config.go +++ b/cmd/cli/config.go @@ -3,7 +3,7 @@ package cli type Config struct { Files FileList Query struct { - Period string + Period Period Sort string NoRounding bool Depth int diff --git a/cmd/cli/flag.go b/cmd/cli/flag.go index 9fa1d0e..213fd77 100644 --- a/cmd/cli/flag.go +++ b/cmd/cli/flag.go @@ -4,6 +4,7 @@ import ( "fmt" "os" "strings" + "time" ) type FlagStringArray []string @@ -33,3 +34,35 @@ func (fileList *FileList) Set(s string) error { } return (*FlagStringArray)(fileList).Set(s) } + +type Period struct { + Start time.Time + Stop time.Time +} + +func (period Period) Empty() bool { + return period.Stop.Sub(period.Start) == 0 +} + +func (period *Period) String() string { + return fmt.Sprintf("%s..%s", period.Start, period.Stop) +} + +func (period *Period) Set(s string) error { + if result, err := time.Parse("2006", s); err == nil { + period.Start = result + period.Stop = result.AddDate(1, 0, 0).Add(-1 * time.Minute) + return nil + } + if result, err := time.Parse("2006-01", s); err == nil { + period.Start = result + period.Stop = result.AddDate(0, 1, 0).Add(-1 * time.Minute) + return nil + } + if result, err := time.Parse("2006-01-02", s); err == nil { + period.Start = result + period.Stop = result.AddDate(0, 0, 1).Add(-1 * time.Minute) + return nil + } + return fmt.Errorf("unimplemented format: %s", s) +} diff --git a/cmd/cli/main.go b/cmd/cli/main.go index 8d0048a..9d14420 100644 --- a/cmd/cli/main.go +++ b/cmd/cli/main.go @@ -3,6 +3,7 @@ package cli import ( "flag" "fmt" + "log" "os" "slices" @@ -14,7 +15,7 @@ func Main() { fs := flag.NewFlagSet(os.Args[0], flag.ContinueOnError) fs.Var(&config.Files, "f", "paths to files") - fs.StringVar(&config.Query.Period, "period", "", "period") + fs.Var(&config.Query.Period, "period", "period") fs.StringVar(&config.Query.Sort, "S", "", "sort ie date") fs.BoolVar(&config.Query.NoRounding, "no-rounding", false, "no rounding") fs.IntVar(&config.Query.Depth, "depth", 0, "depth grouping") @@ -47,8 +48,14 @@ func Main() { panic(err) } - if period := config.Query.Period; period != "" { - panic(period) + if period := config.Query.Period; !period.Empty() { + after := period.Start.Format("2006-01-02") + before := period.Stop.Format("2006-01-02") + deltas = deltas.Like( + ledger.LikeAfter(after), + ledger.LikeBefore(before), + ) + log.Printf("period=%+v after=%s before=%s", period, after, before) } if depth := config.Query.Depth; depth > 0 {