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
next prev 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).