From f432c5424a05fa8c8af15881b98f73e83c0022b2 Mon Sep 17 00:00:00 2001 From: Carl Kittelberger Date: Wed, 15 Feb 2017 14:01:26 +0100 Subject: [PATCH] Implement "First day is monday" and "Only show work days" properties. --- export/latex/export.go | 23 ++++++++++++++++++++++- export/latex/template.go | 14 +++++++------- project/format.go | 12 +++++++----- 3 files changed, 36 insertions(+), 13 deletions(-) diff --git a/export/latex/export.go b/export/latex/export.go index 1c8b4f7..84c1a4c 100644 --- a/export/latex/export.go +++ b/export/latex/export.go @@ -3,7 +3,9 @@ package latex import ( "io" "text/template" + "time" + "github.com/jinzhu/now" "github.com/nicksnyder/go-i18n/i18n" "git.dekart811.net/icedream/workreportmgr/project" @@ -32,8 +34,27 @@ func (e *Exporter) Export(prj *project.Project, w io.Writer) (err error) { return } - exportTemplate.Funcs(template.FuncMap{ + now.FirstDayMonday = prj.FirstDayMonday + + exportTemplate = exportTemplate.Funcs(template.FuncMap{ "T": T, + "beginofweek": func(date project.Date) project.Date { + day := now.New(date.Time).BeginningOfWeek() + if prj.OnlyShowWorkDays && !now.FirstDayMonday { + day = day.Add(time.Hour * 24) + } + return project.Date{Time: day} + }, + "endofweek": func(date project.Date) project.Date { + day := now.New(date.Time).EndOfWeek() + if prj.OnlyShowWorkDays { + day = day.Add(time.Hour * -24) + if now.FirstDayMonday { + day = day.Add(time.Hour * -24) + } + } + return project.Date{Time: day} + }, }) data := struct { diff --git a/export/latex/template.go b/export/latex/template.go index 1bb522a..8af3c35 100644 --- a/export/latex/template.go +++ b/export/latex/template.go @@ -16,17 +16,17 @@ const dateFormat = "02.01.2006" // TODO - localize! var exportTemplate = template.Must(template. New("latex_export"). Funcs(template.FuncMap{ - "T": i18n.IdentityTfunc, + "T": i18n.IdentityTfunc, + "beginofweek": func(date project.Date) project.Date { + return project.Date{Time: now.New(date.Time).BeginningOfWeek()} + }, + "endofweek": func(date project.Date) project.Date { + return project.Date{Time: now.New(date.Time).EndOfWeek()} + }, "escape": stringutil.TexEscape, "add": func(a, b int) int { return a + b }, - "beginofweek": func(date project.Date) project.Date { - return project.Date{now.New(date.Time).BeginningOfWeek()} - }, - "endofweek": func(date project.Date) project.Date { - return project.Date{now.New(date.Time).EndOfWeek()} - }, }). Delims("<", ">"). Parse(`% !TeX diff --git a/project/format.go b/project/format.go index e5e1720..b6bb4b0 100644 --- a/project/format.go +++ b/project/format.go @@ -2,9 +2,11 @@ package project // Project represents the root structure of a project file. type Project struct { - Name string `json:"Name"` - Department string `json:"Department"` - Begin Date `json:"Begin"` - End Date `json:"End"` - Weeks []Week `json:"Weeks"` + Name string `json:"Name"` + Department string `json:"Department"` + FirstDayMonday bool `json:"First day is monday"` + OnlyShowWorkDays bool `json:"Only show work days"` + Begin Date `json:"Begin"` + End Date `json:"End"` + Weeks []Week `json:"Weeks"` }