taskjuggler 3.8.2 → 3.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG +5 -0
- data/data/tjp.vim +1 -1
- data/lib/taskjuggler/version.rb +1 -1
- data/man/tj3.1 +1 -1
- data/man/tj3client.1 +1 -1
- data/man/tj3d.1 +1 -1
- data/man/tj3man.1 +1 -1
- data/man/tj3ss_receiver.1 +1 -1
- data/man/tj3ss_sender.1 +2 -2
- data/man/tj3ts_receiver.1 +1 -1
- data/man/tj3ts_sender.1 +2 -2
- data/man/tj3ts_summary.1 +2 -2
- data/man/tj3webd.1 +86 -0
- data/taskjuggler.gemspec +2 -1
- metadata +23 -288
- data/manual/html/Day_To_Day_Juggling.html +0 -365
- data/manual/html/Getting_Started.html +0 -64
- data/manual/html/How_To_Contribute.html +0 -95
- data/manual/html/Installation.html +0 -205
- data/manual/html/Intro.html +0 -104
- data/manual/html/List_Attributes.html +0 -76
- data/manual/html/Reporting_Bugs.html +0 -49
- data/manual/html/Rich_Text_Attributes.html +0 -179
- data/manual/html/Software.html +0 -151
- data/manual/html/TaskJuggler_2x_Migration.html +0 -71
- data/manual/html/TaskJuggler_Internals.html +0 -63
- data/manual/html/The_TaskJuggler_Syntax.html +0 -92
- data/manual/html/Tutorial.html +0 -511
- data/manual/html/account.html +0 -163
- data/manual/html/account.task.html +0 -47
- data/manual/html/accountprefix.html +0 -69
- data/manual/html/accountreport.html +0 -488
- data/manual/html/accountroot.html +0 -144
- data/manual/html/active.html +0 -68
- data/manual/html/adopt.task.html +0 -74
- data/manual/html/aggregate.html +0 -147
- data/manual/html/alert.html +0 -69
- data/manual/html/alertlevels.html +0 -104
- data/manual/html/allocate.html +0 -98
- data/manual/html/alphabet.html +0 -40
- data/manual/html/alternative.html +0 -79
- data/manual/html/author.html +0 -71
- data/manual/html/auxdir.html +0 -69
- data/manual/html/auxdir.report.html +0 -71
- data/manual/html/balance.html +0 -148
- data/manual/html/booking.resource.html +0 -124
- data/manual/html/booking.task.html +0 -123
- data/manual/html/caption.html +0 -100
- data/manual/html/cellcolor.column.html +0 -108
- data/manual/html/celltext.column.html +0 -109
- data/manual/html/center.html +0 -93
- data/manual/html/charge.html +0 -92
- data/manual/html/chargeset.html +0 -76
- data/manual/html/columnid.html +0 -433
- data/manual/html/columns.html +0 -78
- data/manual/html/complete.html +0 -88
- data/manual/html/copyright.html +0 -99
- data/manual/html/credits.html +0 -123
- data/manual/html/css/tjmanual.css +0 -85
- data/manual/html/css/tjreport.css +0 -493
- data/manual/html/currency.html +0 -135
- data/manual/html/currencyformat.html +0 -101
- data/manual/html/dailymax.html +0 -146
- data/manual/html/dailymin.html +0 -134
- data/manual/html/dailyworkinghours.html +0 -92
- data/manual/html/date.extend.html +0 -79
- data/manual/html/date.html +0 -103
- data/manual/html/definitions.html +0 -96
- data/manual/html/depends.html +0 -113
- data/manual/html/details.html +0 -71
- data/manual/html/disabled.html +0 -93
- data/manual/html/duration.html +0 -135
- data/manual/html/efficiency.html +0 -95
- data/manual/html/effort.html +0 -136
- data/manual/html/effortdone.html +0 -105
- data/manual/html/effortleft.html +0 -105
- data/manual/html/email.html +0 -70
- data/manual/html/enabled.html +0 -77
- data/manual/html/end.column.html +0 -69
- data/manual/html/end.html +0 -89
- data/manual/html/end.limit.html +0 -71
- data/manual/html/end.report.html +0 -107
- data/manual/html/end.timesheet.html +0 -96
- data/manual/html/endcredit.html +0 -121
- data/manual/html/epilog.html +0 -76
- data/manual/html/export.html +0 -271
- data/manual/html/extend.html +0 -134
- data/manual/html/fail.html +0 -107
- data/manual/html/fdl.html +0 -430
- data/manual/html/flags.account.html +0 -69
- data/manual/html/flags.html +0 -68
- data/manual/html/flags.journalentry.html +0 -68
- data/manual/html/flags.report.html +0 -71
- data/manual/html/flags.resource.html +0 -71
- data/manual/html/flags.statussheet.html +0 -68
- data/manual/html/flags.task.html +0 -71
- data/manual/html/flags.timesheet.html +0 -68
- data/manual/html/fontcolor.column.html +0 -108
- data/manual/html/footer.html +0 -98
- data/manual/html/formats.export.html +0 -74
- data/manual/html/formats.html +0 -83
- data/manual/html/functions.html +0 -80
- data/manual/html/gapduration.html +0 -95
- data/manual/html/gaplength.html +0 -95
- data/manual/html/halign.center.html +0 -68
- data/manual/html/halign.column.html +0 -104
- data/manual/html/halign.left.html +0 -68
- data/manual/html/halign.right.html +0 -68
- data/manual/html/hasalert.html +0 -73
- data/manual/html/header.html +0 -98
- data/manual/html/headline.html +0 -71
- data/manual/html/height.html +0 -74
- data/manual/html/hideaccount.html +0 -111
- data/manual/html/hidejournalentry.html +0 -71
- data/manual/html/hidereport.html +0 -104
- data/manual/html/hideresource.html +0 -111
- data/manual/html/hidetask.html +0 -111
- data/manual/html/icalreport.html +0 -145
- data/manual/html/include.macro.html +0 -72
- data/manual/html/include.project.html +0 -72
- data/manual/html/include.properties.html +0 -78
- data/manual/html/index.html +0 -19
- data/manual/html/inherit.extend.html +0 -70
- data/manual/html/interval1.html +0 -101
- data/manual/html/interval2.html +0 -100
- data/manual/html/interval3.html +0 -101
- data/manual/html/interval4.html +0 -102
- data/manual/html/isactive.html +0 -69
- data/manual/html/ischildof.html +0 -69
- data/manual/html/isdependencyof.html +0 -77
- data/manual/html/isdutyof.html +0 -73
- data/manual/html/isfeatureof.html +0 -73
- data/manual/html/isleaf.html +0 -68
- data/manual/html/ismilestone.html +0 -69
- data/manual/html/isongoing.html +0 -69
- data/manual/html/isresource.html +0 -68
- data/manual/html/isresponsibilityof.html +0 -73
- data/manual/html/istask.html +0 -68
- data/manual/html/isvalid.html +0 -68
- data/manual/html/journalattributes.html +0 -115
- data/manual/html/journalentry.html +0 -85
- data/manual/html/journalmode.html +0 -95
- data/manual/html/leaveallowance.html +0 -141
- data/manual/html/leaves.html +0 -146
- data/manual/html/left.html +0 -92
- data/manual/html/length.html +0 -106
- data/manual/html/limits.allocate.html +0 -47
- data/manual/html/limits.html +0 -74
- data/manual/html/limits.resource.html +0 -82
- data/manual/html/limits.task.html +0 -115
- data/manual/html/listitem.column.html +0 -68
- data/manual/html/listtype.column.html +0 -81
- data/manual/html/loadunit.html +0 -103
- data/manual/html/logicalexpression.html +0 -86
- data/manual/html/logicalflagexpression.html +0 -84
- data/manual/html/macro.html +0 -105
- data/manual/html/managers.html +0 -112
- data/manual/html/mandatory.html +0 -68
- data/manual/html/markdate.html +0 -69
- data/manual/html/maxend.html +0 -71
- data/manual/html/maximum.html +0 -101
- data/manual/html/maxstart.html +0 -71
- data/manual/html/milestone.html +0 -73
- data/manual/html/minend.html +0 -71
- data/manual/html/minimum.html +0 -101
- data/manual/html/minstart.html +0 -71
- data/manual/html/monthlymax.html +0 -101
- data/manual/html/monthlymin.html +0 -101
- data/manual/html/navbar.html +0 -567
- data/manual/html/navigator.html +0 -103
- data/manual/html/newtask.html +0 -85
- data/manual/html/nikureport.html +0 -218
- data/manual/html/note.task.html +0 -70
- data/manual/html/novevents.html +0 -68
- data/manual/html/now.html +0 -69
- data/manual/html/number.extend.html +0 -79
- data/manual/html/numberformat.html +0 -87
- data/manual/html/onend.html +0 -70
- data/manual/html/onstart.html +0 -70
- data/manual/html/opennodes.html +0 -70
- data/manual/html/outputdir.html +0 -69
- data/manual/html/overtime.booking.html +0 -78
- data/manual/html/period.column.html +0 -69
- data/manual/html/period.limit.html +0 -71
- data/manual/html/period.report.html +0 -71
- data/manual/html/period.task.html +0 -71
- data/manual/html/persistent.html +0 -68
- data/manual/html/precedes.html +0 -89
- data/manual/html/priority.html +0 -116
- data/manual/html/priority.timesheet.html +0 -70
- data/manual/html/project.html +0 -90
- data/manual/html/projectid.html +0 -68
- data/manual/html/projectid.task.html +0 -70
- data/manual/html/projectids.html +0 -68
- data/manual/html/projection.html +0 -81
- data/manual/html/prolog.html +0 -76
- data/manual/html/properties.html +0 -262
- data/manual/html/purge.html +0 -74
- data/manual/html/rate.html +0 -68
- data/manual/html/rate.resource.html +0 -70
- data/manual/html/rawhtmlhead.html +0 -70
- data/manual/html/reference.extend.html +0 -79
- data/manual/html/remaining.html +0 -119
- data/manual/html/replace.html +0 -71
- data/manual/html/reportprefix.html +0 -69
- data/manual/html/resource.html +0 -208
- data/manual/html/resourceattributes.html +0 -85
- data/manual/html/resourceprefix.html +0 -69
- data/manual/html/resourcereport.html +0 -410
- data/manual/html/resourceroot.html +0 -94
- data/manual/html/resources.limit.html +0 -84
- data/manual/html/responsible.html +0 -72
- data/manual/html/richtext.extend.html +0 -80
- data/manual/html/right.html +0 -92
- data/manual/html/rollupaccount.html +0 -106
- data/manual/html/rollupresource.html +0 -129
- data/manual/html/rolluptask.html +0 -106
- data/manual/html/scale.column.html +0 -89
- data/manual/html/scenario.html +0 -107
- data/manual/html/scenario.ical.html +0 -69
- data/manual/html/scenarios.export.html +0 -68
- data/manual/html/scenarios.html +0 -71
- data/manual/html/scenariospecific.extend.html +0 -70
- data/manual/html/scheduled.html +0 -70
- data/manual/html/scheduling.html +0 -77
- data/manual/html/schedulingmode.html +0 -74
- data/manual/html/select.html +0 -88
- data/manual/html/selfcontained.html +0 -70
- data/manual/html/shift.allocate.html +0 -79
- data/manual/html/shift.html +0 -136
- data/manual/html/shift.resource.html +0 -82
- data/manual/html/shift.task.html +0 -82
- data/manual/html/shift.timesheet.html +0 -72
- data/manual/html/shifts.allocate.html +0 -73
- data/manual/html/shifts.resource.html +0 -75
- data/manual/html/shifts.task.html +0 -75
- data/manual/html/shorttimeformat.html +0 -69
- data/manual/html/sloppy.booking.html +0 -79
- data/manual/html/sloppy.projection.html +0 -74
- data/manual/html/sortaccounts.html +0 -75
- data/manual/html/sortjournalentries.html +0 -85
- data/manual/html/sortresources.html +0 -75
- data/manual/html/sorttasks.html +0 -75
- data/manual/html/start.column.html +0 -69
- data/manual/html/start.html +0 -80
- data/manual/html/start.limit.html +0 -71
- data/manual/html/start.report.html +0 -71
- data/manual/html/startcredit.html +0 -76
- data/manual/html/status.statussheet.html +0 -75
- data/manual/html/status.timesheet.html +0 -93
- data/manual/html/statussheet.html +0 -126
- data/manual/html/statussheetreport.html +0 -131
- data/manual/html/strict.projection.html +0 -74
- data/manual/html/summary.html +0 -71
- data/manual/html/supplement.html +0 -110
- data/manual/html/supplement.resource.html +0 -209
- data/manual/html/supplement.task.html +0 -325
- data/manual/html/tagfile.html +0 -79
- data/manual/html/task.html +0 -316
- data/manual/html/task.statussheet.html +0 -76
- data/manual/html/task.timesheet.html +0 -91
- data/manual/html/taskattributes.html +0 -117
- data/manual/html/taskprefix.html +0 -69
- data/manual/html/taskreport.html +0 -446
- data/manual/html/taskroot.export.html +0 -106
- data/manual/html/taskroot.html +0 -107
- data/manual/html/text.extend.html +0 -79
- data/manual/html/textreport.html +0 -429
- data/manual/html/timeformat.html +0 -162
- data/manual/html/timeformat1.html +0 -69
- data/manual/html/timeformat2.html +0 -69
- data/manual/html/timeoff.nikureport.html +0 -73
- data/manual/html/timesheet.html +0 -131
- data/manual/html/timesheetreport.html +0 -131
- data/manual/html/timezone.export.html +0 -68
- data/manual/html/timezone.html +0 -74
- data/manual/html/timezone.report.html +0 -70
- data/manual/html/timezone.shift.html +0 -72
- data/manual/html/timingresolution.html +0 -73
- data/manual/html/title.column.html +0 -69
- data/manual/html/title.html +0 -70
- data/manual/html/toc.html +0 -2521
- data/manual/html/tooltip.column.html +0 -109
- data/manual/html/tracereport.html +0 -426
- data/manual/html/trackingscenario.html +0 -82
- data/manual/html/treelevel.html +0 -68
- data/manual/html/vacation.html +0 -73
- data/manual/html/vacation.resource.html +0 -75
- data/manual/html/vacation.shift.html +0 -73
- data/manual/html/warn.html +0 -107
- data/manual/html/weeklymax.html +0 -101
- data/manual/html/weeklymin.html +0 -101
- data/manual/html/weekstartsmonday.html +0 -68
- data/manual/html/weekstartssunday.html +0 -68
- data/manual/html/width.column.html +0 -68
- data/manual/html/width.html +0 -74
- data/manual/html/work.html +0 -107
- data/manual/html/workinghours.project.html +0 -104
- data/manual/html/workinghours.resource.html +0 -81
- data/manual/html/workinghours.shift.html +0 -83
- data/manual/html/yearlyworkingdays.html +0 -72
@@ -1,365 +0,0 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<!-- This file has been generated by tj3man v3.8.1 -->
|
3
|
-
<html lang="en" xml:lang="en">
|
4
|
-
<head>
|
5
|
-
<title>Day_To_Day_Juggling</title>
|
6
|
-
<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
|
7
|
-
<meta content="IE=9" http-equiv="X-UA-Compatible"/>
|
8
|
-
</head>
|
9
|
-
<link href="css/tjmanual.css" rel="stylesheet" type="text/css"></link>
|
10
|
-
<body>
|
11
|
-
<div align="center">
|
12
|
-
<h3 align="center">The TaskJuggler User Manual</h3>
|
13
|
-
<em align="center">Project Management beyond Gantt Chart Drawing</em>
|
14
|
-
</div>
|
15
|
-
<br/>
|
16
|
-
<hr/>
|
17
|
-
<table style="width:90%; margin-left:5%; margin-right:5%"><tr>
|
18
|
-
<td style="text-align:left; width:35%;"><< <a href="Software.html">Software</a> <<</td>
|
19
|
-
<td style="text-align:center; width:30%;"><a href="toc.html">Table Of Contents</a></td>
|
20
|
-
<td style="text-align:right; width:35%;">>> <a href="TaskJuggler_Internals.html">TaskJuggler_Internals</a> >></td>
|
21
|
-
</tr></table>
|
22
|
-
<hr/>
|
23
|
-
<br/>
|
24
|
-
<div style="width:90%; margin-left:5%; margin-right:5%"><div class="manual">
|
25
|
-
<h1 class="manual" id="Day_To_Day_Juggling">7 Day To Day Juggling</h1>
|
26
|
-
<h2 class="manual" id="Working_with_multiple_scenarios">7.1 Working with multiple scenarios</h2>
|
27
|
-
<p class="manual">To analyze the impact that a small variation can have on a project, TaskJuggler supports an unlimited amount of scenarios. Each additional scenario is a slight derivation of it's parent. The task tree structure needs to be the same for all scenarios, but most attributes can vary from one scenario to another. Several report types support comparative listing of multiple <a href="scenarios.html">scenarios</a>.</p>
|
28
|
-
<p class="manual">By default, TaskJuggler knows about one scenario, called <code class="manual">plan</code>. The name of this scenario can be changed just like you can add more scenarios in the <a href="project.html">project</a> section of your project files.</p>
|
29
|
-
<div class="codeframe"><pre class="code">project "Example" 2007-05-29 - 2007-07-01 {
|
30
|
-
timezone "America/Denver"
|
31
|
-
scenario plan "Planned Scenario" {
|
32
|
-
scenario actual "Actual Scenario"
|
33
|
-
scenario test "Test Scenario" {
|
34
|
-
active no
|
35
|
-
}
|
36
|
-
}
|
37
|
-
}
|
38
|
-
</pre></div>
|
39
|
-
<p class="manual">This header section defines 3 different scenarios. <code class="manual">plan</code> is the top-level scenario. It has two derived scenarios, <code class="manual">actual</code> and <code class="manual">test</code>. These two scenarios are identical to the <code class="manual">plan</code> scenario except for those attributes that are changed for these scenarios. Normally, all scenarios are scheduled on each <code class="manual">tj3</code> run. To temporarily disable the scheduling of a scenario, you can set the <a href="active.html">active</a> attribute to <code class="manual">no</code>.</p>
|
40
|
-
<div class="codeframe"><pre class="code">task t "Task" {
|
41
|
-
start 2007-05-29
|
42
|
-
actual:start 2007-06-03
|
43
|
-
test:start 2007-06-07
|
44
|
-
}
|
45
|
-
</pre></div>
|
46
|
-
<p class="manual">If you prefix an attribute with the scenario ID followed immediately by a colon, you can specify a value for a particular attribute. Keep in mind that setting an attribute also sets the same value for <i>all derived scenarios</i> of this scenario as well! If you would specify <code class="manual">actual:start</code> first and then <code class="manual">plan:start</code>, the latter would overwrite the first value again since actual is a derived scenario of plan.</p>
|
47
|
-
<p class="manual">The syntax reference lists for each attribute whether it is scenario specific or not.</p>
|
48
|
-
<h2 class="manual" id="Important_and_fallback_Tasks">7.2 Important and fall-back Tasks</h2>
|
49
|
-
<p class="manual">By default, the scheduler tries to guess the right priority of tasks. The higher the priority, the more likely it will get the requested resources. To override this mechanism, the <a href="priority.html">priority</a> attribute can be used.</p>
|
50
|
-
<div class="codeframe"><pre class="code">task jobs "Project breakdown" {
|
51
|
-
start ${projectstart}
|
52
|
-
|
53
|
-
task work "The regular work" {
|
54
|
-
effort 20d
|
55
|
-
priority 500
|
56
|
-
allocate tux
|
57
|
-
limits { weeklymax 25h }
|
58
|
-
}
|
59
|
-
|
60
|
-
task support "Customer Support" {
|
61
|
-
# This is a high priority task. Due to the high priority tux is
|
62
|
-
# spending the required daily maximum on it.
|
63
|
-
end ${projectend}
|
64
|
-
priority 800
|
65
|
-
allocate tux
|
66
|
-
limits { dailymax 2h }
|
67
|
-
}
|
68
|
-
|
69
|
-
task conference "Attend Conference" {
|
70
|
-
period 2011-04-25 +2d
|
71
|
-
allocate tux
|
72
|
-
priority 1000
|
73
|
-
}
|
74
|
-
|
75
|
-
task maintenance "Maintenance work" {
|
76
|
-
# This is a fallback task. Whenever tux is not doing something
|
77
|
-
# else he is allocated to this task.
|
78
|
-
end ${projectend}
|
79
|
-
priority 300
|
80
|
-
allocate tux
|
81
|
-
limits { weeklymax 2d }
|
82
|
-
}
|
83
|
-
}
|
84
|
-
</pre></div>
|
85
|
-
<p class="manual">In the above example, the regular project work needs to be frequently interrupted by the <i>Customer Support</i> task. It's only 2 hours a day, but it's pretty important that this is done. Since the task has a higher priority than the regular work, the scheduler will try to ensure that a maximum of 2 hours per day is spent on support. There is no guarantee, that the task will always get the resource for 2 hours each day, but it's pretty likely in this setup.</p>
|
86
|
-
<p class="manual">There is only one task that is more important, the <i>Attend Conference</i> task. It has fixed dates and we want to make sure <i>Tux</i> can attend. So we use <code class="manual">priority 1000</code>, the highest possible priority. There should be only one such task. If not, you need to ensure that the top priority tasks don't compete for the same resource in the same time frame.</p>
|
87
|
-
<p class="manual">In contrast to the support and conference task, the <i>Maintenance work</i> task is a fall-back task. It has a lower priority than the regular work. Tux only gets assigned to it when there is no other work. We have limited the regular work to 25 hours per week. Since we spend up to 10 hours per week on support, there should be a remainder of 5 hours per week for the maintenance task. Again, no guarantees given.</p>
|
88
|
-
<p class="manual">If you want to ensure that a certain minimum or maximum effort is spent on a task, you can use the <a href="warn.html">warn</a> attribute. This will not affect the decisions of the scheduler, but at least it will trigger a warning if your criteria are not met.</p>
|
89
|
-
<h2 class="manual" id="Tracking_the_Project">7.3 Tracking the Project</h2>
|
90
|
-
<p class="manual">Once the initial plan has been made and the project has started, TaskJuggler can be turned from a planning tool into a tracking tool. You don't have to change a lot to do this. After all, as the initial plan is almost always just a first guess, you need to continue planning your project as new details become evident. As the work progresses, you continuously review the state of the project and update the plan accordingly. A weekly review and update cycle seems to be pretty common for most projects. Usually the plan for the past week and the reality are mostly aligned. The future parts of the project often are more affected by necessary changes.</p>
|
91
|
-
<p class="manual">While it is generally accepted to invest some amount of time in project planning, it is very common that once the project has been started, project managers tend to avoid a proper tracking of the project. Our bet is that the vast majority of project plans are only made to get management or investor approval. After the approval phase, many project managers only work with their project plan again when the project is getting out of control and they are desperate for any help they can get.</p>
|
92
|
-
<p class="manual">Of course, there are projects that are done using strict project management techniques that require detailed status tracking. Both extremes probably have their fans and TaskJuggler offers good support for both extremes as well as various techniques in between.</p>
|
93
|
-
<h2 class="manual" id="Recording_Progress">7.4 Recording Progress</h2>
|
94
|
-
<p class="manual">As mentioned previously, your initial project plan is only a first estimate of how the project will progress. During the course of the project you will have to make changes to the plan as new information needs to be taken into account and you probably want to track the progress of the project in a formalized form. TaskJuggler will support you during this phase of the project as well, but it needs your help. You have to provide the additional information in the project file. In return you get current status reports and an updated project plan based on the current status of the project.</p>
|
95
|
-
<h3 class="manual" id="Using_completion_values">7.4.1 Using completion values</h3>
|
96
|
-
<p class="manual">The most simple form of capturing the current status of the project is to use the complete attribute.</p>
|
97
|
-
<div class="manual" codesection="1"><pre class="manual" codesection="1">task impl "Implementation" {
|
98
|
-
depends !spec
|
99
|
-
effort 4w
|
100
|
-
allocate dev1, dev2
|
101
|
-
complete 50
|
102
|
-
}
|
103
|
-
</pre></div>
|
104
|
-
<p class="manual">This tells TaskJuggler that 50% of the task's effort has been completed by the <a href="now.html">current date</a>. Tasks that have no completion specification will be assumed to be on track and TaskJuggler calculates the expected completion degree based on the current date. Completion specifications only need to be supplied for tasks that are either ahead of schedule or behind schedule. Please be aware that the completion degree does not affect the scheduling and resource allocation. It is only for reporting purposes. It also does not tell TaskJuggler which resource actually worked on the tasks, nor does it update the total or remaining effort.</p>
|
105
|
-
<h3 class="manual" id="Using_bookings">7.4.2 Using bookings</h3>
|
106
|
-
<p class="manual">When TaskJuggler schedules your plan, it can tell you who should work when on what. Now, that's the plan. But reality might be different. To tell TaskJuggler what really happened, you can use <a href="booking.task.html">booking statements</a>. When the past is exactly described by providing booking statements, you can enable <a href="projection.html">projection mode</a>.</p>
|
107
|
-
<p class="manual">Entering all the bookings for each resource and task may sound like a daunting task at first. If you do it manually, it certainly is. Fortunately, TaskJuggler can generate them for you by using either the <code class="manual">--freeze</code> option of <code class="manual">tj3</code> or by generating a manual <a href="export.html">export report</a>. Before we discuss this in more detail, we need to make sure that the plan is up-to-date.</p>
|
108
|
-
<h2 class="manual" id="Tracking_status_and_actuals">7.5 Tracking status and actuals</h2>
|
109
|
-
<p class="manual">Creating a good project plan is one thing. Executing it is a whole new story. Usually, the first plan is never fully correct and the only way to make sure that you are making progress according to plan is to regularly get status updates from all the project contributors.</p>
|
110
|
-
<p class="manual">These status updates should be provided by all project contributors on a regular basis, usually once a week. The gathered information should tell project managers who really worked how much on what tasks and how much work the contributors believe is really left now. There are two categories of tasks in a project that need to be treated slightly differently.</p>
|
111
|
-
<p class="manual">A task can either be effort based or duration based. In the former case, the contributors must tell how much effort is left. For duration based task, this doesn't make much sense. For these task, the expected end date should be reported.</p>
|
112
|
-
<p class="manual">In addition to those numbers, managers in the reporting chain usually want to have a textual status that describes what happened and what kind of issues were encountered. Usually, these textual status reports are combined with alert levels like green, yellow and red. Green means everything is progressing according to plan, yellow means there is some schedule risk and red means the project is in serious trouble. Usually first line managers like to get all the details while people further up in the reporting chain only like to see summaries with varying level of details.</p>
|
113
|
-
<p class="manual">All of this creates additional overhead but is usually inevitable to ensure that you complete the project within the given time and budget. As a comprehensive project management solution, TaskJuggler provides full support for all those tracking and reporting steps. It comes with a powerful email and web based communication system that simplifies the tracking process for individual contributors as well as managers.</p>
|
114
|
-
<p class="manual">As a side note we would like to mention that the recording of the work time of employees is regulated by labor law in certain countries. You might also require approval from a Worker's Council before you can deploy any time recording tools. Please consult with your corporate counsel or legal expert for all geographic regions of your teams before you deploy a time tracking solution.</p>
|
115
|
-
<p class="manual">We also would like to point out that introducing status reporting and time sheets is usually a big change for every staff. Don't underestimate the psychological impact and the training requirements. We also recommend to test the described process with a small group of employees first to get familiar with the process and to adapt it to your needs. Don't rush a deployment! You usually only have one chance to roll-out such a new process.</p>
|
116
|
-
<h3 class="manual" id="The_reporting_and_tracking_cycle">7.5.1 The reporting and tracking cycle</h3>
|
117
|
-
<p class="manual">In this description, we assume that you are using a weekly reporting cycle. TaskJuggler does support arbitrary cycles, but we highly recommend the described weekly cycle.</p>
|
118
|
-
<ol>
|
119
|
-
<li>
|
120
|
-
<b>Time sheets</b>: Every project contributor needs to fill out a <a href="timesheet.html">time sheet</a> once a week. To simplify this task as much as possible, a template will be send out by email. The template already lists all tasks that were planned for this week to work on with the respective effort values and end dates. It also provides sections for textual status reports. The contributor needs to review and complete the time sheet and has to send it back via email. TaskJuggler validates the submission and returns an email with either an error message or a nicely formatted version of the time sheet.</li>
|
121
|
-
<li>All time sheets must be submitted by a certain deadline, e. g. midnight on Sunday. TaskJuggler will then compile a summary report and sent it out to a list of interested parties. It will also detect missing time sheets and will send out a reminder to those contributors that have not submitted their report.</li>
|
122
|
-
<li>On Monday the project managers need to review the time sheets and update the plan accordingly. TaskJuggler can compile a list of changes compared to the plan. This makes it easy to update the plan according to the actual progress that was made. The closer the actuals match the plan the less work this is. The project managers now generate bookings for the last week and add them to the database with previous bookings. Doing so will prevent changes to the plan to affect the past. Only the future will be modified.</li>
|
123
|
-
<li>Once the plan has been updated, managers will receive their status sheet templates per email. Each manager will get the information for the tasks that they are <a href="responsible.html">responsible</a> for. To consolidate the information for the next manager in the reporting chain they can moderate the reports in three ways. Consolidated manager reports are called dashboard reports.</li>
|
124
|
-
<ol>
|
125
|
-
<li>A status report for a task can be removed from the dashboard.</li>
|
126
|
-
<li>A status report for a task can be corrected or updated.</li>
|
127
|
-
<li>All reports for sub tasks of a task can be summarized by creating a new status for that task. This will remove all reports for sub tasks of that particular tasks from the dashboard.</li>
|
128
|
-
</ol>
|
129
|
-
<li>Managers than need to send back the edited status report via email. Like with time sheets, TaskJuggler will check them and return either an error message or a plain text version of the dashboard report of the manager.</li>
|
130
|
-
</ol>
|
131
|
-
<p class="manual">In addition to the plain text versions of the time sheet summaries and the dashboards, TaskJuggler provides support for publishing them as HTML pages from a web server.</p>
|
132
|
-
<h2 class="manual" id="Implementing_the_status_tracking_system">7.6 Implementing the status tracking system</h2>
|
133
|
-
<h3 class="manual" id="Prerequisites">7.6.1 Prerequisites</h3>
|
134
|
-
<p class="manual">The .tjp and .tji files of your project plan should be managed by a revision control system. TaskJuggler does not require a particular software, but for this manual we illustrate the implementation with <a href="http://subversion.apache.org" target="_top">Subversion</a>. It should be obvious how to do this with other software though.</p>
|
135
|
-
<p class="manual">All communication of time sheets and status sheets is done via email. TaskJuggler has built-in support for sending emails. To receive emails and to feed them to the correct program, TaskJuggler needs support from a mail transfer agent (MTA) and a mail processor. In this documentation we describe the setup with <a href="http://www.postfix.org/" target="_top">postfix</a> as MTA and <a href="http://www.procmail.org/" target="_top">procmail</a> as mail processor. These are standard parts of any Linux distribution and should be easy to setup. It's certainly possible to use other MTAs and mail processors, but this is not the scope of this manual.</p>
|
136
|
-
<p class="manual">Finally, you need a web server to publish your reports. This can really be any web server. The generated reports are static HTML pages that can simply be put into a directory that the web server is serving.</p>
|
137
|
-
<p class="manual">For the email based communication you need to provide email addresses for all project contributors. This is done in the project plan in the resource definition by using the <a href="email.html">email</a> attribute.</p>
|
138
|
-
<div class="manual" codesection="1"><pre class="manual" codesection="1">resource joe "Joe Average" {
|
139
|
-
email "joe@your_company.com
|
140
|
-
}
|
141
|
-
</pre></div>
|
142
|
-
<p class="manual">In this manual, we assume you have a dedicated Linux machine with a local user called <code class="manual">taskjuggler</code>. Your project files (*.tjp and *.tji) is under Subversion control and the taskjuggler user has a checked-out version in <code class="manual">/home/taskjuggler/projects/prj</code>. You can use another user name, another source code management system and even another operating system like Windows or MacOS. This is all possible, but not the scope of this manual.</p>
|
143
|
-
<p class="manual">To use the tracking system, you need to setup the <a href="Software.html#tj3d">taskjuggler server</a> to serve your project.</p>
|
144
|
-
<h3 class="manual" id="The_Time_Sheet_Template_Sender">7.6.2 The Time Sheet Template Sender</h3>
|
145
|
-
<p class="manual">Each project contributor needs to fill out a time sheet each week. To simplify the process each contributor will receive a template that already contains a lot of the information they need to provide.</p>
|
146
|
-
<p class="manual">To send out the time sheets, the command <code class="manual">tj3ts_sender</code> must be used. It will call <code class="manual">tj3client</code> with appropriate parameters. To use it, you need to have a properly configured daemon running and the appropriate project loaded. Then you need to add the configuration data for <code class="manual">tj3ts_sender</code> to your TaskJuggler configuration file. The time sheet related settings have their own top-level section:</p>
|
147
|
-
<div class="manual" codesection="1"><pre class="manual" codesection="1">_global:
|
148
|
-
emailDeliveryMethod: smtp
|
149
|
-
smtpServer: smtp.your_company.com
|
150
|
-
authKey: topsecret
|
151
|
-
scmCommand: "svn add %f ; svn commit -m '%m' %f"
|
152
|
-
projectId: prj
|
153
|
-
_timesheets:
|
154
|
-
senderEmail: 'TaskJuggler <timesheets@taskjuggler.your_company.com>'
|
155
|
-
_sender:
|
156
|
-
hideResource: '~isleaf()'
|
157
|
-
_summary:
|
158
|
-
sheetRecipients:
|
159
|
-
- team@your_company.com
|
160
|
-
digestRecipients:
|
161
|
-
- managers@your_company.com
|
162
|
-
</pre></div>
|
163
|
-
<p class="manual">The <code class="manual">emailDeliveryMethod</code> defines how emails should be sent. Use <code class="manual">smtp</code> to directly send the emails to an SMTP server. The <code class="manual">smtpServer</code> defines which host will handle your emails. Replace the host name with your local SMTP server. Alternatively, you can use the method <code class="manual">sendmail</code> on UNIX-like systems to pass the email to the sendmail tool. In this case, the <code class="manual">smtpServer</code> line can be omitted. The 'scmCommand' setting contains the command to add and commit new and old files to the source code management system. The command in this example works for Subversion.</p>
|
164
|
-
<p class="manual">The TaskJuggler server may serve multiple projects. With the <code class="manual">projectId</code> option you have to specify which project you would like to work with. <code class="manual">senderEmail</code> is the email address the time sheet infrastructure will use. Outgoing emails will have this address as sender so that replies will come back to this email address. We'll cover later how these are processed.</p>
|
165
|
-
<p class="manual">The hideResource option works similarly to the <a href="hideresource.html">hideresource</a> attribute in the report definitions of the project plan. It allows you to restrict the sending of time sheet templates to a subset of your defined resources. In this example, we only want to send templates to individual resources and not the teams you might have defined.</p>
|
166
|
-
<p class="manual">By default the time sheets will cover the week from Monday morning 0:00 to Sunday night 24:00. When called without the <code class="manual">-e</code> option, <code class="manual">tj3ts_sender</code> will send out templates for the current week.</p>
|
167
|
-
<p class="manual">To call the <code class="manual">tj3ts_sender</code> command you either need to be in the <code class="manual">/home/taskjuggler/projects/prj</code> directory or use the <code class="manual">-c</code> command line option to point it to the configuration file to use. In the latter case you also need to call it with the <code class="manual">-d</code> option to change the output directory to your project directory.</p>
|
168
|
-
<p class="manual">To test the command without sending out actual emails you can use the <code class="manual">--dryrun</code> option on the command line. To do its job, <code class="manual">tj3ts_sender</code> needs to generate a number of files and directories. A copy of the generated templates will be stored in <code class="manual">TimeSheetTemplates/<date>/</code> under <code class="manual"><resource_id>-date.tji</code>. <code class="manual"><date></code> is replaced with the end date of the reporting interval and <code class="manual"><resource_id></code> is the ID of the resource.</p>
|
169
|
-
<p class="manual">If you re-run the command existing templates will not be regenerated nor will they be sent out again. You can use the <code class="manual">-f</code> command line option to force them to be generated and sent out again.</p>
|
170
|
-
<p class="manual">The <code class="manual">tj3ts_sender</code> command will also add the reporting interval to a file called <code class="manual">TimeSheetTemplates/acceptable_intervals</code>. We'll cover this file later on when we deal with the time sheet receiver.</p>
|
171
|
-
<h3 class="manual" id="The_Time_Sheet_Receiver">7.6.3 The Time Sheet Receiver</h3>
|
172
|
-
<p class="manual">To receive the filled-out time sheets and to process them automatically you need to create a special user. TaskJuggler requires a number of email addresses to be setup to receive emails. We recommend to use the following setup. Create a special user called <code class="manual">taskjuggler</code> on a dedicated Linux machine. Then create the following email aliases for this user.</p>
|
173
|
-
<div class="manual" codesection="1"><pre class="manual" codesection="1">timesheets
|
174
|
-
timesheet-request
|
175
|
-
statussheets
|
176
|
-
statussheet-request
|
177
|
-
</pre></div>
|
178
|
-
<p class="manual">Your MTA must be configured to use procmail for email delivery. See the manual of your MTA for details on how to configure aliases and for using procmail for delivery. If you have a resident MTA expert you should ask him or her for support.</p>
|
179
|
-
<p class="manual">The next step is to configure procmail to forward the incoming emails to the appropriate TaskJuggler components. Create a file called <code class="manual">.procmailrc</code> in the home directory of the taskjuggler user and put in the following content:</p>
|
180
|
-
<p class="manual">For debugging and testing purposes, all incoming emails are archived in a directory called <code class="manual">Mail</code>. If there is no such directory in the taskjuggler home directory, you need to create it now.</p>
|
181
|
-
<div class="manual" codesection="1"><pre class="manual" codesection="1">PATH=$HOME/bin:/usr/bin:/bin:/usr/local/bin
|
182
|
-
MAILDIR=$HOME/Mail/
|
183
|
-
DEFAULT=$HOME/Mail/all
|
184
|
-
LOGFILE=$MAILDIR/procmail.log
|
185
|
-
SHELL=/bin/sh
|
186
|
-
PROJECTDIR=/home/taskjuggler/projects/prj
|
187
|
-
LANG=en_US.UTF-8
|
188
|
-
LC_ALL=en_US.UTF-8
|
189
|
-
# Archive all incoming emails in a file called all
|
190
|
-
:0 c
|
191
|
-
all
|
192
|
-
:0
|
193
|
-
* ^Subject:.*Out of Office.*
|
194
|
-
/dev/null
|
195
|
-
:0
|
196
|
-
* ^To:.*timesheets@taskjuggler\.your_company\.com
|
197
|
-
{
|
198
|
-
:0 c:
|
199
|
-
timesheets
|
200
|
-
:0 w: tj3ts_receiver.lock
|
201
|
-
| tj3ts_receiver --silent -c $PROJECTDIR/.taskjugglerrc -d $PROJECTDIR
|
202
|
-
:0
|
203
|
-
failed_sheets
|
204
|
-
}
|
205
|
-
:0
|
206
|
-
* ^To:.*timesheet-request@taskjuggler\.your_company\.com
|
207
|
-
{
|
208
|
-
ID=`formail -xSubject:`
|
209
|
-
:0 c:
|
210
|
-
timesheet-request
|
211
|
-
:0 w: tj3ts_sender.lock
|
212
|
-
| tj3ts_sender -r $ID -f --silent -c $PROJECTDIR/.taskjugglerrc -d $PROJECTDIR
|
213
|
-
}
|
214
|
-
:0
|
215
|
-
* ^To:.*statussheets@taskjuggler\.your_company\.com
|
216
|
-
{
|
217
|
-
:0 c:
|
218
|
-
statussheets
|
219
|
-
:0 w: tj3ss_receiver.lock
|
220
|
-
| tj3ss_receiver --silent -c $PROJECTDIR/.taskjugglerrc -d $PROJECTDIR
|
221
|
-
:0
|
222
|
-
failed_sheets
|
223
|
-
}
|
224
|
-
:0
|
225
|
-
* ^To:.*statussheet-request@taskjuggler\.your_company\.com
|
226
|
-
{
|
227
|
-
ID=`formail -xSubject:`
|
228
|
-
:0 c:
|
229
|
-
statussheet-request
|
230
|
-
:0 w: tj3ss_sender.lock
|
231
|
-
| tj3ss_sender -r $ID -f --silent -c $PROJECTDIR/.taskjugglerrc -d $PROJECTDIR
|
232
|
-
}
|
233
|
-
# Forward a copy to project admins
|
234
|
-
:0 c
|
235
|
-
! taskjuggler-admin@your_company.com
|
236
|
-
# Since we have archived a copy we can discard all mails here.
|
237
|
-
:0
|
238
|
-
/dev/null
|
239
|
-
</pre></div>
|
240
|
-
<p class="manual">This procmail configuration will cause incoming emails that are addressed to timesheets@taskjuggler.your_company.com to be forwarded to the <code class="manual">tj3ts_receiver</code> program. Of course you need to replace <i>your_company.com</i> with whatever domain you are using.</p>
|
241
|
-
<p class="manual">The received emails are then checked for syntactical and logical errors. If such are found, an email is sent back with an appropriate error message. The time sheet contains the resource ID of the reporting resource. As soon as this has been detected, all email communication will be sent to the email address in the project plan. Only when the resource ID could not be identified, the sender of the email will get the answer. This was implemented as a security measure so other users cannot easily retrieve project related information from other users.</p>
|
242
|
-
<p class="manual">Correct time sheets are archived in the <code class="manual">TimeSheets/<date>/</code> directory where <code class="manual"><date></code> is the end date of the reporting period. If the directory does not exist yet, it will be created. The file will be called <code class="manual"><resource_id>-<date>.tji</code>. If a SCM command was specified, the file will be automatically put under revision control. Subsequent submission of the same time sheet will simply overwrite the earlier submissions. The file name will also be added to a file called <code class="manual">all.tji</code> which consists of include statements of all time sheet files in the directory. There also is an automatically maintained file <code class="manual">all.tji</code> in the <code class="manual">TimeSheets</code> directory that includes all the <code class="manual"><date>/all.tji</code> files. To add all the submitted time sheets to your project plan, simply include the top-level <code class="manual">all.tji</code>.</p>
|
243
|
-
<p class="manual">
|
244
|
-
<code class="manual">tj3ts_receiver</code> will only accept time sheets for the time periods listed in <code class="manual">TimeSheetTemplates/acceptable_intervals</code>. <code class="manual">tj3ts_sender</code> will automatically enable the current period when it sends out the templates. If you want to stop receiving time sheet updates for a certain period, simply remove the period from the <code class="manual">acceptable_intervals</code> file.</p>
|
245
|
-
<h3 class="manual" id="Time_Sheet_Template_Requests">7.6.4 Time Sheet Template Requests</h3>
|
246
|
-
<p class="manual">Normally, the time sheets are sent out once a week automatically. In case a project contributor leaves earlier for vacation or has lost the template, they can request the template for the current week again.</p>
|
247
|
-
<p class="manual">By sending an email to <code class="manual">timesheet-request@taskjuggler.your_company.com</code> and putting their resource ID in the subject of the email, they will receive an email with the time sheet template. The email will be sent to the email address in the project plan, not the sender of the request email.</p>
|
248
|
-
<h3 class="manual" id="Time_Sheet_Summaries">7.6.5 Time Sheet Summaries</h3>
|
249
|
-
<p class="manual">All time sheets should be successfully submitted by Sunday 24:00. After this deadline, your can send out a summary of all submitted time sheets. This summary will also contain a list of those project contributors that have not submitted their time sheet. These individuals will also get a reminder to submit their time sheets immediately.</p>
|
250
|
-
<p class="manual">To send out the summary report, the program <code class="manual">tj3ts_summary</code> is used. Before you can use it, you need to add a few settings to the TaskJuggler configuration file.</p>
|
251
|
-
<div class="manual" codesection="1"><pre class="manual" codesection="1">_global:
|
252
|
-
emailDeliveryMethod: smtp
|
253
|
-
smtpServer: smtp.your_company.com
|
254
|
-
authKey: topsecret
|
255
|
-
projectId: prj
|
256
|
-
_timesheets:
|
257
|
-
senderEmail: 'TaskJuggler <timesheets@taskjuggler.your_company.com>'
|
258
|
-
_summary:
|
259
|
-
sheetRecipients:
|
260
|
-
- team@your_company.com
|
261
|
-
digestRecipients:
|
262
|
-
- managers@your_company.com
|
263
|
-
</pre></div>
|
264
|
-
<p class="manual">
|
265
|
-
<code class="manual">sheetRecipients</code> is a list of email addresses that should receive a copy of the submitted time sheet. Each email address must be put on a separate, properly indented line that starts with a dash followed by a space. The emails will have the email of the original time sheet author as sender address.</p>
|
266
|
-
<h3 class="manual" id="Updating_the_Project_Plan">7.6.6 Updating the Project Plan</h3>
|
267
|
-
<p class="manual">The time sheets contain two kind of information that are intended for two sets of audiences. Project managers will be interested primarily in the scheduling related information but surely like to look at the task status as well.</p>
|
268
|
-
<p class="manual">Managers responsible for certain parts of the project will be primarily interested in the status reports for the ongoing tasks. We'll cover the processing of the status information in the next sections.</p>
|
269
|
-
<p class="manual">This section deals with the processing of the scheduling related information. Project contributors can specify several deviations of the current project plan.</p>
|
270
|
-
<ul><li>Task may need more effort or time than was originally planned for.</li></ul>
|
271
|
-
<ul><li>They may have not worked the planned amounts on the tasks.</li></ul>
|
272
|
-
<ul><li>They may have started to work on new tasks that are not even in the project plan. The is usually a sign of project discipline and should be avoided. But in reality this will happen and TaskJuggler is able to handle it.</li></ul>
|
273
|
-
<p class="manual">TaskJuggler can print a summary of all the deltas between the plan and the actual reports in the time sheets.</p>
|
274
|
-
<div class="manual" codesection="1"><pre class="manual" codesection="1">tj3 --warn-ts-deltas YourProject.tjp TimeSheets/all.tji
|
275
|
-
</pre></div>
|
276
|
-
<p class="manual">In this example call <code class="manual">YourProject.tjp</code> is your main project file and all submitted time sheets are included by TimeSheets/all.tji. This file and all subsequent include files are automatically generated and updated by <code class="manual">tj3ts_receiver</code>.</p>
|
277
|
-
<p class="manual">Project managers should use the printed output of this command to update the project plan accordingly. The specified deltas of existing tasks must be updated in the main project plan. For new tasks in the time sheets, the task has to be created in the project plan. Then the newtask statement in the time sheet needs to be converted into a normal task report.</p>
|
278
|
-
<div class="manual" codesection="1"><pre class="manual" codesection="1"> newtask some.task.id "My new task" {
|
279
|
-
...
|
280
|
-
}
|
281
|
-
</pre></div>
|
282
|
-
<p class="manual">Needs to be converted into</p>
|
283
|
-
<div class="manual" codesection="1"><pre class="manual" codesection="1"> task some.task.id {
|
284
|
-
...
|
285
|
-
}
|
286
|
-
</pre></div>
|
287
|
-
<p class="manual">The task ID in the status sheet must match the newly created task in the project plan.</p>
|
288
|
-
<p class="manual">To check that all deltas were properly processed, re-run the check command.</p>
|
289
|
-
<div class="manual" codesection="1"><pre class="manual" codesection="1">tj3 --warn-ts-deltas YourProject.tjp TimeSheets/all.tji
|
290
|
-
</pre></div>
|
291
|
-
<p class="manual">You may also want to remove the interval from the <code class="manual">TimeSheetTemplates/acceptable_intervals</code> file to prevent further submissions of time sheets for this time period.</p>
|
292
|
-
<h2 class="manual" id="Recording_actual_Resource_Usage">7.7 Recording actual Resource Usage</h2>
|
293
|
-
<p class="manual">To ensure that future changes won't change the past of the project, we need to freeze the history of the project. History in this context means which resource worked on what task from when to when. Since TaskJuggler cannot know what level of detail you want to include in the reports, this information has to be recorded with the highest possible accuracy. This means that we have to capture the exact start and end dates for every period that a resource worked on a task.</p>
|
294
|
-
<p class="manual">Unless you use some external time tracking system to capture this information and export it to TaskJuggler, you probably want TaskJuggler to generate this data for you based on the plan information.</p>
|
295
|
-
<p class="manual">Before you can freeze that past part of your project, you need to tell TaskJuggler which scenario should be used for tracking the actual progress. See the <a href="trackingscenario.html">trackingscenario</a> documentation for more details on this. Before you freeze your project for the first time, you should make sure that the current date is still before the project start. If that is not the case, use the <a href="now.html">now</a> attribute to set the current date to the project start:</p>
|
296
|
-
<div class="manual" codesection="1"><pre class="manual" codesection="1">now ${projectstart}
|
297
|
-
</pre></div>
|
298
|
-
<p class="manual">Once you have frozen the project for the first time, you should remove the <a href="now.html">now</a> attribute again. It will be automatically updated.</p>
|
299
|
-
<p class="manual">To freeze your project up to a certain date, you can use the following command:</p>
|
300
|
-
<div class="manual" codesection="1"><pre class="manual" codesection="1"> tj3 --freeze yourproject.tjp --freezedate YYYY-MM-DD
|
301
|
-
</pre></div>
|
302
|
-
<p class="manual">This will generate two files, <code class="manual">yourproject-header.tji</code> and <code class="manual">yourproject-bookings.tji</code>. The header files contains the date of the freeze as a <a href="now.html">now</a> attribute. You must <a href="include.project.html">
|
303
|
-
include</a> this file at the end of your project header section.</p>
|
304
|
-
<p class="manual">The bookings file contains the resource assignment data. It usually contains many <a href="booking.task.html">booking</a> entries that look similar to this:</p>
|
305
|
-
<div class="manual" codesection="1"><pre class="manual" codesection="1"> supplement task t {
|
306
|
-
booking r 2010-02-19-09:00-+0000 + 3.0h,
|
307
|
-
2010-02-19-13:00-+0000 + 5.0h,
|
308
|
-
2010-02-22-09:00-+0000 + 3.0h,
|
309
|
-
2010-02-22-13:00-+0000 + 5.0h,
|
310
|
-
}
|
311
|
-
</pre></div>
|
312
|
-
<p class="manual">The booking file must be <a href="include.properties.html">included</a> at the end of your main project file.</p>
|
313
|
-
<p class="manual">In case there are still some discrepancies between the booking data and the actual assignments of the resources, you can edit the booking file to correct the data.</p>
|
314
|
-
<p class="manual">The next time you run <code class="manual">tj3</code> with your project, all assignments prior to the date in the project header file will be taken only from the bookings file. All assignments after this date will be determined by the scheduler according to your provided constraints.</p>
|
315
|
-
<p class="manual">When you run <code class="manual">tj3 --freeze</code> again, it will update the header and booking files. Since you have included your booking file, any modifications you have made will be preserved. That is, the actual data will be preserved, not the formatting since the file will be completely re-generated again.</p>
|
316
|
-
<h3 class="manual" id="Status_Sheets">7.7.1 Status Sheets</h3>
|
317
|
-
<p class="manual">For larger projects with many contributors the flood of time sheets can become hard to manage. Higher level managers are usually not interested in all the details as long as the project executes according to plan. To keep the managers on each level informed with the proper amount and content TaskJuggler provides the concept of status sheets.</p>
|
318
|
-
<p class="manual">To use status sheets, the reporting chains must be reflected in the task hierarchy of the project. The <a href="responsible.html">responsible</a> attribute must be used to assign tasks to managers. Leaf tasks or whole sub trees must be assigned to the lowest level of management. The responsibility for one or more level of parent tasks must be assigned to the next level of managers and so on.</p>
|
319
|
-
<p class="manual">When all time sheets have been submitted, the reports for all tasks are sent to the responsible managers for these tasks. The information is generated by the <code class="manual">tj3ss_sender</code> program and is called a status report template. Each manager will get one template that includes the status reports for the tasks they are responsible for.</p>
|
320
|
-
<p class="manual">It's the managers task to prepare the report for the next level of management. To do this, the manager has 3 options:</p>
|
321
|
-
<ul><li>Forward the status report of a task directly to the next level. The original authorship can be kept or removed. The content can also be edited if needed.</li></ul>
|
322
|
-
<ul><li>Similar reports for a task or a whole task sub-tree can be combined into just one report. To achieve this a new task report must be created for the parent tasks of these lower-level tasks. This will replace all reports for sub tasks with this newly created report.</li></ul>
|
323
|
-
<ul><li>A task report can simply be removed from the status report.</li></ul>
|
324
|
-
<p class="manual">The status sheet template is designed to perform all three actions in a simple manner. The original reports are commented out. To remove a report, it needs to be uncommented and the headline must be set to an empty string. To change a report, the text must be edited after the comment marks have been removed. To create a summary report for a group of tasks, a new report for the common parent task must be created.</p>
|
325
|
-
<h3 class="manual" id="The_Status_Sheet_Template_Sender">7.7.2 The Status Sheet Template Sender</h3>
|
326
|
-
<p class="manual">To send out the time sheets, the command <code class="manual">tj3ts_sender</code> must be used. It will use the <code class="manual">tj3client</code> program to retrieve the necessary data from the TaskJuggler server.</p>
|
327
|
-
<p class="manual">Before the program can be used, a new section must be added to the TaskJuggler configuration file.</p>
|
328
|
-
<div class="manual" codesection="1"><pre class="manual" codesection="1">_statussheets:
|
329
|
-
projectId: prj
|
330
|
-
_sender:
|
331
|
-
senderEmail: 'TaskJuggler <statussheets@taskjuggler.amd.com>'
|
332
|
-
hideResource: '~(isleaf() & manager)'
|
333
|
-
</pre></div>
|
334
|
-
<p class="manual">If you are using status sheets for only one level of management you can hardcode that like in the example above. For multiple level of management you need to specify which group of managers should the report templates be generated for and pass that information on the command line. Use the <code class="manual">--hideresource</code> option to specify a logical expression to filter away the resources you don't want templates to be generated for. The easiest way to achieve this is by using unique flags for each management level. In the example above we assume you have assigned the flag <code class="manual">manager</code> to each first-level manager.</p>
|
335
|
-
<p class="manual">For the override mechanism to work, the manager reports must always have a newer date than the original report. So, the end date of the first-level manager status sheets must be after the time sheet interval. The second-level mangers must use a later date than the first-level managers and so on.</p>
|
336
|
-
<p class="manual">By default <code class="manual">tj3ss_sender</code> will use the next Wednesday as end date. If you need a different date, you must use the <code class="manual">-e</code> option to specify that date.</p>
|
337
|
-
<p class="manual">Let's say you have two levels of managers that use status sheets. The time sheets are due midnight on Sunday. The project managers can work in the deltas and new tasks on Monday. After that you generate the reports for the first level managers with and end date of Wednesday. This implies a submission deadline of midnight on Tuesday. The second level manager templates will be sent out right after this deadline with an end date of Thursday. That would be the deadline for the second-level managers. The final report can than be generated by TaskJuggler automatically right after that deadline.</p>
|
338
|
-
<h3 class="manual" id="Requesting_Status_Sheet_Templates">7.7.3 Requesting Status Sheet Templates</h3>
|
339
|
-
<p class="manual">Usually the status sheets templates should be send out automatically. But sometimes a manager needs them earlier or needs an updated version due to a late incoming downstream report.</p>
|
340
|
-
<p class="manual">The above provided procmail configuration supports the generation of status sheets templates on request by email.</p>
|
341
|
-
<p class="manual">By sending an email to statussheet-request@taskjuggler.your_company.com and putting their resource ID in the subject of the email, managers will receive an email with the status sheet template. The email will be sent to the email address in the project plan, not the sender of the request email.</p>
|
342
|
-
<p class="manual">The setup described here only works for first-level managers. By adding more email addresses, this can easily be extended for more levels of management. You just need to make sure that <code class="manual">tj3ss_sender</code> is called with the proper parameters to change the resource selection and end date.</p>
|
343
|
-
<h3 class="manual" id="The_Status_Sheet_Receiver">7.7.4 The Status Sheet Receiver</h3>
|
344
|
-
<p class="manual">Similarly to the time sheets, the completed status sheets must be send back by email. We already described how the necessary email aliases should be configured. For status sheets the address <code class="manual">statussheets@taskjuggler.your_company.com</code> can be used.</p>
|
345
|
-
<p class="manual">The incoming emails will then be forwarded to the <code class="manual">tj3ss_receiver</code> program that will process them. To use it, you first need to add the following settings to the <code class="manual">statussheets</code> section of your TaskJuggler configuration file:</p>
|
346
|
-
<div class="manual" codesection="1"><pre class="manual" codesection="1">_statussheets:
|
347
|
-
projectId: prj
|
348
|
-
_receiver:
|
349
|
-
senderEmail: 'TaskJuggler <statussheets@taskjuggler.amd.com>'
|
350
|
-
</pre></div>
|
351
|
-
<p class="manual">This will set the sender email of outgoing emails. Every incoming status sheet will be checked and either an error message will be returned or a consolidated status report for all tasks that the resource is responsible for. This report can either be directly forwarded to the next level manager or interested groups, or an HTML report can be generated and shared. This is especially useful in case the next level management is not getting status sheet templates.</p>
|
352
|
-
<p class="manual">Usually status reports only contain task reports for the current reporting period. But if there were tasks with an elevated status, these will be carried forward until they were removed by providing an empty headline or replaced with a new report for the same task or a parent task.</p>
|
353
|
-
</div></div>
|
354
|
-
<br/>
|
355
|
-
<hr/>
|
356
|
-
<table style="width:90%; margin-left:5%; margin-right:5%"><tr>
|
357
|
-
<td style="text-align:left; width:35%;"><< <a href="Software.html">Software</a> <<</td>
|
358
|
-
<td style="text-align:center; width:30%;"><a href="toc.html">Table Of Contents</a></td>
|
359
|
-
<td style="text-align:right; width:35%;">>> <a href="TaskJuggler_Internals.html">TaskJuggler_Internals</a> >></td>
|
360
|
-
</tr></table>
|
361
|
-
<hr/>
|
362
|
-
<br/>
|
363
|
-
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
364
|
-
</body>
|
365
|
-
</html>
|
@@ -1,64 +0,0 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<!-- This file has been generated by tj3man v3.8.1 -->
|
3
|
-
<html lang="en" xml:lang="en">
|
4
|
-
<head>
|
5
|
-
<title>Getting_Started</title>
|
6
|
-
<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
|
7
|
-
<meta content="IE=9" http-equiv="X-UA-Compatible"/>
|
8
|
-
</head>
|
9
|
-
<link href="css/tjmanual.css" rel="stylesheet" type="text/css"></link>
|
10
|
-
<body>
|
11
|
-
<div align="center">
|
12
|
-
<h3 align="center">The TaskJuggler User Manual</h3>
|
13
|
-
<em align="center">Project Management beyond Gantt Chart Drawing</em>
|
14
|
-
</div>
|
15
|
-
<br/>
|
16
|
-
<hr/>
|
17
|
-
<table style="width:90%; margin-left:5%; margin-right:5%"><tr>
|
18
|
-
<td style="text-align:left; width:35%;"><< <a href="How_To_Contribute.html">How_To_Contribute</a> <<</td>
|
19
|
-
<td style="text-align:center; width:30%;"><a href="toc.html">Table Of Contents</a></td>
|
20
|
-
<td style="text-align:right; width:35%;">>> <a href="Tutorial.html">Tutorial</a> >></td>
|
21
|
-
</tr></table>
|
22
|
-
<hr/>
|
23
|
-
<br/>
|
24
|
-
<div style="width:90%; margin-left:5%; margin-right:5%"><div class="manual">
|
25
|
-
<h1 class="manual" id="Getting_Started">3 Getting Started</h1>
|
26
|
-
<h2 class="manual" id="Basics">3.1 Basics</h2>
|
27
|
-
<p class="manual">TaskJuggler uses one or more text files to describe a project. The main project should be placed in a file with the .tjp extension. This main project may include other files. Such included files must have file names with a <code class="manual">.tji</code> extension.</p>
|
28
|
-
<p class="manual">The graphical user interface from the 2.x version has not been ported to TaskJuggler 3.x yet. So all work with TaskJuggler needs to be done in your favorite text editor and in a command shell.</p>
|
29
|
-
<p class="manual">The commandline version of TaskJuggler works like a compiler. You provide the source files, it computes the contents and creates the output files. Let's say you have a project file called <code class="manual">AcSo.tjp</code>. It contains the tasks of your project and their dependencies. To schedule the project and create report files you have to ask TaskJuggler to process it.</p>
|
30
|
-
<div class="manual" codesection="1"><pre class="manual" codesection="1">tj3 AcSo.tjp
|
31
|
-
</pre></div>
|
32
|
-
<p class="manual">TaskJuggler will try to schedule all tasks with the specified conditions and generate the reports that were requested with the <a href="taskreport.html">taskreport</a>, <a href="resourcereport.html">resourcereport</a> or other report properties in the input file. The report files will be generated in the current directory or relative to it.</p>
|
33
|
-
<p class="manual">If you specify file names in a project file, you need to use the <code class="manual">/</code> as directory separator. This way, projects are portable across all operating systems. Do not use the <code class="manual">\</code> or <code class="manual">:</code> that are used on some operating systems.</p>
|
34
|
-
<h2 class="manual" id="Structure_of_a_TJP_File">3.2 Structure of a TJP File</h2>
|
35
|
-
<p class="manual">Each TaskJuggler project consists of one or more text files. There is always a main project file that may <a href="include.properties.html">include</a> other files. The main file name should have a <code class="manual">.tjp</code> suffix, the included files must have a <code class="manual">.tji</code> suffix.</p>
|
36
|
-
<p class="manual">Every project must start with a <a href="project.html">project header</a>. The project header must be in the main project file. All other elements may be put into include files. The project header must then be followed by any number of project properties such as <a href="account.html">
|
37
|
-
accounts</a>, <a href="resource.html">resources</a>, <a href="task.html">tasks</a> and reports. Each project must have at least one task defined and should have at least one report. Properties don't have to be listed in a particular order, but may have interdependencies that require such an order. If you want to assign a resource to work on a task, this resource needs to be defined first. It is therefore recommended to define them in the following sequence:</p>
|
38
|
-
<ul>
|
39
|
-
<li><a href="macro.html">macros</a></li>
|
40
|
-
<li><a href="flags.html">flags</a></li>
|
41
|
-
<li><a href="account.html">accounts</a></li>
|
42
|
-
<li><a href="shift.html">shifts</a></li>
|
43
|
-
<li><a href="vacation.html">vacations</a></li>
|
44
|
-
<li><a href="resource.html">resources</a></li>
|
45
|
-
<li><a href="task.html">tasks</a></li>
|
46
|
-
<li><a href="accountreport.html">accountreports</a></li>
|
47
|
-
<li><a href="resourcereport.html">resourcereports</a></li>
|
48
|
-
<li><a href="taskreport.html">taskreports</a></li>
|
49
|
-
<li><a href="textreport.html">textreports</a></li>
|
50
|
-
<li><a href="export.html">exports</a></li>
|
51
|
-
</ul>
|
52
|
-
</div></div>
|
53
|
-
<br/>
|
54
|
-
<hr/>
|
55
|
-
<table style="width:90%; margin-left:5%; margin-right:5%"><tr>
|
56
|
-
<td style="text-align:left; width:35%;"><< <a href="How_To_Contribute.html">How_To_Contribute</a> <<</td>
|
57
|
-
<td style="text-align:center; width:30%;"><a href="toc.html">Table Of Contents</a></td>
|
58
|
-
<td style="text-align:right; width:35%;">>> <a href="Tutorial.html">Tutorial</a> >></td>
|
59
|
-
</tr></table>
|
60
|
-
<hr/>
|
61
|
-
<br/>
|
62
|
-
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
63
|
-
</body>
|
64
|
-
</html>
|
@@ -1,95 +0,0 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<!-- This file has been generated by tj3man v3.8.1 -->
|
3
|
-
<html lang="en" xml:lang="en">
|
4
|
-
<head>
|
5
|
-
<title>How_To_Contribute</title>
|
6
|
-
<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
|
7
|
-
<meta content="IE=9" http-equiv="X-UA-Compatible"/>
|
8
|
-
</head>
|
9
|
-
<link href="css/tjmanual.css" rel="stylesheet" type="text/css"></link>
|
10
|
-
<body>
|
11
|
-
<div align="center">
|
12
|
-
<h3 align="center">The TaskJuggler User Manual</h3>
|
13
|
-
<em align="center">Project Management beyond Gantt Chart Drawing</em>
|
14
|
-
</div>
|
15
|
-
<br/>
|
16
|
-
<hr/>
|
17
|
-
<table style="width:90%; margin-left:5%; margin-right:5%"><tr>
|
18
|
-
<td style="text-align:left; width:35%;"><< <a href="Installation.html">Installation</a> <<</td>
|
19
|
-
<td style="text-align:center; width:30%;"><a href="toc.html">Table Of Contents</a></td>
|
20
|
-
<td style="text-align:right; width:35%;">>> <a href="Getting_Started.html">Getting_Started</a> >></td>
|
21
|
-
</tr></table>
|
22
|
-
<hr/>
|
23
|
-
<br/>
|
24
|
-
<div style="width:90%; margin-left:5%; margin-right:5%"><div class="manual">
|
25
|
-
<h2 class="manual" id="How_to_Contribute">2.8 How to Contribute</h2>
|
26
|
-
<h3 class="manual" id="Why_contribute">2.8.1 Why contribute?</h3>
|
27
|
-
<p class="manual">TaskJuggler is an Open Source Project. It was developed by volunteers mostly in their spare time. Made available under the GNU General Public license and similar licenses, TaskJuggler can be shared and used free of charge by anybody who respects the license conditions. Does that mean you can use it without worrying about anything? Clearly not! Though users have no legal obligation to contribute, you should feel a moral obligation to support Open Source in whatever way you can. This can range from helping out other users with their first Linux installation to actively contributing to the TaskJuggler Project, not just as a programmer. The following section describes, how you can contribute to any of the components that are part of the TaskJuggler software releases.</p>
|
28
|
-
<h3 class="manual" id="Preparing_a_contribution">2.8.2 Preparing a contribution</h3>
|
29
|
-
<p class="manual">All TaskJuggler development is coordinated using the <a href="https://github.com/taskjuggler/TaskJuggler/issues" target="_top">github source code management platform</a>. All changes must be submitted using Git github so that we can track the authorship of each submission. There is <a href="http://help.github.com/" target="_top">excellent documentation</a> available on how to use github.</p>
|
30
|
-
<p class="manual">Make sure you have followed the steps described in the <a href="Installation.html#Installation_Steps_for_Developers" target="_top">Installation Steps for Developers</a> chapter.</p>
|
31
|
-
<p class="manual">If you have never used Git before, you need to configure it first. You need to set your name and email address. This information will be present in all patches that you submit.</p>
|
32
|
-
<div class="manual" codesection="1"><pre class="manual" codesection="1">git config --global user.name "Your Name"
|
33
|
-
git config --global user.email "firstname.lastname@domain.org"
|
34
|
-
</pre></div>
|
35
|
-
<p class="manual">Do not use the development snapshots or send your patches as plain diff files. We'd like to ensure that we know who contributed to TaskJuggler. Therefor we are only accepting signed-off git patches with full user names and valid email addresses.</p>
|
36
|
-
<p class="manual">Next you need to find the files where you want to make your modifications. Sometimes files will be generated from other files. Do not change those generated files. Your changes will be overwritten the next time you call the make utility.</p>
|
37
|
-
<h3 class="manual" id="Creating_a_Patch">2.8.3 Creating a Patch</h3>
|
38
|
-
<p class="manual">When you are done with your changes, it's a good idea to test them. In the taskjuggler directory run the following commands.</p>
|
39
|
-
<div class="manual" codesection="1"><pre class="manual" codesection="1">cd taskjuggler3
|
40
|
-
rake test
|
41
|
-
rake spec
|
42
|
-
rake manual
|
43
|
-
rake gem
|
44
|
-
</pre></div>
|
45
|
-
<p class="manual">If there are no errors, you can check or test the result. If everything works fine, you can lock at your changes again.</p>
|
46
|
-
<div class="manual" codesection="1"><pre class="manual" codesection="1">git diff
|
47
|
-
</pre></div>
|
48
|
-
<p class="manual">The git-diff utility performs a line-by-line comparison of the files against the latest version in you local repository. Try to only make changes that have an impact on the generated files. Do not change indentation or line wrapping of paragraphs unless absolutely necessary. These kinds of changes increase the size of diff files and make it much harder to evaluate the patches. When making changes to the program code, please use exactly the same coding style as the rest of the code. If your contribution is large enough to justify a copyright claim, please indicate what copyright you claim in the patch. For modifications to existing files, we will assume that your contribution falls under the same license as the modified file. All new files will need to contain a license declaration, preferably GPL version 2. In any case, the license must be <a href="http://www.opensource.org/licenses" target="_top">an OSI accepted license</a> and be compatible with the GPL version 2 used by the rest of the project.</p>
|
49
|
-
<p class="manual">Review all changes carefully. In case you have created new source files, you need to register them with your repository.</p>
|
50
|
-
<div class="manual" codesection="1"><pre class="manual" codesection="1">git add FILENAME
|
51
|
-
</pre></div>
|
52
|
-
<p class="manual">If you think you are done, you can commit your changes to your local repository.</p>
|
53
|
-
<div class="manual" codesection="1"><pre class="manual" codesection="1">git commit -a -s
|
54
|
-
</pre></div>
|
55
|
-
<p class="manual">The -s parameter is very important. We will only accept signed-off patches. By signing off on your patches you confirm that you wrote the code and have the right to pass it on as a patch. See <a href="http://gerrit.googlecode.com/svn/documentation/2.0/user-signedoffby.html" target="_top">this document</a> for more information!</p>
|
56
|
-
<p class="manual">Please include a meaningful commit message. The first line (header line) should be prefixed by <code class="manual">Fix:</code> for bug fixes or <code class="manual">New:</code> for new features. This is used to automatically generate the change log from one release to another. So a bug that has been introduced after the last release and is fixed before the next release does not need to be included in the changelog. For those cases, don't use any prefix.</p>
|
57
|
-
<p class="manual">After the header line leave a blank line and include one or more paragraphs with more detailed information about the patch. This information will also be included in the the change log if the header line has a prefix.</p>
|
58
|
-
<p class="manual">If you fix a bug that was reported by somebody else, please also include a reported-by line:</p>
|
59
|
-
<div class="manual" codesection="1"><pre class="manual" codesection="1">Reported-by: whoever-reported-the-bug
|
60
|
-
</pre></div>
|
61
|
-
<p class="manual">Then push it into your forked github repository.</p>
|
62
|
-
<div class="manual" codesection="1"><pre class="manual" codesection="1">git push
|
63
|
-
</pre></div>
|
64
|
-
<p class="manual">The final step is to send us a <a href="http://help.github.com/pull-requests/" target="_top">pull request</a> for your changes.</p>
|
65
|
-
<h3 class="manual" id="Contributing_to_the_User_Manual">2.8.4 Contributing to the User Manual</h3>
|
66
|
-
<p class="manual">The user manual is currently a rough port of the 2.x manual. It contains many inaccuracies and does not provide much more than a tutorial and a syntax reference. Any help to turn this into a real user manual is greatly appreciated.</p>
|
67
|
-
<p class="manual">The manual is composed from 3 different sources.</p>
|
68
|
-
<ol>
|
69
|
-
<li>The sources for normal pages are in MediaWiki format and can be found in the <code class="manual">manual</code> directory of the source distribution.</li>
|
70
|
-
<li>The information in the syntax reference is extracted from the TJP parser source code. It can be found in the file <code class="manual">lib/TjpSyntaxRules.rb</code>. You can ignore all but the <code class="manual">doc(...)</code>, <code class="manual">arg(...)</code> and <code class="manual">example(...)</code> sections.</li>
|
71
|
-
<li>The TJP syntax examples are in the <code class="manual">test/TestSuite/Syntax/Correct</code> directory.</li>
|
72
|
-
</ol>
|
73
|
-
<p class="manual">The following command build the HTML files for the manual in the <code class="manual">manual/html</code> directory.</p>
|
74
|
-
<div class="manual" codesection="1"><pre class="manual" codesection="1">rake manual
|
75
|
-
</pre></div>
|
76
|
-
<h3 class="manual" id="Contributing_to_the_Test_Suite">2.8.5 Contributing to the Test Suite</h3>
|
77
|
-
<p class="manual">The test suite can be found in the <code class="manual">test</code> and <code class="manual">spec</code> directories. It contains unit and system tests but is very rudimentary at the moment. Adding more system tests to the test/CSV-Report directory is probably the best place to start. Originally, TaskJuggler used classic Ruby unit tests, but a migration to <a href="http://rspec.info/|RSpec-2" target="_top">http://rspec.info/|RSpec-2</a> is in the works now. New tests should be written as RSpec tests unless they require infrastructure only available in the <code class="manual">test</code> directory.</p>
|
78
|
-
<h3 class="manual" id="Contributing_to_the_Ruby_code">2.8.6 Contributing to the Ruby code</h3>
|
79
|
-
<p class="manual">For the first stable TaskJuggler release we have most 2.x features supported. The few things that break backwards compatibility are documented in the <a href="TaskJuggler_2x_Migration.html">TaskJuggler_2x_Migration</a> section.</p>
|
80
|
-
<p class="manual">In general, patches are very welcome. Please follow the coding style and naming conventions used in the existing code. Larger changes should be preceded by a discussion in the <a href="http://www.taskjuggler.org/contact.html" target="_top">TaskJuggler Developer Forum</a>.</p>
|
81
|
-
<h3 class="manual" id="Some_final_words_to_Contributors">2.8.7 Some final words to Contributors</h3>
|
82
|
-
<p class="manual">We do welcome all contributions, but please understand that we reserve the right to reject any contribution that does not follow the above guidelines or otherwise conflicts with the goals of the TaskJuggler team. It is a good idea to contact the team prior to making any larger efforts.</p>
|
83
|
-
</div></div>
|
84
|
-
<br/>
|
85
|
-
<hr/>
|
86
|
-
<table style="width:90%; margin-left:5%; margin-right:5%"><tr>
|
87
|
-
<td style="text-align:left; width:35%;"><< <a href="Installation.html">Installation</a> <<</td>
|
88
|
-
<td style="text-align:center; width:30%;"><a href="toc.html">Table Of Contents</a></td>
|
89
|
-
<td style="text-align:right; width:35%;">>> <a href="Getting_Started.html">Getting_Started</a> >></td>
|
90
|
-
</tr></table>
|
91
|
-
<hr/>
|
92
|
-
<br/>
|
93
|
-
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
94
|
-
</body>
|
95
|
-
</html>
|