gitea源码

worktime.go 2.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // Copyright 2025 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package org
  4. import (
  5. "net/http"
  6. "time"
  7. "code.gitea.io/gitea/models/organization"
  8. "code.gitea.io/gitea/modules/templates"
  9. shared_user "code.gitea.io/gitea/routers/web/shared/user"
  10. "code.gitea.io/gitea/services/context"
  11. )
  12. const tplByRepos templates.TplName = "org/worktime"
  13. // parseOrgTimes contains functionality that is required in all these functions,
  14. // like parsing the date from the request, setting default dates, etc.
  15. func parseOrgTimes(ctx *context.Context) (unixFrom, unixTo int64) {
  16. rangeFrom := ctx.FormString("from")
  17. rangeTo := ctx.FormString("to")
  18. if rangeFrom == "" {
  19. rangeFrom = time.Now().Format("2006-01") + "-01" // defaults to start of current month
  20. }
  21. if rangeTo == "" {
  22. rangeTo = time.Now().Format("2006-01-02") // defaults to today
  23. }
  24. ctx.Data["RangeFrom"] = rangeFrom
  25. ctx.Data["RangeTo"] = rangeTo
  26. timeFrom, err := time.Parse("2006-01-02", rangeFrom)
  27. if err != nil {
  28. ctx.ServerError("time.Parse", err)
  29. }
  30. timeTo, err := time.Parse("2006-01-02", rangeTo)
  31. if err != nil {
  32. ctx.ServerError("time.Parse", err)
  33. }
  34. unixFrom = timeFrom.Unix()
  35. unixTo = timeTo.Add(1440*time.Minute - 1*time.Second).Unix() // humans expect that we include the ending day too
  36. return unixFrom, unixTo
  37. }
  38. func Worktime(ctx *context.Context) {
  39. ctx.Data["PageIsOrgTimes"] = true
  40. unixFrom, unixTo := parseOrgTimes(ctx)
  41. if ctx.Written() {
  42. return
  43. }
  44. worktimeBy := ctx.FormString("by")
  45. ctx.Data["WorktimeBy"] = worktimeBy
  46. var worktimeSumResult any
  47. var err error
  48. switch worktimeBy {
  49. case "milestones":
  50. worktimeSumResult, err = organization.GetWorktimeByMilestones(ctx, ctx.Org.Organization, unixFrom, unixTo)
  51. ctx.Data["WorktimeByMilestones"] = true
  52. case "members":
  53. worktimeSumResult, err = organization.GetWorktimeByMembers(ctx, ctx.Org.Organization, unixFrom, unixTo)
  54. ctx.Data["WorktimeByMembers"] = true
  55. default: /* by repos */
  56. worktimeSumResult, err = organization.GetWorktimeByRepos(ctx, ctx.Org.Organization, unixFrom, unixTo)
  57. ctx.Data["WorktimeByRepos"] = true
  58. }
  59. if err != nil {
  60. ctx.ServerError("GetWorktime", err)
  61. return
  62. }
  63. if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
  64. ctx.ServerError("RenderUserOrgHeader", err)
  65. return
  66. }
  67. ctx.Data["WorktimeSumResult"] = worktimeSumResult
  68. ctx.HTML(http.StatusOK, tplByRepos)
  69. }