Git Product home page Git Product logo

taskjuggler's Introduction

TaskJuggler is a modern and powerful, Free and Open Source Software project management tool. Its new approach to project planning and tracking is more flexible and superior to the commonly used Gantt chart editing tools.

TaskJuggler is project management software for serious project managers. It covers the complete spectrum of project management tasks from the first idea to the completion of the project. It assists you during project scoping, resource assignment, cost and revenue planning, risk management, and communication management.

TaskJuggler provides an optimizing scheduler that computes your project time lines and resource assignments based on the project outline and the constraints that you have provided. The built-in resource balancer and consistency checker will offload you from having to worry about irrelevant details and it will ring the alarm if the project gets out of hand. The flexible as-many-details-as-necessary approach allows you to plan your project as you go, making it also ideal for new management strategies such as Extreme Programming and Agile Project Management.

If you are about to build a skyscraper or just want to put together the release schedule of your open source project, TaskJuggler is the right tool for you. If you just want to draw nice looking Gantt charts to impress your boss or your investors, TaskJuggler might not be right for you. You can of course create nice looking Gantt charts. But it takes a little more effort to master its power. If you are up for this, TaskJuggler will become a companion that you don’t want to miss anymore.

TaskJuggler is written in Ruby and should be easily installable and usable on all popular operating systems. It may sound surprising at first, but this software does not need a graphical user interface. A command shell, a plain text editor (no word processor!), and a web browser is all you need for your work.

Features and Highlights

Basic Properties

  • Manages tasks, resources and accounts of your project

  • Powerful to-do list management

  • Detailed reference manual

  • Simple installation

  • Runs on all Linux, Unix, Windows, MacOS and several other operating systems

  • Full integration with Vim text editor

Advanced Scheduling

  • Automatic resource leveling and tasks conflict resolution

  • Unlimited number of scenarios (baselines) of the same project for what-if analysis

  • Flexible working hours and leave management

  • Support for shift working

  • Multiple time zone support

Accounting

  • Tasks may have initial costs, finishing costs

  • Resources may have usage based costs

  • Task and/or resource base cost models

  • Support for profit/loss analysis

Reporting

  • Comprehensive and flexible reports so you can find the information you need when you need it

  • Powerful filtering functions to provide the right amount of detail to the right audience

  • Time and status sheet reporting infrastructure

  • Project tracking and status reporting with dashboard support

Scaling and Enterprise Features

  • Projects can be combined into larger projects

  • Support for central resource allocation database

  • Manages roles and complex reporting lines

  • Powerful project description language with macro support

  • Scales well on multi-core or multi-CPU systems

  • Support for project management teams and revision control systems

  • Data export to Microsoft Project and Computer Associates Clarity

Web Publishing and Groupware Functions

  • HTML reports for web publishing

  • CSV data export for exchange with popular office software

  • iCalendar export for data exchange with calendar and productivity applications

  • Built-in web server for dynamic and interactive reports

  • Server based time sheet system for status and actual work reporting

Installation

Installation instructions can be found here.

Introduction and Tutorial

To learn more about how to use TaskJuggler please see the user manual. It also contains a tutorial to get you started. It will tell you how to generate HTML reports like these from such a project description.

Getting Help and reporting Bugs

There are several mailing list for TaskJuggler users and developers. Please see this page for details. If you have a question about TaskJuggler usage, the user list is the best place to go. Please subscribe to the mailing list and help other users when you get more proficient in TaskJuggler.

If you think that you have found a bug in the software, please view the bug reporting guidelines.

Copyright and License

TaskJuggler is © 2006, 2007, 2008, 2009, 2010, 2011 by Chris Schlaeger <[email protected]>

This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. You accept the terms of this license by distributing or using this software.

TaskJuggler is a trademark of Chris Schlaeger.

taskjuggler's People

Contributors

andersblomdell avatar boot2later avatar cgudrian avatar cuberoot74088 avatar dmison avatar fsommer avatar ghostd avatar jeremyz avatar jmglogow avatar keith-gray-powereng avatar khoroshilov avatar l2dy avatar mans0954 avatar nachtgeist avatar scrapper avatar siegb avatar t0masd avatar thomasjfox avatar watr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

taskjuggler's Issues

Wrong filename extension for icalreport output file

According to RFC5545:

  File extension(s):  The file extension of "ics" is to be used to
     designate a file containing (an arbitrary set of) calendaring
     and scheduling information consistent with this MIME content
     type.

