mirror of
https://github.com/go-gitea/gitea.git
synced 2025-02-07 01:13:50 +01:00
75 lines
2.2 KiB
Go
75 lines
2.2 KiB
Go
|
// Copyright 2025 The Gitea Authors. All rights reserved.
|
||
|
// SPDX-License-Identifier: MIT
|
||
|
|
||
|
package org
|
||
|
|
||
|
import (
|
||
|
"net/http"
|
||
|
"time"
|
||
|
|
||
|
"code.gitea.io/gitea/models/organization"
|
||
|
"code.gitea.io/gitea/modules/templates"
|
||
|
"code.gitea.io/gitea/services/context"
|
||
|
)
|
||
|
|
||
|
const tplByRepos templates.TplName = "org/worktime"
|
||
|
|
||
|
// parseOrgTimes contains functionality that is required in all these functions,
|
||
|
// like parsing the date from the request, setting default dates, etc.
|
||
|
func parseOrgTimes(ctx *context.Context) (unixFrom, unixTo int64) {
|
||
|
rangeFrom := ctx.FormString("from")
|
||
|
rangeTo := ctx.FormString("to")
|
||
|
if rangeFrom == "" {
|
||
|
rangeFrom = time.Now().Format("2006-01") + "-01" // defaults to start of current month
|
||
|
}
|
||
|
if rangeTo == "" {
|
||
|
rangeTo = time.Now().Format("2006-01-02") // defaults to today
|
||
|
}
|
||
|
|
||
|
ctx.Data["RangeFrom"] = rangeFrom
|
||
|
ctx.Data["RangeTo"] = rangeTo
|
||
|
|
||
|
timeFrom, err := time.Parse("2006-01-02", rangeFrom)
|
||
|
if err != nil {
|
||
|
ctx.ServerError("time.Parse", err)
|
||
|
}
|
||
|
timeTo, err := time.Parse("2006-01-02", rangeTo)
|
||
|
if err != nil {
|
||
|
ctx.ServerError("time.Parse", err)
|
||
|
}
|
||
|
unixFrom = timeFrom.Unix()
|
||
|
unixTo = timeTo.Add(1440*time.Minute - 1*time.Second).Unix() // humans expect that we include the ending day too
|
||
|
return unixFrom, unixTo
|
||
|
}
|
||
|
|
||
|
func Worktime(ctx *context.Context) {
|
||
|
ctx.Data["PageIsOrgTimes"] = true
|
||
|
|
||
|
unixFrom, unixTo := parseOrgTimes(ctx)
|
||
|
if ctx.Written() {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
worktimeBy := ctx.FormString("by")
|
||
|
ctx.Data["WorktimeBy"] = worktimeBy
|
||
|
|
||
|
var worktimeSumResult any
|
||
|
var err error
|
||
|
if worktimeBy == "milestones" {
|
||
|
worktimeSumResult, err = organization.GetWorktimeByMilestones(ctx.Org.Organization, unixFrom, unixTo)
|
||
|
ctx.Data["WorktimeByMilestones"] = true
|
||
|
} else if worktimeBy == "members" {
|
||
|
worktimeSumResult, err = organization.GetWorktimeByMembers(ctx.Org.Organization, unixFrom, unixTo)
|
||
|
ctx.Data["WorktimeByMembers"] = true
|
||
|
} else /* by repos */ {
|
||
|
worktimeSumResult, err = organization.GetWorktimeByRepos(ctx.Org.Organization, unixFrom, unixTo)
|
||
|
ctx.Data["WorktimeByRepos"] = true
|
||
|
}
|
||
|
if err != nil {
|
||
|
ctx.ServerError("GetWorktime", err)
|
||
|
return
|
||
|
}
|
||
|
ctx.Data["WorktimeSumResult"] = worktimeSumResult
|
||
|
ctx.HTML(http.StatusOK, tplByRepos)
|
||
|
}
|