emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Dan Davison <davison@stats.ox.ac.uk>
To: Christian Egli <christian.egli@sbszh.ch>
Cc: emacs-orgmode@gnu.org
Subject: Re: [ANN] Exporter for taskjuggler
Date: Fri, 16 Apr 2010 16:39:43 -0400	[thread overview]
Message-ID: <874ojbgmi8.fsf@stats.ox.ac.uk> (raw)
In-Reply-To: <87ljdarxpw.fsf@saadawi.sbszh.ch> (Christian Egli's message of "Tue, 30 Mar 2010 10:59:55 +0200")

Christian Egli <christian.egli@sbszh.ch> 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

  parent reply	other threads:[~2010-04-16 20:40 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-30  8:59 [ANN] Exporter for taskjuggler Christian Egli
2010-04-06 10:09 ` Carsten Dominik
2010-04-06 11:15   ` Christian Egli
2010-04-06 15:05     ` T Helms
2010-04-06 15:49       ` Christian Egli
2010-06-08 15:24       ` Christian Egli
2010-04-06 16:25     ` Carsten Dominik
2010-04-12 19:24     ` Eric S Fraga
2010-04-16 20:39 ` Dan Davison [this message]
2010-04-19 10:05   ` Christian Egli
2010-04-19 13:34     ` Dan Davison
2010-04-19 14:01     ` John Hendy
2010-04-20  8:09       ` Christian Egli
2010-05-11  3:37         ` Manish
2010-06-08  9:21           ` Christian Egli
2010-06-08 10:07             ` Carsten Dominik
2010-06-08 13:30               ` Christian Egli
2010-06-08 14:03                 ` Christian Egli
2010-06-08 16:05                   ` Carsten Dominik
2010-06-08 16:59                 ` Leo
2010-06-09 19:55             ` Manish

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=874ojbgmi8.fsf@stats.ox.ac.uk \
    --to=davison@stats.ox.ac.uk \
    --cc=christian.egli@sbszh.ch \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).