At the moment tj3 (3.1.0) running on Mac OS 10.7 (haven't tried other OSs) produces a file with the extension ical. Note that the mention of “Macintosh file type code(s)” just below that paragraph of the RFC is nothing to do with file naming, rather the old-school Mac file identification stuff ( http://en.wikipedia.org/wiki/File_format#Mac_OS_type-codes )!

Please change this so that the extension is "ics", to conform to the RFC (and allow the OS to open automatically in the right application this type of file!)

Thanks!

resource-specific workinghours ignored (multiple scenarios)

TaskJuggler-Version: v3.1.0

==DESCRIPTION==

  • I've tried to set resource-workinghours.
  • I've used multiple scenarios.
  • I did not specify an scenario at the resource-specific workinghours-definition.
  • Resource-specific workinghours definition ist ignored in scheduling of nested scenario "actual".

==BEHAVIOUR==

  • Expected behaviour: Inherit "workinghours (resource)" of nested scenario "actual"... from ... "workinghours (resource)" of enclosing scenario "plan"
  • Actual behaviour: "workinghours (resource)" of nested scenario "actual" is inherited from global "workinghours (project)"

==RELATED ISSUES==

  • There seems to be the same issue with "vacations" ... but it's allready reported with resolved issue #45 ... ???
  • Maybe unresolved/open issue #47 is related to my report.

==TEMPORAL_WORKAROUND==

  • Set "workinghours (resource)" with explicit scenario-definition. (uncomment code line 15 of attached test-project)

==TEST-PROJECT==

project p1 "Test" 2012-01-01 - 2013-01-01 {
  now 2012-01-01

  workinghours mon - wed 10:00 - 12:00, 13:00 - 15:00
  workinghours thu - sun off

  scenario plan "Plan" {
    scenario actual "Actual"
  }
  trackingscenario actual
}

resource r1 "Ressource 1" {
  workinghours mon - sat 9:00 - 12:00, 13:00 - 18:00, 19:00 - 22:00
  #actual:workinghours mon - sat 9:00 - 12:00, 13:00 - 18:00, 19:00 - 22:00

  vacation "Vacation" 2012-01-03
  #actual:vacation "Vacation" 2012-01-03
}

task t1 "Task 1" {
  allocate r1
  effort 100h
}


taskreport report "TaskReport" {
  formats html
  scenarios plan, actual
  columns bsi, name, start, end, effort,
          duration, scenario, chart { scale day width 500 }
  timeformat "%d.%m.%Y %Hh"
}

tjp.vim has a bug in ver 2.4.3

In Contrib/vim/tjp.vim

syn keyword tjspkeyword account
syn keyword tjspkeyword accountid
...
syn keyword tjspkeyword years
...
HiLink tjpkeyword Keyword

End

"tjspkeyword" must be "tjpkeyword".

Tj3 icalreport changing scenario issue

Hello,

it seems, that I found a bug. When I added simple icalreport to project,

icalreport kalendar "Kalendar"

it works well.

When I want to change to another than top-level scenario:

icalreport kalendar "Kalendar" { scenario delayed }

tj3 leaves at

Reading file tutorial.tjp ...

with this error message:

ERROR: Ups, you have triggered a bug in TaskJuggler III! undefined method delete_if' for 1:Fixnum
F:/PortableApps/Ruby/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.1/lib/taskjuggler/TjpSyntaxRules.rb:1529:in block in rule_iCalReportAttributes' F:/PortableApps/Ruby/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.1/lib/taskjuggler/TextParser.rb:395:in call'
F:/PortableApps/Ruby/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.1/lib/taskjuggler/TextParser.rb:395:in finishPattern' F:/PortableApps/Ruby/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.1/lib/taskjuggler/TextParser.rb:346:in block in parseFSM'
F:/PortableApps/Ruby/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.1/lib/taskjuggler/TextParser.rb:272:in loop' F:/PortableApps/Ruby/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.1/lib/taskjuggler/TextParser.rb:272:in parseFSM'
F:/PortableApps/Ruby/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.1/lib/taskjuggler/TextParser.rb:201:in parse' F:/PortableApps/Ruby/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.1/lib/taskjuggler/TaskJuggler.rb:62:in block in parse'
F:/PortableApps/Ruby/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.1/lib/taskjuggler/TaskJuggler.rb:50:in each' F:/PortableApps/Ruby/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.1/lib/taskjuggler/TaskJuggler.rb:50:in parse'
F:/PortableApps/Ruby/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.1/lib/taskjuggler/apps/Tj3.rb:146:in appMain' F:/PortableApps/Ruby/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.1/lib/taskjuggler/Tj3AppBase.rb:118:in main'
F:/PortableApps/Ruby/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.1/lib/tj3.rb:16:in <top (required)>' <internal:lib/rubygems/custom_require>:29:in require'
internal:lib/rubygems/custom_require:29:in require' F:/PortableApps/Ruby/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.1/bin/tj3:2:in <top (required)>'
F:/PortableApps/Ruby/Ruby192/bin/tj3:19:in load' F:/PortableApps/Ruby/Ruby192/bin/tj3:19:in

'Please see the user manual on how to get this bug fixed!`

I´m using Windows XP and Ruby 1.9.2 od portable flash disk

Thanks for your help

DM

rbconfig/datadir.rb and {Rb}Config.datadir is being deprecated

rbconfig/datadir.rb and {Rb}Config.datadir is being deprecated from RubyGems. It will be removed completely on or after June 2011. If you wish to rely on a datadir, please use Gem.datadir

$ gem -v
1.6.1

$ gem list taskjuggler -l
taskjuggler (0.0.10)

Enhancement: User Defined Tables

What I would like to be able to do is to include a table in a report
header to include details such as report version, author, date etc.
This information is important for configuration management. (document
control). It would be great to have the ability to include borders.

Would it be possible to use the table support here
http://www.mediawiki.org/wiki/Help:Tables ?

duration for leavesallowances

add an option to use an interval for the leave allowances such that the automatically expire after this duration

example:
leaveallowances annual 2011-01-01 - 2012-01-01 10d

while keeping the possibility to use non-expiring option:
leaveallowances annual 2011-01-01 10d

Caption don't wrap to the report width

When captions are more long than the report, they produce a gray fill that make the report be ugly. It's possible to wrap the caption? Thaks!

Here is an example:

project test 'test' 2012-01-22 +6m {
}

account costos 'Costos'{
}

account pagos 'Pagos'{
}

balance costos pagos

# recursos
resource tux 'Tux'{
  rate 100
}

# tareas
task t1 'task'{
  duration 1m
  allocate tux
}

# reports | informes

resourcereport 'honorarios'{
  formats html
  balance costos pagos
  columns no, name, rate, effort, cost
  caption 'This is a long caption, This is a long caption, This is a long
  caption, This is a long caption, This is a long caption'
}

Per-task efficiency

I would suggest to allow redefining efficiency when allocating resources to tasks. If fact the efficiency of a resource can vary
depending on the kind of task he has to accomplish.

Something like this:

task "Easy for John, hard for Mark"
{
allocate Mark { efficiency 0.5 }
allocate John { efficiency 1.0 }
}

Best,
Arrigo

Modelling Equipment

Hello,

I did some more experiments and hit problems modelling equipment. First of all, TaskJuggler is one of the few tools that can do this at all, so that's very good. However, the way it is done by setting efficiency=0 seems like a hack.

For example, when you set the workinghours for the tools to 24/7, you get strange scheduling results in the middle of the night, because TaskJuggler does not know that a tool always needs someone to operate it (e.g. a power drill). However, there are also exceptions (e.g. a test rack being updated) that only need an operator in the beginning, and then take a long time to execute. Unfortunately you cannot combine the effort and length attributes right now.

Now for a real bug:

In some instances, Task Juggler did not respect my allocations, e.g. I write
task "A" { allocate worker1, tool }
task "B" { allocate worker2, tool }

would be scheduled for the same time, and the report says:
A uses worker1,tool
B uses worker2

I guess that must be because Taskjuggler concludes that tool does not do anything (efficiency is zero, after all) it does not hurt to remove it from task B. But the whole point of modelling the tool was to make sure that the two tasks are mutually exclusive.

Anyway, I think TaskJuggler is a great tool with a lot of potential!

rake gem handle breaks nose when stepped on

The rake gem doesn't work for me.

Steps:

  1. Clone from GitHub
  2. rake gem

Expected:
3. A shiny new gem

Actual:

MannBookPro:TaskJuggler3 chris2fr$ rake gem
rake/rdoctask is deprecated. Use rdoc/task instead (in RDoc 2.4.2+)
spec.rake tasks unavailable: no such file to load -- rspec/core/rake_task
rake aborted!
undefined method `write' for #Syck::Emitter:0x007ffd32308bf8

Tasks: TOP => gem
(See full trace by running task with --trace)
MannBookPro:TaskJuggler3 chris2fr$ rake gem --trace
rake/rdoctask is deprecated. Use rdoc/task instead (in RDoc 2.4.2+)
spec.rake tasks unavailable: no such file to load -- rspec/core/rake_task
** Invoke gem (first_time)
** Invoke clobber (first_time)
** Invoke clean (first_time)
** Execute clean
** Invoke clobber_rdoc (first_time)
** Execute clobber_rdoc
rm -r doc
** Execute clobber
** Execute gem
** Invoke vim (first_time)
** Execute vim
** Invoke manual (first_time)
** Execute manual
rm -rf manual/html
mkdir -p manual/html
** Invoke changelog (first_time)
** Execute changelog
** Invoke permissions (first_time)
** Execute permissions
rake aborted!
undefined method `write' for #Syck::Emitter:0x007fb73c1eb428

/Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/psych/visitors/emitter.rb:17:in end_document' /Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/psych/visitors/emitter.rb:17:invisit_Psych_Nodes_Document'
/Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/psych/visitors/visitor.rb:10:in accept' /Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/psych/visitors/emitter.rb:10:inblock in visit_Psych_Nodes_Stream'
/Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/psych/visitors/emitter.rb:10:in each' /Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/psych/visitors/emitter.rb:10:invisit_Psych_Nodes_Stream'
/Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/psych/visitors/visitor.rb:11:in accept' /Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/psych/nodes/node.rb:36:into_yaml'
/Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/psych.rb:166:in dump' /Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/psych/core_ext.rb:13:inpsych_to_yaml'
/Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:1088:in node_export' /Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:1088:inadd'
/Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:1088:in encode_with' /Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:1919:inblock (2 levels) in to_yaml'
/Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:1918:in map' /Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:1918:inblock in to_yaml'
/Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/syck.rb:401:in call' /Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/syck.rb:401:inemit'
/Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/syck.rb:401:in quick_emit' /Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:1917:into_yaml'
/Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/builder.rb:79:in block (2 levels) in write_package' /Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/package/tar_output.rb:73:inblock (3 levels) in add_gem_contents'
/Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/package/tar_writer.rb:83:in new' /Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/package/tar_output.rb:67:inblock (2 levels) in add_gem_contents'
/Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/package/tar_output.rb:65:in wrap' /Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/package/tar_output.rb:65:inblock in add_gem_contents'
/Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/package/tar_writer.rb:113:in add_file' /Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/package/tar_output.rb:63:inadd_gem_contents'
/Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/package/tar_output.rb:31:in open' /Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/package.rb:44:inopen'
/Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/builder.rb:78:in block in write_package' /Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/builder.rb:77:inopen'
/Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/builder.rb:77:in write_package' /Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/builder.rb:39:inbuild'
/Users/chris2fr/ProgProjs/TaskJuggler3/tasks/gem.rake:16:in block in <top (required)>' /Users/chris2fr/.rvm/gems/ruby-1.9.2-head/gems/rake-0.9.2/lib/rake/task.rb:205:incall'
/Users/chris2fr/.rvm/gems/ruby-1.9.2-head/gems/rake-0.9.2/lib/rake/task.rb:205:in block in execute' /Users/chris2fr/.rvm/gems/ruby-1.9.2-head/gems/rake-0.9.2/lib/rake/task.rb:200:ineach'
/Users/chris2fr/.rvm/gems/ruby-1.9.2-head/gems/rake-0.9.2/lib/rake/task.rb:200:in execute' /Users/chris2fr/.rvm/gems/ruby-1.9.2-head/gems/rake-0.9.2/lib/rake/task.rb:158:inblock in invoke_with_call_chain'
/Users/chris2fr/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/monitor.rb:201:in mon_synchronize' /Users/chris2fr/.rvm/gems/ruby-1.9.2-head/gems/rake-0.9.2/lib/rake/task.rb:151:ininvoke_with_call_chain'
/Users/chris2fr/.rvm/gems/ruby-1.9.2-head/gems/rake-0.9.2/lib/rake/task.rb:144:in invoke' /Users/chris2fr/.rvm/gems/ruby-1.9.2-head/gems/rake-0.9.2/lib/rake/application.rb:112:ininvoke_task'
/Users/chris2fr/.rvm/gems/ruby-1.9.2-head/gems/rake-0.9.2/lib/rake/application.rb:90:in block (2 levels) in top_level' /Users/chris2fr/.rvm/gems/ruby-1.9.2-head/gems/rake-0.9.2/lib/rake/application.rb:90:ineach'
/Users/chris2fr/.rvm/gems/ruby-1.9.2-head/gems/rake-0.9.2/lib/rake/application.rb:90:in block in top_level' /Users/chris2fr/.rvm/gems/ruby-1.9.2-head/gems/rake-0.9.2/lib/rake/application.rb:129:instandard_exception_handling'
/Users/chris2fr/.rvm/gems/ruby-1.9.2-head/gems/rake-0.9.2/lib/rake/application.rb:84:in top_level' /Users/chris2fr/.rvm/gems/ruby-1.9.2-head/gems/rake-0.9.2/lib/rake/application.rb:62:inblock in run'
/Users/chris2fr/.rvm/gems/ruby-1.9.2-head/gems/rake-0.9.2/lib/rake/application.rb:129:in standard_exception_handling' /Users/chris2fr/.rvm/gems/ruby-1.9.2-head/gems/rake-0.9.2/lib/rake/application.rb:59:inrun'
/Users/chris2fr/.rvm/gems/ruby-1.9.2-head/gems/rake-0.9.2/bin/rake:32:in <top (required)>' /Users/chris2fr/.rvm/gems/ruby-1.9.2-head/bin/rake:19:inload'
/Users/chris2fr/.rvm/gems/ruby-1.9.2-head/bin/rake:19:in `

'
Tasks: TOP => gem
MannBookPro:TaskJuggler3 chris2fr$

Integrate holiday data in tj3

Hi there,

folks from the taskwarrior team (http://taskwarrior.org/news/103) created http://holidata.net/ to provide holiday data. It may help users to add vacations to their project files.

I see at least two possibilities to integrate the data in taskjuggler:

  • Using a script/sub-command of tj3: Fetch on request by user and output in the correct format needed by taskjuggler on STDOUT
  • Integrate as TaskJuggler option to vacation-command: Fetch on the first compilation run (and cache it)

Personallay I would prefer a subcommand. Otherwise you get wrong calculations if there is no online connection.

BTW: They also tell you if there are "regional" holidays: look for NRW or BW (Germany) at http://holidata.net/de-DE/2012.json .

Information from their website

    The locale should be one of the supported locales (see the supported Locales, years and formats).
    The year should be a four-digit value no earlier than 2011.
    The data format should be one of: CSV, XML, YAML, JSON.

Cheers,
MaxMeyer

Automatics period for report

Hi,

I opened a ticket regarding this user list thread https://groups.google.com/forum/#!topic/taskjuggler-users/4RSLropuNGY because I think there is a bug.

In current implementation, filterTaskList is performed after adjustReportPeriod, so TaskList contains all tasks, and calculated period is wrong.
I made the following changes to perform filterTaskList before adjustReportPeriod. That works like a charme but I am not happy with this implementation :

  • filterTaskList is performed twice -> poor performances
  • assignedTaskList contains duplicated tasks -> poor performances on adjustReportPeriod loop.

Please have a look on my patch

diff --git a/lib/taskjuggler/reports/ResourceListRE.rb b/lib/taskjuggler/reports/ResourceListRE.rb
index 05d13a8..b6c9e32 100644
--- a/lib/taskjuggler/reports/ResourceListRE.rb
+++ b/lib/taskjuggler/reports/ResourceListRE.rb
@@ -52,7 +52,14 @@ class TaskJuggler
       taskList.query = @report.project.reportContexts.last.query
       taskList.sort!

-      adjustReportPeriod(taskList, @report.get('scenarios'),
+      assignedTaskList = []
+      resourceList.each do |resource|
+        assignedTaskList.concat(filterTaskList(taskList, resource,
+                                          @report.get('hideTask'), @report.get('rollupTask'),
+                                          @report.get('openNodes')))
+      end
+
+      adjustReportPeriod(assignedTaskList, @report.get('scenarios'),
                          @report.get('columns'))

       # Generate the table header.

issue: booking ignore shifts

Maybe this is "undocumented feature" but i'm feeling lost

In project definition there is no workinghours - only dailyworkinghours
There are two shifts

shift biuro "praca w biurze" {
    workinghours mon - fri 9:00 - 11:00, 12:00 - 14:00
    workinghours sat, sun off
}
shift wyjazd "delegacja" {
    workinghours mon - fri 9:00 - 12:00, 13:00 - 16:00
    workinghours sat, sun off
}

and resources bound to shifts

resource admin2 "biuro" {shifts biuro}
resource admin2delegacja "delegacja" {shifts wyjazd}
resource wusi "biuro" {shifts biuro}
resource wusidelegacja "delegacja" {shifts wyjazd}

tasks

    task wyjazd "wyjazd" {
        start 2011-03-29-09:00
        actual:start 2011-03-24-09:00
        depends proj.dokumentacja
        task eksploatacja "eksploatacja" {
            effort 3h
            allocate admin2delegacja
        }
        task monitoring "monitoring" {
            effort 3h
            allocate wusidelegacja
            depends !eksploatacja
        }
        task infrastruktura "infrastruktura" {
            effort 2h
            allocate wusidelegacja
            depends !monitoring
        }
    }

Booking are generated for default workingdays - not for biuro or wyjazd shifts.
This lead to booking tasks with wrong overtime (because of difference betweend default workinghours and shifts hours).

supplement resource admin2delegacja {
    workinghours sun off
    workinghours mon 9:00 - 12:00, 13:00 - 18:00
    workinghours tue 9:00 - 12:00, 13:00 - 18:00
    workinghours wed 9:00 - 12:00, 13:00 - 18:00
    workinghours thu 9:00 - 12:00, 13:00 - 18:00
    workinghours fri 9:00 - 12:00, 13:00 - 18:00
    workinghours sat off
}

Also - there is any way do define global-default shift for resources and tasks?

--output-dir option if target directory not present

Hi,

I think it would be good if the --output-dir option would check if a output directoy is present. This would limit the debug output in such a situation.

================= TJ3 CALL ==================
tj3 test.tjp --output-dir results
=============== TEST PROJECT ===============
project "Report" 2011-11-09 +1y

resource r1 "R1"

task t "T" {
task s1 "S1" {
effort 30d
allocate r1
}
}

taskreport future "Test" {
formats html
headline "Tasks"
}
=============== BUG REPORT ===============
TaskJuggler v3.0.0 - A Project Management Software

Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
by Chris Schlaeger [email protected]

This program is free software; you can redistribute it and/or modify it under
the terms of version 2 of the GNU General Public License as published by the
Free Software Foundation.

Reading file test.tjp [ Done ]
Preparing scenario Plan Scenario [ Done ]
Scheduling scenario Plan Scenario [ Done ]
Checking scenario Plan Scenario [ Done ]
Report Test [|]
ERROR: Ups, you have triggered a bug in TaskJuggler!
No such file or directory - results/Test.html
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/XMLDocument.rb:55:in initialize' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/XMLDocument.rb:55:innew'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/XMLDocument.rb:55:in write' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/Report.rb:256:ingenerateHTML'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/Report.rb:86:in block in generate' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/Report.rb:75:ineach'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/Report.rb:75:in generate' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/Project.rb:725:inblock in generateReports'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/PropertySet.rb:297:in block in each' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/PropertySet.rb:296:ineach'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/PropertySet.rb:296:in each' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/Project.rb:721:ingenerateReports'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/TaskJuggler.rb:148:in generateReports' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/apps/Tj3.rb:169:inappMain'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/Tj3AppBase.rb:118:in main' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/tj3.rb:16:in<top (required)>'
C:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in require' C:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:inrequire'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/bin/tj3:4:in <top (required)>' C:/Ruby193/bin/tj3:19:inload'
C:/Ruby193/bin/tj3:19:in `

'Please see the user manual on how to get this bug fixed!

BR Cedric

TaskJuggler::IntervalList can't be coerced into Float

HI,

I'm using TJ3 version:
TaskJuggler v3.1.0 - A Project Management Software

I have triggered a bug with my project. Unfortunately the project is quite big and I have not the time to dig more in detail... Mainly due to the fact that the error sometimes does not show up if I regenearte the report.

Do you have a idea where this error could come from?

Error log:
ERROR: Ups, you have triggered a bug in TaskJuggler!
TaskJuggler::IntervalList can't be coerced into Float
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/TaskScenario.rb:1523:in +' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/TaskScenario.rb:1523:inblock in getEffectiveWork'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/DataCache.rb:103:in cached' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/TaskScenario.rb:1513:ingetEffectiveWork'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/PropertyTreeNode.rb:653:in method_missing' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/TaskScenario.rb:1517:inblock (2 levels) in getEffectiveWork'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/TaskScenario.rb:1516:in each' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/TaskScenario.rb:1516:inblock in getEffectiveWork'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/DataCache.rb:103:in cached' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/TaskScenario.rb:1513:ingetEffectiveWork'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/PropertyTreeNode.rb:653:in method_missing' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/TaskScenario.rb:1517:inblock (2 levels) in getEffectiveWork'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/TaskScenario.rb:1516:in each' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/TaskScenario.rb:1516:inblock in getEffectiveWork'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/DataCache.rb:103:in cached' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/TaskScenario.rb:1513:ingetEffectiveWork'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/PropertyTreeNode.rb:653:in method_missing' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/TaskScenario.rb:1517:inblock (2 levels) in getEffectiveWork'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/TaskScenario.rb:1516:in each' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/TaskScenario.rb:1516:inblock in getEffectiveWork'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/DataCache.rb:103:in cached' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/TaskScenario.rb:1513:ingetEffectiveWork'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/TaskScenario.rb:1307:in query_effort' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/PropertyTreeNode.rb:653:inmethod_missing'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/Query.rb:187:in process' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/TableReport.rb:875:ingenCalChartTaskCell'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/TableReport.rb:667:in generateTableCell' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/TableReport.rb:445:inblock (3 levels) in generateTaskList'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/TableReport.rb:443:in each' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/TableReport.rb:443:inblock (2 levels) in generateTaskList'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/TableReport.rb:432:in each' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/TableReport.rb:432:inblock in generateTaskList'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/PropertyList.rb:62:in each' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/PropertyList.rb:62:incall'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/PropertyList.rb:62:in method_missing' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/TableReport.rb:423:ingenerateTaskList'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/TableReport.rb:515:in block in generateResourceList' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/PropertyList.rb:62:ineach'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/PropertyList.rb:62:in call' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/PropertyList.rb:62:inmethod_missing'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/TableReport.rb:480:in generateResourceList' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/ResourceListRE.rb:71:ingenerateIntermediateFormat'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/Report.rb:142:in generateIntermediateFormat' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/RichText/RTFReport.rb:69:into_html'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/RichText/Element.rb:450:in to_html' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/RichText/Element.rb:474:inblock in to_html'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/RichText/Element.rb:473:in each' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/RichText/Element.rb:473:into_html'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/RichText.rb:224:in to_html' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/ReportBase.rb:154:inrt_to_html'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/TextReport.rb:80:in block in to_html' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/TextReport.rb:71:ineach'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/TextReport.rb:71:in to_html' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/Report.rb:239:ingenerateHTML'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/Report.rb:86:in block in generate' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/Report.rb:75:ineach'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/Report.rb:75:in generate' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/Project.rb:695:inblock in generateReports'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/PropertySet.rb:297:in block in each' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/PropertySet.rb:296:ineach'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/PropertySet.rb:296:in each' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/Project.rb:691:ingenerateReports'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/TaskJuggler.rb:148:in generateReports' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/apps/Tj3.rb:174:inappMain'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/taskjuggler/Tj3AppBase.rb:135:in main' C:/Ruby193/lib/ruby/gems/1.9.1/gems/taskjuggler-3.0.0/lib/tj3.rb:16:in<top (required)>'
C:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:59:in require' C:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:59:inrescue in require'
C:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in require' C:/Ruby193/bin/tj3:4:in

'Please see the user manual on how to get this bug fixed!

Thank you and best regards
Cedric

tj3 --output-dir option broken

Given any file 'x.tjp' (may be even empty) the command
tj3 -o blubb x.tjp

yields:

TaskJuggler v3.1.0 - A Project Management Software

Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
by Chris Schlaeger [email protected]

This program is free software; you can redistribute it and/or modify it under
the terms of version 2 of the GNU General Public License as published by the
Free Software Foundation.

ERROR: Ups, you have triggered a bug in TaskJuggler!
undefined method exists?' for Dir:Class /usr/lib64/ruby/gems/1.8/gems/taskjuggler-3.1.0/bin/../lib/taskjuggler/apps/Tj3.rb:140:inappMain'
/usr/lib64/ruby/gems/1.8/gems/taskjuggler-3.1.0/bin/../lib/taskjuggler/Tj3AppBase.rb:135:in main' /usr/lib64/ruby/gems/1.8/gems/taskjuggler-3.1.0/bin/../lib/tj3.rb:16 /usr/lib64/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:29:ingem_original_require'
/usr/lib64/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:29:in require' /usr/lib64/ruby/gems/1.8/gems/taskjuggler-3.1.0/bin/tj3:4 /usr/bin/tj3:19:inload'
/usr/bin/tj3:19Please see the user manual on how to get this bug fixed!

Solution for Ruby 1.8.7:
Replace (/usr/lib64/ruby/gems/1.8/gems/taskjuggler-3.1.0/bin/../lib/taskjuggler/apps/Tj3.rb:140)

if @outputDir != '' && !Dir.exists?(@outputDir)

by

if @outputDir != '' && !File.directory?(@outputDir)

Looks like the ruby API is changing here?!?

Uninterruptible Tasks

I would like to suggest new feature: Uninterruptible Tasks.

Some tasks involve setup times that would have to be duplicated after every break. So one thing would be to model those explicitly, but as a workaround, it would be nice to be able to tell taskjuggler that no breaks are allowed. Example below.

Hand in hand with this goes another idea: Persistent allocations for nested tasks.

Maybe I'm doing it wrong, but the persistent flag for allocations for nested tasks is not respected and subtasks are executed by different resources.

Example:

task "A"
{
uninterruptible
allocate joe { alternative jack persistent }
task "B"
task "C"
}

Should be executed without breaks, by either joe or jack.

shortauto and longauto doesn't detect hours

Hi, shortauto and longauto do not have the expected behavior. In one of my projects it doesn't detect some tasks and the value of the effort and duration will be 0,0y. In this example doesn't detect the hours:

project test 'Test' 2012-01-18 + 2y {
  timezone 'America/Santiago'
  currency 'UF'
  timeformat '%d-%m-%Y'
  numberformat '-' '' '.' ',' 1
  currencyformat '(' ')' '.' ',' 0
  weekstartsmonday
  timingresolution 60 min
  scenario plan 'Programación planificada'{
  }
}

task t1 't1'{
  duration 2h
}

task t2 't2'{
  duration 1d
}

task t3 't3'{
  duration 2d
}

task t4 't4'{
  duration 1w
}

task t5 't5'{
  duration 2w
}

task t6 't6'{
  duration 1m
}

taskreport 'Gantt' {
  formats html
  columns bsi, name, start, end, effort, duration, chart
  sorttasks tree
  loadunit shortauto
}

And, it is possible to make the effort and duration a slash (-) rather than 0,0y for milestones? It is kind confusing the 0,0y value with this bug. But if this is the standar for gantt chart, it's ok then.

workinghours

Tasks are not always "rounded" to the workinghours:

workinghours mon - fri 9:00 - 11:00, 12:00 - 14:00
taskA: from 2011-03-14/09:00 to 2011-03-15/14:00
taskB: from 2011-03-15/14:00 to 2011-03-22 14:00 <-- taskB start at the end of workinghours

IMO taskB should start at 2011-03-16/09:00

project przekazanie "cddo" "1.0" 2011-03-07-9:00 +4m {
    timingresolution 60min
    timezone "Europe/Warsaw"
    timeformat "%Y-%m-%d %H:%M"
    shorttimeformat "%H:%M"
    currency "PLN"
    weekstartsmonday
    workinghours mon - fri 9:00 - 11:00, 12:00 - 14:00
    workinghours sat, sun off
    #dailyworkinghours 8
    scenario plan "planowo" {
        scenario actual "smutna rzeczywistość"
        scenario delayed "z opóźnieniem"
    }
}

task dokumentacja "przekazanie dokumentacji" {
    task przekazanie "przygotowanie dokumentacji" {
        length 1d
        allocate wusi, zz
        limits {dailymax 3h}
        plan:depends !!kamienie_milowe.start
        actual:start 2011-03-14-09:00
        note "dokumentacja zebrana do kupy"
    }
    task uwagi "zebranie uwag do dokumentacji" {
        duration 7d
        allocate wusi, zz, ${admin}
        limits {dailymax 2h}
        depends !przekazanie
    }
}

Enhancement: ability to name any vacation

Currently, only global vacations can include a descriptive string, as stated here:
http://www.taskjuggler.org/manual-git/property_vacation_global.html
http://www.taskjuggler.org/manual-git/property_vacation_resource.html

Being able to add descriptive strings for any vacation is a useful feature when dealing with distributed teams.

For instance, I am planning a project with members in three different countries, and each group belongs to a different "resource group", mapped to their specific country. A "global vacation" here would apply to everyone, and that is not wanted. But on the other hand, I cannot add descriptive strings to the vacations per resource group, so we lose some information.

allocate vs. depends

subsequent "allocate resource" are allowed but "depends taskid" are not. Why?
would be useful to write:

task szlifowanie_duzej_sciany "szlifowanie tynku na dużej ścianie" {
    depends !suszenie_tynku_na_duzej_scianie
    depends !schniecie_scian
    ${przydziel_szlifierz}
    effort 2h
}

but this raise error

malowanie.tjp:32: Info:   ${przydziel_szlifierz }
malowanie.tjp:55: Warning: Overwriting a previously provided value for attribute depends
${przydziel_szlifierz}

Textbased output

Hi there,

might it be possible, that you implement an textbased output to console / textfile?

That would be helpful to copy/paste that information into an e-mail or demonstrate issues with your software on github.

WBS Name                  Start      End        Completion
1    Task 1         2011-11-02 2011-11-02       100% 
1.1   Sub-Task 1    2011-11-02 2011-11-02       100% 
1.2   Sub-Task 2    2011-11-02 2011-11-02       100% 
2    Task 2         2011-11-30 2011-11-30         0% 
2.1   Sub-Task 1    2011-11-30 2011-11-30         0% 
2.2   Sub-Task 2    2011-11-30 2011-11-30         0% 
3    Task 3         2011-11-30 2011-11-30         0% 
3.1   Sub-Task 1    2011-11-30 2011-11-30       100% 
3.2   Sub-Task 2    2011-11-30 2011-11-30       100% 
4    Task 4         2011-11-02 2011-11-02       100% 
4.1   Sub-Task 1    2011-11-02 2011-11-02         0% 
4.2   Sub-Task 2    2011-11-02 2011-11-02         0% 

Project: project Version: 1.0 - Created on 2011-12-09 10:05:55 with TaskJuggler
III v3.0.0

Cheers,
maxmeyer

Wrong dailymax behavior

Hello,
I was trying to model a typical situation in my company: my team is involved in a projects with many task, but we have to guarantee the "customer support" of 1 hours a day, by contract.
So I want to schedule the project using this "constraint": every day 1 hour must be spent on customer support. The "dailymin" is useless since it doesn't affect the scheduler but just give me a warning (an then... what should I do)?

So, trying to have the scheduled respecting this "priority" of allocating an hour (among the resources) for customer support, I tried adding a task like this:

task support "Customer support"{
priority 999 # I need this to be done for sure!
length 10d # just a time period
allocate R1, R2, R3 # team resources
limits {
dailymax 1h
}

But the result is that the Scheduler allocate ALL the resources for 1 hour, every day. So finally every calendar day the total effort is 3d instead of 1d as requested by the "dailymax" statement!
In my opinion this should not be the intended behavior: since that "dailymax" is not associated with any resource but to the task itself, the scheduler should "stop" allocating resources work-hours when the max daily amount is reached.

In fact the scheduler acts correctly when the number of dailymax hours is more than the number of resource. For example let's say we have a task with 2 resources allocated and a "dailymax" of 4h (4>2) then the scheduler will allocate 2h of each of the two resources per calendar-day, resulting in 4h max per day, which is correct!

To make it clear, somehow the scheduler tries to divide the total number of hours (stated in the dailymax) among all the allocated resources but, when the result is less than 1 hour, it assign 1 hour anyway to the resources, thus violating the constraint. Moreover no warning is provided for such situation.

Is it possibile to change the behaviour of the scheduler so that, instead of allocating 1 hour anyway, it will allocate ZERO hour to certain resources in order to respect the costraint?
EDIT: the real minimum assignment for the scheduler is not "1 hour" but the "timingresolution" set in the project

Can you suggest a workaround... another way to model the "customer support" as requested?
Thanks a lot!

Calculation of super-task's completion-value

Hi there,

I'm a bit confused how tj calculates the "super-task" completion-value. Maybe someone can help me with that?

I used

project mt "project"  2011-11-01 +3m {
  timezone "Europe/Berlin"

  now 2011-11-15-13:00

  scenario plan "Plan" { }

}

task task_1 "Task 1" {
  task sub_task_1 "Sub-Task 1" {
    end 2011-11-02
  }
  task sub_task_2 "Sub-Task 2" {
    end 2011-11-02
  }
}

task task_2 "Task 2" {
  task sub_task_1 "Sub-Task 1" {
    end 2011-11-30
  }
  task sub_task_2 "Sub-Task 2" {
    end 2011-11-30
  }
}

task task_3 "Task 3" {
  task sub_task_1 "Sub-Task 1" {
  end 2011-11-30
  complete 100
  }
  task sub_task_2 "Sub-Task 2" {
  end 2011-11-30
  complete 100
  }
}

task task_4 "Task 4" {
  task sub_task_1 "Sub-Task 1" {
    complete 0
    end 2011-11-02
  }
  task sub_task_2 "Sub-Task 2" {
    complete 0
    end 2011-11-02
  }
}


macro TaskTip [
tooltip istask() -8<-

<-query attribute='note'->

->8-
]


taskreport overview "" {
  sorttasks tree
  columns bsi { title 'WBS' },
    name, start, end, complete {${TaskTip}}
}

textreport frame "" {
  textreport index "Overview" {
    formats html
    center '<[report id="overview"]>'
  }
}

And got that table of values:

WBS Name                  Start      End        Completion
1    Task 1         2011-11-02 2011-11-02       100% 
1.1   Sub-Task 1    2011-11-02 2011-11-02       100% 
1.2   Sub-Task 2    2011-11-02 2011-11-02       100% 
2    Task 2         2011-11-30 2011-11-30         0% 
2.1   Sub-Task 1    2011-11-30 2011-11-30         0% 
2.2   Sub-Task 2    2011-11-30 2011-11-30         0% 
3    Task 3         2011-11-30 2011-11-30         0% 
3.1   Sub-Task 1    2011-11-30 2011-11-30       100% 
3.2   Sub-Task 2    2011-11-30 2011-11-30       100% 
4    Task 4         2011-11-02 2011-11-02       100% 
4.1   Sub-Task 1    2011-11-02 2011-11-02         0% 
4.2   Sub-Task 2    2011-11-02 2011-11-02         0% 

Project: project Version: 1.0 - Created on 2011-12-09 10:05:55 with TaskJuggler
III v3.0.0

The interesting tasks are 3), 4). Although the Sub-Tasks are either 100% or 0% it defines the super-task completion value based on the actual date compared to the planned date.

