[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/rt-liberation cd29eac 52/72: Add collation.
From: |
Stefan Monnier |
Subject: |
[elpa] externals/rt-liberation cd29eac 52/72: Add collation. |
Date: |
Wed, 5 Aug 2020 11:57:43 -0400 (EDT) |
branch: externals/rt-liberation
commit cd29eacb888877bec75157002858583c8b1dd3a5
Author: Yoni Rabkin <yrk@gnu.org>
Commit: Yoni Rabkin <yrk@gnu.org>
Add collation.
---
rt-liberation-report.el | 97 ++++++++++++++++++++++++++++---------------------
1 file changed, 55 insertions(+), 42 deletions(-)
diff --git a/rt-liberation-report.el b/rt-liberation-report.el
index 81fd50c..2e6a545 100644
--- a/rt-liberation-report.el
+++ b/rt-liberation-report.el
@@ -32,12 +32,20 @@
(require 'rt-liberation-rest)
-(defun rt-liberation-report-resolved-interval (rt-queue start-date end-date)
+(defvar rt-liber-report-csv-header
+ '("date" "tickets resolved")
+ "Headers for comma separated value output.")
+
+(defun rt-liber-report-get-interval (rt-queue start-date end-date)
"Return tickets resolved between START-DATE and END-DATE.
The tickets must have their current status be Resolved in order
to be returned by this function. If no tickets match the query,
return `nil'."
+ (when (or (not (stringp rt-queue))
+ (not (stringp start-date))
+ (not (stringp end-date)))
+ (error "bad argument/s"))
(rt-liber-rest-run-show-base-query
(rt-liber-rest-run-ls-query
(rt-liber-compile-query
@@ -45,47 +53,52 @@ return `nil'."
(resolved start-date end-date)
(status "resolved"))))))
-;; (rt-liberation-report-resolved-interval "licensing" "2015-09-18"
"2015-09-17")
-
-
-;; ((("TimeLeft" . "0")
-;; ("TimeWorked" . "0")
-;; ("TimeEstimated" . "0")
-;; ("Told" . "Thu Oct 08 00:53:59 2015")
-;; ("Resolved" . "Thu Oct 08 00:53:59 2015")
-;; ("Due" . "Not set")
-;; ("Started" . "Wed Oct 07 06:52:03 2015")
-;; ("Starts" . "Not set")
-;; ("Created" . "Wed Oct 07 06:39:22 2015")
-;; ("Requestors" . "ian.macintosh@gtxweb.uk")
-;; ("FinalPriority" . "0")
-;; ("InitialPriority" . "0")
-;; ("Priority" . "0")
-;; ("Status" . "resolved")
-;; ("Subject" . "Badly worded and misleading paragraph")
-;; ("Creator" . "ian.macintosh@gtxweb.uk")
-;; ("Owner" . "jgay@fsf.org")
-;; ("Queue" . "licensing")
-;; ("id" . "ticket/1052419"))
-;; (("TimeLeft" . "0")
-;; ("TimeWorked" . "0")
-;; ("TimeEstimated" . "0")
-;; ("Told" . "Thu Oct 08 07:54:47 2015")
-;; ("Resolved" . "Thu Oct 08 07:54:47 2015")
-;; ("Due" . "Not set")
-;; ("Started" . "Wed Oct 07 12:03:20 2015")
-;; ("Starts" . "Not set")
-;; ("Created" . "Mon Sep 21 13:33:24 2015")
-;; ("Requestors" . "juan.balderas.0@gmail.com")
-;; ("FinalPriority" . "0")
-;; ("InitialPriority" . "0")
-;; ("Priority" . "0")
-;; ("Status" . "resolved")
-;; ("Subject" . "Softare donation to FSF")
-;; ("Creator" . "juan.balderas.0@gmail.com")
-;; ("Owner" . "donald")
-;; ("Queue" . "licensing")
-;; ("id" . "ticket/1048183")))
+(defun rt-liber-report-scan-ticket (ticket-alist)
+ (let ((date-resolved (cdr (assoc "Resolved" ticket-alist)))
+ (owner (cdr (assoc "Owner" ticket-alist))))
+ `(,(format-time-string "%d-%m-%Y" (date-to-time date-resolved))
+ . ,owner)))
+
+(defun rt-liber-report-scan-interval (interval)
+ "Convert the list of tickets into an ordered format."
+ (when (not interval)
+ (error "no tickets in interval"))
+ (let ((l (copy-tree interval))
+ (r nil))
+ (while l
+ (setq r (append r `(,(rt-liber-report-scan-ticket (car l)))))
+ (setq l (cdr l)))
+ (setq r (sort r
+ #'(lambda (a b)
+ (string-lessp (car a) (car b)))))
+ r))
+
+(defun rt-liber-report-count-by-date (l)
+ (let ((h (make-hash-table :test 'equal)))
+ (while l
+ (let ((d (or (gethash (caar l) h) 0)))
+ (puthash (caar l) (+ d 1) h))
+ (setq l (cdr l)))
+ h))
+
+(defun rt-liber-report-count-by-owner (l)
+ (let ((h (make-hash-table :test 'equal)))
+ (while l
+ (let ((d (or (gethash (cdar l) h) 0)))
+ (puthash (cdar l) (+ d 1) h))
+ (setq l (cdr l)))
+ h))
+
+(defun rt-liber-report (rt-queue start-date end-date)
+ (let ((tickets (rt-liber-report-scan-interval
+ (rt-liber-report-get-interval
+ rt-queue start-date end-date)))
+ by-date by-owner)
+ (when (not tickets)
+ (error (concat "no tickets in interval between "
+ start-date " and " end-date)))
+ (setq by-date (rt-liber-report-count-by-date tickets)
+ by-owner (rt-liber-report-count-by-owner tickets))))
(provide 'rt-report)
- [elpa] externals/rt-liberation 46ec97d 67/72: * rt-liberation.el: use cl-lib instead, (continued)
- [elpa] externals/rt-liberation 46ec97d 67/72: * rt-liberation.el: use cl-lib instead, Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation 0c68b62 69/72: add "this file is a part of...", Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation c95b745 45/72: Update email address., Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation f2d75b7 55/72: * rt-liberation-report.el: pass to main machine., Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation a039fb5 56/72: * rt-liberation-report.el: Bump to other machine., Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation d683385 63/72: * why-rt-liberation-is-under-gplv3.txt: what it says, Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation 5fc9f6d 66/72: friendlier caption, Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation dd92e88 65/72: * more upgrade work, Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation b152b61 70/72: * rt-liberation.el: complete elpa header, Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation cdd81a8 46/72: * rt-report.el: Add new file., Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation cd29eac 52/72: Add collation.,
Stefan Monnier <=
- [elpa] externals/rt-liberation 26d77ec 53/72: * rt-liberation-report.el: Complete first working version., Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation e7779ce 54/72: * rt-liberation-report.el: Add Total, found bug., Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation e3cc2f5 57/72: * rt-liberation-report.el: Fix sorting bug., Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation 0cfaa45 59/72: Merge branch 'report', Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation bab09f7 64/72: Upgrade to GPLv3, Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation 1629dd3 68/72: * why-rt-liberation-is-under-gplv3.txt: better explanation, Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation ea3e01b 71/72: * NEWS: new file, Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation 277378d 47/72: Rename to fit file naming convention., Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation cca328c 49/72: * rt-liberation.el: Add Resolved time predicate., Stefan Monnier, 2020/08/05
- [elpa] externals/rt-liberation 09f7ac0 60/72: * rt-liberation.el: new function rt-liber-print-query, Stefan Monnier, 2020/08/05