This commit is contained in:
@@ -11,29 +11,34 @@ import (
|
||||
type cmd struct {
|
||||
cmd func([]string, any)
|
||||
config any
|
||||
fs *flag.FlagSet
|
||||
}
|
||||
|
||||
func (c *cmd) Run() {
|
||||
func (c *cmd) Register(name string) {
|
||||
c.fs = flag.NewFlagSet(name, flag.ExitOnError)
|
||||
if c.config != nil {
|
||||
flag.Parse()
|
||||
filler := flagsfiller.New()
|
||||
err := filler.Fill(flag.CommandLine, c.config)
|
||||
err := filler.Fill(c.fs, c.config)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
c.cmd(flag.Args()[1:], c.config)
|
||||
} else {
|
||||
c.cmd(os.Args[2:], c.config)
|
||||
}
|
||||
}
|
||||
|
||||
var commands = map[string]cmd{
|
||||
func (c *cmd) Run(name string) {
|
||||
c.fs.Parse(os.Args[2:])
|
||||
c.cmd(c.fs.Args(), c.config)
|
||||
}
|
||||
|
||||
var commands = map[string]*cmd{
|
||||
"request": {
|
||||
request,
|
||||
nil,
|
||||
nil,
|
||||
},
|
||||
"create": {
|
||||
create,
|
||||
&createFlags{},
|
||||
nil,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"code.gitea.io/sdk/gitea"
|
||||
"git.schreifuchs.ch/lou-taylor/accounting/internal/email"
|
||||
"git.schreifuchs.ch/lou-taylor/accounting/pkg/invoice"
|
||||
)
|
||||
@@ -15,6 +16,7 @@ import (
|
||||
type createFlags struct {
|
||||
Email bool `flag:"email" help:"send invoice by email"`
|
||||
Output string `flag:"o" help:"output file"`
|
||||
Label string `flag:"l" help:"filters for issues with the label"`
|
||||
}
|
||||
|
||||
func create(arguments []string, c any) {
|
||||
@@ -33,6 +35,21 @@ func create(arguments []string, c any) {
|
||||
}
|
||||
|
||||
opts := invoice.DefaultOptions
|
||||
|
||||
if flags.Label != "" {
|
||||
opts.IssueState = gitea.StateAll
|
||||
opts.IssueFilter = func(i *gitea.Issue) bool {
|
||||
for _, l := range i.Labels {
|
||||
if l.Name == flags.Label {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
}
|
||||
opts.Since = time.Now().AddDate(-1, 0, 0)
|
||||
|
||||
opts.Mindur = time.Duration(req.DurationThreshold)
|
||||
invoice, report, err := invoicer.Generate(req.Creditor, req.Debtor, req.HourlyRate, repos, &opts)
|
||||
if err != nil {
|
||||
|
||||
@@ -1,20 +1,25 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"flag"
|
||||
"os"
|
||||
)
|
||||
|
||||
func main() {
|
||||
for n, c := range commands {
|
||||
c.Register(n)
|
||||
}
|
||||
if len(os.Args) < 2 {
|
||||
flag.PrintDefaults()
|
||||
return
|
||||
}
|
||||
|
||||
for n, c := range commands {
|
||||
if os.Args[1] == n {
|
||||
c.Run()
|
||||
break
|
||||
c.Run(n)
|
||||
return
|
||||
}
|
||||
}
|
||||
fmt.Println("cmd not found")
|
||||
|
||||
flag.PrintDefaults()
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ func getServices() (invoicer *invoice.Service, mailer *email.Service) {
|
||||
gitea.SetToken(cfg.Gitea.Token),
|
||||
)
|
||||
if err != nil {
|
||||
log.Fatal("could not connect to gitea: %v", err)
|
||||
log.Fatalf("could not connect to gitea: %v", err)
|
||||
return invoicer, mailer
|
||||
}
|
||||
gotenberg, err := pdf.New(cfg.PDF.Hostname)
|
||||
@@ -49,12 +49,12 @@ func getServices() (invoicer *invoice.Service, mailer *email.Service) {
|
||||
panic(err)
|
||||
}
|
||||
if err != nil {
|
||||
log.Fatal("could not connect to gotenberg: %v", err)
|
||||
log.Fatalf("could not connect to gotenberg: %v", err)
|
||||
return invoicer, mailer
|
||||
}
|
||||
mailer, err = email.New(cfg.Email)
|
||||
if err != nil {
|
||||
log.Fatal("could not create mailer: %v", err)
|
||||
log.Fatalf("could not create mailer: %v", err)
|
||||
return invoicer, mailer
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user