It's no what I expected. I thought those values are based on the completion values of the sub-tasks.

BTW: I read http://www.taskjuggler.org/tj3/manual/Day_To_Day_Juggling.html#Using_completion_values before.

Cheers,

max_meyer

Taskjuggler 3 : Error undefined method `-' for nil:NilClass

The executation log is as follows

TaskJuggler III v3.0.0 - A Project Management Software

Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
by Chris Schlaeger [email protected]

This program is free software; you can redistribute it and/or modify it under
the terms of version 2 of the GNU General Public License as published by the
Free Software Foundation.

Reading file plan.tjp ...
Reading file ./resources.tji ...
Reading file ./macros.tji ...
Reading file ./inputs.tasks.tji ...
Reading file ./qsa.tasks.tji ...
Reading file ./unassigned.tasks.tji ...
Reading file ./reports.tji ...
Reading file plan.tjp ...
Reading file plan.tjp [ Done ]
Preparing scenario Plan ...
Preparing scenario Plan [ 2% ]
Preparing scenario Plan [ 5% ]
Preparing scenario Plan [= 7% ]
Preparing scenario Plan [= 10% ]
Preparing scenario Plan [== 12% ]
Preparing scenario Plan [== 15% ]
Preparing scenario Plan [== 17% ]
Preparing scenario Plan [=== 20% ]
Preparing scenario Plan [=== 22% ]
Preparing scenario Plan [==== 25% ]
Preparing scenario Plan [==== 27% ]
Preparing scenario Plan [==== 30% ]
Preparing scenario Plan [===== 32% ]
Preparing scenario Plan [===== 35% ]
Preparing scenario Plan [====== 37% ]
Preparing scenario Plan [====== 40% ]
Preparing scenario Plan [====== 42% ]
Preparing scenario Plan [=======45% ]
Preparing scenario Plan [=======47% ]
Preparing scenario Plan [=======50% ]
Preparing scenario Plan [=======52% ]
Preparing scenario Plan [=======55% ]
Preparing scenario Plan [=======57% ]
Preparing scenario Plan [=======60% ]
Preparing scenario Plan [=======62% ]
Preparing scenario Plan [=======65% ]
Preparing scenario Plan [=======67% ]
Preparing scenario Plan [=======70%= ]
Preparing scenario Plan [=======72%= ]
Preparing scenario Plan [=======75%== ]
Preparing scenario Plan [=======77%== ]
Preparing scenario Plan [=======80%== ]
Preparing scenario Plan [=======81%== ]
Preparing scenario Plan [=======82%=== ]
Preparing scenario Plan [=======83%=== ]
Preparing scenario Plan [=======84%=== ]
Preparing scenario Plan [=======85%=== ]
Preparing scenario Plan [=======87%=== ]
Preparing scenario Plan [=======88%==== ]
Preparing scenario Plan [=======90%==== ]
Preparing scenario Plan [=======95%===== ]
Preparing scenario Plan [=======99%===== ]
Preparing scenario Plan [======100%======]
Preparing scenario Plan [ Done ]
Scheduling scenario Plan ...
Scheduling scenario Plan [ 0% ]
Scheduling scenario Plan [= 10% ]
Scheduling scenario Plan [=== 20% ]
Scheduling scenario Plan [==== 30% ]
Scheduling scenario Plan [====== 40% ]
Scheduling scenario Plan [=======50% ]
Scheduling scenario Plan [=======60% ]
Scheduling scenario Plan [=======70%= ]
Scheduling scenario Plan [=======80%== ]
Scheduling scenario Plan [=======90%==== ]
Scheduling scenario Plan [ Done ]
Checking scenario Plan ...
Checking scenario Plan [ 0% ]
Checking scenario Plan [ 1% ]
Checking scenario Plan [ 1% ]
Checking scenario Plan [ 2% ]
Checking scenario Plan [ 3% ]
Checking scenario Plan [ 3% ]
Checking scenario Plan [ 4% ]
Checking scenario Plan [ 5% ]
Checking scenario Plan [ 5% ]
Checking scenario Plan [= 6% ]
Checking scenario Plan [= 7% ]
Checking scenario Plan [= 7% ]
Checking scenario Plan [= 8% ]
Checking scenario Plan [= 9% ]
Checking scenario Plan [= 9% ]
Checking scenario Plan [= 10% ]
Checking scenario Plan [= 11% ]
Checking scenario Plan [= 11% ]
Checking scenario Plan [== 12% ]
Checking scenario Plan [== 13% ]
Checking scenario Plan [== 13% ]
Checking scenario Plan [== 14% ]
Checking scenario Plan [== 15% ]
Checking scenario Plan [== 15% ]
Checking scenario Plan [== 16% ]
Checking scenario Plan [== 17% ]
Checking scenario Plan [== 17% ]
Checking scenario Plan [== 18% ]
Checking scenario Plan [=== 19% ]
Checking scenario Plan [=== 19% ]
Checking scenario Plan [=== 20% ]
Checking scenario Plan [=== 21% ]
Checking scenario Plan [=== 21% ]
Checking scenario Plan [=== 22% ]
Checking scenario Plan [=== 23% ]
Checking scenario Plan [=== 23% ]
Checking scenario Plan [=== 24% ]
Checking scenario Plan [==== 25% ]
Checking scenario Plan [==== 25% ]
Checking scenario Plan [==== 26% ]
Checking scenario Plan [==== 27% ]
Checking scenario Plan [==== 27% ]
Checking scenario Plan [==== 28% ]
Checking scenario Plan [==== 29% ]
Checking scenario Plan [==== 29% ]
Checking scenario Plan [==== 30% ]
Checking scenario Plan [==== 31% ]
Checking scenario Plan [===== 31% ]
Checking scenario Plan [===== 32% ]
Checking scenario Plan [===== 33% ]
Checking scenario Plan [===== 33% ]
Checking scenario Plan [===== 34% ]
Checking scenario Plan [===== 35% ]
Checking scenario Plan [===== 35% ]
Checking scenario Plan [===== 36% ]
Checking scenario Plan [===== 37% ]
Checking scenario Plan [====== 37% ]
Checking scenario Plan [====== 38% ]
Checking scenario Plan [====== 39% ]
Checking scenario Plan [====== 39% ]
Checking scenario Plan [====== 40% ]
Checking scenario Plan [====== 41% ]
Checking scenario Plan [====== 41% ]
Checking scenario Plan [====== 42% ]
Checking scenario Plan [====== 43% ]
Checking scenario Plan [====== 43% ]
Checking scenario Plan [=======44% ]
Checking scenario Plan [=======45% ]
Checking scenario Plan [=======45% ]
Checking scenario Plan [=======46% ]
Checking scenario Plan [=======47% ]
Checking scenario Plan [=======47% ]
Checking scenario Plan [=======48% ]
Checking scenario Plan [=======49% ]
Checking scenario Plan [=======49% ]
Checking scenario Plan [=======50% ]
Checking scenario Plan [=======50% ]
Checking scenario Plan [=======51% ]
Checking scenario Plan [=======52% ]
Checking scenario Plan [=======52% ]
Checking scenario Plan [=======53% ]
Checking scenario Plan [=======54% ]
Checking scenario Plan [=======54% ]
Checking scenario Plan [=======55% ]
Checking scenario Plan [=======56% ]
Checking scenario Plan [=======56% ]
Checking scenario Plan [=======57% ]
Checking scenario Plan [=======58% ]
Checking scenario Plan [=======58% ]
Checking scenario Plan [=======59% ]
Checking scenario Plan [=======60% ]
Checking scenario Plan [=======60% ]
Checking scenario Plan [=======61% ]
Checking scenario Plan [=======62% ]
Checking scenario Plan [=======62% ]
Checking scenario Plan [=======63% ]
Checking scenario Plan [=======64% ]
Checking scenario Plan [=======64% ]
Checking scenario Plan [=======65% ]
Checking scenario Plan [=======66% ]
Checking scenario Plan [=======66% ]
Checking scenario Plan [=======67% ]
Checking scenario Plan [=======68% ]
Checking scenario Plan [=======68%= ]
Checking scenario Plan [=======69%= ]
Checking scenario Plan [=======70%= ]
Checking scenario Plan [=======70%= ]
Checking scenario Plan [=======71%= ]
Checking scenario Plan [=======72%= ]
Checking scenario Plan [=======72%= ]
Checking scenario Plan [=======73%= ]
Checking scenario Plan [=======74%= ]
Checking scenario Plan [=======74%= ]
Checking scenario Plan [=======75%== ]
Checking scenario Plan [=======76%== ]
Checking scenario Plan [=======76%== ]
Checking scenario Plan [=======77%== ]
Checking scenario Plan [=======78%== ]
Checking scenario Plan [=======78%== ]
Checking scenario Plan [=======79%== ]
Checking scenario Plan [=======80%== ]
Checking scenario Plan [=======80%== ]
Checking scenario Plan [=======81%=== ]
Checking scenario Plan [=======82%=== ]
Checking scenario Plan [=======82%=== ]
Checking scenario Plan [=======83%=== ]
Checking scenario Plan [=======84%=== ]
Checking scenario Plan [=======84%=== ]
Checking scenario Plan [=======85%=== ]
Checking scenario Plan [=======86%=== ]
Checking scenario Plan [=======86%=== ]
Checking scenario Plan [=======87%=== ]
Checking scenario Plan [=======88%==== ]
Checking scenario Plan [=======88%==== ]
Checking scenario Plan [=======89%==== ]
Checking scenario Plan [=======90%==== ]
Checking scenario Plan [=======90%==== ]
./reports.tji:30: Warning: The report _Report_1 has no 'balance' defined. No cost or revenue computation will be possible.
./reports.tji:38: Warning: The report _Report_1._Report_2 has no 'balance' defined. No cost or revenue computation will be possible.
./reports.tji:42: Warning: The report _Report_1._Report_3 has no 'balance' defined. No cost or revenue computation will be possible.
./reports.tji:49: Warning: The report _Report_1._Report_4 has no 'balance' defined. No cost or revenue computation will be possible.
./reports.tji:54: Warning: The report _Report_1._Report_5 has no 'balance' defined. No cost or revenue computation will be possible.
./reports.tji:71: Warning: The report _Report_1._Report_6 has no 'balance' defined. No cost or revenue computation will be possible.
./reports.tji:76: Warning: The report _Report_1._Report_7 has no 'balance' defined. No cost or revenue computation will be possible.
./reports.tji:81: Warning: The report _Report_1._Report_8 has no 'balance' defined. No cost or revenue computation will be possible.
./reports.tji:86: Warning: The report _Report_1._Report_9 has no 'balance' defined. No cost or revenue computation will be possible.
./reports.tji:92: Warning: The report _Report_1._Report_10 has no 'balance' defined. No cost or revenue computation will be possible.
./reports.tji:97: Warning: The report _Report_1._Report_11 has no 'balance' defined. No cost or revenue computation will be possible.
./reports.tji:102: Warning: The report tag has no 'balance' defined. No cost or revenue computation will be possible.
./reports.tji:103: Warning: The report report2 has no 'balance' defined. No cost or revenue computation will be possible.
./reports.tji:106: Warning: The report overview has no 'balance' defined. No cost or revenue computation will be possible.
./reports.tji:186: Warning: The report status has no 'balance' defined. No cost or revenue computation will be possible.
./reports.tji:191: Warning: The report status.dashboard has no 'balance' defined. No cost or revenue computation will be possible.
./reports.tji:202: Warning: The report status.delayed has no 'balance' defined. No cost or revenue computation will be possible.
./reports.tji:209: Warning: The report status.nextweek has no 'balance' defined. No cost or revenue computation will be possible.
./reports.tji:213: Warning: The report status.completed has no 'balance' defined. No cost or revenue computation will be possible.
./reports.tji:217: Warning: The report status.ongoing has no 'balance' defined. No cost or revenue computation will be possible.
./reports.tji:221: Warning: The report status.future has no 'balance' defined. No cost or revenue computation will be possible.
./reports.tji:228: Warning: The report development has no 'balance' defined. No cost or revenue computation will be possible.
./reports.tji:239: Warning: The report deliveries has no 'balance' defined. No cost or revenue computation will be possible.
./reports.tji:248: Warning: The report contactList has no 'balance' defined. No cost or revenue computation will be possible.
./reports.tji:262: Warning: The report resourceGraph has no 'balance' defined. No cost or revenue computation will be possible.
./reports.tji:271: Warning: The report journal has no 'balance' defined. No cost or revenue computation will be possible.
./reports.tji:281: Warning: The report csvreport has no 'balance' defined. No cost or revenue computation will be possible.

ERROR: Ups, you have triggered a bug in TaskJuggler III!
undefined method -' for nil:NilClass /home/jenkins/gemrepository/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/TableReport.rb:216:inadjustReportPeriod'
/home/jenkins/gemrepository/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/TaskListRE.rb:54:in generateIntermediateFormat' /home/jenkins/gemrepository/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/Report.rb:133:ingenerateIntermediateFormat'
/home/jenkins/gemrepository/gems/taskjuggler-3.0.0/lib/taskjuggler/RichText/RTFReport.rb:69:in to_html' /home/jenkins/gemrepository/gems/taskjuggler-3.0.0/lib/taskjuggler/RichText/Element.rb:450:into_html'
/home/jenkins/gemrepository/gems/taskjuggler-3.0.0/lib/taskjuggler/RichText/Element.rb:474:in block in to_html' /home/jenkins/gemrepository/gems/taskjuggler-3.0.0/lib/taskjuggler/RichText/Element.rb:473:ineach'
/home/jenkins/gemrepository/gems/taskjuggler-3.0.0/lib/taskjuggler/RichText/Element.rb:473:in to_html' /home/jenkins/gemrepository/gems/taskjuggler-3.0.0/lib/taskjuggler/RichText.rb:224:into_html'
/home/jenkins/gemrepository/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/ReportBase.rb:140:in rt_to_html' /home/jenkins/gemrepository/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/TextReport.rb:80:inblock in to_html'
/home/jenkins/gemrepository/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/TextReport.rb:71:in each' /home/jenkins/gemrepository/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/TextReport.rb:71:into_html'
/home/jenkins/gemrepository/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/Report.rb:230:in generateHTML' /home/jenkins/gemrepository/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/Report.rb:85:inblock in generate'
/home/jenkins/gemrepository/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/Report.rb:74:in each' /home/jenkins/gemrepository/gems/taskjuggler-3.0.0/lib/taskjuggler/reports/Report.rb:74:ingenerate'
/home/jenkins/gemrepository/gems/taskjuggler-3.0.0/lib/taskjuggler/Project.rb:710:in block in generateReports' /home/jenkins/gemrepository/gems/taskjuggler-3.0.0/lib/taskjuggler/PropertySet.rb:290:inblock in each'
/home/jenkins/gemrepository/gems/taskjuggler-3.0.0/lib/taskjuggler/PropertySet.rb:289:in each' /home/jenkins/gemrepository/gems/taskjuggler-3.0.0/lib/taskjuggler/PropertySet.rb:289:ineach'
/home/jenkins/gemrepository/gems/taskjuggler-3.0.0/lib/taskjuggler/Project.rb:706:in generateReports' /home/jenkins/gemrepository/gems/taskjuggler-3.0.0/lib/taskjuggler/TaskJuggler.rb:148:ingenerateReports'
/home/jenkins/gemrepository/gems/taskjuggler-3.0.0/lib/taskjuggler/apps/Tj3.rb:169:in appMain' /home/jenkins/gemrepository/gems/taskjuggler-3.0.0/lib/taskjuggler/Tj3AppBase.rb:118:inmain'
/home/jenkins/gemrepository/gems/taskjuggler-3.0.0/lib/tj3.rb:16:in <top (required)>' <internal:lib/rubygems/custom_require>:29:inrequire'
internal:lib/rubygems/custom_require:29:in require' /home/jenkins/gemrepository/gems/taskjuggler-3.0.0/bin/tj3:4:in<top (required)>'
/home/vjahagir/../jenkins/gemrepository/bin/tj3:19:in load' /home/vjahagir/../jenkins/gemrepository/bin/tj3:19:in

'Please see the user manual on how to get this bug fixed!
Checking scenario Plan [=======91%==== ]
Checking scenario Plan [=======92%==== ]
Checking scenario Plan [=======92%==== ]
Checking scenario Plan [=======93%==== ]
Checking scenario Plan [=======94%===== ]
Checking scenario Plan [=======94%===== ]
Checking scenario Plan [=======95%===== ]
Checking scenario Plan [=======96%===== ]
Checking scenario Plan [=======96%===== ]
Checking scenario Plan [=======97%===== ]
Checking scenario Plan [=======98%===== ]
Checking scenario Plan [=======98%===== ]
Checking scenario Plan [=======99%===== ]
Checking scenario Plan [======100%======]
Checking scenario Plan [ Done ]
Report Overview ...
Report Overview [|]
Report Overview [/]
Report Overview [-]
Report Overview []
Report Overview [|]
Report Overview [/]
Report Overview [-]
Report Overview []
Report Overview [|]
Report Overview [/]
Report Overview [-]
Report Overview []
Report Overview [|]
Report Overview [/]
Report Overview [-]
Report Overview []
Report Overview [ Done ]
Report Current ...

workinghours not handled in ressource

I'm trying to declare workinghours for a resource:

resource jdoe "John Doe" {
    limits { weeklymax 4d}
    leaves holiday 2012-06-01 - 2012-06-08
    workinghours thu, sat, sun off
  }

but it does not appear correctly in the resource allocation report: Friday is shown off for this user.

I'm using the 2012-03-15 nightly build.

Release/Build of bug fixed taskjuggler (bundler, ...)

Hi there,

might it be possible, that you enable users to build taskjuggler from source via bundler etc.? Right now it fails because of missing files/directories (manual/tjp.vim) you generate via rake-tasks.

I use a Gemfiles to include every gem needed for a project including taskjuggler for project management. You fix bugs very very quickly which I really appreciate, but it takes a long time between new versions, which is ok as well. But it is a little bit annoying to have all gems needed for a project in a Gemfile, but only taskjuggler have separately to get the bug fixed version.

I see the following possible solutions:

  1. Integrate the generation of files/directories (manual, taskjuggler.vim) into your gemspec
  2. Integration stubs for the missing files/directories in git-repo

Another way to get around that problem would be to release a new version more often - may considering http://semver.org/.

Cheers and have a nice day
maxmeyer

Enhancement: gaplength till end-of-day

Would be useful to have a way to make delay till end of the working day (or beginning of the next working day). Something like: gaplength [+|till] (min | h | d | w | m | y)

TJ3 export by flag

export is not generated for leaf tasks when flag is used:

project "Project" "1.0" 2007-01-01 - 2008-01-01 {
}

flags export

task myproject "Project"{
task t1 "Task 1" {
start 2007-01-01
end 2007-05-01
}
task t2 "Task 2" {
flags export
start 2007-01-01
end 2007-06-30
}
}

export "project" {
definitions tasks
taskattributes -
hideresource 1
hidetask ~(export)
}

Works fine if I flag container task:

project "Project" "1.0" 2007-01-01 - 2008-01-01 {
}

flags export

task myproject "Project"{
flags export
task t1 "Task 1" {
start 2007-01-01
end 2007-05-01
}
task t2 "Task 2" {
start 2007-01-01
end 2007-06-30
}
}

export "project" {
definitions tasks
taskattributes -
hideresource 1
hidetask ~(export)
}

but then I get unwanted tasks.

It works fine for taskreport

Many thanks,
Tomas

Build taskjuggler via rake

Hi,

it's me again. You require term/ansicolor, but did not check if it's installed which gives if the gem is not installed.

vim.rake tasks unavailable: cannot load such file -- term/ansicolor

May you want to do the following in your rake file

begin
  require 'term/ansicolor'
rescue LoadError
 puts "\taskjuggler builder requires term-ansi to highlight messages."
  puts "Please install it first:\n\ngem install term-ansi'"
  exit 1
end

Maybe it would be helpfull for others that you offer a minimal Gemfile as well.

source 'https://rubygems.org'
#load deps from gemspec
gemspec

#needed to avoid errors: undefined method `write' for #<Syck::Emitter:0xac98484>
gem 'psych'

