emacs-orgmode
[Top][All Lists]
Advanced

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

Re: [Orgmode] [ANN] Exporter for taskjuggler


From: Dan Davison
Subject: Re: [Orgmode] [ANN] Exporter for taskjuggler
Date: Fri, 16 Apr 2010 16:39:43 -0400
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (gnu/linux)

Christian Egli <address@hidden> writes:

[...]
> So in order to create a professional looking gant and resource usage
> charts I implemented an exporter from org-mode to TaskJuggler
> (http://www.taskjuggler.org/). The code is attached and I'm looking for
> feedback and would love to get this integrated in the org-mode
> distribution.

Hi Christian,

I'm interested in this too! I had a few teething problems but I think
I'm doing OK now. A simple org file demonstrating some of the features
is the most important thing lacking at the moment.

I encountered problems with the fact that

- I was using `org-odd-levels-only'
- the "allocate" property name is required to be lower case (unlike
  Effort)
- A Resource named with Uppercase letters will be expected to be all
  lowercase by TJ (e.g. my Alf resource below).

I've put patches corresponding to the hacks I made to solve these below.

It would also be nice if repeated invocation of
org-export-as-taskjuggler-and-open on the same project didn't spawn
multiple TJ instances (TJ v2.4.3 ubuntu).

I had a quick look at the TJ page -- it sounded as if the cross-platform
ruby version is advancing rapidly?

Here's my test file and patches.

--8<---------------cut here---------------start------------->8---
* Project                                               :taskjuggler_project:
*** DONE First milestone
      :PROPERTIES:
      :Effort:   01:00
      :Allocate: Alf
      :END:
*** TODO Second milestone
      :PROPERTIES:
      :Effort:   01:00
      :Allocate: Alf
      :END:

* Resources                                    :taskjuggler_resource:
*** Alf                 
    alf contents
--8<---------------cut here---------------end--------------->8---


Make it work if `org-odd-levels-only' is in use:

--8<---------------cut here---------------start------------->8---
diff --git a/org-taskjuggler.el b/org-taskjuggler.el
index e887d33..e843dcd 100644
--- a/org-taskjuggler.el
+++ b/org-taskjuggler.el
@@ -309,7 +309,7 @@ the current node such as the headline, the level, todo state
 information, all the properties, etc."
   (let* ((props (org-entry-properties))
         (components (org-heading-components))
-        (level (car components))
+        (level (nth 1 components))
         (headline (nth 4 components))
         (parent-ordered (org-taskjuggler-parent-is-ordered-p)))
     (push (cons "level" level) props)
--8<---------------cut here---------------end--------------->8---


Allow variations in capitalisation of allocate property name (or maybe
the documentation should just point out that it must be lowercase)

--8<---------------cut here---------------start------------->8---
diff --git a/org-taskjuggler.el b/org-taskjuggler.el
index 718ae9d..ab92eca 100644
--- a/org-taskjuggler.el
+++ b/org-taskjuggler.el
@@ -525,7 +525,7 @@ org-mode priority string."
        (headline (cdr (assoc "headline" task)))
        (effort (org-taskjuggler-clean-effort (cdr (assoc org-effort-property 
task))))
        (depends (cdr (assoc "depends" task)))
-       (allocate (cdr (assoc "allocate" task)))
+       (allocate (or (cdr (assoc "allocate" task)) (cdr (assoc "Allocate" 
task)) (cdr (assoc "ALLOCATE" task))))
        (priority-raw (cdr (assoc "PRIORITY" task)))
        (priority (and priority-raw (org-taskjuggler-get-priority 
priority-raw)))
        (state (cdr (assoc "TODO" task)))
--8<---------------cut here---------------end--------------->8---


Always output resource names lower case
    
--8<---------------cut here---------------start------------->8---
diff --git a/org-taskjuggler.el b/org-taskjuggler.el
index ab92eca..1cc5222 100644
--- a/org-taskjuggler.el
+++ b/org-taskjuggler.el
@@ -544,7 +544,7 @@ org-mode priority string."
       (if (and parent-ordered previous-sibling)
          (format " depends %s\n" previous-sibling)
        (and depends (format " depends %s\n" depends)))
-      (and allocate (format " purge allocations\n allocate %s\n" allocate))
+      (and allocate (format " purge allocations\n allocate %s\n" (downcase 
allocate)))
       (and complete (format " complete %s\n" complete))
       (and effort (format " effort %s\n" effort))
       (and priority (format " priority %s\n" priority))
--8<---------------cut here---------------end--------------->8---


More comprehensible error message if you forget to define a project...

--8<---------------cut here---------------start------------->8---
diff --git a/org-taskjuggler.el b/org-taskjuggler.el
index e843dcd..718ae9d 100644
--- a/org-taskjuggler.el
+++ b/org-taskjuggler.el
@@ -244,6 +244,8 @@ defined in `org-export-taskjuggler-default-reports'."
         (buffer (find-file-noselect filename))
         (old-level 0)
         task resource)
+    (unless tasks
+      (error "No taskjuggler project found"))
     ;; add a default resource
     (unless resources
       (setq resources 
--8<---------------cut here---------------end--------------->8---

Dan


>
> TaskJuggler uses a text format to define projects, tasks and resources,
> so it is a natural fit for org-mode. It can produce all sorts of reports
> for tasks or resources in either HTML, CSV or PDF. The current version
> of TaskJuggler requires KDE but the next version is implemented in Ruby
> and should therefore run on any platform.
>
> The exporter is a bit different from other exporters, such as the HTML
> and LaTeX exporters for example, in that it does not export all the
> nodes of a document or strictly follow the order of the nodes in the
> document.
>
> Instead the TaskJuggler exporter looks for a tree that defines the
> tasks and a optionally tree that defines the resources for this
> project. It then creates a TaskJuggler file based on these trees
> and the attributes defined in all the nodes.
>
> * Installation
>
> Put the attached file into your load-path and the following line into
> your ~/.emacs:
>
>   (require 'org-taskjuggler)
>
> The interactive functions are similar to those of the HTML and LaTeX
> exporters:
>
> M-x `org-export-as-taskjuggler'
> M-x `org-export-as-taskjuggler-and-open'
>
> * Tasks
>
> Let's illustrate the usage with a small example. Create your tasks as
> you usually do with org-mode. Assign efforts to each task using
> properties (it's easiest to do this in the column view). You should end
> up with something similar to the example by Peter Jones in
> http://www.contextualdevelopment.com/static/artifacts/articles/2008/project-planning/project-planning.org.
> Now mark the top node of your tasks with a tag named
> "taskjuggler_project" (or whatever you customized
> `org-export-taskjuggler-project-tag' to). You are now ready to export
> the project plan with `org-export-as-taskjuggler-and-open' which will
> export the project plan and open a gant chart in TaskJugglerUI.
>
> * Resources
>
> Next you can define resources and assign those to work on specific
> tasks. You can group your resources hierarchically. Tag the top node of
> the resources with "taskjuggler_resource" (or whatever you customized
> `org-export-taskjuggler-resource-tag' to). You can optionally assign an
> ID to the resources (using the standard org properties commands) or you
> can let the exporter generate IDs automatically (the exporter picks the
> first word of the headline as the ID as long as it is unique). Using
> that ID you can then allocate resources to tasks. This is again done
> with the "allocate" property on the tasks. Do this in column view or
> when on the task type
>
>  C-c C-x p allocate RET <ID> RET
>
> Once the allocations are done you can again export to TaskJuggler and
> check in the Resource Allocation Graph which person is working on what
> task at what time.
>
> * Export of properties
>
> The exporter also takes TODO state information into consideration, i.e.
> if a task is marked as done it will have the corresponding attribute in
> TaskJuggler ("complete 100"). Also it will export any property on a task
> resource or resource node which is known to TaskJuggler, such as limits,
> vacation, shift, booking, efficiency, journalentry, rate for resources
> or account, start, note, duration, end, journalentry, milestone,
> reference, responsible, scheduling, etc for tasks.
>
> * Dependencies
>
> The exporter will handle dependencies that are defined in the tasks
> either with the ORDERED attribute (see TODO dependencies in the Org mode
> manual) or with the BLOCKER attribute (see org-depend.el) or
> alternatively with a depends attribute. Both the BLOCKER and the depends
> attribute can be either "previous-sibling" or a reference to an ID which
> is defined for another task in the project.
>
> Thanks
> Christian




reply via email to

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