initial support for listing tracked time for all projects
Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
This commit is contained in:
parent
138e1075f9
commit
29fbda012f
3 changed files with 38 additions and 13 deletions
8
bin/ctt
8
bin/ctt
|
@ -1,7 +1,7 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# 2012 Nico Schottelius (nico-ctt at schottelius.org)
|
||||
# 2012-2013 Nico Schottelius (nico-ctt at schottelius.org)
|
||||
#
|
||||
# This file is part of ctt.
|
||||
#
|
||||
|
@ -66,12 +66,13 @@ def parse_argv(argv, version):
|
|||
parser['report'] = parser['sub'].add_parser('report',
|
||||
parents=[parser['loglevel']])
|
||||
parser['report'].set_defaults(func=Report.commandline)
|
||||
parser['report'].add_argument("project", help="project to report time for", nargs=1)
|
||||
parser['report'].add_argument("project", help="project to report time for", nargs='*')
|
||||
parser['report'].add_argument("--sd", "--start", help="start date (default: first of this month, format: %s)" % ctt.DATEFORMAT_PLAIN,
|
||||
nargs=1, dest="start")
|
||||
parser['report'].add_argument("--ed", "--end", help="end date (default: last of this month, format: %s)" % ctt.DATEFORMAT_PLAIN,
|
||||
nargs=1, default=None, dest="end")
|
||||
|
||||
parser['report'].add_argument("-a", "--all", help="List entries for all projects", action='store_true')
|
||||
parser['report'].add_argument("-e", "--regexp", help="regular expression to match",
|
||||
default=None)
|
||||
parser['report'].add_argument("-i", "--ignore-case", help="ignore case distinctions", action="store_true")
|
||||
|
@ -96,7 +97,8 @@ def parse_argv(argv, version):
|
|||
except ctt.Error as e:
|
||||
log.error(e)
|
||||
sys.exit(1)
|
||||
except AttributeError:
|
||||
except AttributeError as e:
|
||||
print(e)
|
||||
parser['main'].print_help()
|
||||
|
||||
|
||||
|
|
|
@ -33,6 +33,12 @@ class ListProjects(object):
|
|||
cls.print_projects()
|
||||
|
||||
|
||||
@classmethod
|
||||
def print_projects():
|
||||
for project in ctt.list_projects(ctt.ctt_dir()):
|
||||
for project in cls.list_projects():
|
||||
print(project)
|
||||
|
||||
@staticmethod
|
||||
def list_projects():
|
||||
for project in ctt.list_projects(ctt.ctt_dir()):
|
||||
yield project
|
||||
|
|
|
@ -32,6 +32,7 @@ import re
|
|||
import sys
|
||||
|
||||
import ctt
|
||||
import ctt.listprojects
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
@ -57,8 +58,20 @@ class Report(object):
|
|||
|
||||
@classmethod
|
||||
def commandline(cls, args):
|
||||
report = cls(args.project[0], args.start, args.end, args.output_format, args.regexp, args.ignore_case)
|
||||
report.report()
|
||||
# Report time for all projects
|
||||
if args.all:
|
||||
projects=ctt.listprojects.ListProjects.list_projects()
|
||||
|
||||
else:
|
||||
projects=[args.projects[0]]
|
||||
|
||||
total_time = 0
|
||||
for project in projects:
|
||||
report = cls(project, args.start, args.end, args.output_format, args.regexp, args.ignore_case)
|
||||
report.report()
|
||||
total_time = total_time + report.total_time
|
||||
|
||||
cls.summary(total_time)
|
||||
|
||||
|
||||
def _init_date(self, start_date, end_date):
|
||||
|
@ -133,17 +146,22 @@ class Report(object):
|
|||
log.debug("Skipping: %s" % dirname)
|
||||
|
||||
def report(self):
|
||||
self.header()
|
||||
self.list_entries()
|
||||
self.summary()
|
||||
self.summary(self.total_time)
|
||||
|
||||
def summary(self):
|
||||
"""Show report to the user"""
|
||||
def header(self):
|
||||
print("Report for %s between %s and %s" %
|
||||
(self.project, self.start_date, self.end_date))
|
||||
|
||||
hours, minutes, seconds = ctt.user_timedelta(self.total_time())
|
||||
@staticmethod
|
||||
def summary(total_time):
|
||||
hours, minutes, seconds = ctt.user_timedelta(total_time)
|
||||
|
||||
print("Tracked time between %s and %s: %sh %sm %ss." %
|
||||
(self.start_date, self.end_date, hours, minutes, seconds))
|
||||
print("Total time tracked: %sh %sm %ss." %
|
||||
(hours, minutes, seconds))
|
||||
|
||||
@property
|
||||
def total_time(self):
|
||||
"""Return all entries"""
|
||||
|
||||
|
@ -160,7 +178,6 @@ class Report(object):
|
|||
"""Return total time tracked"""
|
||||
|
||||
sorted_times = sorted(self._report_db.keys())
|
||||
#for time, entry in self._report_db.items():
|
||||
|
||||
for time in sorted_times:
|
||||
entry = self._report_db[time]
|
||||
|
|
Loading…
Reference in a new issue