And a rake task to prepare the "environment" to hack taskjuggler.
rake prep_env

Cheers,
maxmeyer

File extension check

Hi,

I ask myself why you check the extension of the file taskjuggler should compile. As a user: if you're not concerned about syntax highlighting I see no reason to check on this.

#works
$ tj3 planung.tjp -o output

#does not work
#Error: Project file name must end with '.tjp' extension
$ tj3 planung.tj3 -o output

Cheers,
MaxMeyer

problem with timezone handling

Something wrong with timezone handling.

   error_date.tjp:23: Error: Date 2011-03-07-09:00-+0200 must be within the 
   project time frame 2011-03-07-10:00-+0200  - 2011-07-07-03:00-+0124
            start 2011-03-07-09:00

Project start date is exactly the same as start date of the first task. Notice that in error message project end-date timezone is calculated as +0124 (and start hour should be 9:00 - not 10:00).

    project test "test" "1.0" 2011-03-07-9:00 +4m {
            timingresolution 60min
            timezone "Europe/Warsaw"
            timeformat "%Y-%m-%d %H:%M"
            shorttimeformat "%H:%M"
            currency "PLN"
            weekstartsmonday
            workinghours mon - fri 9:00 - 11:00, 12:00 - 14:00
            workinghours sat, sun off
            dailyworkinghours 4
    }

    resource pgp "PGP" {
            vacation "urlop" 2011-04-22 - 2011-04-25
            vacation "szkolenie" 2011-03-21
            vacation "godziny" 2011-03-18-11:00 - 2011-03-18-14:00
            limits {dailymax 5h}
    }

    task project "project" {
            start 2011-03-07-09:00
            allocate pgp
            effort 10d
    }

