emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/rt-liberation 26d77ec 53/72: * rt-liberation-report.el:


From: Stefan Monnier
Subject: [elpa] externals/rt-liberation 26d77ec 53/72: * rt-liberation-report.el: Complete first working version.
Date: Wed, 5 Aug 2020 11:57:43 -0400 (EDT)

branch: externals/rt-liberation
commit 26d77ec7855a31bfe1667276432ad33eefa06c09
Author: Yoni Rabkin <yrk@gnu.org>
Commit: Yoni Rabkin <yrk@gnu.org>

    * rt-liberation-report.el: Complete first working version.
---
 rt-liberation-report.el | 51 +++++++++++++++++++++++++++++++++++--------------
 1 file changed, 37 insertions(+), 14 deletions(-)

diff --git a/rt-liberation-report.el b/rt-liberation-report.el
index 2e6a545..b2af361 100644
--- a/rt-liberation-report.el
+++ b/rt-liberation-report.el
@@ -73,32 +73,55 @@ return `nil'."
                      (string-lessp (car a) (car b)))))
     r))
 
-(defun rt-liber-report-count-by-date (l)
-  (let ((h (make-hash-table :test 'equal)))
+(defun rt-liber-report-count (f l)
+  (let (out)
     (while l
-      (let ((d (or (gethash (caar l) h) 0)))
-       (puthash (caar l) (+ d 1) h))
+      (let* ((head (car l))
+            (old-value (cdr (assoc (funcall f head) out))))
+       (if old-value
+           (setcdr (assoc (funcall f head) out) (+ old-value 1))
+         (setq out (append out `((,(funcall f head) . 1))))))
       (setq l (cdr l)))
-    h))
+    out))
+
+(defun rt-liber-report-count-by-date (l)
+  (rt-liber-report-count #'car l))
 
 (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))
+  (rt-liber-report-count #'cdr l))
+
+(defun rt-liber-report-print-csv (header l)
+  (let (out)
+    (with-temp-buffer
+      (insert (format "\n%s\n" header))
+      (dolist (entry l)
+       (insert
+        (format "%s, %s\n" (car entry) (cdr entry))))
+      (setq out (buffer-string)))
+    out))
 
 (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)
+                  rt-queue end-date start-date)))
+       by-date by-owner
+       by-date-out
+       by-owner-out)
     (when (not tickets)
       (error (concat "no tickets in interval between "
                     start-date " and " end-date)))
+    ;; collate
     (setq by-date  (rt-liber-report-count-by-date tickets)
-         by-owner (rt-liber-report-count-by-owner tickets))))
+         by-owner (rt-liber-report-count-by-owner tickets))
+    ;; rank owners by resolved tickets
+    (setq by-owner
+         (sort
+          by-owner
+          #'(lambda (a b)
+              (> (cdr a) (cdr b)))))
+    ;; print
+    (insert (rt-liber-report-print-csv "date, resolved" by-date))
+    (insert (rt-liber-report-print-csv "owner, resolved" by-owner))))
 
 
 (provide 'rt-report)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]