فهرست منبع

Mark a task as a milestone if it is a leaf node and cannot be scheduled

* org-taskjuggler.el (org-taskjuggler-compute-task-leafiness): Compute
the leafiness of a node.
(org-taskjuggler-open-task, org-export-as-taskjuggler): Mark a node as
a milestone if it is a leaf and has no effort.

Mark a task as a milestone if it has neither an effort, a duration, an
end or a period. This is needed for tj3 export as tj3 fails to compile
the file if there is a leaf node with no computable end date. tj2
happily ignored the situation, but TJ3 throws an error.
Christian Egli 14 سال پیش
والد
کامیت
786957ed91
1فایلهای تغییر یافته به همراه31 افزوده شده و 6 حذف شده
  1. 31 6
      lisp/org-taskjuggler.el

+ 31 - 6
lisp/org-taskjuggler.el

@@ -263,9 +263,10 @@ defined in `org-export-taskjuggler-default-reports'."
   (let* ((tasks
 	  (org-taskjuggler-resolve-dependencies
 	   (org-taskjuggler-assign-task-ids 
-	    (org-map-entries 
-	     '(org-taskjuggler-components) 
-	     org-export-taskjuggler-project-tag nil 'archive 'comment))))
+	    (org-taskjuggler-compute-task-leafiness
+	     (org-map-entries 
+	      '(org-taskjuggler-components) 
+	      org-export-taskjuggler-project-tag nil 'archive 'comment)))))
 	 (resources
 	  (org-taskjuggler-assign-resource-ids
 	   (org-map-entries 
@@ -392,6 +393,23 @@ a path to the current task."
 	(setq previous-level level)
 	(setq resolved-tasks (append resolved-tasks (list task)))))))
 
+(defun org-taskjuggler-compute-task-leafiness (tasks)
+  "Figure out if each task is a leaf by looking at it's level,
+and the level of its successor. If the successor is higher (ie
+deeper), then it's not a leaf."
+  (cond
+   ((null tasks) nil)
+   ;; if a task has no successors it is a leaf
+   ((null (car (cdr tasks)))
+    (cons (cons (cons "leaf-node" t) (car tasks)) 
+	  (org-taskjuggler-compute-task-leafiness (cdr tasks))))
+   ;; if the successor has a lower level than task it is a leaf
+   ((<= (cdr (assoc "level" (car (cdr tasks)))) (cdr (assoc "level" (car tasks)))) 
+    (cons (cons (cons "leaf-node" t) (car tasks)) 
+	  (org-taskjuggler-compute-task-leafiness (cdr tasks))))
+   ;; otherwise examine the rest of the tasks
+   (t (cons (car tasks) (org-taskjuggler-compute-task-leafiness (cdr tasks))))))
+
 (defun org-taskjuggler-assign-resource-ids (resources &optional unique-ids)
   "Given a list of resources return the same list, assigning a
 unique id to each resource."
@@ -621,11 +639,17 @@ org-mode priority string."
 		      (cdr (assoc "complete" task))))
 	(parent-ordered (cdr (assoc "parent-ordered" task)))
 	(previous-sibling (cdr (assoc "previous-sibling" task)))
+	(milestone (or (cdr (assoc "milestone" task))
+		       (and (assoc "leaf-node" task)
+			    (not (or effort 
+				     (cdr (assoc "duration" task))
+				     (cdr (assoc "end" task))
+				     (cdr (assoc "period" task)))))))
 	(attributes 
 	 '(account start note duration endbuffer endcredit end
-	   flags journalentry length maxend maxstart milestone
-	   minend minstart period reference responsible
-	   scheduling startbuffer startcredit statusnote)))
+	   flags journalentry length maxend maxstart minend
+	   minstart period reference responsible scheduling
+	   startbuffer startcredit statusnote)))
     (insert
      (concat 
       "task " unique-id " \"" headline "\" {\n" 
@@ -639,6 +663,7 @@ org-mode priority string."
       (and complete (format " complete %s\n" complete))
       (and effort (format " effort %s\n" effort))
       (and priority (format " priority %s\n" priority))
+      (and milestone (format " milestone\n"))
       
       (org-taskjuggler-get-attributes task attributes)
       "\n"))))