Use Localtime in iCalendar

All the times were off on my computer, so tweaked the format, lost a Z, added a timeZone attribute to iCalendar to be set by iCalReport.

Leaves balance report

  1. The leaves balance in the resource report only considers resources annual leaves from the start of the project, it does not count the leaves consumed before the project starts, reporting inaccurate balance.
  2. start and end have no effect in limiting the period to be reported, instead the project lifetime is used.

rake gem compile error

Hi, I just get this error:

git pull
rake gem

WARNING: 'require 'rake/rdoctask'' is deprecated.  Please use 'require 'rdoc/task' (in RDoc 2.4.2+)' instead.
    at /usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/rdoctask.rb
rm -r doc
rm -rf manual/html
mkdir -p manual/html

ERROR: Ups, you have triggered a bug in TaskJuggler!
No such file or directory - /home/andres/programas/taskjuggler3/test/TestSuite/Syntax/Correct//TraceReport.tjp
/home/andres/programas/taskjuggler3/lib/taskjuggler/TjpExample.rb:45:in `initialize'
/home/andres/programas/taskjuggler3/lib/taskjuggler/TjpExample.rb:45:in `open'
/home/andres/programas/taskjuggler3/lib/taskjuggler/TjpExample.rb:45:in `open'
/home/andres/programas/taskjuggler3/lib/taskjuggler/KeywordDocumentation.rb:682:in `generateHTMLExampleBox'
/home/andres/programas/taskjuggler3/lib/taskjuggler/KeywordDocumentation.rb:360:in `block (2 levels) in generateHTML'
/home/andres/programas/taskjuggler3/lib/taskjuggler/XMLElement.rb:38:in `initialize'
(eval):4:in `initialize'
/home/andres/programas/taskjuggler3/lib/taskjuggler/KeywordDocumentation.rb:354:in `new'
/home/andres/programas/taskjuggler3/lib/taskjuggler/KeywordDocumentation.rb:354:in `block in generateHTML'
/home/andres/programas/taskjuggler3/lib/taskjuggler/XMLElement.rb:38:in `initialize'
(eval):4:in `initialize'
/home/andres/programas/taskjuggler3/lib/taskjuggler/KeywordDocumentation.rb:349:in `new'
/home/andres/programas/taskjuggler3/lib/taskjuggler/KeywordDocumentation.rb:349:in `generateHTML'
/home/andres/programas/taskjuggler3/lib/taskjuggler/SyntaxReference.rb:137:in `generateHTMLreference'
/home/andres/programas/taskjuggler3/lib/taskjuggler/UserManual.rb:233:in `block in generateHTMLReference'
/home/andres/programas/taskjuggler3/lib/taskjuggler/UserManual.rb:232:in `each'
/home/andres/programas/taskjuggler3/lib/taskjuggler/UserManual.rb:232:in `generateHTMLReference'
/home/andres/programas/taskjuggler3/lib/taskjuggler/UserManual.rb:78:in `generateHTML'
/home/andres/programas/taskjuggler3/lib/taskjuggler/UserManual.rb:69:in `generate'
/home/andres/programas/taskjuggler3/lib/taskjuggler/apps/Tj3Man.rb:68:in `appMain'
/home/andres/programas/taskjuggler3/lib/taskjuggler/Tj3AppBase.rb:135:in `main'
/home/andres/programas/taskjuggler3/tasks/manual.rake:13:in `block in <top (required)>'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `call'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `block in execute'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `each'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `execute'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:158:in `block in invoke_with_call_chain'
/usr/local/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:151:in `invoke_with_call_chain'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:144:in `invoke'
/home/andres/programas/taskjuggler3/tasks/gem.rake:9:in `block in <top (required)>'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `call'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `block in execute'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `each'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `execute'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:158:in `block in invoke_with_call_chain'
/usr/local/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:151:in `invoke_with_call_chain'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:144:in `invoke'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:116:in `invoke_task'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block (2 levels) in top_level'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `each'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block in top_level'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:88:in `top_level'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:66:in `block in run'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>'
/usr/local/bin/rake:19:in `load'
/usr/local/bin/rake:19:in `<main>'Please see the user manual on how to get this bug fixed!

tj3 shifts

shifts (task) does not work at all; when combined with length attribute then no errors are shown but reports ignore different shifts (and use defaults). When combined with effort attribute then tj3 raise error:

Reading file test.tjp                                        [      Done      ]
Preparing scenario planowo                                   [      Done      ]
test.tjp:51: Warning in scenario plan: Task project.t21 does not fit into project time frame
Warning: 1 tasks could not be scheduled
Warning in scenario plan: Task project.t21: 2011-03-16-22:00-+0100 -> <?>
Scheduling scenario planowo                                  [      Done      ]

Anyway - tasks with "length" not always are bout to resources despite that they are available.

task t11 "11" {
    length 1d  <-- resources are not bound
    #effort 1d
    allocate p1
}

complete example

project testowanie "t" "1.0" 2011-03-07-9:00 +4m {
timingresolution 60min
timezone "Europe/Warsaw"
timeformat "%Y-%m-%d %H:%M"
shorttimeformat "%H:%M"
currency "PLN"
weekstartsmonday
#workinghours mon - fri 9:00 - 11:00, 12:00 - 14:00
#workinghours sat, sun off
dailyworkinghours 8
scenario plan "planowo" {
}
}
shift home "home" {
workinghours mon - fri 18:00 - 22:00
workinghours sat, sun off
}
shift office "office" {
workinghours mon - fri 8:00 - 12:00, 13:00 - 17:00
workinghours sat, sun off
}
resource p1 "p1" {shifts home}
resource p2 "p2"
resource p3 "p3"
resource p4 "p4"
task project "project" {
start 2011-03-15-09:00
task t11 "11" {
    length 1d
    #effort 1d
    allocate p1
}
task t12 "12" {
    length 1d
    allocate p2
    depends !t11
}
task t21 "21" {
    shifts home
    depends project.t11
    length 1h
    allocate p3
}
task t22 "2.2" {
    length 1h
    allocate p4
}
}
taskreport report1 "Test.Gantt.Chart" {
selfcontained yes
formats html
headline "Project Gantt Chart"
columns hierarchindex,name,start,end,effort,resources,chart {
    scale hour
    width 600
}
timeformat "%Y-%m-%d %H:%M"
loadunit longauto
#hideresource 1
}

-o and --output broken with Ruby 1.8

Hello,

it appears to me that with taskjuggler 3.1.0, installed on a Debian
"testing" distribution (wheezy) using gem for ruby1.8.7, the -o and
--output options don't work. It also appears that this is due to the
use of Dir::exists?, which (I guess) was introduced in Ruby 1.9 and
isn't available in Ruby 1.8.

Since Debian currently doesn't ship a full Ruby 1.9 environment other
than 1.9.1, I'd appreciate if this issue could be fixed.

Cheers,

András

Here is the output:

tj3 -o /tmp/tjp a.tjp

TaskJuggler v3.1.0 - A Project Management Software

Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
by Chris Schlaeger [email protected]

This program is free software; you can redistribute it and/or modify it under
the terms of version 2 of the GNU General Public License as published by the
Free Software Foundation.

ERROR: Ups, you have triggered a bug in TaskJuggler!
undefined method exists?' for Dir:Class /var/lib/gems/1.8/gems/taskjuggler-3.1.0/bin/../lib/taskjuggler/apps/Tj3.rb:140:inappMain'
/var/lib/gems/1.8/gems/taskjuggler-3.1.0/bin/../lib/taskjuggler/Tj3AppBase.rb:135:in main' /var/lib/gems/1.8/gems/taskjuggler-3.1.0/bin/../lib/tj3.rb:16 /usr/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:36:ingem_original_require'
/usr/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:36:in require' /var/lib/gems/1.8/gems/taskjuggler-3.1.0/bin/tj3:4 /usr/local/bin/tj3:19:inload'
/usr/local/bin/tj3:19Please see the user manual on how to get this bug fixed!

TaskJuggler 2 documentation dissappeared

Hi, As Taskjuggler 2 is still heavily used in our company Alliander.com, we really need to have the TaskJuggler 2 manual. It has disappeared from the taskjuggler.org website. Would you mind putting is back on?

Thanx

Feature: Project versions

For a current project planning the following feature would be very useful:

Possibility to hide 'task' from scheduling (not only from reports) depending on some control mechanism.

Via project scenarios different progress variants for a project can be scheduled. An analogous approach could probably solve this:
In the early planning phase it would be interesting to exclude several tasks from scheduling, e.g. if the feature set is not fixed yet by the customer. While it is possible to use the commenting feature of the tj3 language it is tedious to keep things consistent, if many tasks are affected.

Suggestion: a task property "projectvariant" like so:

task solution "Solution" {
  task  simple "Simple" { 
    projectvariant simple
    effort 2d
   }
   task  complex "Complex" { 
      projectvariant complex
      effort 30d
   }
}

Then you could schedule each variant to compare the planning result. I'm aware of that many problems can arise when other tasks depend on the respective tasks. But this problem is also present, when tasks can only be hidden by commenting them out: taskjuggler then complains about missing task ids.


By the way: thanks a lot for this very useful and powerful tool
And sorry: i didn't find out how to set the "feature" label for the issue

TaskJuggler::IntervalList can't be coerced into Fixnum

First time I've attempted freeze and freezedate per the manual... Unfortunately it didn't generate the booking file.

L:\labwork\srcdir.prj\prj_doc_tree\prj_proj_plan\src>tj3 --freeze ProjName.tjp --freezedate 2011-10-21
TaskJuggler III v0.2.2 - A Project Management Software

Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
              by Chris Schlaeger <[email protected]>

This program is free software; you can redistribute it and/or modify it under
the terms of version 2 of the GNU General Public License as published by the
Free Software Foundation.

Reading file ProjName.tjp                                  [      Done      ]
Preparing scenario Plan                                      [      Done      ]
Scheduling scenario Plan                                     [      Done      ]
Checking scenario Plan                                       [      Done      ]
Preparing scenario Delayed                                   [      Done      ]
Scheduling scenario Delayed                                  [      Done      ]
Checking scenario Delayed                                    [      Done      ]
Info: Please make sure you include ProjName-header.tji at the end of the project header and ProjName-bookings.tji at the end of
ProjName.tjp.
Report Overview                                              [      Done      ]
Report Status                                                [      Done      ]
Report Development                                           [      Done      ]
Report Deliveries                                            [      Done      ]
Report ContactList                                           [/]
ERROR: Ups, you have triggered a bug in TaskJuggler III!
TaskJuggler::IntervalList can't be coerced into Fixnum
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/GanttLoadStack.rb:50:in `+'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/GanttLoadStack.rb:50:in `block in initialize'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/GanttLoadStack.rb:50:in `each'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/GanttLoadStack.rb:50:in `initialize'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/GanttLine.rb:311:in `new'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/GanttLine.rb:311:in `block in generateResource'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/GanttLine.rb:270:in `each'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/GanttLine.rb:270:in `generateResource'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/GanttLine.rb:128:in `generate'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/GanttLine.rb:56:in `initialize'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/TableReport.rb:559:in `new'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/TableReport.rb:559:in `generateTableCell'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/TableReport.rb:439:in `block (3 levels) in gener
ateResourceList'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/TableReport.rb:437:in `each'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/TableReport.rb:437:in `block (2 levels) in gener
ateResourceList'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/TableReport.rb:426:in `each'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/TableReport.rb:426:in `block in generateResource
List'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/PropertyList.rb:60:in `each'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/PropertyList.rb:60:in `call'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/PropertyList.rb:60:in `method_missing'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/TableReport.rb:416:in `generateResourceList'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/ResourceListRE.rb:73:in `generateIntermediateFor
mat'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/Report.rb:132:in `generateIntermediateFormat'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/RichText/RTFReport.rb:69:in `to_html'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/RichText/Element.rb:450:in `to_html'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/RichText/Element.rb:474:in `block in to_html'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/RichText/Element.rb:473:in `each'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/RichText/Element.rb:473:in `to_html'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/RichText.rb:224:in `to_html'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/ReportBase.rb:140:in `rt_to_html'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/TextReport.rb:80:in `block in to_html'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/TextReport.rb:71:in `each'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/TextReport.rb:71:in `to_html'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/Report.rb:229:in `generateHTML'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/Report.rb:84:in `block in generate'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/Report.rb:73:in `each'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/reports/Report.rb:73:in `generate'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/Project.rb:712:in `block in generateReports'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/PropertySet.rb:290:in `block in each'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/PropertySet.rb:289:in `each'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/PropertySet.rb:289:in `each'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/Project.rb:708:in `generateReports'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/TaskJuggler.rb:148:in `generateReports'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/apps/Tj3.rb:169:in `appMain'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/taskjuggler/Tj3AppBase.rb:118:in `main'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/lib/tj3.rb:16:in `<top (required)>'
C:/Tools/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
C:/Tools/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/taskjuggler-0.2.2/bin/tj3:4:in `<top (required)>'
C:/Tools/Ruby192/bin/tj3:19:in `load'
C:/Tools/Ruby192/bin/tj3:19:in `<main>'Please see the user manual on how to get this bug fixed!

