I use orgmode in emacs as a to-do list manager. End of every week I send my status report to the team. Earlier I used to do this manually by going through the agenda for the week and collecting relevant information. I thought of automating it since this is repeated every week.
It was super easy for me because, I strictly associate each task with a corresponding tag to uniquely identify it. These tags are related to my office projects and the script is a custom one which suits my requirement.
Here is the emacs part.
(defun noorul/gen_weekly_report (startPos endPos)
"Generate weekly report using external pythong script"
(interactive "r")
(let (scriptName)
(setq scriptName "~/work/python/gen_weekly_report.py")
(shell-command-on-region startPos endPos scriptName "*Weekly Report*"
nil nil t)
))
(global-set-key (kbd "<f6> r") 'noorul/gen_weekly_report)
Here is the python supporting script.
#!/usr/bin/env python
import sys
import re
report_dict = {}
cubit_issue_id_regex = re.compile('.*(cubit\d+):.*$')
artf_issue_id_regex = re.compile('.*(artf\d+):.*$')
issue_desc_regex = re.compile('.*(WAITING|DONE|NEXT) (.*) :.*$')
for line in sys.stdin.readlines():
id_match = re.match(cubit_issue_id_regex, line)
if not id_match:
id_match = re.match(artf_issue_id_regex, line)
if id_match:
issue = id_match.groups()[0]
issue_desc = ''
desc_match = re.match(issue_desc_regex, line)
if desc_match:
issue_desc = desc_match.groups()[1]
if issue not in report_dict.keys():
report_dict[issue] = issue_desc
print 'This Week:\n'
for issue in sorted(report_dict.keys()):
print '* %-10s: %s' % (issue, report_dict[issue])
Now to collect my report, all what I have to do is, go to the agenda buffer switch to log mode and mark the week area and press ‘F6 r’.
I think I can avoid the region marking step and that will be an enhancement.