aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2017-06-03 17:35:24 +0200
committerTeddy Wing2017-06-03 17:35:24 +0200
commit80c8fa343a3d98c0601545ef9b3df743c6b6b901 (patch)
tree3f794accf3624808462c8af2f0f7f1c04d05714e
parent47ec5ffeea72fff2019636be2c97ee36fcd176a6 (diff)
parent81791bbf4291e28691ed2cfaaad357613c915174 (diff)
downloadtimetasker-80c8fa343a3d98c0601545ef9b3df743c6b6b901.tar.bz2
Merge branch 'command-line-arguments' into timetasker-daily
-rw-r--r--main.go63
-rw-r--r--timetask/http.go5
-rw-r--r--timetask/time_entry.go4
3 files changed, 62 insertions, 10 deletions
diff --git a/main.go b/main.go
index 41245db..63fdfe5 100644
--- a/main.go
+++ b/main.go
@@ -2,14 +2,19 @@ package main
import (
"io/ioutil"
+ "fmt"
"log"
+ "os"
"time"
"github.com/teddywing/timetasker/timetask"
"github.com/BurntSushi/toml"
+ "gopkg.in/alecthomas/kingpin.v2"
)
+var VERSION string = "0.1.0"
+
type Config struct {
Auth struct {
Username string
@@ -22,8 +27,59 @@ type Config struct {
var config Config
func main() {
+ var err error
+
loadConfig()
+ // Parse command line arguments
+ project_alias := kingpin.Flag(
+ "project",
+ "Project alias defined in config.toml.",
+ ).
+ Short('p').
+ Required().
+ String()
+ time_spent := kingpin.Flag("time", "Time spent working on project.").
+ Short('t').
+ Default("7").
+ Float()
+ date_str := kingpin.Flag("date", "Date when work was done (e.g. 2017-01-31)").
+ Short('d').
+ String()
+ description := kingpin.Flag("description", "Description of work.").
+ Short('m').
+ String()
+ kingpin.Version(VERSION)
+ kingpin.Parse()
+
+ // Submit time entry
+ project, ok := config.Projects[*project_alias]
+ if !ok {
+ fmt.Printf("Project '%s' not found\n", *project_alias)
+ os.Exit(1)
+ }
+
+ var date time.Time
+
+ // If the date argument isn't sent, default to today
+ if *date_str == "" {
+ date = time.Now()
+ } else {
+ date, err = time.Parse("2006-01-02", *date_str)
+ if err != nil {
+ fmt.Printf("Date '%s' could not be parsed. Example: -d 2017-01-31\n", *date_str)
+ os.Exit(1)
+ }
+ }
+
+ time_entry := timetask.NewTimeEntry(
+ config.Profile,
+ project,
+ date,
+ *time_spent,
+ *description,
+ )
+
resp, client, err := timetask.Login(
config.Auth.Username,
config.Auth.PasswordCmd,
@@ -37,13 +93,6 @@ func main() {
body, err := ioutil.ReadAll(resp.Body)
log.Println(string(body))
- time_entry := timetask.NewTimeEntry(
- config.Profile,
- config.Projects["example"],
- time.Now(),
- 7,
- "timetasker test",
- )
resp, err = timetask.SubmitTimeEntry(*client, time_entry)
if err != nil {
log.Fatalln(err)
diff --git a/timetask/http.go b/timetask/http.go
index 6e73276..f236665 100644
--- a/timetask/http.go
+++ b/timetask/http.go
@@ -5,6 +5,7 @@ import (
"net/http/cookiejar"
"net/url"
"strconv"
+ "strings"
"golang.org/x/net/publicsuffix"
)
@@ -97,9 +98,11 @@ func buildSubmissionParams(time_entry TimeEntry) url.Values {
time_entry.Date.Format("02/01/06"), // day/month/year
)
+ time_str := strconv.FormatFloat(time_entry.Time, 'f', 2, 64)
+ time_european_format := strings.Replace(time_str, ".", ",", 0)
v.Set(
"f_time0",
- strconv.Itoa(time_entry.Time),
+ time_european_format,
)
var billable string
diff --git a/timetask/time_entry.go b/timetask/time_entry.go
index ff0ad1f..bb7a741 100644
--- a/timetask/time_entry.go
+++ b/timetask/time_entry.go
@@ -10,7 +10,7 @@ type TimeEntry struct {
Task int
WorkType int
Date time.Time
- Time int
+ Time float64
Billable bool
Description string
}
@@ -19,7 +19,7 @@ func NewTimeEntry(
profile Profile,
project Project,
date time.Time,
- time int,
+ time float64,
description string,
) TimeEntry {
return TimeEntry{