L:\labwork\srcdir.prj\prj_doc_tree\prj_proj_plan\src>gem update taskjuggler
Updating installed gems
Nothing to update

L:\labwork\srcdir.prj\prj_doc_tree\prj_proj_plan\src>

Macro error (It was working in TJ3.0)

It was warking in TJ3.0 and not it is working in tj3.1 after upgrade.
Example source: http://www.mediafire.com/?lvssn643lxdjffs
File: ReportError.tjp

Info: Macro call history:
ReportError.tjp:73: Info: ${stuff_report_daily "Tester01"}
ReportError.tjp:95: Error: A report with the name Tester01 has already been defined.

resourcereport resourceGraph_Tester01 "Tester01"

Resource specific vacations are ignored for contactList report and resourceGraph report

When I take the tutorial project and assign the "Manual" task exclusively to doc ("Dim Sung") the following behavior occurs:

  • When I comment out the vacation of "Dim Sung",
    • the "Manual" task is assigned to "Dim Sung" for the time range Wed 2002-01-16 Tue 2002-03-26 in the "Overview Report"
  • When I add the vacation "2002-02-18 - 2002-03-16" to "Dim Sung",
    • the task is scheduled until Wed 2002-04-24 in the "Overview Report", which is fine.
    • No off duty time is displayed for "Dim Sung" in the "Resource Graph" report. The resource allocation does not change.
    • The same applies to the "Contact List" report

“date” does _not_ accept ISO 8601 date/time format

According to the documentation for “date”:

A DATE is an ISO-compliant date in the format YYYY-MM-DD[-hh:mm[:ss]][-TIMEZONE]

As per http://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations this is not the ISO date format, the documentation should read (and the software should accept!) instead:

A DATE is an ISO-compliant date in the format YYYY-MM-DD[Thh:mm[:ss]][offset from UTC]

This is different in two ways: the leading “-” before the “hh” is replaced by thestandard T, and there is no leading “-” on the UTC offset! It's especially important to get this right to improve the ease of interoperability with other tools.

(Alternatively, if it's preferred that TJ should continue to use its own “nearly ISO 8601” format, please change the documentation so it doesn't mislead the user into thinking that ISO 8601 date/time format will work!)

Thanks :)

supplement task <ID> or <ABSOLUTE_ID>, maybe RELATIVE_ID too?

I see in the test code that supplement task could take an absolute task id:
test/TestSuite/Export-Reports/refs/Reports.tjp, see 'supplement task t1.t1_1'

This looks like tjIII allows an ABSOLUTE_ID, like 'depends' and 'precedes'. The usage documentation says only that 'ID' is permitted. So, clearly, the documentation is out of sync with implementation, and that the intention is to allow absolute ids here.

But that brings a question: is relative ids allowed in 'supplement task' or simply unnecessary (because 'supplement task' may never appear except at global level, perhaps)?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.