OSDN Git Service

- Added better status reporting functions.
authorcs <cs@e1914e07-63f8-0310-9059-d6d858d7cdca>
Mon, 30 Dec 2002 08:19:45 +0000 (08:19 +0000)
committercs <cs@e1914e07-63f8-0310-9059-d6d858d7cdca>
Mon, 30 Dec 2002 08:19:45 +0000 (08:19 +0000)
- Clean up lib API and add support for Doxygen.

git-svn-id: https://www.taskjuggler.org/svn/taskjuggler/trunk@389 e1914e07-63f8-0310-9059-d6d858d7cdca

61 files changed:
Mainpage.dox [new file with mode: 0644]
Makefile.am
TODO
TestSuite/HTML-Reports/html-test-macros.tjsp
TestSuite/HTML-Reports/htmlresourcereport-1-Reference.html
TestSuite/HTML-Reports/htmlresourcereport-2-Reference.html
TestSuite/HTML-Reports/htmltaskreport-1-Reference.html
TestSuite/HTML-Reports/htmltaskreport-2-Reference.html
TestSuite/HTML-Reports/progress-1-Reference.html [new file with mode: 0644]
TestSuite/HTML-Reports/progress-1.tjp [new file with mode: 0644]
TestSuite/HTML-Reports/progress-2-Reference.html [new file with mode: 0644]
TestSuite/HTML-Reports/progress-2.tjp [new file with mode: 0644]
TestSuite/HTML-Reports/progress-3-Reference.html [new file with mode: 0644]
TestSuite/HTML-Reports/progress-3.tjp [new file with mode: 0644]
TestSuite/HTML-Reports/progress-4-Reference.html [new file with mode: 0644]
TestSuite/HTML-Reports/progress-4.tjp [new file with mode: 0644]
TestSuite/HTML-Reports/progress-5-Reference.html [new file with mode: 0644]
TestSuite/HTML-Reports/progress-5.tjp [new file with mode: 0644]
admin/Doxyfile.am
admin/Doxyfile.global
configure.in.in
docs/en/changelog.sgml
docs/en/reference.sgml
taskjuggler/Account.cpp
taskjuggler/Account.h
taskjuggler/Allocation.cpp
taskjuggler/CoreAttributes.cpp
taskjuggler/CoreAttributes.h
taskjuggler/Doxyfile [new file with mode: 0644]
taskjuggler/ExportReport.cpp
taskjuggler/FileInfo.cpp [new file with mode: 0644]
taskjuggler/FileInfo.h [new file with mode: 0644]
taskjuggler/HTMLAccountReport.h
taskjuggler/HTMLResourceReport.cpp
taskjuggler/HTMLResourceReport.h
taskjuggler/HTMLTaskReport.cpp
taskjuggler/HTMLTaskReport.h
taskjuggler/HTMLWeeklyCalendar.cpp
taskjuggler/MacroTable.h
taskjuggler/Makefile.am
taskjuggler/Project.cpp
taskjuggler/Project.h
taskjuggler/ProjectFile.cpp
taskjuggler/ProjectFile.h
taskjuggler/Report.cpp
taskjuggler/Report.h
taskjuggler/ReportHtml.cpp
taskjuggler/ReportHtml.h
taskjuggler/ResourceList.cpp
taskjuggler/ResourceList.h
taskjuggler/ShiftList.h
taskjuggler/Task.cpp
taskjuggler/Task.h
taskjuggler/TaskScenario.cpp
taskjuggler/TaskScenario.h
taskjuggler/TjMessageHandler.h [new file with mode: 0644]
taskjuggler/Token.h
taskjuggler/VacationList.h
taskjuggler/debug.h
taskjuggler/main.cpp
taskjuggler/taskjuggler.h

diff --git a/Mainpage.dox b/Mainpage.dox
new file mode 100644 (file)
index 0000000..a5ab125
--- /dev/null
@@ -0,0 +1,27 @@
+/**
+ * @mainpage The TaskJuggler API Reference
+ *
+ * This section contains the KDE online class reference for the current
+ * development version of KDE. You can also download (???&nbsp;MB)
+ * the complete API documentation.  Additionally, you can subscribe or
+ * read the mailing lists for any additions and/or modifications to the API.
+ *
+ * - <a href="taskjuggler/html/index.html"><b>TaskJuggler</b></a>
+ *   (<a href="kdecore/html/classes.html">classes</a>)\n
+ *   <i>Core KDE classes that are not related to the user interface.</i>
+ * - <a href="kutils/html/index.html"><b>kutils</b></a>
+ *   (<a href="kutils/html/classes.html">classes</a>)\n
+ *   <i>High-level utils, like search/replace support.</i>
+ *
+ * More information about the KDE architecture in form of tutorials, HOWTOs,
+ * and FAQs can be found at
+ * the <a href="http://developer.kde.org">KDE Developer's corner</a>.
+ */
+
+/**
+ * @page search Search the API documentation
+ *
+ * <br>Under construction.
+ *
+ */
+
index 25c7fca..0fb0001 100644 (file)
@@ -30,3 +30,6 @@ dist-hook:
        cd $(top_distdir) && $(MAKE) -f admin/Makefile.common subdirs
 
 SUBDIRS=$(COMPILE_FIRST) $(TOPSUBDIRS)
+
+include admin/Doxyfile.am
+
diff --git a/TODO b/TODO
index e38b9ac..b607f7c 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,5 +1,5 @@
-- Add support for completed and status column to HTML task reports.
 - Report filter for task status (done/WIP/not started)
+- HTML Status Report
 - Implement 'mandatory' attribute for task allocations.
 - Allocation selection by skill set.
 - Improve scheduler performance.
index 5391a09..6da3e16 100644 (file)
@@ -1,8 +1,8 @@
 macro AllColumns [     
-  columns costs, depends, duration, effort, end, endbuffer,
+  columns completed, costs, depends, duration, effort, end, endbuffer,
        endbufferstart, flags, follows, id, index, kotrusid, maxeffort, maxend,
        maxstart, mineffort, minend, minstart, name, no, note, priority,
        projectid, rate, resources, responsibilities, responsible, schedule,
-       seqno, start, startbuffer, startbufferend, daily, weekly, monthly
+       seqno, start, startbuffer, startbufferend, status, daily, weekly, monthly
 ]
 
index 1d3c8f3..2b207dd 100644 (file)
@@ -24,7 +24,7 @@
 <table align="center" cellpadding="1">
 
 <tr>
-<td class="headerbig" rowspan="2">Costs</td><td class="headerbig" rowspan="2">Dependencies</td><td class="headerbig" rowspan="2">Duration</td><td class="headerbig" rowspan="2">Effort</td><td class="headerbig" rowspan="2">End</td><td class="headerbig" rowspan="2">End Buf.</td><td class="headerbig" rowspan="2">End Buf. Start</td><td class="headerbig" rowspan="2">Flags</td><td class="headerbig" rowspan="2">Followers</td><td class="headerbig" rowspan="2">ID</td><td class="headerbig" rowspan="2">Index No.</td><td class="headerbig" rowspan="2">Kotrus ID</td><td class="headerbig" rowspan="2">Max. Effort</td><td class="headerbig" rowspan="2">Max. End</td><td class="headerbig" rowspan="2">Max. Start</td><td class="headerbig" rowspan="2">Min. Effort</td><td class="headerbig" rowspan="2">Min. End</td><td class="headerbig" rowspan="2">Min. Start</td><td class="headerbig" rowspan="2">Name</td><td class="headerbig" rowspan="2">No.</td><td class="headerbig" rowspan="2">Note</td><td class="headerbig" rowspan="2">Priority</td><td class="headerbig" rowspan="2">Project ID</td><td class="headerbig" rowspan="2">Rate</td><td class="headerbig" rowspan="2">Resources</td><td class="headerbig" rowspan="2">Responsibilities</td><td class="headerbig" rowspan="2">Responsible</td><td class="headerbig" rowspan="2">Schedule</td><td class="headerbig" rowspan="2">Seq. No.</td><td class="headerbig" rowspan="2">Start</td><td class="headerbig" rowspan="2">Start Buf.</td><td class="headerbig" rowspan="2">Start Buf. End</td><td class="headerbig" colspan="31">Jan 2003</td>
+<td class="headerbig" rowspan="2">Completed</td><td class="headerbig" rowspan="2">Costs</td><td class="headerbig" rowspan="2">Dependencies</td><td class="headerbig" rowspan="2">Duration</td><td class="headerbig" rowspan="2">Effort</td><td class="headerbig" rowspan="2">End</td><td class="headerbig" rowspan="2">End Buf.</td><td class="headerbig" rowspan="2">End Buf. Start</td><td class="headerbig" rowspan="2">Flags</td><td class="headerbig" rowspan="2">Followers</td><td class="headerbig" rowspan="2">ID</td><td class="headerbig" rowspan="2">Index No.</td><td class="headerbig" rowspan="2">Kotrus ID</td><td class="headerbig" rowspan="2">Max. Effort</td><td class="headerbig" rowspan="2">Max. End</td><td class="headerbig" rowspan="2">Max. Start</td><td class="headerbig" rowspan="2">Min. Effort</td><td class="headerbig" rowspan="2">Min. End</td><td class="headerbig" rowspan="2">Min. Start</td><td class="headerbig" rowspan="2">Name</td><td class="headerbig" rowspan="2">No.</td><td class="headerbig" rowspan="2">Note</td><td class="headerbig" rowspan="2">Priority</td><td class="headerbig" rowspan="2">Project ID</td><td class="headerbig" rowspan="2">Rate</td><td class="headerbig" rowspan="2">Resources</td><td class="headerbig" rowspan="2">Responsibilities</td><td class="headerbig" rowspan="2">Responsible</td><td class="headerbig" rowspan="2">Schedule</td><td class="headerbig" rowspan="2">Seq. No.</td><td class="headerbig" rowspan="2">Start</td><td class="headerbig" rowspan="2">Start Buf.</td><td class="headerbig" rowspan="2">Start Buf. End</td><td class="headerbig" rowspan="2">Status</td><td class="headerbig" colspan="31">Jan 2003</td>
 <td class="headerbig" colspan="28">Feb 2003</td>
 <td class="headerbig" colspan="31">Mar 2003</td>
 <td class="headerbig" colspan="5">Jan 2003</td>
 <tr>
 <td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;1</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;2</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;3</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;4</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;5</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;6</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;7</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;8</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;9</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;10</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;11</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;12</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;13</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;14</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;15</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;16</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;17</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;18</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;19</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;20</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;21</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;22</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;23</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;24</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;25</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;26</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;27</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;28</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;29</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;30</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;31</span></td><td class="today"><span style="font-size:0.8em">&nbsp;&nbsp;1</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;2</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;3</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;4</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;5</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;6</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;7</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;8</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;9</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;10</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;11</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;12</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;13</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;14</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;15</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;16</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;17</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;18</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;19</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;20</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;21</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;22</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;23</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;24</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;25</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;26</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;27</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;28</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;1</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;2</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;3</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;4</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;5</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;6</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;7</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;8</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;9</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;10</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;11</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;12</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;13</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;14</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;15</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;16</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;17</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;18</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;19</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;20</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;21</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;22</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;23</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;24</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;25</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;26</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;27</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;28</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;29</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;30</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;31</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;1</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;2</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;3</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;4</span></td><td class="today"><span style="font-size:0.8em">&nbsp;&nbsp;5</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;6</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;7</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;8</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;9</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;10</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;11</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;12</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;13</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;14</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;Jan</span></td><td class="today"><span style="font-size:0.8em">&nbsp;Feb</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;Mar</span></td></tr>
 
-<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">0.000</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">330</td>
+<tr valign="middle"><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">0.000</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">330</td>
 <td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap">flag2</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap">tuxies</td><td class="default" rowspan="1">2.</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap"></td><td class="default" rowspan="1" style="text-align:right; white-space:nowrap">1.00</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:right; white-space:nowrap">0.00</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="task" rowspan="1" style="white-space:nowrap"><span style="font-size:110%"><a name="resource_tuxies"></a>Tux Team</span></td>
 <td class="default" rowspan="1">1.</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:right; white-space:nowrap">0.000</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:left"><table style="width:150px; font-size:100%; text-align:left"><tr><th style="width:35%"></th><th style="width:65%"></th></tr>
 </table>
 </td>
-<td class="default" rowspan="1">1.</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="booked">20</td>
+<td class="default" rowspan="1">1.</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="booked">20</td>
 <td class="booked">20</td>
 <td class="booked">20</td>
 <td class="weekend">&nbsp;</td>
 <td class="booked">14</td>
 <td class="default">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">0.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">37%</td><td class="defaultlight" style="text-align:right white-space:nowrap">0.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">330</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-03-25 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%">&nbsp;</span></td>
 <td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">500</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">&nbsp</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
-<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="bookedlight">20</td>
+<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Work in progress</td><td class="bookedlight">20</td>
 <td class="bookedlight">20</td>
 <td class="bookedlight">20</td>
 <td class="bookedlight">&nbsp;</td>
 <td class="bookedlight">14</td>
 <td class="bookedlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">0.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">100%</td><td class="defaultlight" style="text-align:right white-space:nowrap">0.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">20.4</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">270</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-21 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%">This is a sub-task of Task1</span></td>
 <td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">900</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%">tux 7, tux 2</span></td>
 <td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">Tux 3</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
-<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap"> 15</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-02 10:00:00 GMT</td><td class="bookedlight"><b>18</b></td>
+<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap"> 15</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-02 10:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Finished</td><td class="bookedlight"><b>18</b></td>
 <td class="bookedlight"><b>18</b></td>
 <td class="bookedlight"><b>18</b></td>
 <td class="bookedlight">&nbsp;</td>
 <td class="today">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">0.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">76%</td><td class="defaultlight" style="text-align:right white-space:nowrap">0.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">41.4</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">60</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-02-11 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%">This is Task2</span></td>
 <td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">10</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%">tux 1</span></td>
 <td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">tux 2</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
-<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td><td class="bookedlight"><b>2</b></td>
+<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">On schedule</td><td class="bookedlight"><b>2</b></td>
 <td class="bookedlight"><b>2</b></td>
 <td class="bookedlight"><b>2</b></td>
 <td class="bookedlight">&nbsp;</td>
 <td class="bookedlight"><b>14</b></td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">9000.000</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">30</td>
+<tr valign="middle"><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">9000.000</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">30</td>
 <td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap">flag2, flag3</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap">tux1</td><td class="default" rowspan="1">3.</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap">tux1</td><td class="default" rowspan="1" style="text-align:right; white-space:nowrap">1.00</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:right; white-space:nowrap">0.00</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="task" rowspan="1" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:105%"><a name="resource_tux1"></a>tux 1</span></td>
 <td class="default" rowspan="1">2.</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:right; white-space:nowrap">300.000</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left"><span style="font-size:100%">t1.t4</span></td>
 <td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:left"><table style="width:150px; font-size:100%; text-align:left"><tr><th style="width:35%"></th><th style="width:65%"></th></tr>
 </tr>
 </table>
 </td>
-<td class="default" rowspan="1">2.</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="booked"><b>1</b></td>
+<td class="default" rowspan="1">2.</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="booked"><b>1</b></td>
 <td class="booked"><b>1</b></td>
 <td class="booked"><b>1</b></td>
 <td class="weekend">&nbsp;</td>
 <td class="booked"><b>7</b></td>
 <td class="default">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">9000.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">37%</td><td class="defaultlight" style="text-align:right white-space:nowrap">9000.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-03-25 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%">&nbsp;</span></td>
 <td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">500</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">&nbsp</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
-<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="bookedlight">1</td>
+<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Work in progress</td><td class="bookedlight">1</td>
 <td class="bookedlight">1</td>
 <td class="bookedlight">1</td>
 <td class="bookedlight">&nbsp;</td>
 <td class="bookedlight">7</td>
 <td class="bookedlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">9000.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">76%</td><td class="defaultlight" style="text-align:right white-space:nowrap">9000.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">41.4</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-02-11 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%">This is Task2</span></td>
 <td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">10</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%">tux 1</span></td>
 <td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">tux 2</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
-<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td><td class="bookedlight"><b>1</b></td>
+<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">On schedule</td><td class="bookedlight"><b>1</b></td>
 <td class="bookedlight"><b>1</b></td>
 <td class="bookedlight"><b>1</b></td>
 <td class="bookedlight">&nbsp;</td>
 <td class="bookedlight"><b>7</b></td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">7500.000</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">15</td>
+<tr valign="middle"><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">7500.000</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">15</td>
 <td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap">flag2</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap">tux2</td><td class="default" rowspan="1">4.</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap">tux der 2.</td><td class="default" rowspan="1" style="text-align:right; white-space:nowrap">1.00</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:right; white-space:nowrap">0.00</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="task" rowspan="1" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:105%"><a name="resource_tux2"></a>tux 2</span></td>
 <td class="default" rowspan="1">3.</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:right; white-space:nowrap">500.000</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left"><span style="font-size:100%">t1.t2</span></td>
 <td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:left"><table style="width:150px; font-size:100%; text-align:left"><tr><th style="width:35%"></th><th style="width:65%"></th></tr>
 </tr>
 </table>
 </td>
-<td class="default" rowspan="1">3.</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="booked"><b>1</b></td>
+<td class="default" rowspan="1">3.</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="booked"><b>1</b></td>
 <td class="booked"><b>1</b></td>
 <td class="booked"><b>1</b></td>
 <td class="weekend">&nbsp;</td>
 <td class="today">&nbsp;</td>
 <td class="default">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">7500.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">37%</td><td class="defaultlight" style="text-align:right white-space:nowrap">7500.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">15</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-03-25 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%">&nbsp;</span></td>
 <td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">500</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">&nbsp</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
-<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="bookedlight">1</td>
+<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Work in progress</td><td class="bookedlight">1</td>
 <td class="bookedlight">1</td>
 <td class="bookedlight">1</td>
 <td class="bookedlight">&nbsp;</td>
 <td class="bookedlight">&nbsp;</td>
 <td class="bookedlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">7500.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">100%</td><td class="defaultlight" style="text-align:right white-space:nowrap">7500.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">20.4</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">15</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-21 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%">This is a sub-task of Task1</span></td>
 <td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">900</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%">tux 7, tux 2</span></td>
 <td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">Tux 3</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
-<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap"> 15</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-02 10:00:00 GMT</td><td class="bookedlight"><b>1</b></td>
+<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap"> 15</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-02 10:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Finished</td><td class="bookedlight"><b>1</b></td>
 <td class="bookedlight"><b>1</b></td>
 <td class="bookedlight"><b>1</b></td>
 <td class="bookedlight">&nbsp;</td>
 <td class="today">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">30000.000</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">120</td>
+<tr valign="middle"><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">30000.000</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">120</td>
 <td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap">flag2, flag3</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap">tux4</td><td class="default" rowspan="1">5.</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap"></td><td class="default" rowspan="1" style="text-align:right; white-space:nowrap">1.00</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:right; white-space:nowrap">0.00</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="task" rowspan="1" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:105%"><a name="resource_tux4"></a>tux 4</span></td>
 <td class="default" rowspan="1">4.</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:right; white-space:nowrap">250.000</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:left"><table style="width:150px; font-size:100%; text-align:left"><tr><th style="width:35%"></th><th style="width:65%"></th></tr>
 </table>
 </td>
-<td class="default" rowspan="1">4.</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="booked">8</td>
+<td class="default" rowspan="1">4.</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="booked">8</td>
 <td class="booked">8</td>
 <td class="booked">8</td>
 <td class="weekend">&nbsp;</td>
 <td class="today">&nbsp;</td>
 <td class="default">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">30000.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">37%</td><td class="defaultlight" style="text-align:right white-space:nowrap">30000.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">120</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-03-25 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%">&nbsp;</span></td>
 <td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">500</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">&nbsp</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
-<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="bookedlight">8</td>
+<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Work in progress</td><td class="bookedlight">8</td>
 <td class="bookedlight">8</td>
 <td class="bookedlight">8</td>
 <td class="bookedlight">&nbsp;</td>
 <td class="bookedlight">&nbsp;</td>
 <td class="bookedlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">30000.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">100%</td><td class="defaultlight" style="text-align:right white-space:nowrap">30000.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">20.4</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">120</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-21 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%">This is a sub-task of Task1</span></td>
 <td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">900</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%">tux 7, tux 2</span></td>
 <td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">Tux 3</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
-<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap"> 15</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-02 10:00:00 GMT</td><td class="bookedlight"><b>8</b></td>
+<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap"> 15</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-02 10:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Finished</td><td class="bookedlight"><b>8</b></td>
 <td class="bookedlight"><b>8</b></td>
 <td class="bookedlight"><b>8</b></td>
 <td class="bookedlight">&nbsp;</td>
 <td class="today">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">15000.000</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">60</td>
+<tr valign="middle"><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">15000.000</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">60</td>
 <td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap">flag2, flag3</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap">tux5</td><td class="default" rowspan="1">6.</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap"></td><td class="default" rowspan="1" style="text-align:right; white-space:nowrap">1.00</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:right; white-space:nowrap">0.00</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="task" rowspan="1" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:100%"><a name="resource_tux5"></a>tux 5</span></td>
 <td class="default" rowspan="1">5.</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:right; white-space:nowrap">250.000</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:left"><table style="width:150px; font-size:100%; text-align:left"><tr><th style="width:35%"></th><th style="width:65%"></th></tr>
 </table>
 </td>
-<td class="default" rowspan="1">5.</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="booked">4</td>
+<td class="default" rowspan="1">5.</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="booked">4</td>
 <td class="booked">4</td>
 <td class="booked">4</td>
 <td class="weekend">&nbsp;</td>
 <td class="today">&nbsp;</td>
 <td class="default">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">15000.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">37%</td><td class="defaultlight" style="text-align:right white-space:nowrap">15000.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">60</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-03-25 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%">&nbsp;</span></td>
 <td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">500</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">&nbsp</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
-<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="bookedlight">4</td>
+<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Work in progress</td><td class="bookedlight">4</td>
 <td class="bookedlight">4</td>
 <td class="bookedlight">4</td>
 <td class="bookedlight">&nbsp;</td>
 <td class="bookedlight">&nbsp;</td>
 <td class="bookedlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">15000.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">100%</td><td class="defaultlight" style="text-align:right white-space:nowrap">15000.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">20.4</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">60</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-21 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%">This is a sub-task of Task1</span></td>
 <td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">900</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%">tux 7, tux 2</span></td>
 <td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">Tux 3</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
-<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap"> 15</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-02 10:00:00 GMT</td><td class="bookedlight"><b>4</b></td>
+<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap"> 15</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-02 10:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Finished</td><td class="bookedlight"><b>4</b></td>
 <td class="bookedlight"><b>4</b></td>
 <td class="bookedlight"><b>4</b></td>
 <td class="bookedlight">&nbsp;</td>
 <td class="today">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">7500.000</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">30</td>
+<tr valign="middle"><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">7500.000</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">30</td>
 <td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap">flag2, flag3</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap">tux6</td><td class="default" rowspan="1">7.</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap"></td><td class="default" rowspan="1" style="text-align:right; white-space:nowrap">1.00</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:right; white-space:nowrap">0.00</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="task" rowspan="1" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:95%"><a name="resource_tux6"></a>tux 6</span></td>
 <td class="default" rowspan="1">6.</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:right; white-space:nowrap">250.000</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:left"><table style="width:150px; font-size:100%; text-align:left"><tr><th style="width:35%"></th><th style="width:65%"></th></tr>
 </table>
 </td>
-<td class="default" rowspan="1">6.</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="booked">2</td>
+<td class="default" rowspan="1">6.</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="booked">2</td>
 <td class="booked">2</td>
 <td class="booked">2</td>
 <td class="weekend">&nbsp;</td>
 <td class="today">&nbsp;</td>
 <td class="default">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">7500.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">37%</td><td class="defaultlight" style="text-align:right white-space:nowrap">7500.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-03-25 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%">&nbsp;</span></td>
 <td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">500</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">&nbsp</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
-<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="bookedlight">2</td>
+<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Work in progress</td><td class="bookedlight">2</td>
 <td class="bookedlight">2</td>
 <td class="bookedlight">2</td>
 <td class="bookedlight">&nbsp;</td>
 <td class="bookedlight">&nbsp;</td>
 <td class="bookedlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">7500.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">100%</td><td class="defaultlight" style="text-align:right white-space:nowrap">7500.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">20.4</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-21 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%">This is a sub-task of Task1</span></td>
 <td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">900</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%">tux 7, tux 2</span></td>
 <td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">Tux 3</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
-<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap"> 15</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-02 10:00:00 GMT</td><td class="bookedlight"><b>2</b></td>
+<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap"> 15</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-02 10:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Finished</td><td class="bookedlight"><b>2</b></td>
 <td class="bookedlight"><b>2</b></td>
 <td class="bookedlight"><b>2</b></td>
 <td class="bookedlight">&nbsp;</td>
 <td class="today">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">3750.000</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">15</td>
+<tr valign="middle"><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">3750.000</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">15</td>
 <td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap">flag2, flag3, flag4</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap">tux7</td><td class="default" rowspan="1">8.</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap"></td><td class="default" rowspan="1" style="text-align:right; white-space:nowrap">1.00</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:right; white-space:nowrap">0.00</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="task" rowspan="1" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:90%"><a name="resource_tux7"></a>tux 7</span></td>
 <td class="default" rowspan="1">7.</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:right; white-space:nowrap">250.000</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:left"><table style="width:150px; font-size:100%; text-align:left"><tr><th style="width:35%"></th><th style="width:65%"></th></tr>
 </tr>
 </table>
 </td>
-<td class="default" rowspan="1">7.</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="booked"><b>1</b></td>
+<td class="default" rowspan="1">7.</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="booked"><b>1</b></td>
 <td class="booked"><b>1</b></td>
 <td class="booked"><b>1</b></td>
 <td class="weekend">&nbsp;</td>
 <td class="today">&nbsp;</td>
 <td class="default">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">3750.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">37%</td><td class="defaultlight" style="text-align:right white-space:nowrap">3750.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">15</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-03-25 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%">&nbsp;</span></td>
 <td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">500</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">&nbsp</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
-<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="bookedlight">1</td>
+<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Work in progress</td><td class="bookedlight">1</td>
 <td class="bookedlight">1</td>
 <td class="bookedlight">1</td>
 <td class="bookedlight">&nbsp;</td>
 <td class="bookedlight">&nbsp;</td>
 <td class="bookedlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">3750.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">100%</td><td class="defaultlight" style="text-align:right white-space:nowrap">3750.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">20.4</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">15</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-21 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%">This is a sub-task of Task1</span></td>
 <td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">900</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%">tux 7, tux 2</span></td>
 <td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">Tux 3</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
-<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap"> 15</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-02 10:00:00 GMT</td><td class="bookedlight"><b>1</b></td>
+<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap"> 15</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-02 10:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Finished</td><td class="bookedlight"><b>1</b></td>
 <td class="bookedlight"><b>1</b></td>
 <td class="bookedlight"><b>1</b></td>
 <td class="bookedlight">&nbsp;</td>
 <td class="today">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">12000.000</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">30</td>
+<tr valign="middle"><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">12000.000</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">30</td>
 <td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap">&nbsp</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap">tux3</td><td class="default" rowspan="1">1.</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap"></td><td class="default" rowspan="1" style="text-align:right; white-space:nowrap">1.00</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:right; white-space:nowrap">0.00</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="task" rowspan="1" style="white-space:nowrap"><span style="font-size:110%"><a name="resource_tux3"></a>Tux 3</span></td>
 <td class="default" rowspan="1">8.</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:right; white-space:nowrap">400.000</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left"><span style="font-size:100%">t1.t3</span></td>
 <td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:left"><table style="width:150px; font-size:100%; text-align:left"><tr><th style="width:35%"></th><th style="width:65%"></th></tr>
 </tr>
 </table>
 </td>
-<td class="default" rowspan="1">8.</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default">&nbsp;</td>
+<td class="default" rowspan="1">8.</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">&nbsp;</td><td class="default">&nbsp;</td>
 <td class="default">&nbsp;</td>
 <td class="default">&nbsp;</td>
 <td class="weekend">&nbsp;</td>
 <td class="booked"><b>13</b></td>
 <td class="booked"><b>17</b></td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">12000.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">37%</td><td class="defaultlight" style="text-align:right white-space:nowrap">12000.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-03-25 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%">&nbsp;</span></td>
 <td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">500</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">&nbsp</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
-<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="bookedlight">&nbsp;</td>
+<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Work in progress</td><td class="bookedlight">&nbsp;</td>
 <td class="bookedlight">&nbsp;</td>
 <td class="bookedlight">&nbsp;</td>
 <td class="bookedlight">&nbsp;</td>
 <td class="bookedlight">13</td>
 <td class="bookedlight">17</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">12000.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%">t1.t2, t1.t3</span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">0%</td><td class="defaultlight" style="text-align:right white-space:nowrap">12000.000</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%">t1.t2, t1.t3</span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">41.4</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-03-25 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%">&nbsp;</span></td>
 <td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">500</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%">Tux 3</span></td>
 <td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">tux 1</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-02-12 09:00:00 GMT</td>
-<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap"> 10</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-02-13 14:00:00 GMT</td><td class="defaultlight">&nbsp;</td>
+<td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap"> 10</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-02-13 14:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Not yet started</td><td class="defaultlight">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="weekend">&nbsp;</td>
index cb8ae73..d556d6f 100644 (file)
@@ -24,7 +24,7 @@
 <table align="center" cellpadding="1">
 
 <tr>
-<td class="headerbig" rowspan="2">Costs</td><td class="headerbig" rowspan="2">Dependencies</td><td class="headerbig" rowspan="2">Duration</td><td class="headerbig" rowspan="2">Effort</td><td class="headerbig" rowspan="2">End</td><td class="headerbig" rowspan="2">End Buf.</td><td class="headerbig" rowspan="2">End Buf. Start</td><td class="headerbig" rowspan="2">Flags</td><td class="headerbig" rowspan="2">Followers</td><td class="headerbig" rowspan="2">ID</td><td class="headerbig" rowspan="2">Index No.</td><td class="headerbig" rowspan="2">Kotrus ID</td><td class="headerbig" rowspan="2">Max. Effort</td><td class="headerbig" rowspan="2">Max. End</td><td class="headerbig" rowspan="2">Max. Start</td><td class="headerbig" rowspan="2">Min. Effort</td><td class="headerbig" rowspan="2">Min. End</td><td class="headerbig" rowspan="2">Min. Start</td><td class="headerbig" rowspan="2">Name</td><td class="headerbig" rowspan="2">No.</td><td class="headerbig" rowspan="2">Note</td><td class="headerbig" rowspan="2">Priority</td><td class="headerbig" rowspan="2">Project ID</td><td class="headerbig" rowspan="2">Rate</td><td class="headerbig" rowspan="2">Resources</td><td class="headerbig" rowspan="2">Responsibilities</td><td class="headerbig" rowspan="2">Responsible</td><td class="headerbig" rowspan="2">Schedule</td><td class="headerbig" rowspan="2">Seq. No.</td><td class="headerbig" rowspan="2">Start</td><td class="headerbig" rowspan="2">Start Buf.</td><td class="headerbig" rowspan="2">Start Buf. End</td><td class="headerbig" rowspan="2">&nbsp;</td><td class="headerbig" colspan="31">Jan 2003</td>
+<td class="headerbig" rowspan="2">Completed</td><td class="headerbig" rowspan="2">Costs</td><td class="headerbig" rowspan="2">Dependencies</td><td class="headerbig" rowspan="2">Duration</td><td class="headerbig" rowspan="2">Effort</td><td class="headerbig" rowspan="2">End</td><td class="headerbig" rowspan="2">End Buf.</td><td class="headerbig" rowspan="2">End Buf. Start</td><td class="headerbig" rowspan="2">Flags</td><td class="headerbig" rowspan="2">Followers</td><td class="headerbig" rowspan="2">ID</td><td class="headerbig" rowspan="2">Index No.</td><td class="headerbig" rowspan="2">Kotrus ID</td><td class="headerbig" rowspan="2">Max. Effort</td><td class="headerbig" rowspan="2">Max. End</td><td class="headerbig" rowspan="2">Max. Start</td><td class="headerbig" rowspan="2">Min. Effort</td><td class="headerbig" rowspan="2">Min. End</td><td class="headerbig" rowspan="2">Min. Start</td><td class="headerbig" rowspan="2">Name</td><td class="headerbig" rowspan="2">No.</td><td class="headerbig" rowspan="2">Note</td><td class="headerbig" rowspan="2">Priority</td><td class="headerbig" rowspan="2">Project ID</td><td class="headerbig" rowspan="2">Rate</td><td class="headerbig" rowspan="2">Resources</td><td class="headerbig" rowspan="2">Responsibilities</td><td class="headerbig" rowspan="2">Responsible</td><td class="headerbig" rowspan="2">Schedule</td><td class="headerbig" rowspan="2">Seq. No.</td><td class="headerbig" rowspan="2">Start</td><td class="headerbig" rowspan="2">Start Buf.</td><td class="headerbig" rowspan="2">Start Buf. End</td><td class="headerbig" rowspan="2">Status</td><td class="headerbig" rowspan="2">&nbsp;</td><td class="headerbig" colspan="31">Jan 2003</td>
 <td class="headerbig" colspan="28">Feb 2003</td>
 <td class="headerbig" colspan="31">Mar 2003</td>
 <td class="headerbig" rowspan="2">&nbsp;</td><td class="headerbig" colspan="5">Jan 2003</td>
 <tr>
 <td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;1</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;2</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;3</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;4</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;5</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;6</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;7</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;8</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;9</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;10</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;11</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;12</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;13</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;14</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;15</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;16</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;17</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;18</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;19</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;20</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;21</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;22</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;23</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;24</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;25</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;26</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;27</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;28</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;29</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;30</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;31</span></td><td class="today"><span style="font-size:0.8em">&nbsp;&nbsp;1</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;2</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;3</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;4</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;5</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;6</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;7</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;8</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;9</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;10</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;11</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;12</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;13</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;14</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;15</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;16</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;17</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;18</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;19</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;20</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;21</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;22</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;23</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;24</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;25</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;26</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;27</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;28</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;1</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;2</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;3</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;4</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;5</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;6</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;7</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;8</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;9</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;10</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;11</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;12</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;13</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;14</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;15</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;16</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;17</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;18</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;19</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;20</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;21</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;22</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;23</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;24</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;25</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;26</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;27</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;28</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;29</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;30</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;31</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;1</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;2</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;3</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;4</span></td><td class="today"><span style="font-size:0.8em">&nbsp;&nbsp;5</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;6</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;7</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;8</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;9</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;10</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;11</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;12</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;13</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;14</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;Jan</span></td><td class="today"><span style="font-size:0.8em">&nbsp;Feb</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;Mar</span></td></tr>
 
-<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">0.000</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">330</td>
+<tr valign="middle"><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">0.000</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">330</td>
 <td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap">flag2</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap">tuxies</td><td class="default" rowspan="2">2.</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap"></td><td class="default" rowspan="2" style="text-align:right; white-space:nowrap">1.00</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:right; white-space:nowrap">0.00</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="task" rowspan="2" style="white-space:nowrap"><span style="font-size:110%"><a name="resource_tuxies"></a>Tux Team</span></td>
 <td class="default" rowspan="2">1.</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:right; white-space:nowrap">0.000</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:left"><table style="width:150px; font-size:100%; text-align:left"><tr><th style="width:35%"></th><th style="width:65%"></th></tr>
 </table>
 </td>
-<td class="default" rowspan="2">1.</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="headersmall">Plan</td>
+<td class="default" rowspan="2">1.</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="headersmall">Plan</td>
 <td class="booked">20</td>
 <td class="booked">20</td>
 <td class="booked">20</td>
 <td class="booked">18</td>
 <td class="default">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">0.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">37%</td><td class="defaultlight" style="text-align:right white-space:nowrap">0.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">330</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-03-25 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%">&nbsp;</span></td>
 <td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">500</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">&nbsp</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
-<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="headersmall">Plan</td>
+<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Work in progress</td><td class="headersmall">Plan</td>
 <td class="bookedlight">20</td>
 <td class="bookedlight">20</td>
 <td class="bookedlight">20</td>
 <td class="bookedlight">&nbsp;</td>
 </tr>
 <tr>
-<td class="defaultlight" style="text-align:right white-space:nowrap">0.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
+<td class="defaultlight" style="text-align:right white-space:nowrap">34%</td><td class="defaultlight" style="text-align:right white-space:nowrap">0.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">330</td>
 <td class="defaultlight" style="white-space:nowrap">2003-03-27 18:00:00 GMT</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-03-27 18:00:00 GMT</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td>
-<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td><td class="headersmall">Actual</td>
+<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Work in progress</td><td class="headersmall">Actual</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="completedlight">20</td>
 <td class="bookedlight">18</td>
 <td class="bookedlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">0.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">100%</td><td class="defaultlight" style="text-align:right white-space:nowrap">0.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">20.4</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">270</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-21 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%">This is a sub-task of Task1</span></td>
 <td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">900</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%">tux 7, tux 2</span></td>
 <td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">Tux 3</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
-<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap"> 15</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-02 10:00:00 GMT</td><td class="headersmall">Plan</td>
+<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap"> 15</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-02 10:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Finished</td><td class="headersmall">Plan</td>
 <td class="bookedlight"><b>18</b></td>
 <td class="bookedlight"><b>18</b></td>
 <td class="bookedlight"><b>18</b></td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
 <tr>
-<td class="defaultlight" style="text-align:right white-space:nowrap">0.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">20.4</td>
+<td class="defaultlight" style="text-align:right white-space:nowrap">100%</td><td class="defaultlight" style="text-align:right white-space:nowrap">0.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">20.4</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">270</td>
 <td class="defaultlight" style="white-space:nowrap">2003-01-23 18:00:00 GMT</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-22 17:00:00 GMT</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%">tux 7, tux 2</span></td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 09:00:00 GMT</td>
-<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-06 10:00:00 GMT</td><td class="headersmall">Actual</td>
+<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-06 10:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Finished</td><td class="headersmall">Actual</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="completedlight"><b>18</b></td>
 <td class="today">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">0.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">76%</td><td class="defaultlight" style="text-align:right white-space:nowrap">0.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">41.4</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">60</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-02-11 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%">This is Task2</span></td>
 <td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">10</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%">tux 1</span></td>
 <td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">tux 2</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
-<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td><td class="headersmall">Plan</td>
+<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">On schedule</td><td class="headersmall">Plan</td>
 <td class="bookedlight"><b>2</b></td>
 <td class="bookedlight"><b>2</b></td>
 <td class="bookedlight"><b>2</b></td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
 <tr>
-<td class="defaultlight" style="text-align:right white-space:nowrap">0.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">41.4</td>
+<td class="defaultlight" style="text-align:right white-space:nowrap">70%</td><td class="defaultlight" style="text-align:right white-space:nowrap">0.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">41.4</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">60</td>
 <td class="defaultlight" style="white-space:nowrap">2003-02-13 18:00:00 GMT</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-02-13 18:00:00 GMT</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%">tux 1</span></td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 09:00:00 GMT</td>
-<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 09:00:00 GMT</td><td class="headersmall">Actual</td>
+<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 09:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">On schedule</td><td class="headersmall">Actual</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="completedlight"><b>2</b></td>
 <td class="bookedlight"><b>18</b></td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">9000.000</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">30</td>
+<tr valign="middle"><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">9000.000</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">30</td>
 <td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap">flag2, flag3</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap">tux1</td><td class="default" rowspan="2">3.</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap">tux1</td><td class="default" rowspan="2" style="text-align:right; white-space:nowrap">1.00</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:right; white-space:nowrap">0.00</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="task" rowspan="2" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:105%"><a name="resource_tux1"></a>tux 1</span></td>
 <td class="default" rowspan="2">2.</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:right; white-space:nowrap">300.000</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left"><span style="font-size:100%">t1.t4</span></td>
 <td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:left"><table style="width:150px; font-size:100%; text-align:left"><tr><th style="width:35%"></th><th style="width:65%"></th></tr>
 </tr>
 </table>
 </td>
-<td class="default" rowspan="2">2.</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="headersmall">Plan</td>
+<td class="default" rowspan="2">2.</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="headersmall">Plan</td>
 <td class="booked"><b>1</b></td>
 <td class="booked"><b>1</b></td>
 <td class="booked"><b>1</b></td>
 <td class="booked"><b>9</b></td>
 <td class="default">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">9000.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">37%</td><td class="defaultlight" style="text-align:right white-space:nowrap">9000.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-03-25 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%">&nbsp;</span></td>
 <td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">500</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">&nbsp</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
-<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="headersmall">Plan</td>
+<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Work in progress</td><td class="headersmall">Plan</td>
 <td class="bookedlight">1</td>
 <td class="bookedlight">1</td>
 <td class="bookedlight">1</td>
 <td class="bookedlight">&nbsp;</td>
 </tr>
 <tr>
-<td class="defaultlight" style="text-align:right white-space:nowrap">9000.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
+<td class="defaultlight" style="text-align:right white-space:nowrap">34%</td><td class="defaultlight" style="text-align:right white-space:nowrap">9000.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
 <td class="defaultlight" style="white-space:nowrap">2003-03-27 18:00:00 GMT</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-03-27 18:00:00 GMT</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td>
-<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td><td class="headersmall">Actual</td>
+<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Work in progress</td><td class="headersmall">Actual</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="completedlight">1</td>
 <td class="bookedlight">9</td>
 <td class="bookedlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">9000.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">76%</td><td class="defaultlight" style="text-align:right white-space:nowrap">9000.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">41.4</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-02-11 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%">This is Task2</span></td>
 <td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">10</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%">tux 1</span></td>
 <td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">tux 2</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
-<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td><td class="headersmall">Plan</td>
+<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">On schedule</td><td class="headersmall">Plan</td>
 <td class="bookedlight"><b>1</b></td>
 <td class="bookedlight"><b>1</b></td>
 <td class="bookedlight"><b>1</b></td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
 <tr>
-<td class="defaultlight" style="text-align:right white-space:nowrap">9000.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">41.4</td>
+<td class="defaultlight" style="text-align:right white-space:nowrap">70%</td><td class="defaultlight" style="text-align:right white-space:nowrap">9000.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">41.4</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
 <td class="defaultlight" style="white-space:nowrap">2003-02-13 18:00:00 GMT</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-02-13 18:00:00 GMT</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%">tux 1</span></td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 09:00:00 GMT</td>
-<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 09:00:00 GMT</td><td class="headersmall">Actual</td>
+<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 09:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">On schedule</td><td class="headersmall">Actual</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="completedlight"><b>1</b></td>
 <td class="bookedlight"><b>9</b></td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">7500.000</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">15</td>
+<tr valign="middle"><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">7500.000</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">15</td>
 <td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap">flag2</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap">tux2</td><td class="default" rowspan="2">4.</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap">tux der 2.</td><td class="default" rowspan="2" style="text-align:right; white-space:nowrap">1.00</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:right; white-space:nowrap">0.00</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="task" rowspan="2" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:105%"><a name="resource_tux2"></a>tux 2</span></td>
 <td class="default" rowspan="2">3.</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:right; white-space:nowrap">500.000</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left"><span style="font-size:100%">t1.t2</span></td>
 <td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:left"><table style="width:150px; font-size:100%; text-align:left"><tr><th style="width:35%"></th><th style="width:65%"></th></tr>
 </tr>
 </table>
 </td>
-<td class="default" rowspan="2">3.</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="headersmall">Plan</td>
+<td class="default" rowspan="2">3.</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="headersmall">Plan</td>
 <td class="booked"><b>1</b></td>
 <td class="booked"><b>1</b></td>
 <td class="booked"><b>1</b></td>
 <td class="today">&nbsp;</td>
 <td class="default">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">7500.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">37%</td><td class="defaultlight" style="text-align:right white-space:nowrap">7500.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">15</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-03-25 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%">&nbsp;</span></td>
 <td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">500</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">&nbsp</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
-<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="headersmall">Plan</td>
+<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Work in progress</td><td class="headersmall">Plan</td>
 <td class="bookedlight">1</td>
 <td class="bookedlight">1</td>
 <td class="bookedlight">1</td>
 <td class="bookedlight">&nbsp;</td>
 </tr>
 <tr>
-<td class="defaultlight" style="text-align:right white-space:nowrap">7500.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
+<td class="defaultlight" style="text-align:right white-space:nowrap">34%</td><td class="defaultlight" style="text-align:right white-space:nowrap">7500.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">15</td>
 <td class="defaultlight" style="white-space:nowrap">2003-03-27 18:00:00 GMT</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-03-27 18:00:00 GMT</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td>
-<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td><td class="headersmall">Actual</td>
+<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Work in progress</td><td class="headersmall">Actual</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="completedlight">1</td>
 <td class="bookedlight">&nbsp;</td>
 <td class="bookedlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">7500.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">100%</td><td class="defaultlight" style="text-align:right white-space:nowrap">7500.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">20.4</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">15</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-21 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%">This is a sub-task of Task1</span></td>
 <td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">900</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%">tux 7, tux 2</span></td>
 <td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">Tux 3</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
-<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap"> 15</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-02 10:00:00 GMT</td><td class="headersmall">Plan</td>
+<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap"> 15</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-02 10:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Finished</td><td class="headersmall">Plan</td>
 <td class="bookedlight"><b>1</b></td>
 <td class="bookedlight"><b>1</b></td>
 <td class="bookedlight"><b>1</b></td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
 <tr>
-<td class="defaultlight" style="text-align:right white-space:nowrap">7500.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">20.4</td>
+<td class="defaultlight" style="text-align:right white-space:nowrap">100%</td><td class="defaultlight" style="text-align:right white-space:nowrap">7500.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">20.4</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">15</td>
 <td class="defaultlight" style="white-space:nowrap">2003-01-23 18:00:00 GMT</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-22 17:00:00 GMT</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%">tux 7, tux 2</span></td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 09:00:00 GMT</td>
-<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-06 10:00:00 GMT</td><td class="headersmall">Actual</td>
+<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-06 10:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Finished</td><td class="headersmall">Actual</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="completedlight"><b>1</b></td>
 <td class="today">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">30000.000</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">120</td>
+<tr valign="middle"><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">30000.000</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">120</td>
 <td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap">flag2, flag3</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap">tux4</td><td class="default" rowspan="2">5.</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap"></td><td class="default" rowspan="2" style="text-align:right; white-space:nowrap">1.00</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:right; white-space:nowrap">0.00</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="task" rowspan="2" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:105%"><a name="resource_tux4"></a>tux 4</span></td>
 <td class="default" rowspan="2">4.</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:right; white-space:nowrap">250.000</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:left"><table style="width:150px; font-size:100%; text-align:left"><tr><th style="width:35%"></th><th style="width:65%"></th></tr>
 </table>
 </td>
-<td class="default" rowspan="2">4.</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="headersmall">Plan</td>
+<td class="default" rowspan="2">4.</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="headersmall">Plan</td>
 <td class="booked">8</td>
 <td class="booked">8</td>
 <td class="booked">8</td>
 <td class="today">&nbsp;</td>
 <td class="default">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">30000.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">37%</td><td class="defaultlight" style="text-align:right white-space:nowrap">30000.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">120</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-03-25 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%">&nbsp;</span></td>
 <td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">500</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">&nbsp</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
-<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="headersmall">Plan</td>
+<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Work in progress</td><td class="headersmall">Plan</td>
 <td class="bookedlight">8</td>
 <td class="bookedlight">8</td>
 <td class="bookedlight">8</td>
 <td class="bookedlight">&nbsp;</td>
 </tr>
 <tr>
-<td class="defaultlight" style="text-align:right white-space:nowrap">30000.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
+<td class="defaultlight" style="text-align:right white-space:nowrap">34%</td><td class="defaultlight" style="text-align:right white-space:nowrap">30000.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">120</td>
 <td class="defaultlight" style="white-space:nowrap">2003-03-27 18:00:00 GMT</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-03-27 18:00:00 GMT</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td>
-<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td><td class="headersmall">Actual</td>
+<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Work in progress</td><td class="headersmall">Actual</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="completedlight">8</td>
 <td class="bookedlight">&nbsp;</td>
 <td class="bookedlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">30000.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">100%</td><td class="defaultlight" style="text-align:right white-space:nowrap">30000.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">20.4</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">120</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-21 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%">This is a sub-task of Task1</span></td>
 <td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">900</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%">tux 7, tux 2</span></td>
 <td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">Tux 3</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
-<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap"> 15</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-02 10:00:00 GMT</td><td class="headersmall">Plan</td>
+<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap"> 15</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-02 10:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Finished</td><td class="headersmall">Plan</td>
 <td class="bookedlight"><b>8</b></td>
 <td class="bookedlight"><b>8</b></td>
 <td class="bookedlight"><b>8</b></td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
 <tr>
-<td class="defaultlight" style="text-align:right white-space:nowrap">30000.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">20.4</td>
+<td class="defaultlight" style="text-align:right white-space:nowrap">100%</td><td class="defaultlight" style="text-align:right white-space:nowrap">30000.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">20.4</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">120</td>
 <td class="defaultlight" style="white-space:nowrap">2003-01-23 18:00:00 GMT</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-22 17:00:00 GMT</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%">tux 7, tux 2</span></td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 09:00:00 GMT</td>
-<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-06 10:00:00 GMT</td><td class="headersmall">Actual</td>
+<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-06 10:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Finished</td><td class="headersmall">Actual</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="completedlight"><b>8</b></td>
 <td class="today">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">15000.000</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">60</td>
+<tr valign="middle"><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">15000.000</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">60</td>
 <td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap">flag2, flag3</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap">tux5</td><td class="default" rowspan="2">6.</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap"></td><td class="default" rowspan="2" style="text-align:right; white-space:nowrap">1.00</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:right; white-space:nowrap">0.00</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="task" rowspan="2" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:100%"><a name="resource_tux5"></a>tux 5</span></td>
 <td class="default" rowspan="2">5.</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:right; white-space:nowrap">250.000</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:left"><table style="width:150px; font-size:100%; text-align:left"><tr><th style="width:35%"></th><th style="width:65%"></th></tr>
 </table>
 </td>
-<td class="default" rowspan="2">5.</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="headersmall">Plan</td>
+<td class="default" rowspan="2">5.</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="headersmall">Plan</td>
 <td class="booked">4</td>
 <td class="booked">4</td>
 <td class="booked">4</td>
 <td class="today">&nbsp;</td>
 <td class="default">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">15000.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">37%</td><td class="defaultlight" style="text-align:right white-space:nowrap">15000.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">60</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-03-25 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%">&nbsp;</span></td>
 <td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">500</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">&nbsp</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
-<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="headersmall">Plan</td>
+<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Work in progress</td><td class="headersmall">Plan</td>
 <td class="bookedlight">4</td>
 <td class="bookedlight">4</td>
 <td class="bookedlight">4</td>
 <td class="bookedlight">&nbsp;</td>
 </tr>
 <tr>
-<td class="defaultlight" style="text-align:right white-space:nowrap">15000.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
+<td class="defaultlight" style="text-align:right white-space:nowrap">34%</td><td class="defaultlight" style="text-align:right white-space:nowrap">15000.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">60</td>
 <td class="defaultlight" style="white-space:nowrap">2003-03-27 18:00:00 GMT</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-03-27 18:00:00 GMT</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td>
-<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td><td class="headersmall">Actual</td>
+<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Work in progress</td><td class="headersmall">Actual</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="completedlight">4</td>
 <td class="bookedlight">&nbsp;</td>
 <td class="bookedlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">15000.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">100%</td><td class="defaultlight" style="text-align:right white-space:nowrap">15000.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">20.4</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">60</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-21 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%">This is a sub-task of Task1</span></td>
 <td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">900</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%">tux 7, tux 2</span></td>
 <td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">Tux 3</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
-<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap"> 15</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-02 10:00:00 GMT</td><td class="headersmall">Plan</td>
+<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap"> 15</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-02 10:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Finished</td><td class="headersmall">Plan</td>
 <td class="bookedlight"><b>4</b></td>
 <td class="bookedlight"><b>4</b></td>
 <td class="bookedlight"><b>4</b></td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
 <tr>
-<td class="defaultlight" style="text-align:right white-space:nowrap">15000.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">20.4</td>
+<td class="defaultlight" style="text-align:right white-space:nowrap">100%</td><td class="defaultlight" style="text-align:right white-space:nowrap">15000.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">20.4</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">60</td>
 <td class="defaultlight" style="white-space:nowrap">2003-01-23 18:00:00 GMT</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-22 17:00:00 GMT</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%">tux 7, tux 2</span></td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 09:00:00 GMT</td>
-<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-06 10:00:00 GMT</td><td class="headersmall">Actual</td>
+<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-06 10:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Finished</td><td class="headersmall">Actual</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="completedlight"><b>4</b></td>
 <td class="today">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">7500.000</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">30</td>
+<tr valign="middle"><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">7500.000</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">30</td>
 <td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap">flag2, flag3</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap">tux6</td><td class="default" rowspan="2">7.</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap"></td><td class="default" rowspan="2" style="text-align:right; white-space:nowrap">1.00</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:right; white-space:nowrap">0.00</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="task" rowspan="2" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:95%"><a name="resource_tux6"></a>tux 6</span></td>
 <td class="default" rowspan="2">6.</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:right; white-space:nowrap">250.000</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:left"><table style="width:150px; font-size:100%; text-align:left"><tr><th style="width:35%"></th><th style="width:65%"></th></tr>
 </table>
 </td>
-<td class="default" rowspan="2">6.</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="headersmall">Plan</td>
+<td class="default" rowspan="2">6.</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="headersmall">Plan</td>
 <td class="booked">2</td>
 <td class="booked">2</td>
 <td class="booked">2</td>
 <td class="today">&nbsp;</td>
 <td class="default">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">7500.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">37%</td><td class="defaultlight" style="text-align:right white-space:nowrap">7500.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-03-25 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%">&nbsp;</span></td>
 <td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">500</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">&nbsp</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
-<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="headersmall">Plan</td>
+<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Work in progress</td><td class="headersmall">Plan</td>
 <td class="bookedlight">2</td>
 <td class="bookedlight">2</td>
 <td class="bookedlight">2</td>
 <td class="bookedlight">&nbsp;</td>
 </tr>
 <tr>
-<td class="defaultlight" style="text-align:right white-space:nowrap">7500.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
+<td class="defaultlight" style="text-align:right white-space:nowrap">34%</td><td class="defaultlight" style="text-align:right white-space:nowrap">7500.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
 <td class="defaultlight" style="white-space:nowrap">2003-03-27 18:00:00 GMT</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-03-27 18:00:00 GMT</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td>
-<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td><td class="headersmall">Actual</td>
+<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Work in progress</td><td class="headersmall">Actual</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="completedlight">2</td>
 <td class="bookedlight">&nbsp;</td>
 <td class="bookedlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">7500.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">100%</td><td class="defaultlight" style="text-align:right white-space:nowrap">7500.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">20.4</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-21 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%">This is a sub-task of Task1</span></td>
 <td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">900</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%">tux 7, tux 2</span></td>
 <td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">Tux 3</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
-<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap"> 15</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-02 10:00:00 GMT</td><td class="headersmall">Plan</td>
+<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap"> 15</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-02 10:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Finished</td><td class="headersmall">Plan</td>
 <td class="bookedlight"><b>2</b></td>
 <td class="bookedlight"><b>2</b></td>
 <td class="bookedlight"><b>2</b></td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
 <tr>
-<td class="defaultlight" style="text-align:right white-space:nowrap">7500.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">20.4</td>
+<td class="defaultlight" style="text-align:right white-space:nowrap">100%</td><td class="defaultlight" style="text-align:right white-space:nowrap">7500.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">20.4</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
 <td class="defaultlight" style="white-space:nowrap">2003-01-23 18:00:00 GMT</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-22 17:00:00 GMT</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%">tux 7, tux 2</span></td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 09:00:00 GMT</td>
-<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-06 10:00:00 GMT</td><td class="headersmall">Actual</td>
+<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-06 10:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Finished</td><td class="headersmall">Actual</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="completedlight"><b>2</b></td>
 <td class="today">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">3750.000</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">15</td>
+<tr valign="middle"><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">3750.000</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">15</td>
 <td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap">flag2, flag3, flag4</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap">tux7</td><td class="default" rowspan="2">8.</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap"></td><td class="default" rowspan="2" style="text-align:right; white-space:nowrap">1.00</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:right; white-space:nowrap">0.00</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="task" rowspan="2" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:90%"><a name="resource_tux7"></a>tux 7</span></td>
 <td class="default" rowspan="2">7.</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:right; white-space:nowrap">250.000</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:left"><table style="width:150px; font-size:100%; text-align:left"><tr><th style="width:35%"></th><th style="width:65%"></th></tr>
 </tr>
 </table>
 </td>
-<td class="default" rowspan="2">7.</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="headersmall">Plan</td>
+<td class="default" rowspan="2">7.</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="headersmall">Plan</td>
 <td class="booked"><b>1</b></td>
 <td class="booked"><b>1</b></td>
 <td class="booked"><b>1</b></td>
 <td class="today">&nbsp;</td>
 <td class="default">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">3750.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">37%</td><td class="defaultlight" style="text-align:right white-space:nowrap">3750.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">15</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-03-25 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%">&nbsp;</span></td>
 <td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">500</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">&nbsp</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
-<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="headersmall">Plan</td>
+<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Work in progress</td><td class="headersmall">Plan</td>
 <td class="bookedlight">1</td>
 <td class="bookedlight">1</td>
 <td class="bookedlight">1</td>
 <td class="bookedlight">&nbsp;</td>
 </tr>
 <tr>
-<td class="defaultlight" style="text-align:right white-space:nowrap">3750.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
+<td class="defaultlight" style="text-align:right white-space:nowrap">34%</td><td class="defaultlight" style="text-align:right white-space:nowrap">3750.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">15</td>
 <td class="defaultlight" style="white-space:nowrap">2003-03-27 18:00:00 GMT</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-03-27 18:00:00 GMT</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td>
-<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td><td class="headersmall">Actual</td>
+<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Work in progress</td><td class="headersmall">Actual</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="completedlight">1</td>
 <td class="bookedlight">&nbsp;</td>
 <td class="bookedlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">3750.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">100%</td><td class="defaultlight" style="text-align:right white-space:nowrap">3750.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">20.4</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">15</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-21 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%">This is a sub-task of Task1</span></td>
 <td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">900</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%">tux 7, tux 2</span></td>
 <td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">Tux 3</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
-<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap"> 15</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-02 10:00:00 GMT</td><td class="headersmall">Plan</td>
+<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap"> 15</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-02 10:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Finished</td><td class="headersmall">Plan</td>
 <td class="bookedlight"><b>1</b></td>
 <td class="bookedlight"><b>1</b></td>
 <td class="bookedlight"><b>1</b></td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
 <tr>
-<td class="defaultlight" style="text-align:right white-space:nowrap">3750.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">20.4</td>
+<td class="defaultlight" style="text-align:right white-space:nowrap">100%</td><td class="defaultlight" style="text-align:right white-space:nowrap">3750.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">20.4</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">15</td>
 <td class="defaultlight" style="white-space:nowrap">2003-01-23 18:00:00 GMT</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-22 17:00:00 GMT</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%">tux 7, tux 2</span></td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 09:00:00 GMT</td>
-<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-06 10:00:00 GMT</td><td class="headersmall">Actual</td>
+<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-06 10:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Finished</td><td class="headersmall">Actual</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="completedlight"><b>1</b></td>
 <td class="today">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">12000.000</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">30</td>
+<tr valign="middle"><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">12000.000</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:right white-space:nowrap">30</td>
 <td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap">&nbsp</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap">tux3</td><td class="default" rowspan="2">1.</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap"></td><td class="default" rowspan="2" style="text-align:right; white-space:nowrap">1.00</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:right; white-space:nowrap">0.00</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="task" rowspan="2" style="white-space:nowrap"><span style="font-size:110%"><a name="resource_tux3"></a>Tux 3</span></td>
 <td class="default" rowspan="2">8.</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:right; white-space:nowrap">400.000</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left"><span style="font-size:100%">t1.t3</span></td>
 <td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:left"><table style="width:150px; font-size:100%; text-align:left"><tr><th style="width:35%"></th><th style="width:65%"></th></tr>
 </tr>
 </table>
 </td>
-<td class="default" rowspan="2">8.</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="headersmall">Plan</td>
+<td class="default" rowspan="2">8.</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">&nbsp;</td><td class="headersmall">Plan</td>
 <td class="default">&nbsp;</td>
 <td class="default">&nbsp;</td>
 <td class="default">&nbsp;</td>
 <td class="booked"><b>11</b></td>
 <td class="booked"><b>19</b></td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">12000.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">37%</td><td class="defaultlight" style="text-align:right white-space:nowrap">12000.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-03-25 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%">&nbsp;</span></td>
 <td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">500</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">&nbsp</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
-<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="headersmall">Plan</td>
+<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">  0</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Work in progress</td><td class="headersmall">Plan</td>
 <td class="bookedlight">&nbsp;</td>
 <td class="bookedlight">&nbsp;</td>
 <td class="bookedlight">&nbsp;</td>
 <td class="bookedlight">17</td>
 </tr>
 <tr>
-<td class="defaultlight" style="text-align:right white-space:nowrap">12000.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
+<td class="defaultlight" style="text-align:right white-space:nowrap">34%</td><td class="defaultlight" style="text-align:right white-space:nowrap">12000.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">83.7</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
 <td class="defaultlight" style="white-space:nowrap">2003-03-27 18:00:00 GMT</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-03-27 18:00:00 GMT</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td>
-<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td><td class="headersmall">Actual</td>
+<td class="defaultlight" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Work in progress</td><td class="headersmall">Actual</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="completedlight">&nbsp;</td>
 <td class="bookedlight">11</td>
 <td class="bookedlight">19</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">12000.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%">t1.t2, t1.t3</span</td>
+<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">0%</td><td class="defaultlight" style="text-align:right white-space:nowrap">12000.000</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%">t1.t2, t1.t3</span</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">41.4</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-03-25 18:00:00 GMT</td>
 <td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%">&nbsp;</span></td>
 <td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">500</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">prj (A)</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%">Tux 3</span></td>
 <td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">tux 1</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2"></td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-02-12 09:00:00 GMT</td>
-<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap"> 10</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-02-13 14:00:00 GMT</td><td class="headersmall">Plan</td>
+<td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap"> 10</td><td class="defaultlight" style="text-align:left white-space:nowrap">2003-02-13 14:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Not yet started</td><td class="headersmall">Plan</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="bookedlight"><b>17</b></td>
 </tr>
 <tr>
-<td class="defaultlight" style="text-align:right white-space:nowrap">12000.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">41.4</td>
+<td class="defaultlight" style="text-align:right white-space:nowrap">0%</td><td class="defaultlight" style="text-align:right white-space:nowrap">12000.000</td><td class="defaultlight" style="text-align:right white-space:nowrap">41.4</td>
 <td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
 <td class="defaultlight" style="white-space:nowrap">2003-03-27 18:00:00 GMT</td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-03-26 14:00:00 GMT</td><td class="defaultlight" style="text-align:left"><span style="font-size:100%">Tux 3</span></td>
 <td class="defaultlight" style="text-align:left white-space:nowrap">2003-02-14 09:00:00 GMT</td>
-<td class="defaultlight" style="text-align:left white-space:nowrap">2003-02-17 14:00:00 GMT</td><td class="headersmall">Actual</td>
+<td class="defaultlight" style="text-align:left white-space:nowrap">2003-02-17 14:00:00 GMT</td><td class="defaultlight" style="text-align:center white-space:nowrap">Not yet started</td><td class="headersmall">Actual</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
index 24f376c..ffb9e67 100644 (file)
@@ -24,7 +24,7 @@
 <table align="center" cellpadding="1">
 
 <tr>
-<td class="headerbig" rowspan="2">Costs</td><td class="headerbig" rowspan="2">Dependencies</td><td class="headerbig" rowspan="2">Duration</td><td class="headerbig" rowspan="2">Effort</td><td class="headerbig" rowspan="2">End</td><td class="headerbig" rowspan="2">End Buf.</td><td class="headerbig" rowspan="2">End Buf. Start</td><td class="headerbig" rowspan="2">Flags</td><td class="headerbig" rowspan="2">Followers</td><td class="headerbig" rowspan="2">ID</td><td class="headerbig" rowspan="2">Index No.</td><td class="headerbig" rowspan="2">Kotrus ID</td><td class="headerbig" rowspan="2">Max. Effort</td><td class="headerbig" rowspan="2">Max. End</td><td class="headerbig" rowspan="2">Max. Start</td><td class="headerbig" rowspan="2">Min. Effort</td><td class="headerbig" rowspan="2">Min. End</td><td class="headerbig" rowspan="2">Min. Start</td><td class="headerbig" rowspan="2">Name</td><td class="headerbig" rowspan="2">No.</td><td class="headerbig" rowspan="2">Note</td><td class="headerbig" rowspan="2">Priority</td><td class="headerbig" rowspan="2">Project ID</td><td class="headerbig" rowspan="2">Rate</td><td class="headerbig" rowspan="2">Resources</td><td class="headerbig" rowspan="2">Responsibilities</td><td class="headerbig" rowspan="2">Responsible</td><td class="headerbig" rowspan="2">Schedule</td><td class="headerbig" rowspan="2">Seq. No.</td><td class="headerbig" rowspan="2">Start</td><td class="headerbig" rowspan="2">Start Buf.</td><td class="headerbig" rowspan="2">Start Buf. End</td><td class="headerbig" colspan="31">Jan 2003</td>
+<td class="headerbig" rowspan="2">Completed</td><td class="headerbig" rowspan="2">Costs</td><td class="headerbig" rowspan="2">Dependencies</td><td class="headerbig" rowspan="2">Duration</td><td class="headerbig" rowspan="2">Effort</td><td class="headerbig" rowspan="2">End</td><td class="headerbig" rowspan="2">End Buf.</td><td class="headerbig" rowspan="2">End Buf. Start</td><td class="headerbig" rowspan="2">Flags</td><td class="headerbig" rowspan="2">Followers</td><td class="headerbig" rowspan="2">ID</td><td class="headerbig" rowspan="2">Index No.</td><td class="headerbig" rowspan="2">Kotrus ID</td><td class="headerbig" rowspan="2">Max. Effort</td><td class="headerbig" rowspan="2">Max. End</td><td class="headerbig" rowspan="2">Max. Start</td><td class="headerbig" rowspan="2">Min. Effort</td><td class="headerbig" rowspan="2">Min. End</td><td class="headerbig" rowspan="2">Min. Start</td><td class="headerbig" rowspan="2">Name</td><td class="headerbig" rowspan="2">No.</td><td class="headerbig" rowspan="2">Note</td><td class="headerbig" rowspan="2">Priority</td><td class="headerbig" rowspan="2">Project ID</td><td class="headerbig" rowspan="2">Rate</td><td class="headerbig" rowspan="2">Resources</td><td class="headerbig" rowspan="2">Responsibilities</td><td class="headerbig" rowspan="2">Responsible</td><td class="headerbig" rowspan="2">Schedule</td><td class="headerbig" rowspan="2">Seq. No.</td><td class="headerbig" rowspan="2">Start</td><td class="headerbig" rowspan="2">Start Buf.</td><td class="headerbig" rowspan="2">Start Buf. End</td><td class="headerbig" rowspan="2">Status</td><td class="headerbig" colspan="31">Jan 2003</td>
 <td class="headerbig" colspan="28">Feb 2003</td>
 <td class="headerbig" colspan="31">Mar 2003</td>
 <td class="headerbig" colspan="5">Jan 2003</td>
@@ -36,7 +36,7 @@
 <tr>
 <td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;1</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;2</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;3</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;4</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;5</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;6</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;7</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;8</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;9</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;10</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;11</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;12</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;13</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;14</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;15</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;16</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;17</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;18</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;19</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;20</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;21</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;22</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;23</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;24</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;25</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;26</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;27</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;28</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;29</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;30</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;31</span></td><td class="today"><span style="font-size:0.8em">&nbsp;&nbsp;1</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;2</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;3</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;4</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;5</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;6</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;7</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;8</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;9</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;10</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;11</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;12</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;13</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;14</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;15</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;16</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;17</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;18</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;19</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;20</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;21</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;22</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;23</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;24</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;25</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;26</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;27</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;28</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;1</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;2</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;3</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;4</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;5</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;6</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;7</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;8</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;9</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;10</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;11</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;12</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;13</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;14</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;15</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;16</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;17</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;18</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;19</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;20</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;21</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;22</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;23</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;24</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;25</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;26</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;27</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;28</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;29</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;30</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;31</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;1</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;2</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;3</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;4</span></td><td class="today"><span style="font-size:0.8em">&nbsp;&nbsp;5</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;6</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;7</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;8</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;9</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;10</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;11</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;12</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;13</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;14</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;Jan</span></td><td class="today"><span style="font-size:0.8em">&nbsp;Feb</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;Mar</span></td></tr>
 
-<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">36000.000</td><td class="default" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">37%</td><td class="default" style="text-align:right white-space:nowrap">36000.000</td><td class="default" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="default" style="text-align:right white-space:nowrap">83.7</td>
 <td class="default" style="text-align:right white-space:nowrap">90</td>
 <td class="default" style="text-align:left white-space:nowrap">2003-03-25 18:00:00 GMT</td>
@@ -45,7 +45,7 @@
 <td class="default" rowspan="1">1.</td><td class="default" rowspan="1" style="text-align:left"><span style="font-size:100%">&nbsp;</span></td>
 <td class="default" rowspan="1" style="text-align:right; white-space:nowrap">500</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap">prj (A)</td><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap">&nbsp</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">1.</td><td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
-<td class="default" rowspan="1" style="text-align:right; white-space:nowrap">  0</td><td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="booked">2</td>
+<td class="default" rowspan="1" style="text-align:right; white-space:nowrap">  0</td><td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="default" style="text-align:center white-space:nowrap">Work in progress</td><td class="booked">2</td>
 <td class="booked">2</td>
 <td class="booked">2</td>
 <td class="booked">&nbsp;</td>
 <td class="booked">27</td>
 <td class="booked">17</td>
 </tr>
-<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">9000.000</td><td class="default" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">76%</td><td class="default" style="text-align:right white-space:nowrap">9000.000</td><td class="default" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="default" style="text-align:right white-space:nowrap">41.4</td>
 <td class="default" style="text-align:right white-space:nowrap">30</td>
 <td class="default" style="text-align:left white-space:nowrap">2003-02-11 18:00:00 GMT</td>
 <td class="default" rowspan="1">2.</td><td class="default" rowspan="1" style="text-align:left"><span style="font-size:100%">This is Task2</span></td>
 <td class="default" rowspan="1" style="text-align:right; white-space:nowrap">10</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap">prj (A)</td><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:left"><span style="font-size:100%">Tux 1</span></td>
 <td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap">Tux 2</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">2.</td><td class="default" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
-<td class="default" rowspan="1" style="text-align:right; white-space:nowrap">  0</td><td class="default" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td><td class="booked"><b>1</b></td>
+<td class="default" rowspan="1" style="text-align:right; white-space:nowrap">  0</td><td class="default" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td><td class="default" style="text-align:center white-space:nowrap">On schedule</td><td class="booked"><b>1</b></td>
 <td class="booked"><b>1</b></td>
 <td class="booked"><b>1</b></td>
 <td class="booked">&nbsp;</td>
 <td class="booked"><b>7</b></td>
 <td class="default">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">9000.000</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
+<tr valign="middle"><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:right white-space:nowrap">9000.000</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
 <td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">&nbsp</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">tux1</td><td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">tux1</td><td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">1.00</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">0.00</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="tasklight" rowspan="1" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:90%">Tux 1</span></td>
 <td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">300.000</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%">t1.t4</span></td>
 <td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:left"><table style="width:150px; font-size:100%; text-align:left"><tr><th style="width:35%"></th><th style="width:65%"></th></tr>
 </tr>
 </table>
 </td>
-<td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="bookedlight"><b>1</b></td>
+<td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="bookedlight"><b>1</b></td>
 <td class="bookedlight"><b>1</b></td>
 <td class="bookedlight"><b>1</b></td>
 <td class="weekend">&nbsp;</td>
 <td class="bookedlight"><b>7</b></td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">15000.000</td><td class="default" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">76%</td><td class="default" style="text-align:right white-space:nowrap">15000.000</td><td class="default" rowspan="1" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="default" style="text-align:right white-space:nowrap">41.4</td>
 <td class="default" style="text-align:right white-space:nowrap">30</td>
 <td class="default" style="text-align:left white-space:nowrap">2003-02-11 18:00:00 GMT</td>
 <td class="default" rowspan="1">3.</td><td class="default" rowspan="1" style="text-align:left"><span style="font-size:100%">This is a sub-task of Task1</span></td>
 <td class="default" rowspan="1" style="text-align:right; white-space:nowrap">900</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap">prj (A)</td><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:left"><span style="font-size:100%">Tux 2</span></td>
 <td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap">Tux 3</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">3.</td><td class="default" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
-<td class="default" rowspan="1" style="text-align:right; white-space:nowrap"> 15</td><td class="default" style="text-align:left white-space:nowrap">2003-01-03 11:00:00 GMT</td><td class="bookedlight"><b>1</b></td>
+<td class="default" rowspan="1" style="text-align:right; white-space:nowrap"> 15</td><td class="default" style="text-align:left white-space:nowrap">2003-01-03 11:00:00 GMT</td><td class="default" style="text-align:center white-space:nowrap">On schedule</td><td class="bookedlight"><b>1</b></td>
 <td class="bookedlight"><b>1</b></td>
 <td class="bookedlight"><b>1</b></td>
 <td class="booked">&nbsp;</td>
 <td class="bookedlight"><b>7</b></td>
 <td class="default">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">15000.000</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
+<tr valign="middle"><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:right white-space:nowrap">15000.000</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
 <td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">&nbsp</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">tux2</td><td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">tux der 2.</td><td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">1.00</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">0.00</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="tasklight" rowspan="1" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:90%">Tux 2</span></td>
 <td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">500.000</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%">t1.t2</span></td>
 <td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:left"><table style="width:150px; font-size:100%; text-align:left"><tr><th style="width:35%"></th><th style="width:65%"></th></tr>
 </tr>
 </table>
 </td>
-<td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="bookedlight"><b>1</b></td>
+<td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="bookedlight"><b>1</b></td>
 <td class="bookedlight"><b>1</b></td>
 <td class="bookedlight"><b>1</b></td>
 <td class="weekend">&nbsp;</td>
 <td class="bookedlight"><b>7</b></td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">12000.000</td><td class="default" rowspan="1" style="text-align:left"><span style="font-size:100%">t1.t2, t1.t3</span</td>
+<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">0%</td><td class="default" style="text-align:right white-space:nowrap">12000.000</td><td class="default" rowspan="1" style="text-align:left"><span style="font-size:100%">t1.t2, t1.t3</span</td>
 <td class="default" style="text-align:right white-space:nowrap">41.4</td>
 <td class="default" style="text-align:right white-space:nowrap">30</td>
 <td class="default" style="text-align:left white-space:nowrap">2003-03-25 18:00:00 GMT</td>
 <td class="default" rowspan="1">4.</td><td class="default" rowspan="1" style="text-align:left"><span style="font-size:100%">&nbsp;</span></td>
 <td class="default" rowspan="1" style="text-align:right; white-space:nowrap">500</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap">prj (A)</td><td class="default" rowspan="1">&nbsp;</td><td class="default" style="text-align:left"><span style="font-size:100%">Tux 3</span></td>
 <td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1" style="text-align:left; white-space:nowrap">Tux 1</td><td class="default" rowspan="1">&nbsp;</td><td class="default" rowspan="1">4.</td><td class="default" style="text-align:left white-space:nowrap">2003-02-12 09:00:00 GMT</td>
-<td class="default" rowspan="1" style="text-align:right; white-space:nowrap"> 10</td><td class="default" style="text-align:left white-space:nowrap">2003-02-13 14:00:00 GMT</td><td class="default">&nbsp;</td>
+<td class="default" rowspan="1" style="text-align:right; white-space:nowrap"> 10</td><td class="default" style="text-align:left white-space:nowrap">2003-02-13 14:00:00 GMT</td><td class="default" style="text-align:center white-space:nowrap">Not yet started</td><td class="default">&nbsp;</td>
 <td class="default">&nbsp;</td>
 <td class="default">&nbsp;</td>
 <td class="weekend">&nbsp;</td>
 <td class="bookedlight"><b>13</b></td>
 <td class="bookedlight"><b>17</b></td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">12000.000</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
+<tr valign="middle"><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:right white-space:nowrap">12000.000</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
 <td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">&nbsp</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap">tux3</td><td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1" style="text-align:left; white-space:nowrap"></td><td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">1.00</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">0.00</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="tasklight" rowspan="1" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:90%">Tux 3</span></td>
 <td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:right; white-space:nowrap">400.000</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1" style="text-align:left"><span style="font-size:100%">t1.t3</span></td>
 <td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" style="text-align:left"><table style="width:150px; font-size:100%; text-align:left"><tr><th style="width:35%"></th><th style="width:65%"></th></tr>
 </tr>
 </table>
 </td>
-<td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight">&nbsp;</td>
+<td class="defaultlight" rowspan="1"></td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight" rowspan="1">&nbsp;</td><td class="defaultlight">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="weekend">&nbsp;</td>
index 4a0f521..c1ed0e2 100644 (file)
@@ -24,7 +24,7 @@
 <table align="center" cellpadding="1">
 
 <tr>
-<td class="headerbig" rowspan="2">Costs</td><td class="headerbig" rowspan="2">Dependencies</td><td class="headerbig" rowspan="2">Duration</td><td class="headerbig" rowspan="2">Effort</td><td class="headerbig" rowspan="2">End</td><td class="headerbig" rowspan="2">End Buf.</td><td class="headerbig" rowspan="2">End Buf. Start</td><td class="headerbig" rowspan="2">Flags</td><td class="headerbig" rowspan="2">Followers</td><td class="headerbig" rowspan="2">ID</td><td class="headerbig" rowspan="2">Index No.</td><td class="headerbig" rowspan="2">Kotrus ID</td><td class="headerbig" rowspan="2">Max. Effort</td><td class="headerbig" rowspan="2">Max. End</td><td class="headerbig" rowspan="2">Max. Start</td><td class="headerbig" rowspan="2">Min. Effort</td><td class="headerbig" rowspan="2">Min. End</td><td class="headerbig" rowspan="2">Min. Start</td><td class="headerbig" rowspan="2">Name</td><td class="headerbig" rowspan="2">No.</td><td class="headerbig" rowspan="2">Note</td><td class="headerbig" rowspan="2">Priority</td><td class="headerbig" rowspan="2">Project ID</td><td class="headerbig" rowspan="2">Rate</td><td class="headerbig" rowspan="2">Resources</td><td class="headerbig" rowspan="2">Responsibilities</td><td class="headerbig" rowspan="2">Responsible</td><td class="headerbig" rowspan="2">Schedule</td><td class="headerbig" rowspan="2">Seq. No.</td><td class="headerbig" rowspan="2">Start</td><td class="headerbig" rowspan="2">Start Buf.</td><td class="headerbig" rowspan="2">Start Buf. End</td><td class="headerbig" rowspan="2">&nbsp;</td><td class="headerbig" colspan="31">Jan 2003</td>
+<td class="headerbig" rowspan="2">Completed</td><td class="headerbig" rowspan="2">Costs</td><td class="headerbig" rowspan="2">Dependencies</td><td class="headerbig" rowspan="2">Duration</td><td class="headerbig" rowspan="2">Effort</td><td class="headerbig" rowspan="2">End</td><td class="headerbig" rowspan="2">End Buf.</td><td class="headerbig" rowspan="2">End Buf. Start</td><td class="headerbig" rowspan="2">Flags</td><td class="headerbig" rowspan="2">Followers</td><td class="headerbig" rowspan="2">ID</td><td class="headerbig" rowspan="2">Index No.</td><td class="headerbig" rowspan="2">Kotrus ID</td><td class="headerbig" rowspan="2">Max. Effort</td><td class="headerbig" rowspan="2">Max. End</td><td class="headerbig" rowspan="2">Max. Start</td><td class="headerbig" rowspan="2">Min. Effort</td><td class="headerbig" rowspan="2">Min. End</td><td class="headerbig" rowspan="2">Min. Start</td><td class="headerbig" rowspan="2">Name</td><td class="headerbig" rowspan="2">No.</td><td class="headerbig" rowspan="2">Note</td><td class="headerbig" rowspan="2">Priority</td><td class="headerbig" rowspan="2">Project ID</td><td class="headerbig" rowspan="2">Rate</td><td class="headerbig" rowspan="2">Resources</td><td class="headerbig" rowspan="2">Responsibilities</td><td class="headerbig" rowspan="2">Responsible</td><td class="headerbig" rowspan="2">Schedule</td><td class="headerbig" rowspan="2">Seq. No.</td><td class="headerbig" rowspan="2">Start</td><td class="headerbig" rowspan="2">Start Buf.</td><td class="headerbig" rowspan="2">Start Buf. End</td><td class="headerbig" rowspan="2">Status</td><td class="headerbig" rowspan="2">&nbsp;</td><td class="headerbig" colspan="31">Jan 2003</td>
 <td class="headerbig" colspan="28">Feb 2003</td>
 <td class="headerbig" colspan="31">Mar 2003</td>
 <td class="headerbig" rowspan="2">&nbsp;</td><td class="headerbig" colspan="5">Jan 2003</td>
@@ -36,7 +36,7 @@
 <tr>
 <td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;1</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;2</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;3</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;4</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;5</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;6</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;7</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;8</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;9</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;10</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;11</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;12</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;13</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;14</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;15</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;16</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;17</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;18</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;19</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;20</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;21</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;22</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;23</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;24</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;25</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;26</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;27</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;28</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;29</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;30</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;31</span></td><td class="today"><span style="font-size:0.8em">&nbsp;&nbsp;1</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;2</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;3</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;4</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;5</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;6</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;7</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;8</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;9</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;10</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;11</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;12</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;13</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;14</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;15</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;16</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;17</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;18</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;19</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;20</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;21</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;22</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;23</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;24</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;25</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;26</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;27</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;28</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;1</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;2</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;3</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;4</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;5</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;6</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;7</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;8</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;&nbsp;9</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;10</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;11</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;12</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;13</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;14</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;15</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;16</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;17</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;18</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;19</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;20</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;21</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;22</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;23</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;24</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;25</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;26</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;27</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;28</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;29</span></td><td class="weekend"><span style="font-size:0.8em">&nbsp;30</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;31</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;1</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;2</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;3</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;4</span></td><td class="today"><span style="font-size:0.8em">&nbsp;&nbsp;5</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;6</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;7</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;8</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;&nbsp;9</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;10</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;11</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;12</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;13</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;14</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;Jan</span></td><td class="today"><span style="font-size:0.8em">&nbsp;Feb</span></td><td class="headersmall"><span style="font-size:0.8em">&nbsp;Mar</span></td></tr>
 
-<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">36000.000</td><td class="default" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">37%</td><td class="default" style="text-align:right white-space:nowrap">36000.000</td><td class="default" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="default" style="text-align:right white-space:nowrap">83.7</td>
 <td class="default" style="text-align:right white-space:nowrap">90</td>
 <td class="default" style="text-align:left white-space:nowrap">2003-03-25 18:00:00 GMT</td>
@@ -45,7 +45,7 @@
 <td class="default" rowspan="2">1.</td><td class="default" rowspan="2" style="text-align:left"><span style="font-size:100%">&nbsp;</span></td>
 <td class="default" rowspan="2" style="text-align:right; white-space:nowrap">500</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap">prj (A)</td><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap">&nbsp</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">1.</td><td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
-<td class="default" rowspan="2" style="text-align:right; white-space:nowrap">  0</td><td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="headersmall">Plan</td>
+<td class="default" rowspan="2" style="text-align:right; white-space:nowrap">  0</td><td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td><td class="default" style="text-align:center white-space:nowrap">Work in progress</td><td class="headersmall">Plan</td>
 <td class="booked">2</td>
 <td class="booked">2</td>
 <td class="booked">2</td>
 <td class="booked">17</td>
 </tr>
 <tr>
-<td class="default" style="text-align:right white-space:nowrap">36000.000</td><td class="default" style="text-align:right white-space:nowrap">83.7</td>
+<td class="default" style="text-align:right white-space:nowrap">34%</td><td class="default" style="text-align:right white-space:nowrap">36000.000</td><td class="default" style="text-align:right white-space:nowrap">83.7</td>
 <td class="default" style="text-align:right white-space:nowrap">90</td>
 <td class="default" style="white-space:nowrap">2003-03-27 18:00:00 GMT</td>
 <td class="default" style="text-align:left white-space:nowrap">2003-03-27 18:00:00 GMT</td><td class="default" style="text-align:left"><span style="font-size:100%"></span></td>
 <td class="default" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td>
-<td class="default" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td><td class="headersmall">Actual</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td><td class="default" style="text-align:center white-space:nowrap">Work in progress</td><td class="headersmall">Actual</td>
 <td class="default">&nbsp;</td>
 <td class="default">&nbsp;</td>
 <td class="completed">2</td>
 <td class="booked">29</td>
 <td class="booked">19</td>
 </tr>
-<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">9000.000</td><td class="default" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">76%</td><td class="default" style="text-align:right white-space:nowrap">9000.000</td><td class="default" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="default" style="text-align:right white-space:nowrap">41.4</td>
 <td class="default" style="text-align:right white-space:nowrap">30</td>
 <td class="default" style="text-align:left white-space:nowrap">2003-02-11 18:00:00 GMT</td>
 <td class="default" rowspan="2">2.</td><td class="default" rowspan="2" style="text-align:left"><span style="font-size:100%">This is Task2</span></td>
 <td class="default" rowspan="2" style="text-align:right; white-space:nowrap">10</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap">prj (A)</td><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:left"><span style="font-size:100%">Tux 1</span></td>
 <td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap">Tux 2</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">2.</td><td class="default" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
-<td class="default" rowspan="2" style="text-align:right; white-space:nowrap">  0</td><td class="default" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td><td class="headersmall">Plan</td>
+<td class="default" rowspan="2" style="text-align:right; white-space:nowrap">  0</td><td class="default" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td><td class="default" style="text-align:center white-space:nowrap">On schedule</td><td class="headersmall">Plan</td>
 <td class="booked"><b>1</b></td>
 <td class="booked"><b>1</b></td>
 <td class="booked"><b>1</b></td>
 <td class="default">&nbsp;</td>
 </tr>
 <tr>
-<td class="default" style="text-align:right white-space:nowrap">9000.000</td><td class="default" style="text-align:right white-space:nowrap">41.4</td>
+<td class="default" style="text-align:right white-space:nowrap">70%</td><td class="default" style="text-align:right white-space:nowrap">9000.000</td><td class="default" style="text-align:right white-space:nowrap">41.4</td>
 <td class="default" style="text-align:right white-space:nowrap">30</td>
 <td class="default" style="white-space:nowrap">2003-02-13 18:00:00 GMT</td>
 <td class="default" style="text-align:left white-space:nowrap">2003-02-13 18:00:00 GMT</td><td class="default" style="text-align:left"><span style="font-size:100%">Tux 1</span></td>
 <td class="default" style="text-align:left white-space:nowrap">2003-01-03 09:00:00 GMT</td>
-<td class="default" style="text-align:left white-space:nowrap">2003-01-03 09:00:00 GMT</td><td class="headersmall">Actual</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-03 09:00:00 GMT</td><td class="default" style="text-align:center white-space:nowrap">On schedule</td><td class="headersmall">Actual</td>
 <td class="default">&nbsp;</td>
 <td class="default">&nbsp;</td>
 <td class="completed"><b>1</b></td>
 <td class="booked"><b>9</b></td>
 <td class="default">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">9000.000</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
+<tr valign="middle"><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:right white-space:nowrap">9000.000</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
 <td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">&nbsp</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">tux1</td><td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">tux1</td><td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">1.00</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">0.00</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="tasklight" rowspan="2" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:90%">Tux 1</span></td>
 <td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">300.000</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%">t1.t4</span></td>
 <td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:left"><table style="width:150px; font-size:100%; text-align:left"><tr><th style="width:35%"></th><th style="width:65%"></th></tr>
 </tr>
 </table>
 </td>
-<td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="headersmall">Plan</td>
+<td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="headersmall">Plan</td>
 <td class="bookedlight"><b>1</b></td>
 <td class="bookedlight"><b>1</b></td>
 <td class="bookedlight"><b>1</b></td>
 <td class="bookedlight"><b>9</b></td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">15000.000</td><td class="default" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
+<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">76%</td><td class="default" style="text-align:right white-space:nowrap">15000.000</td><td class="default" rowspan="2" style="text-align:left"><span style="font-size:100%"></span</td>
 <td class="default" style="text-align:right white-space:nowrap">41.4</td>
 <td class="default" style="text-align:right white-space:nowrap">30</td>
 <td class="default" style="text-align:left white-space:nowrap">2003-02-11 18:00:00 GMT</td>
 <td class="default" rowspan="2">3.</td><td class="default" rowspan="2" style="text-align:left"><span style="font-size:100%">This is a sub-task of Task1</span></td>
 <td class="default" rowspan="2" style="text-align:right; white-space:nowrap">900</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap">prj (A)</td><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:left"><span style="font-size:100%">Tux 2</span></td>
 <td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap">Tux 3</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">3.</td><td class="default" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
-<td class="default" rowspan="2" style="text-align:right; white-space:nowrap"> 15</td><td class="default" style="text-align:left white-space:nowrap">2003-01-03 11:00:00 GMT</td><td class="headersmall">Plan</td>
+<td class="default" rowspan="2" style="text-align:right; white-space:nowrap"> 15</td><td class="default" style="text-align:left white-space:nowrap">2003-01-03 11:00:00 GMT</td><td class="default" style="text-align:center white-space:nowrap">On schedule</td><td class="headersmall">Plan</td>
 <td class="bookedlight"><b>1</b></td>
 <td class="bookedlight"><b>1</b></td>
 <td class="bookedlight"><b>1</b></td>
 <td class="default">&nbsp;</td>
 </tr>
 <tr>
-<td class="default" style="text-align:right white-space:nowrap">15000.000</td><td class="default" style="text-align:right white-space:nowrap">41.4</td>
+<td class="default" style="text-align:right white-space:nowrap">70%</td><td class="default" style="text-align:right white-space:nowrap">15000.000</td><td class="default" style="text-align:right white-space:nowrap">41.4</td>
 <td class="default" style="text-align:right white-space:nowrap">30</td>
 <td class="default" style="white-space:nowrap">2003-02-13 18:00:00 GMT</td>
 <td class="default" style="text-align:left white-space:nowrap">2003-02-11 16:00:00 GMT</td><td class="default" style="text-align:left"><span style="font-size:100%">Tux 2</span></td>
 <td class="default" style="text-align:left white-space:nowrap">2003-01-03 09:00:00 GMT</td>
-<td class="default" style="text-align:left white-space:nowrap">2003-01-07 11:00:00 GMT</td><td class="headersmall">Actual</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-07 11:00:00 GMT</td><td class="default" style="text-align:center white-space:nowrap">On schedule</td><td class="headersmall">Actual</td>
 <td class="default">&nbsp;</td>
 <td class="default">&nbsp;</td>
 <td class="completed"><b>1</b></td>
 <td class="bookedlight"><b>9</b></td>
 <td class="default">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">15000.000</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
+<tr valign="middle"><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:right white-space:nowrap">15000.000</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
 <td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">&nbsp</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">tux2</td><td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">tux der 2.</td><td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">1.00</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">0.00</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="tasklight" rowspan="2" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:90%">Tux 2</span></td>
 <td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">500.000</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%">t1.t2</span></td>
 <td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:left"><table style="width:150px; font-size:100%; text-align:left"><tr><th style="width:35%"></th><th style="width:65%"></th></tr>
 </tr>
 </table>
 </td>
-<td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="headersmall">Plan</td>
+<td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="headersmall">Plan</td>
 <td class="bookedlight"><b>1</b></td>
 <td class="bookedlight"><b>1</b></td>
 <td class="bookedlight"><b>1</b></td>
 <td class="bookedlight"><b>9</b></td>
 <td class="defaultlight">&nbsp;</td>
 </tr>
-<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">12000.000</td><td class="default" rowspan="2" style="text-align:left"><span style="font-size:100%">t1.t2, t1.t3</span</td>
+<tr valign="middle"><td class="default" style="text-align:right white-space:nowrap">0%</td><td class="default" style="text-align:right white-space:nowrap">12000.000</td><td class="default" rowspan="2" style="text-align:left"><span style="font-size:100%">t1.t2, t1.t3</span</td>
 <td class="default" style="text-align:right white-space:nowrap">41.4</td>
 <td class="default" style="text-align:right white-space:nowrap">30</td>
 <td class="default" style="text-align:left white-space:nowrap">2003-03-25 18:00:00 GMT</td>
 <td class="default" rowspan="2">4.</td><td class="default" rowspan="2" style="text-align:left"><span style="font-size:100%">&nbsp;</span></td>
 <td class="default" rowspan="2" style="text-align:right; white-space:nowrap">500</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap">prj (A)</td><td class="default" rowspan="2">&nbsp;</td><td class="default" style="text-align:left"><span style="font-size:100%">Tux 3</span></td>
 <td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2" style="text-align:left; white-space:nowrap">Tux 1</td><td class="default" rowspan="2">&nbsp;</td><td class="default" rowspan="2">4.</td><td class="default" style="text-align:left white-space:nowrap">2003-02-12 09:00:00 GMT</td>
-<td class="default" rowspan="2" style="text-align:right; white-space:nowrap"> 10</td><td class="default" style="text-align:left white-space:nowrap">2003-02-13 14:00:00 GMT</td><td class="headersmall">Plan</td>
+<td class="default" rowspan="2" style="text-align:right; white-space:nowrap"> 10</td><td class="default" style="text-align:left white-space:nowrap">2003-02-13 14:00:00 GMT</td><td class="default" style="text-align:center white-space:nowrap">Not yet started</td><td class="headersmall">Plan</td>
 <td class="default">&nbsp;</td>
 <td class="default">&nbsp;</td>
 <td class="default">&nbsp;</td>
 <td class="bookedlight"><b>17</b></td>
 </tr>
 <tr>
-<td class="default" style="text-align:right white-space:nowrap">12000.000</td><td class="default" style="text-align:right white-space:nowrap">41.4</td>
+<td class="default" style="text-align:right white-space:nowrap">0%</td><td class="default" style="text-align:right white-space:nowrap">12000.000</td><td class="default" style="text-align:right white-space:nowrap">41.4</td>
 <td class="default" style="text-align:right white-space:nowrap">30</td>
 <td class="default" style="white-space:nowrap">2003-03-27 18:00:00 GMT</td>
 <td class="default" style="text-align:left white-space:nowrap">2003-03-26 14:00:00 GMT</td><td class="default" style="text-align:left"><span style="font-size:100%">Tux 3</span></td>
 <td class="default" style="text-align:left white-space:nowrap">2003-02-14 09:00:00 GMT</td>
-<td class="default" style="text-align:left white-space:nowrap">2003-02-17 14:00:00 GMT</td><td class="headersmall">Actual</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-17 14:00:00 GMT</td><td class="default" style="text-align:center white-space:nowrap">Not yet started</td><td class="headersmall">Actual</td>
 <td class="default">&nbsp;</td>
 <td class="default">&nbsp;</td>
 <td class="default">&nbsp;</td>
 <td class="bookedlight"><b>11</b></td>
 <td class="bookedlight"><b>19</b></td>
 </tr>
-<tr valign="middle"><td class="defaultlight" style="text-align:right white-space:nowrap">12000.000</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
+<tr valign="middle"><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:right white-space:nowrap">12000.000</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:right white-space:nowrap">30</td>
 <td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">&nbsp</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap">tux3</td><td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2" style="text-align:left; white-space:nowrap"></td><td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">1.00</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">0.00</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="tasklight" rowspan="2" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:90%">Tux 3</span></td>
 <td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:right; white-space:nowrap">400.000</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2" style="text-align:left"><span style="font-size:100%">t1.t3</span></td>
 <td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" style="text-align:left"><table style="width:150px; font-size:100%; text-align:left"><tr><th style="width:35%"></th><th style="width:65%"></th></tr>
 </tr>
 </table>
 </td>
-<td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="headersmall">Plan</td>
+<td class="defaultlight" rowspan="2"></td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="defaultlight" rowspan="2">&nbsp;</td><td class="headersmall">Plan</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
 <td class="defaultlight">&nbsp;</td>
diff --git a/TestSuite/HTML-Reports/progress-1-Reference.html b/TestSuite/HTML-Reports/progress-1-Reference.html
new file mode 100644 (file)
index 0000000..961a65b
--- /dev/null
@@ -0,0 +1,96 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+<title>Task Report</title>
+<style type="text/css"><!--
+.default { background-color:#f3ebae; font-size:70%; text-align:center }
+.defaultlight { background-color:#fffadd; font-size:70%; text-align:center }
+.task { background-color:#f3ebae; font-size:100%; text-align:left }
+.tasklight { background-color:#fffadd; font-size:100%; text-align:left }
+.available { background-color:#a4ff8d; font-size:70%; text-align:center }
+.vacation { background-color:#fffc60; font-size:70%; text-align:center }
+.weekend { background-color:#ffec80; font-size:70%; text-align:center }
+.milestone { background-color:#ff2a2a; font-size:70%; text-align:center }
+.booked { background-color:#ff5a5d; font-size:70%; text-align:center }
+.bookedlight { background-color:#ffbfbf; font-size:70%; text-align:center }
+.headersmall { background-color:#a5c2ff; font-size:70%; text-align:center }
+.headerbig { background-color:#a5c2ff; font-size:110%; font-weight:bold; text-align:center }
+.completed { background-color:#87ff75; font-size:70%; text-align:center }
+.completedlight { background-color:#a1ff9a; font-size:70%; text-align:center }
+.today { background-color:#a387ff; font-size:70%; text-align:center }
+--></style>
+</head>
+<body>
+<table align="center" cellpadding="1">
+
+<tr>
+<td class="headerbig" rowspan="2">Index No.</td><td class="headerbig" rowspan="2">Name</td><td class="headerbig" rowspan="2">Start</td><td class="headerbig" rowspan="2">End</td><td class="headerbig" rowspan="2">Completed</td><td class="headerbig" rowspan="2">Status</td></tr>
+<tr>
+<td>&nbsp;</td></tr>
+
+<tr valign="middle"><td class="default" rowspan="1">1.</td><td class="task" rowspan="1" style="white-space:nowrap"><span style="font-size:105%"><a name="task_t0"></a>Task 0</span></td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">100%</td><td class="default" style="text-align:center white-space:nowrap">Finished</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">2.</td><td class="task" rowspan="1" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:100%"><a name="task_t0.s1"></a>Sub 1</span></td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">100%</td><td class="default" style="text-align:center white-space:nowrap">Finished</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">3.</td><td class="task" rowspan="1" style="white-space:nowrap"><span style="font-size:105%"><a name="task_t1"></a>Task 1</span></td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">33%</td><td class="default" style="text-align:center white-space:nowrap">Work in progress</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">4.</td><td class="task" rowspan="1" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:100%"><a name="task_t1.t4"></a>Task 4</span></td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-31 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">10%</td><td class="default" style="text-align:center white-space:nowrap">Behind schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">5.</td><td class="task" rowspan="1" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:100%"><a name="task_t1.t3"></a>Task 3</span></td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">10%</td><td class="default" style="text-align:center white-space:nowrap">Behind schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">6.</td><td class="task" rowspan="1" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:100%"><a name="task_t1.t2"></a>Task 2</span></td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-11 18:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">10%</td><td class="default" style="text-align:center white-space:nowrap">Behind schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">7.</td><td class="task" rowspan="1" style="white-space:nowrap"><span style="font-size:105%"><a name="task_t2"></a>Task 2</span></td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">33%</td><td class="default" style="text-align:center white-space:nowrap">Work in progress</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">8.</td><td class="task" rowspan="1" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:100%"><a name="task_t2.t4"></a>Task 4</span></td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-31 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">90%</td><td class="default" style="text-align:center white-space:nowrap">Ahead of schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">9.</td><td class="task" rowspan="1" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:100%"><a name="task_t2.t3"></a>Task 3</span></td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">90%</td><td class="default" style="text-align:center white-space:nowrap">Ahead of schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">10.</td><td class="task" rowspan="1" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:100%"><a name="task_t2.t2"></a>Task 2</span></td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-11 18:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">90%</td><td class="default" style="text-align:center white-space:nowrap">Ahead of schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">11.</td><td class="task" rowspan="1" style="white-space:nowrap"><span style="font-size:105%"><a name="task_t3"></a>Task 3</span></td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">33%</td><td class="default" style="text-align:center white-space:nowrap">Work in progress</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">12.</td><td class="task" rowspan="1" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:100%"><a name="task_t3.t4"></a>Task 4</span></td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-31 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">46%</td><td class="default" style="text-align:center white-space:nowrap">On schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">13.</td><td class="task" rowspan="1" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:100%"><a name="task_t3.t3"></a>Task 3</span></td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">36%</td><td class="default" style="text-align:center white-space:nowrap">On schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">14.</td><td class="task" rowspan="1" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:100%"><a name="task_t3.t2"></a>Task 2</span></td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-11 18:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">33%</td><td class="default" style="text-align:center white-space:nowrap">On schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">15.</td><td class="task" rowspan="1" style="white-space:nowrap"><span style="font-size:105%"><a name="task_t5"></a>Task 5</span></td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-16 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-18 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">0%</td><td class="default" style="text-align:center white-space:nowrap">Not yet started</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">16.</td><td class="task" rowspan="1" style="white-space:nowrap">&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:100%"><a name="task_t5.t6"></a>Task 6</span></td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-16 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-18 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">0%</td><td class="default" style="text-align:center white-space:nowrap">Not yet started</td></tr>
+</table>
+</body>
diff --git a/TestSuite/HTML-Reports/progress-1.tjp b/TestSuite/HTML-Reports/progress-1.tjp
new file mode 100644 (file)
index 0000000..c7c91b0
--- /dev/null
@@ -0,0 +1,85 @@
+project prj "htmltaskreport test" "1.0" 2003-01-01-0:00-GMT 2003-04-01-00:00-GMT {
+       timezone "GMT"
+  timeformat "%Y-%m-%d %H:%M:%S %Z"    
+       now 2003-01-15
+}
+
+resource tux1 "Tux 1" {
+       rate 300.0
+       kotrusid "tux1"
+}
+
+resource tux2 "Tux 2" {
+       rate 500.0
+       kotrusid "tux der 2."
+}
+
+resource tux3 "Tux 3" {
+       rate 400.0
+}
+
+task t0 "Task 0" {
+       start 2003-01-01
+       task s1 "Sub 1" {
+               length 2d
+       }
+}
+
+task t1 "Task 1" {
+       start 2003-01-01
+       task t2 "Task 2" {
+               effort 30d
+               allocate tux1
+               complete 10
+       }
+       task t3 "Task 3" {
+               length 30d
+               complete 10
+       }
+       task t4 "Task 4" {
+               duration 30d
+               complete 10
+       }
+}
+
+task t2 "Task 2" {
+       start 2003-01-01
+       task t2 "Task 2" {
+               effort 30d
+               allocate tux2
+               complete 90
+       }
+       task t3 "Task 3" {
+               length 30d
+               complete 90
+       }
+       task t4 "Task 4" {
+               duration 30d
+               complete 90
+       }
+}
+
+task t3 "Task 3" {
+       start 2003-01-01
+       task t2 "Task 2" {
+               effort 30d
+               allocate tux3
+       }
+       task t3 "Task 3" {
+               length 30d
+       }
+       task t4 "Task 4" {
+               duration 30d
+       }
+}
+
+task t5 "Task 5" {
+       start 2003-01-16
+       task t6 "Task 6" {
+               length 2d
+       }
+}
+
+htmltaskreport "." {
+       columns index, name, start, end, completed, status
+}
diff --git a/TestSuite/HTML-Reports/progress-2-Reference.html b/TestSuite/HTML-Reports/progress-2-Reference.html
new file mode 100644 (file)
index 0000000..3f1942d
--- /dev/null
@@ -0,0 +1,96 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+<title>Task Report</title>
+<style type="text/css"><!--
+.default { background-color:#f3ebae; font-size:70%; text-align:center }
+.defaultlight { background-color:#fffadd; font-size:70%; text-align:center }
+.task { background-color:#f3ebae; font-size:100%; text-align:left }
+.tasklight { background-color:#fffadd; font-size:100%; text-align:left }
+.available { background-color:#a4ff8d; font-size:70%; text-align:center }
+.vacation { background-color:#fffc60; font-size:70%; text-align:center }
+.weekend { background-color:#ffec80; font-size:70%; text-align:center }
+.milestone { background-color:#ff2a2a; font-size:70%; text-align:center }
+.booked { background-color:#ff5a5d; font-size:70%; text-align:center }
+.bookedlight { background-color:#ffbfbf; font-size:70%; text-align:center }
+.headersmall { background-color:#a5c2ff; font-size:70%; text-align:center }
+.headerbig { background-color:#a5c2ff; font-size:110%; font-weight:bold; text-align:center }
+.completed { background-color:#87ff75; font-size:70%; text-align:center }
+.completedlight { background-color:#a1ff9a; font-size:70%; text-align:center }
+.today { background-color:#a387ff; font-size:70%; text-align:center }
+--></style>
+</head>
+<body>
+<table align="center" cellpadding="1">
+
+<tr>
+<td class="headerbig" rowspan="2">Index No.</td><td class="headerbig" rowspan="2">Name</td><td class="headerbig" rowspan="2">Start</td><td class="headerbig" rowspan="2">End</td><td class="headerbig" rowspan="2">Completed</td><td class="headerbig" rowspan="2">Status</td></tr>
+<tr>
+<td>&nbsp;</td></tr>
+
+<tr valign="middle"><td class="default" rowspan="1">15.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t5"></a>Task 5</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-16 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-18 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">0%</td><td class="default" style="text-align:center white-space:nowrap">Not yet started</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">16.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t5.t5.t6"></a>Task 6</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-16 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-18 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">0%</td><td class="default" style="text-align:center white-space:nowrap">Not yet started</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">4.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t1.t1.t4"></a>Task 4</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-31 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">10%</td><td class="default" style="text-align:center white-space:nowrap">Behind schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">5.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t1.t1.t3"></a>Task 3</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">10%</td><td class="default" style="text-align:center white-space:nowrap">Behind schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">6.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t1.t1.t2"></a>Task 2</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-11 18:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">10%</td><td class="default" style="text-align:center white-space:nowrap">Behind schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">3.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t1"></a>Task 1</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">33%</td><td class="default" style="text-align:center white-space:nowrap">Work in progress</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">11.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t3"></a>Task 3</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">33%</td><td class="default" style="text-align:center white-space:nowrap">Work in progress</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">7.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t2"></a>Task 2</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">33%</td><td class="default" style="text-align:center white-space:nowrap">Work in progress</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">12.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t3.t3.t4"></a>Task 4</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-31 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">46%</td><td class="default" style="text-align:center white-space:nowrap">On schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">13.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t3.t3.t3"></a>Task 3</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">36%</td><td class="default" style="text-align:center white-space:nowrap">On schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">14.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t3.t3.t2"></a>Task 2</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-11 18:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">33%</td><td class="default" style="text-align:center white-space:nowrap">On schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">8.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t2.t2.t4"></a>Task 4</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-31 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">90%</td><td class="default" style="text-align:center white-space:nowrap">Ahead of schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">9.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t2.t2.t3"></a>Task 3</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">90%</td><td class="default" style="text-align:center white-space:nowrap">Ahead of schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">10.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t2.t2.t2"></a>Task 2</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-11 18:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">90%</td><td class="default" style="text-align:center white-space:nowrap">Ahead of schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">1.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t0"></a>Task 0</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">100%</td><td class="default" style="text-align:center white-space:nowrap">Finished</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">2.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t0.t0.s1"></a>Sub 1</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">100%</td><td class="default" style="text-align:center white-space:nowrap">Finished</td></tr>
+</table>
+</body>
diff --git a/TestSuite/HTML-Reports/progress-2.tjp b/TestSuite/HTML-Reports/progress-2.tjp
new file mode 100644 (file)
index 0000000..df7e724
--- /dev/null
@@ -0,0 +1,86 @@
+project prj "htmltaskreport test" "1.0" 2003-01-01-0:00-GMT 2003-04-01-00:00-GMT {
+       timezone "GMT"
+  timeformat "%Y-%m-%d %H:%M:%S %Z"    
+       now 2003-01-15
+}
+
+resource tux1 "Tux 1" {
+       rate 300.0
+       kotrusid "tux1"
+}
+
+resource tux2 "Tux 2" {
+       rate 500.0
+       kotrusid "tux der 2."
+}
+
+resource tux3 "Tux 3" {
+       rate 400.0
+}
+
+task t0 "Task 0" {
+       start 2003-01-01
+       task s1 "Sub 1" {
+               length 2d
+       }
+}
+
+task t1 "Task 1" {
+       start 2003-01-01
+       task t2 "Task 2" {
+               effort 30d
+               allocate tux1
+               complete 10
+       }
+       task t3 "Task 3" {
+               length 30d
+               complete 10
+       }
+       task t4 "Task 4" {
+               duration 30d
+               complete 10
+       }
+}
+
+task t2 "Task 2" {
+       start 2003-01-01
+       task t2 "Task 2" {
+               effort 30d
+               allocate tux2
+               complete 90
+       }
+       task t3 "Task 3" {
+               length 30d
+               complete 90
+       }
+       task t4 "Task 4" {
+               duration 30d
+               complete 90
+       }
+}
+
+task t3 "Task 3" {
+       start 2003-01-01
+       task t2 "Task 2" {
+               effort 30d
+               allocate tux3
+       }
+       task t3 "Task 3" {
+               length 30d
+       }
+       task t4 "Task 4" {
+               duration 30d
+       }
+}
+
+task t5 "Task 5" {
+       start 2003-01-16
+       task t6 "Task 6" {
+               length 2d
+       }
+}
+
+htmltaskreport "." {
+       columns index, name, start, end, completed, status
+       sorttasks planstatusup
+}
diff --git a/TestSuite/HTML-Reports/progress-3-Reference.html b/TestSuite/HTML-Reports/progress-3-Reference.html
new file mode 100644 (file)
index 0000000..bdc86c9
--- /dev/null
@@ -0,0 +1,96 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+<title>Task Report</title>
+<style type="text/css"><!--
+.default { background-color:#f3ebae; font-size:70%; text-align:center }
+.defaultlight { background-color:#fffadd; font-size:70%; text-align:center }
+.task { background-color:#f3ebae; font-size:100%; text-align:left }
+.tasklight { background-color:#fffadd; font-size:100%; text-align:left }
+.available { background-color:#a4ff8d; font-size:70%; text-align:center }
+.vacation { background-color:#fffc60; font-size:70%; text-align:center }
+.weekend { background-color:#ffec80; font-size:70%; text-align:center }
+.milestone { background-color:#ff2a2a; font-size:70%; text-align:center }
+.booked { background-color:#ff5a5d; font-size:70%; text-align:center }
+.bookedlight { background-color:#ffbfbf; font-size:70%; text-align:center }
+.headersmall { background-color:#a5c2ff; font-size:70%; text-align:center }
+.headerbig { background-color:#a5c2ff; font-size:110%; font-weight:bold; text-align:center }
+.completed { background-color:#87ff75; font-size:70%; text-align:center }
+.completedlight { background-color:#a1ff9a; font-size:70%; text-align:center }
+.today { background-color:#a387ff; font-size:70%; text-align:center }
+--></style>
+</head>
+<body>
+<table align="center" cellpadding="1">
+
+<tr>
+<td class="headerbig" rowspan="2">Index No.</td><td class="headerbig" rowspan="2">Name</td><td class="headerbig" rowspan="2">Start</td><td class="headerbig" rowspan="2">End</td><td class="headerbig" rowspan="2">Completed</td><td class="headerbig" rowspan="2">Status</td></tr>
+<tr>
+<td>&nbsp;</td></tr>
+
+<tr valign="middle"><td class="default" rowspan="1">1.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t0"></a>Task 0</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">100%</td><td class="default" style="text-align:center white-space:nowrap">Finished</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">2.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t0.t0.s1"></a>Sub 1</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">100%</td><td class="default" style="text-align:center white-space:nowrap">Finished</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">8.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t2.t2.t4"></a>Task 4</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-31 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">90%</td><td class="default" style="text-align:center white-space:nowrap">Ahead of schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">9.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t2.t2.t3"></a>Task 3</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">90%</td><td class="default" style="text-align:center white-space:nowrap">Ahead of schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">10.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t2.t2.t2"></a>Task 2</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-11 18:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">90%</td><td class="default" style="text-align:center white-space:nowrap">Ahead of schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">12.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t3.t3.t4"></a>Task 4</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-31 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">46%</td><td class="default" style="text-align:center white-space:nowrap">On schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">13.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t3.t3.t3"></a>Task 3</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">36%</td><td class="default" style="text-align:center white-space:nowrap">On schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">14.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t3.t3.t2"></a>Task 2</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-11 18:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">33%</td><td class="default" style="text-align:center white-space:nowrap">On schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">3.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t1"></a>Task 1</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">33%</td><td class="default" style="text-align:center white-space:nowrap">Work in progress</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">7.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t2"></a>Task 2</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">33%</td><td class="default" style="text-align:center white-space:nowrap">Work in progress</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">11.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t3"></a>Task 3</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">33%</td><td class="default" style="text-align:center white-space:nowrap">Work in progress</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">4.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t1.t1.t4"></a>Task 4</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-31 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">10%</td><td class="default" style="text-align:center white-space:nowrap">Behind schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">5.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t1.t1.t3"></a>Task 3</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">10%</td><td class="default" style="text-align:center white-space:nowrap">Behind schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">6.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t1.t1.t2"></a>Task 2</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-11 18:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">10%</td><td class="default" style="text-align:center white-space:nowrap">Behind schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">16.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t5.t5.t6"></a>Task 6</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-16 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-18 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">0%</td><td class="default" style="text-align:center white-space:nowrap">Not yet started</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">15.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t5"></a>Task 5</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-16 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-18 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">0%</td><td class="default" style="text-align:center white-space:nowrap">Not yet started</td></tr>
+</table>
+</body>
diff --git a/TestSuite/HTML-Reports/progress-3.tjp b/TestSuite/HTML-Reports/progress-3.tjp
new file mode 100644 (file)
index 0000000..9e12fba
--- /dev/null
@@ -0,0 +1,86 @@
+project prj "htmltaskreport test" "1.0" 2003-01-01-0:00-GMT 2003-04-01-00:00-GMT {
+       timezone "GMT"
+  timeformat "%Y-%m-%d %H:%M:%S %Z"    
+       now 2003-01-15
+}
+
+resource tux1 "Tux 1" {
+       rate 300.0
+       kotrusid "tux1"
+}
+
+resource tux2 "Tux 2" {
+       rate 500.0
+       kotrusid "tux der 2."
+}
+
+resource tux3 "Tux 3" {
+       rate 400.0
+}
+
+task t0 "Task 0" {
+       start 2003-01-01
+       task s1 "Sub 1" {
+               length 2d
+       }
+}
+
+task t1 "Task 1" {
+       start 2003-01-01
+       task t2 "Task 2" {
+               effort 30d
+               allocate tux1
+               complete 10
+       }
+       task t3 "Task 3" {
+               length 30d
+               complete 10
+       }
+       task t4 "Task 4" {
+               duration 30d
+               complete 10
+       }
+}
+
+task t2 "Task 2" {
+       start 2003-01-01
+       task t2 "Task 2" {
+               effort 30d
+               allocate tux2
+               complete 90
+       }
+       task t3 "Task 3" {
+               length 30d
+               complete 90
+       }
+       task t4 "Task 4" {
+               duration 30d
+               complete 90
+       }
+}
+
+task t3 "Task 3" {
+       start 2003-01-01
+       task t2 "Task 2" {
+               effort 30d
+               allocate tux3
+       }
+       task t3 "Task 3" {
+               length 30d
+       }
+       task t4 "Task 4" {
+               duration 30d
+       }
+}
+
+task t5 "Task 5" {
+       start 2003-01-16
+       task t6 "Task 6" {
+               length 2d
+       }
+}
+
+htmltaskreport "." {
+       columns index, name, start, end, completed, status
+       sorttasks planstatusdown
+}
diff --git a/TestSuite/HTML-Reports/progress-4-Reference.html b/TestSuite/HTML-Reports/progress-4-Reference.html
new file mode 100644 (file)
index 0000000..e6278c6
--- /dev/null
@@ -0,0 +1,96 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+<title>Task Report</title>
+<style type="text/css"><!--
+.default { background-color:#f3ebae; font-size:70%; text-align:center }
+.defaultlight { background-color:#fffadd; font-size:70%; text-align:center }
+.task { background-color:#f3ebae; font-size:100%; text-align:left }
+.tasklight { background-color:#fffadd; font-size:100%; text-align:left }
+.available { background-color:#a4ff8d; font-size:70%; text-align:center }
+.vacation { background-color:#fffc60; font-size:70%; text-align:center }
+.weekend { background-color:#ffec80; font-size:70%; text-align:center }
+.milestone { background-color:#ff2a2a; font-size:70%; text-align:center }
+.booked { background-color:#ff5a5d; font-size:70%; text-align:center }
+.bookedlight { background-color:#ffbfbf; font-size:70%; text-align:center }
+.headersmall { background-color:#a5c2ff; font-size:70%; text-align:center }
+.headerbig { background-color:#a5c2ff; font-size:110%; font-weight:bold; text-align:center }
+.completed { background-color:#87ff75; font-size:70%; text-align:center }
+.completedlight { background-color:#a1ff9a; font-size:70%; text-align:center }
+.today { background-color:#a387ff; font-size:70%; text-align:center }
+--></style>
+</head>
+<body>
+<table align="center" cellpadding="1">
+
+<tr>
+<td class="headerbig" rowspan="2">Index No.</td><td class="headerbig" rowspan="2">Name</td><td class="headerbig" rowspan="2">Start</td><td class="headerbig" rowspan="2">End</td><td class="headerbig" rowspan="2">Completed</td><td class="headerbig" rowspan="2">Status</td></tr>
+<tr>
+<td>&nbsp;</td></tr>
+
+<tr valign="middle"><td class="default" rowspan="1">15.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t5"></a>Task 5</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-16 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-18 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">0%</td><td class="default" style="text-align:center white-space:nowrap">Not yet started</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">16.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t5.t5.t6"></a>Task 6</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-16 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-18 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">0%</td><td class="default" style="text-align:center white-space:nowrap">Not yet started</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">4.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t1.t1.t4"></a>Task 4</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-31 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">10%</td><td class="default" style="text-align:center white-space:nowrap">Behind schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">5.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t1.t1.t3"></a>Task 3</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">10%</td><td class="default" style="text-align:center white-space:nowrap">Behind schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">6.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t1.t1.t2"></a>Task 2</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-11 18:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">10%</td><td class="default" style="text-align:center white-space:nowrap">Behind schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">3.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t1"></a>Task 1</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">33%</td><td class="default" style="text-align:center white-space:nowrap">Work in progress</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">11.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t3"></a>Task 3</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">33%</td><td class="default" style="text-align:center white-space:nowrap">Work in progress</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">7.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t2"></a>Task 2</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">33%</td><td class="default" style="text-align:center white-space:nowrap">Work in progress</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">14.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t3.t3.t2"></a>Task 2</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-11 18:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">33%</td><td class="default" style="text-align:center white-space:nowrap">On schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">13.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t3.t3.t3"></a>Task 3</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">36%</td><td class="default" style="text-align:center white-space:nowrap">On schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">12.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t3.t3.t4"></a>Task 4</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-31 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">46%</td><td class="default" style="text-align:center white-space:nowrap">On schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">8.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t2.t2.t4"></a>Task 4</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-31 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">90%</td><td class="default" style="text-align:center white-space:nowrap">Ahead of schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">9.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t2.t2.t3"></a>Task 3</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">90%</td><td class="default" style="text-align:center white-space:nowrap">Ahead of schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">10.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t2.t2.t2"></a>Task 2</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-11 18:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">90%</td><td class="default" style="text-align:center white-space:nowrap">Ahead of schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">2.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t0.t0.s1"></a>Sub 1</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">100%</td><td class="default" style="text-align:center white-space:nowrap">Finished</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">1.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t0"></a>Task 0</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">100%</td><td class="default" style="text-align:center white-space:nowrap">Finished</td></tr>
+</table>
+</body>
diff --git a/TestSuite/HTML-Reports/progress-4.tjp b/TestSuite/HTML-Reports/progress-4.tjp
new file mode 100644 (file)
index 0000000..8c257f8
--- /dev/null
@@ -0,0 +1,86 @@
+project prj "htmltaskreport test" "1.0" 2003-01-01-0:00-GMT 2003-04-01-00:00-GMT {
+       timezone "GMT"
+  timeformat "%Y-%m-%d %H:%M:%S %Z"    
+       now 2003-01-15
+}
+
+resource tux1 "Tux 1" {
+       rate 300.0
+       kotrusid "tux1"
+}
+
+resource tux2 "Tux 2" {
+       rate 500.0
+       kotrusid "tux der 2."
+}
+
+resource tux3 "Tux 3" {
+       rate 400.0
+}
+
+task t0 "Task 0" {
+       start 2003-01-01
+       task s1 "Sub 1" {
+               length 2d
+       }
+}
+
+task t1 "Task 1" {
+       start 2003-01-01
+       task t2 "Task 2" {
+               effort 30d
+               allocate tux1
+               complete 10
+       }
+       task t3 "Task 3" {
+               length 30d
+               complete 10
+       }
+       task t4 "Task 4" {
+               duration 30d
+               complete 10
+       }
+}
+
+task t2 "Task 2" {
+       start 2003-01-01
+       task t2 "Task 2" {
+               effort 30d
+               allocate tux2
+               complete 90
+       }
+       task t3 "Task 3" {
+               length 30d
+               complete 90
+       }
+       task t4 "Task 4" {
+               duration 30d
+               complete 90
+       }
+}
+
+task t3 "Task 3" {
+       start 2003-01-01
+       task t2 "Task 2" {
+               effort 30d
+               allocate tux3
+       }
+       task t3 "Task 3" {
+               length 30d
+       }
+       task t4 "Task 4" {
+               duration 30d
+       }
+}
+
+task t5 "Task 5" {
+       start 2003-01-16
+       task t6 "Task 6" {
+               length 2d
+       }
+}
+
+htmltaskreport "." {
+       columns index, name, start, end, completed, status
+       sorttasks plancompletedup 
+}
diff --git a/TestSuite/HTML-Reports/progress-5-Reference.html b/TestSuite/HTML-Reports/progress-5-Reference.html
new file mode 100644 (file)
index 0000000..ada0108
--- /dev/null
@@ -0,0 +1,96 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+<title>Task Report</title>
+<style type="text/css"><!--
+.default { background-color:#f3ebae; font-size:70%; text-align:center }
+.defaultlight { background-color:#fffadd; font-size:70%; text-align:center }
+.task { background-color:#f3ebae; font-size:100%; text-align:left }
+.tasklight { background-color:#fffadd; font-size:100%; text-align:left }
+.available { background-color:#a4ff8d; font-size:70%; text-align:center }
+.vacation { background-color:#fffc60; font-size:70%; text-align:center }
+.weekend { background-color:#ffec80; font-size:70%; text-align:center }
+.milestone { background-color:#ff2a2a; font-size:70%; text-align:center }
+.booked { background-color:#ff5a5d; font-size:70%; text-align:center }
+.bookedlight { background-color:#ffbfbf; font-size:70%; text-align:center }
+.headersmall { background-color:#a5c2ff; font-size:70%; text-align:center }
+.headerbig { background-color:#a5c2ff; font-size:110%; font-weight:bold; text-align:center }
+.completed { background-color:#87ff75; font-size:70%; text-align:center }
+.completedlight { background-color:#a1ff9a; font-size:70%; text-align:center }
+.today { background-color:#a387ff; font-size:70%; text-align:center }
+--></style>
+</head>
+<body>
+<table align="center" cellpadding="1">
+
+<tr>
+<td class="headerbig" rowspan="2">Index No.</td><td class="headerbig" rowspan="2">Name</td><td class="headerbig" rowspan="2">Start</td><td class="headerbig" rowspan="2">End</td><td class="headerbig" rowspan="2">Completed</td><td class="headerbig" rowspan="2">Status</td></tr>
+<tr>
+<td>&nbsp;</td></tr>
+
+<tr valign="middle"><td class="default" rowspan="1">1.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t0"></a>Task 0</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">100%</td><td class="default" style="text-align:center white-space:nowrap">Finished</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">2.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t0.t0.s1"></a>Sub 1</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-03 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">100%</td><td class="default" style="text-align:center white-space:nowrap">Finished</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">8.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t2.t2.t4"></a>Task 4</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-31 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">90%</td><td class="default" style="text-align:center white-space:nowrap">Ahead of schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">9.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t2.t2.t3"></a>Task 3</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">90%</td><td class="default" style="text-align:center white-space:nowrap">Ahead of schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">10.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t2.t2.t2"></a>Task 2</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-11 18:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">90%</td><td class="default" style="text-align:center white-space:nowrap">Ahead of schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">12.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t3.t3.t4"></a>Task 4</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-31 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">46%</td><td class="default" style="text-align:center white-space:nowrap">On schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">13.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t3.t3.t3"></a>Task 3</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">36%</td><td class="default" style="text-align:center white-space:nowrap">On schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">3.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t1"></a>Task 1</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">33%</td><td class="default" style="text-align:center white-space:nowrap">Work in progress</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">11.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t3"></a>Task 3</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">33%</td><td class="default" style="text-align:center white-space:nowrap">Work in progress</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">7.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t2"></a>Task 2</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">33%</td><td class="default" style="text-align:center white-space:nowrap">Work in progress</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">14.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t3.t3.t2"></a>Task 2</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-11 18:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">33%</td><td class="default" style="text-align:center white-space:nowrap">On schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">4.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t1.t1.t4"></a>Task 4</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-31 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">10%</td><td class="default" style="text-align:center white-space:nowrap">Behind schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">5.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t1.t1.t3"></a>Task 3</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-12 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">10%</td><td class="default" style="text-align:center white-space:nowrap">Behind schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">6.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t1.t1.t2"></a>Task 2</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-01 09:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-02-11 18:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">10%</td><td class="default" style="text-align:center white-space:nowrap">Behind schedule</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">16.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t5.t5.t6"></a>Task 6</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-16 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-18 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">0%</td><td class="default" style="text-align:center white-space:nowrap">Not yet started</td></tr>
+<tr valign="middle"><td class="default" rowspan="1">15.</td><td class="task" rowspan="1" style="white-space:nowrap"><a name="task_t5"></a>Task 5</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-16 00:00:00 GMT</td>
+<td class="default" style="text-align:left white-space:nowrap">2003-01-18 00:00:00 GMT</td>
+<td class="default" style="text-align:right white-space:nowrap">0%</td><td class="default" style="text-align:center white-space:nowrap">Not yet started</td></tr>
+</table>
+</body>
diff --git a/TestSuite/HTML-Reports/progress-5.tjp b/TestSuite/HTML-Reports/progress-5.tjp
new file mode 100644 (file)
index 0000000..e372354
--- /dev/null
@@ -0,0 +1,86 @@
+project prj "htmltaskreport test" "1.0" 2003-01-01-0:00-GMT 2003-04-01-00:00-GMT {
+       timezone "GMT"
+  timeformat "%Y-%m-%d %H:%M:%S %Z"    
+       now 2003-01-15
+}
+
+resource tux1 "Tux 1" {
+       rate 300.0
+       kotrusid "tux1"
+}
+
+resource tux2 "Tux 2" {
+       rate 500.0
+       kotrusid "tux der 2."
+}
+
+resource tux3 "Tux 3" {
+       rate 400.0
+}
+
+task t0 "Task 0" {
+       start 2003-01-01
+       task s1 "Sub 1" {
+               length 2d
+       }
+}
+
+task t1 "Task 1" {
+       start 2003-01-01
+       task t2 "Task 2" {
+               effort 30d
+               allocate tux1
+               complete 10
+       }
+       task t3 "Task 3" {
+               length 30d
+               complete 10
+       }
+       task t4 "Task 4" {
+               duration 30d
+               complete 10
+       }
+}
+
+task t2 "Task 2" {
+       start 2003-01-01
+       task t2 "Task 2" {
+               effort 30d
+               allocate tux2
+               complete 90
+       }
+       task t3 "Task 3" {
+               length 30d
+               complete 90
+       }
+       task t4 "Task 4" {
+               duration 30d
+               complete 90
+       }
+}
+
+task t3 "Task 3" {
+       start 2003-01-01
+       task t2 "Task 2" {
+               effort 30d
+               allocate tux3
+       }
+       task t3 "Task 3" {
+               length 30d
+       }
+       task t4 "Task 4" {
+               duration 30d
+       }
+}
+
+task t5 "Task 5" {
+       start 2003-01-16
+       task t6 "Task 6" {
+               length 2d
+       }
+}
+
+htmltaskreport "." {
+       columns index, name, start, end, completed, status
+       sorttasks plancompleteddown
+}
index 76ec17b..e60ad9c 100644 (file)
@@ -13,7 +13,7 @@ apidox-am-yes:
                cp $(top_srcdir)/admin/Doxyfile.global Doxyfile; \
                echo "PROJECT_NAME           = \"$(subdir) Library\"" >> Doxyfile; \
                echo "INPUT                  = $(srcdir)" >> Doxyfile; \
-               echo "IMAGE_PATH             = $(top_srcdir)/doc/api" >> Doxyfile ;\
+               echo "IMAGE_PATH             = $(top_srcdir)/docs/api" >> Doxyfile ;\
                echo "OUTPUT_DIRECTORY       = $(top_builddir)/apidocs" >> Doxyfile; \
                echo "HTML_OUTPUT            = $(subdir)/html" >> Doxyfile; \
                echo "LATEX_OUTPUT           = $(subdir)/latex" >> Doxyfile; \
index 2ecb694..70748c1 100644 (file)
 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
 # by quotes) that should identify the project.
 
-PROJECT_NAME           = 
+PROJECT_NAME           = "TaskJuggler"
 
 # The PROJECT_NUMBER tag can be used to enter a project or revision number. 
 # This could be handy for archiving the generated documentation or 
 # if some version control system is used.
 
-PROJECT_NUMBER         = "Version 3.0"
+PROJECT_NUMBER         = "Version 1.4"
 
 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
 # base path where the generated documentation will be put. 
@@ -670,7 +670,7 @@ MAN_OUTPUT             =
 # The MAN_EXTENSION tag determines the extension that is added to 
 # the generated man pages (default is the subroutine's section .3)
 
-MAN_EXTENSION          = .kde3
+MAN_EXTENSION          = .tj3
 
 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
 # then it will generate one additional man file for each entity 
index 7dfc5cf..0a589c3 100644 (file)
@@ -112,3 +112,5 @@ AM_INIT_AUTOMAKE(taskjuggler, 1.4+cvs)
 
 AC_OUTPUT(docs/en/taskjuggler.sgml)
 
+KDE_INIT_DOXYGEN([The TaskJuggler API Reference], [Version $VERSION])
+
index d35505f..d245e8a 100644 (file)
@@ -346,6 +346,11 @@ start/end messages after the scheduler run.</para></listitem>
 <computeroutput>schedule</computeroutput> was used with
 <computeroutput>showactual</computeroutput> fixed.</para></listitem>
 
+<listitem><para>HTML reports can now show a <link
+linkend="htmltaskreport_columns">column</link> with the completion
+degree and the completion status. The rows can also be sorted by these
+new columns.</para></listitem>
+
 </itemizedlist></para>
 
 </sect2>
index 3bf7422..639d62a 100644 (file)
@@ -616,6 +616,13 @@ following values for colid are available:</para>
 
 <para><simplelist type=horiz columns=2>
 
+<member><computeroutput>completed</computeroutput></member>
+<member>The percentage the task has been completed already. This is
+either the value specified by <link
+linkend="task_complete">complete</link> or a value computed according
+to the current date (or the date specified by <link
+linkend="project_now">now</link>) and the length, duration or effort.</member>
+
 <member><computeroutput>costs</computeroutput></member>
 <member>The costs of the task</member>
 
@@ -725,6 +732,13 @@ by 1. </member>
 <member><computeroutput>startbufferend</computeroutput></member>
 <member>The end time of the start buffer</member>
 
+<member><computeroutput>status</computeroutput></member>
+<member>The current status of the task. This is derived from the
+current date or the date specified by <link
+linkend="project_now">now</link> and the degree of completion. The
+degree of completion is either computed or has been specified by <link
+linkend="task_complete">complete</link>.</member>
+
 <member><computeroutput>weekly</computeroutput></member>
 <member>A week-by-week calendar view of the tasks</member>
 </simplelist></para>
@@ -1006,6 +1020,18 @@ only be used as the first criteria.</member>
 <member><computeroutput>actualenddown</computeroutput></member>
 <member>Latest actual end date on top</member>
 
+<member><computeroutput>completedup</computeroutput></member>
+<member>Least completed task first</member>
+
+<member><computeroutput>completeddown</computeroutput></member>
+<member>Most completed task first</member>
+
+<member><computeroutput>statusup</computeroutput></member>
+<member>Earliest status first</member>
+
+<member><computeroutput>statusdown</computeroutput></member>
+<member>Latest status first</member>
+
 <member><computeroutput>priorityup</computeroutput></member>
 <member>Lowest priority on top</member>
 
index ded4cf5..e2b6474 100644 (file)
@@ -53,7 +53,7 @@ Account::getBalance(int /*sc*/, time_t /* date */)
 }
 
 bool
-AccountList::isSupportedSortingCriteria(CoreAttributesList::SortCriteria sc)
+AccountList::isSupportedSortingCriteria(int sc)
 {
        switch (sc)
        {
index f222472..6916585 100644 (file)
@@ -23,6 +23,10 @@ class Task;
 class TransactionList;
 class Interval;
 
+/**
+ * @short Stores all transaction related infromation.
+ * @author Chris Schlaeger <cs@suse.de>
+ */
 class Transaction
 {
        friend class TransactionList;
@@ -45,6 +49,10 @@ private:
        QString description;
 } ;
 
+/**
+ * @short A list of transactions.
+ * @author Chris Schlaeger <cs@suse.de>
+ */
 class TransactionList : public QList<Transaction>
 {
 public:
@@ -56,6 +64,10 @@ protected:
 
 class Account;
 
+/**
+ * @short A list of accounts.
+ * @author Chris Schlaeger <cs@suse.de>
+ */
 class AccountList : public CoreAttributesList
 {
 public:
@@ -72,8 +84,7 @@ public:
        inline void addAccount(Account* a);
        inline Account* getAccount(const QString& id);
 
-       static bool isSupportedSortingCriteria
-               (CoreAttributesList::SortCriteria sc);
+       static bool isSupportedSortingCriteria(int sc);
        
        virtual int compareItemsLevel(Account* a1, Account* a2, int level);
 
@@ -81,6 +92,10 @@ protected:
        virtual int compareItems(QCollection::Item i1, QCollection::Item i2);
 } ;
 
+/**
+ * @short Stores all account related information.
+ * @author Chris Schlaeger <cs@suse.de>
+ */
 class Account : public CoreAttributes
 {
 public:
index 1febef6..9340f13 100644 (file)
@@ -10,6 +10,8 @@
  * $Id$
  */
 
+#include "qdom.h"
+
 #include "ResourceList.h"
 #include "Allocation.h"
 #include "ReportXML.h"
index 5b53661..d23aa46 100644 (file)
@@ -17,7 +17,7 @@ CoreAttributesList::~CoreAttributesList()
 }
 
 void
-CoreAttributesList::setSorting(SortCriteria s, int level)
+CoreAttributesList::setSorting(int s, int level)
 {
        if (level >=0 && level < maxSortingLevel)
                sorting[level] = s;
@@ -57,8 +57,7 @@ CoreAttributesList::maxDepth()
 }
 
 bool
-CoreAttributesList::isSupportedSortingCriteria
-       (CoreAttributesList::SortCriteria sc)
+CoreAttributesList::isSupportedSortingCriteria(int sc)
 {
        switch (sc)
        {
index 02033a6..2b8d0ce 100644 (file)
 class Project;
 class CoreAttributes;
 
+/**
+ * @short The class stores a list of CoreAttributes.
+ * @see CoreAttributes 
+ * @author Chris Schlaeger <cs@suse.de>
+ */
 class CoreAttributesList : public QPtrList<CoreAttributes>
 {
 public:
@@ -31,27 +36,25 @@ public:
        virtual ~CoreAttributesList();
 
        enum SortCriteria {
-               SequenceUp, SequenceDown,
+               SequenceUp = 0, SequenceDown,
                TreeMode, NameUp, NameDown, FullNameUp,
                FullNameDown, IdUp, IdDown, IndexUp, IndexDown, 
-               PlanStartUp, PlanStartDown, PlanEndUp, PlanEndDown,
-               ActualStartUp, ActualStartDown,
-               ActualEndUp, ActualEndDown,
+               StatusUp, StatusDown, CompletedUp, CompletedDown,
                PrioUp, PrioDown,
                ResponsibleUp, ResponsibleDown,
                MinEffortUp, MinEffortDown,
                MaxEffortUp, MaxEffortDown,
                RateUp, RateDown,
-               KotrusIdUp, KotrusIdDown
+               KotrusIdUp, KotrusIdDown,
+               StartUp, StartDown, EndUp, EndDown
        };
 
        static const int maxSortingLevel = 3;
-       void setSorting(SortCriteria s, int level);
+       void setSorting(int s, int level);
        void createIndex(bool initial = FALSE);
        uint maxDepth();
 
-       static bool isSupportedSortingCriteria
-               (CoreAttributesList::SortCriteria sc);
+       static bool isSupportedSortingCriteria(int sc);
 
        virtual int compareItemsLevel(CoreAttributes* c1, CoreAttributes* c2,
                                                                  int level);
@@ -59,9 +62,13 @@ public:
 protected:
        virtual int compareItems(QCollection::Item i1, QCollection::Item i2);
 
-       SortCriteria sorting[maxSortingLevel];
+       int sorting[maxSortingLevel];
 } ;
 
+/**
+ * @short This class is the base class for all attribute classes.
+ * @author Chris Schlaeger <cs@suse.de>
+ */
 class CoreAttributes
 {
 public:
diff --git a/taskjuggler/Doxyfile b/taskjuggler/Doxyfile
new file mode 100644 (file)
index 0000000..82f76a7
--- /dev/null
@@ -0,0 +1,966 @@
+# Doxyfile 1.2.15
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# General configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = "TaskJuggler"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         = "Version 1.4"
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = ../apidocs/
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Brazilian, Chinese, Croatian, Czech, Danish, Dutch, Finnish, French, 
+# German, Greek, Hungarian, Italian, Japanese, Korean, Norwegian, Polish, 
+# Portuguese, Romanian, Russian, Slovak, Slovene, Spanish and Swedish.
+
+OUTPUT_LANGUAGE        = English
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+# defined locally in source files will be included in the documentation. 
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these class will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = YES
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = YES
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited 
+# members of a class in the documentation of that class as if those members were 
+# ordinary class members. Constructors, destructors and assignment operators of 
+# the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. It is allowed to use relative paths in the argument list.
+
+STRIP_FROM_PATH        = 
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower case letters. If set to YES upper case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# users are adviced to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful is your file systems 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments  will behave just like the Qt-style comments (thus requiring an 
+# explict @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF      = YES
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# reimplements.
+
+INHERIT_DOCS           = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = NO
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 4
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = NO
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = NO
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = libdoc=@mainpage \
+                         sect=<p><b> \
+                         reimplemented= \
+                         "deprecated=<b>This class or method is obsolete, it is provided for compatibility only.</b>" \
+                         obsolete=@deprecated
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or define consist of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and defines in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources 
+# only. Doxygen will then generate output that is more tailored for C. 
+# For instance some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources 
+# only. Doxygen will then generate output that is more tailored for Java. 
+# For instance namespaces will be presented as packages, qualified scopes 
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = YES
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text.
+
+WARN_FORMAT            = 
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT                  = 
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank the following patterns are tested: 
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp 
+# *.h++ *.idl *.odl
+
+FILE_PATTERNS          = *.h \
+                         *.cpp \
+                         *.cc \
+                         *.hpp
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                = 
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories 
+# that are symbolic links (a Unix filesystem feature) are excluded from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories.
+
+EXCLUDE_PATTERNS       = *.moc.* \
+                         moc* \
+                         *.all_cpp.* \
+                         *unload.* \
+                         */test/* \
+                         */tests/*
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = 
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+# searched for input files to be used with the \include or \dontinclude 
+# commands irrespective of the value of the RECURSIVE tag. 
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command <filter> <input-file>, where <filter> 
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.
+
+INPUT_FILTER           = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse.
+
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources.
+
+SOURCE_BROWSER         = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default) 
+# then for each documented function all documented 
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default) 
+# then for each documented function all documented entities 
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 3
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = K
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = NO
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = 
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header.
+
+HTML_HEADER            = ../apidocs/common/header.html
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = ../apidocs/common/footer.html
+
+# The HTML_STYLESHEET tag can be used to specify a user defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet
+
+HTML_STYLESHEET        = ../apidocs/common/doxygen.css
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
+# files or namespaces will be aligned in HTML using tables. If set to 
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the Html help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
+# top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it.
+
+DISABLE_INDEX          = YES
+
+# This tag can be used to set the number of enum values (range [1..20]) 
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript and frames is required (for instance Mozilla, Netscape 4.0+, 
+# or Internet explorer 4.0+). Note that for large projects the tree generation 
+# can take a very long time. In such cases it is better to disable this feature. 
+# Windows users are probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW      = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = 
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, a4wide, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimised for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = 
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assigments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = 
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .tj3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+# then it will generate one additional man file for each entity 
+# documented in the real man page(s). These additional files 
+# only source the real man page, but without them the man command 
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_XML           = NO
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+# generate an AutoGen Definitions (see autogen.sf.net) file 
+# that captures the structure of the code including all 
+# documentation. Note that this feature is still experimental 
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_PREDEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed.
+
+PREDEFINED             = QT_VERSION=305
+
+# If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+# doxygen's preprocessor will remove all function-like macros that are alone 
+# on a line and do not end with a semicolon. Such function macros are typically 
+# used for boiler-plate code, and will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to external references   
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tagfiles.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = 
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+# in the modules index. If set to NO, only the current project's groups will 
+# be listed.
+
+EXTERNAL_GROUPS        = NO
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a inheritance diagram (in Html, RTF and LaTeX) for classes with base or 
+# super classes. Setting the tag to NO turns the diagrams off. Note that this 
+# option is superceded by the HAVE_DOT option below. This is only a fallback. It is 
+# recommended to install and use dot, since it yield more powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide 
+# inheritance and usage relations if the target is undocumented 
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = NO
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found on the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width 
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+# this value, doxygen will try to truncate the graph, so that it fits within 
+# the specified constraint. Beware that most browsers cannot cope with very 
+# large images.
+
+MAX_DOT_GRAPH_WIDTH    = 800
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height 
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+# this value, doxygen will try to truncate the graph, so that it fits within 
+# the specified constraint. Beware that most browsers cannot cope with very 
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT   = 1024
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermedate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to the search engine   
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be 
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE           = NO
+
+# The CGI_NAME tag should be the name of the CGI script that 
+# starts the search engine (doxysearch) with the correct parameters. 
+# A script with this name will be generated by doxygen.
+
+CGI_NAME               = 
+
+# The CGI_URL tag should be the absolute URL to the directory where the 
+# cgi binaries are located. See the documentation of your http daemon for 
+# details.
+
+CGI_URL                = 
+
+# The DOC_URL tag should be the absolute URL to the directory where the 
+# documentation is located. If left blank the absolute path to the 
+# documentation, with file:// prepended to it, will be used.
+
+DOC_URL                = 
+
+# The DOC_ABSPATH tag should be the absolute path to the directory where the 
+# documentation is located. If left blank the directory on the local machine 
+# will be used.
+
+DOC_ABSPATH            = 
+
+# The BIN_ABSPATH tag must point to the directory where the doxysearch binary 
+# is installed.
+
+BIN_ABSPATH            = 
+
+# The EXT_DOC_PATHS tag can be used to specify one or more paths to 
+# documentation generated for other projects. This allows doxysearch to search 
+# the documentation for these projects as well.
+
+EXT_DOC_PATHS          = 
+PROJECT_NAME           = "taskjuggler Library"
+INPUT                  = .
+IMAGE_PATH             = ../docs/api
+OUTPUT_DIRECTORY       = ../apidocs
+HTML_OUTPUT            = taskjuggler/html
+LATEX_OUTPUT           = taskjuggler/latex
+RTF_OUTPUT             = taskjuggler/rtf
+MAN_OUTPUT             = taskjuggler/man
+GENERATE_HTML          = yes
+GENERATE_MAN          = yes
+GENERATE_LATEX          = yes
+TAGFILES = \
+=/usr/share/doc/packages/qt3/html
+GENERATE_TAGFILE       = ../apidocs/taskjuggler/taskjuggler.tag
+IGNORE_PREFIX          = K
+HAVE_DOT = NO
index 787c2ba..932e5bb 100644 (file)
@@ -52,8 +52,8 @@ ExportReport::ExportReport(Project* p, const QString& f,
        showActual = FALSE;
 
        taskSortCriteria[0] = CoreAttributesList::TreeMode;
-       taskSortCriteria[1] = CoreAttributesList::PlanStartUp;
-       taskSortCriteria[2] = CoreAttributesList::PlanEndUp;
+       taskSortCriteria[1] = CoreAttributesList::StartUp;
+       taskSortCriteria[2] = CoreAttributesList::EndUp;
        resourceSortCriteria[0] = CoreAttributesList::TreeMode;
        resourceSortCriteria[1] = CoreAttributesList::IdUp;
 }
@@ -104,8 +104,8 @@ ExportReport::generateTaskList(TaskList& filteredTaskList,
                {
                        start = time2rfc(t->getStart(Task::Actual));
                        end = time2rfc(t->getEnd(Task::Actual) + 1);
-                       s << "  actualStart " << start << endl
-                               << "  actualEnd " << end << endl;
+                       s << "  actualstart " << start << endl
+                               << "  actualend " << end << endl;
                        if (t->getScheduled(Task::Actual))
                                s << "  actualscheduled" << endl;
                }
diff --git a/taskjuggler/FileInfo.cpp b/taskjuggler/FileInfo.cpp
new file mode 100644 (file)
index 0000000..d2a5dea
--- /dev/null
@@ -0,0 +1,495 @@
+/*
+ * FileInfo.cpp - TaskJuggler
+ *
+ * Copyright (c) 2001, 2002 by Chris Schlaeger <cs@suse.de>
+ *
+ * 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.
+ *
+ * $Id$
+ */
+
+#include <ctype.h>
+
+#include "FileInfo.h"
+#include "ProjectFile.h"
+
+FileInfo::FileInfo(ProjectFile* p, const QString& file_, const QString& tp)
+       : pf(p), taskPrefix(tp)
+{
+       tokenTypeBuf = INVALID;
+       file = file_;
+}
+
+bool
+FileInfo::open()
+{
+       if (file.right(2) == "/.")
+       {
+               f = new QTextStream(stdin, IO_ReadOnly);
+               fh = stdin;
+       }
+       else
+       {
+               if ((fh = fopen(file, "r")) == 0)
+                       return FALSE;
+               f = new QTextStream(fh, IO_ReadOnly);
+       }
+
+       lineBuf = QString::null;
+       currLine = 1;
+       return TRUE;
+}
+
+bool
+FileInfo::close()
+{
+       delete f;
+       if (fh == stdin)
+               return TRUE;
+
+       if (fclose(fh) == EOF)
+               return FALSE;
+
+       return TRUE;
+}
+
+QChar
+FileInfo::getC(bool expandMacros)
+{
+ BEGIN:
+       QChar c;
+       if (ungetBuf.isEmpty())
+       {
+               *f >> c;
+               if (feof(fh))
+                       c = QChar(EOFile);
+       }
+       else
+       {
+               c = ungetBuf.last();
+               ungetBuf.remove(ungetBuf.fromLast());
+               if (c.unicode() == EOMacro)
+               {
+                       macroStack.removeLast();
+                       pf->getMacros().popArguments();
+                       goto BEGIN;
+               }
+       }
+       lineBuf += c;
+
+       if (expandMacros)
+       {
+               if (c == '$')
+               {
+                       QChar d;
+                       if ((d = getC(FALSE)) == '{')
+                       {
+                               // remove $ from lineBuf;
+                               lineBuf = lineBuf.left(lineBuf.length() - 1);
+                               readMacroCall();
+                               goto BEGIN;
+                       }
+                       else
+                       {
+                               // $$ escapes $, so discard 2nd $
+                               if (d != '$')
+                                       ungetC(d);
+                       }
+               }
+       }
+
+       return c;
+}
+
+void
+FileInfo::ungetC(QChar c)
+{
+       lineBuf = lineBuf.left(lineBuf.length() - 1);
+       ungetBuf.append(c);
+}
+
+bool
+FileInfo::getDateFragment(QString& token, QChar& c)
+{
+       token += c;
+       c = getC();
+       // c must be a digit
+       if (!c.isDigit())
+       {
+               fatalError("Corrupted date");
+               return FALSE;
+       }
+       token += c;
+       // read other digits
+       while ((c = getC()).unicode() != EOFile && c.isDigit())
+               token += c;
+
+       return TRUE;
+}
+
+QString
+FileInfo::getPath() const
+{
+       if (file.find('/') >= 0)
+               return file.left(file.findRev('/') + 1);
+       else
+               return "";
+}
+
+TokenType
+FileInfo::nextToken(QString& token)
+{
+       if (tokenTypeBuf != INVALID)
+       {
+               token = tokenBuf;
+               TokenType tt = tokenTypeBuf;
+               tokenTypeBuf = INVALID;
+               return tt;
+       }
+
+       token = "";
+
+       // skip blanks and comments
+       for ( ; ; )
+       {
+               QChar c = getC();
+               if (c.unicode() == EOFile)
+                       return EndOfFile;
+               switch (c)
+               {
+               case ' ':
+               case '\t':
+                       break;
+               case '/':
+                       /* This code skips c-style comments like the one you are just
+                        * reading. */
+                       if ((c = getC(FALSE)) == '*')
+                       {
+                               do
+                               {
+                                       while ((c = getC(FALSE)) != '*')
+                                       {
+                                               if (c == '\n')
+                                                       currLine++;
+                                               else if (c.unicode() == EOFile)
+                                               {
+                                                       fatalError("Unterminated comment");
+                                                       return EndOfFile;
+                                               }
+                                       }
+                               } while ((c = getC(FALSE)) != '/');
+                       }
+                       else
+                       {
+                               ungetC(c);
+                               ungetC('/');
+                               goto BLANKS_DONE;
+                       }
+                       break;
+               case '#':       // Comments start with '#' and reach towards end of line
+                       while ((c = getC(FALSE)) != '\n' && c.unicode() != EOFile)
+                               ;
+                       if (c.unicode() == EOFile)
+                               return EndOfFile;
+                       // break missing on purpose
+               case '\n':
+                       // Increase line counter only when not replaying a macro.
+                       if (macroStack.isEmpty())
+                               currLine++;
+                       lineBuf = "";
+                       break;
+               default:
+                       ungetC(c);
+                       goto BLANKS_DONE;
+               }
+       }
+ BLANKS_DONE:
+
+       // analyse non blank characters
+       for ( ; ; )
+       {
+               QChar c = getC();
+               if (c.unicode() == EOFile)
+               {
+                       fatalError("Unexpected end of file");
+                       return EndOfFile;
+               }
+               else if (isalpha(c) || (c == '_') || (c == '!'))
+               {
+                       token += c;
+                       while ((c = getC()).unicode() != EOFile &&
+                                  (isalnum(c) || (c == '_') || (c == '.') || (c == '!')))
+                               token += c;
+                       ungetC(c);
+                       if (token.contains('.'))
+                       {
+                               if (token[0] == '!')
+                                       return RELATIVE_ID;
+                               else
+                                       return ABSOLUTE_ID;
+                       }
+                       else
+                               return ID;
+               }
+               else if (c.isDigit())
+               {
+                       // read first number (maybe a year)
+                       token += c;
+                       while ((c = getC()).unicode() != EOFile && c.isDigit())
+                               token += c;
+                       if (c == '-')
+                       {
+                               // this must be a ISO date yyyy-mm-dd[[-hh:mm:[ss]]-TZ]
+                               getDateFragment(token, c);
+                               if (c != '-')
+                               {
+                                       fatalError("Corrupted date");
+                                       return EndOfFile;
+                               }
+                               getDateFragment(token, c);
+                               if (c == '-')
+                               {
+                                       getDateFragment(token, c);
+                                       if (c != ':')
+                                       {
+                                               fatalError("Corrupted date");
+                                               return EndOfFile;
+                                       }
+                                       getDateFragment(token, c);
+                                       if (c == ':')
+                                               getDateFragment(token, c);
+                               }
+                               int i = 0;
+                               if (c == '-')
+                               {
+                                       /* Timezone can either be a name (ref.
+                                        * Utility::timezone2tz) or GMT[+-]hh:mm */
+                                       token += c;
+                                       while ((c = getC()).unicode() != EOFile &&
+                                                  (isalnum(c) || c == '+' || c == '-' || c == ':')
+                                                  && i++ < 9)
+                                               token += c;
+                               }
+                               ungetC(c);
+                               return DATE;
+                       }
+                       else if (c == '.')
+                       {
+                               // must be a real number
+                               token += c;
+                               while ((c = getC()).unicode() != EOFile && c.isDigit())
+                                       token += c;
+                               ungetC(c);
+                               return REAL;
+                       }
+                       else if (c == ':')
+                       {
+                               // must be a time (HH:MM)
+                               token += c;
+                               for (int i = 0; i < 2; i++)
+                               {
+                                       if ((c = getC()).unicode() != EOFile && c.isDigit())
+                                               token += c;
+                                       else
+                                       {
+                                               fatalError("2 digits minutes expected");
+                                               return EndOfFile;
+                                       }
+                               }
+                               return HOUR;
+                       }
+                       else
+                       {
+                               ungetC(c);
+                               return INTEGER;
+                       }
+               }
+               else if (c == '\'')
+               {
+                       // single quoted string
+                       while ((c = getC()).unicode() != EOFile && c != '\'')
+                       {
+                               if (c == '\n')
+                                       currLine++;
+                               token += c;
+                       }
+                       if (c.unicode() == EOFile)
+                       {
+                               fatalError("Non terminated string");
+                               return EndOfFile;
+                       }
+                       return STRING;
+               }
+               else if (c == '"')
+               {
+                       // double quoted string
+                       while ((c = getC()).unicode() != EOFile && c != '"')
+                       {
+                               if (c == '\n')
+                                       currLine++;
+                               token += c;
+                       }
+                       if (c.unicode() == EOFile)
+                       {
+                               fatalError("Non terminated string");
+                               return EndOfFile;
+                       }
+                       return STRING;
+               }
+               else if (c == '[')
+               {
+                       int nesting = 0;
+                       while ((c = getC(FALSE)).unicode() != EOFile &&
+                                  (c != ']' || nesting > 0))
+                       {
+                               if (c == '[')
+                                       nesting++;
+                               else if (c == ']')
+                                       nesting--;
+                               if (c == '\n')
+                                       currLine++;
+                               token += c;
+                       }
+                       if (c.unicode() == EOFile)
+                       {
+                               fatalError("Non terminated macro definition");
+                               return EndOfFile;
+                       }
+                       return MacroBody;
+               }
+               else
+               {
+                       token += c;
+                       switch (c)
+                       {
+                       case '{':
+                               return LCBRACE;
+                       case '}':
+                               return RCBRACE;
+                       case '(':
+                               return LBRACE;
+                       case ')':
+                               return RBRACE;
+                       case ',':
+                               return COMMA;
+                       case '~':
+                               return TILDE;
+                       case '-':
+                               return MINUS;
+                       case '&':
+                               return AND;
+                       case '|':
+                               return OR;
+                       default:
+                               fatalError("Illegal character '%c' (Unicode %d)", c.latin1(),
+                                                  c.unicode());
+                               return INVALID;
+                       }
+               }
+       }
+}
+
+bool
+FileInfo::readMacroCall()
+{
+       QString id;
+       TokenType tt;
+       if ((tt = nextToken(id)) != ID && tt != INTEGER)
+       {
+               fatalError("Macro ID expected");
+               return FALSE;
+       }
+       QString token;
+       // Store all arguments in a newly created string list.
+       QStringList* sl = new QStringList;
+       while ((tt = nextToken(token)) == STRING)
+               sl->append(token);
+       if (tt != RCBRACE)
+       {
+               fatalError("'}' expected");
+               return FALSE;
+       }
+
+       // push string list to global argument stack
+       pf->getMacros().pushArguments(sl);
+
+       // expand the macro
+       pf->getMacros().setLocation(file, currLine);
+       QString macro = pf->getMacros().resolve(id);
+       if (macro.isNull())
+       {
+               fatalError(QString("Unknown macro ") + id);
+               return FALSE;
+       }
+
+       // Push pointer to macro on stack. Needed for error handling.
+       macroStack.append(pf->getMacros().getMacro(id));
+
+       // mark end of macro
+       ungetC(QChar(EOMacro));
+       // push expanded macro reverse into ungetC buffer.
+       for (int i = macro.length() - 1; i >= 0; --i)
+               ungetC(macro[i].latin1());
+       return TRUE;
+}
+
+void
+FileInfo::returnToken(TokenType tt, const QString& buf)
+{
+       if (tokenTypeBuf != INVALID)
+       {
+               qFatal("Internal Error: Token buffer overflow!");
+               return;
+       }
+       tokenTypeBuf = tt;
+       tokenBuf = buf;
+}
+
+void
+FileInfo::fatalError(const char* msg, ...)
+{
+       va_list ap;
+       char buf[1024];
+       va_start(ap, msg);
+       vsnprintf(buf, 1024, msg, ap);
+       va_end(ap);
+       
+       if (macroStack.isEmpty())
+       {
+               qWarning("%s:%d:%s", file.latin1(), currLine, buf);
+               qWarning("%s", lineBuf.latin1());
+       }
+       else
+       {
+               qWarning("Error in expanded macro");
+               qWarning("%s:%d: %s",
+                                macroStack.last()->getFile().latin1(),
+                                macroStack.last()->getLine(), buf);
+               qWarning("%s", lineBuf.latin1());
+       }
+}
+
+void
+FileInfo::fatalErrorVA(const char* msg, va_list ap)
+{
+       char buf[1024];
+       vsnprintf(buf, 1024, msg, ap);
+       
+       if (macroStack.isEmpty())
+       {
+               qWarning("%s:%d:%s", file.latin1(), currLine, buf);
+               qWarning("%s", lineBuf.latin1());
+       }
+       else
+       {
+               qWarning("Error in expanded macro");
+               qWarning("%s:%d: %s",
+                                macroStack.last()->getFile().latin1(),
+                                macroStack.last()->getLine(), buf);
+               qWarning("%s", lineBuf.latin1());
+       }
+}
+
+
diff --git a/taskjuggler/FileInfo.h b/taskjuggler/FileInfo.h
new file mode 100644 (file)
index 0000000..82f64b0
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+ * FileInfo.h - TaskJuggler
+ *
+ * Copyright (c) 2001, 2002 by Chris Schlaeger <cs@suse.de>
+ *
+ * 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.
+ *
+ * $Id$
+ */
+#ifndef _FileInfo_h_
+#define _FileInfo_h_
+
+#include <qptrlist.h>
+
+#include "MacroTable.h"
+#include "Token.h"
+
+class QString;
+class ProjectFile;
+
+/**
+ * @short Stores much information about a project file.
+ * @author Chris Schlaeger <cs@suse.de>
+ */
+class FileInfo
+{
+public:
+       FileInfo(ProjectFile* p, const QString& file, const QString& tp);
+       ~FileInfo() { }
+
+       bool open();
+       bool close();
+
+       QChar getC(bool expandMacros = TRUE);
+       void ungetC(QChar c);
+       void expandMarco(QString& c);
+
+       const QString& getFile() const { return file; }
+       QString getPath() const;
+
+       int getLine() const { return currLine; }
+
+       TokenType nextToken(QString& buf);
+       void returnToken(TokenType t, const QString& buf);
+
+       bool readMacroCall();
+
+       const QString& getTaskPrefix() { return taskPrefix; }
+
+       void fatalErrorVA(const char* msg, va_list ap);
+       void fatalError(const char* msg, ...);
+
+private:
+       bool getDateFragment(QString& token, QChar& c);
+
+       /**
+        * A pointer to the ProjectFile class that stores all read-in
+        * data.
+        */
+       ProjectFile* pf;
+       
+       // The name of the file.
+       QString file;
+
+       // The file handle of the file to read.
+       FILE* fh;
+
+       // The stream used to read the file.
+       QTextStream* f;
+
+       // The number of the line currently being read.
+       int currLine;
+
+       /**
+        * Macros have file scope. So we keep a stack of macros for each file that
+        * we read.
+        */
+       QPtrList<Macro> macroStack;
+
+       /**
+        * A buffer for the part of the line that has been parsed already. This is
+        * primarily used for error reporting.
+        */
+       QString lineBuf;
+
+       /**
+        * A buffer for characters that have been pushed back again. This
+        * simplifies file parsing in some situations.
+        */
+       QValueList<QChar> ungetBuf;
+
+       /**
+     * Besides read in characters we can also push back a token. Contrary to
+        * characters we can push back only 1 token. This is stored as type and
+        * a string buffer.
+        */      
+       TokenType tokenTypeBuf;
+       QString tokenBuf;
+
+       /**
+        * Task trees of include files can not only be added at global scope but
+        * also as sub-trees. This strings stores the prefix that has to be
+        * specified at include times.
+        */
+       QString taskPrefix;
+};
+
+#endif
+
index 24d150a..55e671f 100644 (file)
 
 class Account;
 
+/**
+ * @short Stores all information about an HTML account report.
+ * @author Chris Schlaeger <cs@suse.de>
+ */
 class HTMLAccountReport : public ReportHtml
 {
 public:
index 2e401a8..6d202be 100644 (file)
@@ -31,8 +31,8 @@ HTMLResourceReport::HTMLResourceReport(Project* p, const QString& f,
        hideResource = new ExpressionTree(new Operation(0));
 
        taskSortCriteria[0] = CoreAttributesList::TreeMode;
-       taskSortCriteria[1] = CoreAttributesList::PlanStartUp;
-       taskSortCriteria[2] = CoreAttributesList::PlanEndUp;
+       taskSortCriteria[1] = CoreAttributesList::StartUp;
+       taskSortCriteria[2] = CoreAttributesList::EndUp;
        resourceSortCriteria[0] = CoreAttributesList::TreeMode;
 }
 
index 955436d..5a28f3b 100644 (file)
 
 #include <Report.h>
 
+/**
+ * @short Stores all information about an HTML resource report.
+ * @author Chris Schlaeger <cs@suse.de>
+ */
 class HTMLResourceReport : public ReportHtml
 {
 public:
index bd98d71..0eded81 100644 (file)
@@ -33,8 +33,8 @@ HTMLTaskReport::HTMLTaskReport(Project* p, const QString& f, time_t s,
        hideResource = new ExpressionTree(new Operation(1));
 
        taskSortCriteria[0] = CoreAttributesList::TreeMode;
-       taskSortCriteria[1] = CoreAttributesList::PlanStartUp;
-       taskSortCriteria[2] = CoreAttributesList::PlanEndUp;
+       taskSortCriteria[1] = CoreAttributesList::StartUp;
+       taskSortCriteria[2] = CoreAttributesList::EndUp;
        resourceSortCriteria[0] = CoreAttributesList::TreeMode;
 }
 
index 003af48..5897d39 100644 (file)
 
 class Project;
 
+/**
+ * @short Stores all information about an HTML task report.
+ * @author Chris Schlaeger <cs@suse.de>
+ */
 class HTMLTaskReport : public ReportHtml
 {
 public:
index 273984c..5df05b4 100644 (file)
@@ -31,8 +31,8 @@ HTMLWeeklyCalendar::HTMLWeeklyCalendar(Project* p, const QString& f, time_t s,
        hideResource = new ExpressionTree(new Operation(1));
 
        taskSortCriteria[0] = CoreAttributesList::TreeMode;
-       taskSortCriteria[1] = CoreAttributesList::PlanStartUp;
-       taskSortCriteria[2] = CoreAttributesList::PlanEndUp;
+       taskSortCriteria[1] = CoreAttributesList::StartUp;
+       taskSortCriteria[2] = CoreAttributesList::EndUp;
 
        resourceSortCriteria[0] = CoreAttributesList::TreeMode;
        resourceSortCriteria[1] = CoreAttributesList::NameUp;
index e01c15d..c39ed7e 100644 (file)
@@ -18,7 +18,7 @@
 #include <qstring.h>
 #include <qstringlist.h>
 #include <qdict.h>
-#include <qvaluelist.h>
+#include <qptrlist.h>
 
 class Macro
 {
index 3c28892..7aa52bd 100644 (file)
@@ -6,7 +6,7 @@ noinst_LTLIBRARIES = libtaskjuggler.la
 libtaskjuggler_la_SOURCES = Utility.cpp ExpressionTree.cpp Report.cpp ReportXML.cpp \
 CoreAttributes.cpp ShiftList.cpp ResourceList.cpp Task.cpp \
 TaskScenario.cpp VacationList.cpp \
-Account.cpp Allocation.cpp MacroTable.cpp ProjectFile.cpp \
+Account.cpp Allocation.cpp MacroTable.cpp FileInfo.cpp ProjectFile.cpp \
 HTMLTaskReport.cpp HTMLResourceReport.cpp HTMLAccountReport.cpp \
 HTMLWeeklyCalendar.cpp ReportHtml.cpp ExportReport.cpp \
 Project.cpp ReportICal.cpp kotrus.cpp
@@ -37,3 +37,5 @@ $(DTDFILE): $(taskjuggler_SOURCES)
        @echo '<!-- Generated by Makefile - do not edit -->' > $(DTDFILE)
        @perl -n -e 'print  if( (/-- DTD --/ .. /\/-- DTD ..\//) && $$_ !~ /-- DTD --/);' $(libtaskjuggler_la_SOURCES) >> $(DTDFILE)
 
+include ../admin/Doxyfile.am
+
index 20b92ff..306ad72 100644 (file)
@@ -22,8 +22,7 @@
 #include "Utility.h"
 #include "kotrus.h"
 
-int Project::debugLevel = 0;
-int Project::debugMode = -1;
+DebugController DebugCtrl;
 
 Project::Project()
 {
@@ -132,8 +131,21 @@ Project::getIdIndex(const QString& i) const
        return idxStr;
 }
 
+int
+Project::calcWorkingDays(const Interval& iv)
+{
+       int workingDays = 0;
+
+       for (time_t s = midnight(iv.getStart()); s <= iv.getEnd(); 
+                s = sameTimeNextDay(s))
+               if (isWorkingDay(s))
+                       workingDays++;
+
+       return workingDays;
+}
+
 bool
-Project::pass2(bool checkOnlySyntax)
+Project::pass2()
 {
        QDict<Task> idHash;
        bool error = FALSE;
@@ -164,7 +176,6 @@ Project::pass2(bool checkOnlySyntax)
 
        // Find out what scenarios need to be scheduled.
        // TODO: No multiple scenario support yet.
-       bool hasExtraValues = FALSE;
        for (Task* t = taskList.first(); t != 0; t = taskList.next())
                if (!hasExtraValues && t->hasExtraValues(Task::Actual))
                        hasExtraValues = TRUE;
@@ -179,15 +190,18 @@ Project::pass2(bool checkOnlySyntax)
                if (!t->preScheduleOk())
                        error = TRUE;
 
+       // Check all tasks for dependency loops.
        for (Task* t = taskList.first(); t != 0; t = taskList.next())
                if (t->loopDetector())
                        return FALSE;
 
-       if (error)
-               return FALSE;
+       return !error;
+}
 
-       if (checkOnlySyntax)
-               return TRUE;
+bool
+Project::scheduleAllScenarios()
+{
+       bool error = FALSE;
 
        if (DEBUGPS(1))
                qWarning("Scheduling plan scenario...");
@@ -223,8 +237,8 @@ Project::pass2(bool checkOnlySyntax)
        resourceList.createIndex();
        accountList.createIndex();
        shiftList.createIndex();
-       
-       return !error;
+
+       return !error;  
 }
 
 void
@@ -248,10 +262,10 @@ Project::prepareScenario(int sc)
 void
 Project::finishScenario(int sc)
 {
-       for (Task* t = taskList.first(); t != 0; t = taskList.next())
-               t->finishScenario(sc);
        for (Resource* r = resourceList.first(); r != 0; r = resourceList.next())
                r->finishScenario(sc);
+       for (Task* t = taskList.first(); t != 0; t = taskList.next())
+               t->finishScenario(sc);
 }
 
 bool
@@ -444,7 +458,8 @@ Project::loadFromXML( const QString& inpFile )
    {
       qDebug("Empty !" );
    }
-   pass2(FALSE);
+   pass2();
+   scheduleAllScenarios();
    return true;
 }
 
index 54bcd12..8fe7ee6 100644 (file)
 #endif
 class Kotrus;
 
+/**
+ * The Project class is the root of the data tree of the application. In
+ * principle an application could handle multiple projects, but this has never
+ * been tested.
+ *
+ * @short The root class of all project related infromation.
+ * @author Chris Schlaeger <cs@suse.de>
+ */
 class Project
 {
 public:
        Project();
        ~Project();
 
-       bool pass2(bool checkOnlySyntax);
+       /**
+        * Generate cross references between all data structures and run a
+        * consistency check. This function must be called after the project data
+        * tree has been contructed. 
+        * @return Only if all tests were successful TRUE is returned.
+        */
+       bool pass2();
 
+       /**
+        * Schedule all tasks for all scenarios. @return In case any errors were
+        * detected FALSE is returned.
+        */
+       bool scheduleAllScenarios();
+       
+       /**
+        * Returns the number of supported scenarios.
+        */
        int getMaxScenarios() { return scenarioNames.count(); }
+       /**
+        * Returns the name of a scenario.
+        * @param sc Specifies the scenario.
+        */
        const QString& getScenarioName(int sc);
 
-       void overlayScenario(int sc);
-       void prepareScenario(int sc);
-       void finishScenario(int sc);
-       
-       bool schedule(const QString& scenario);
-
+       /**
+        * Set the name of the project. The project name is maily used for the
+        * reports.
+        */
        void setName(const QString& n) { name = n; }
+       /**
+        * Returns the name of the project.
+        */
        const QString& getName() const { return name; }
 
+       /**
+        * Set the version number of the project. This version is maily used for
+        * reports.
+        */
        void setVersion(const QString& v) { version = v; }
+       /**
+        * Returns the version number of the project.
+        */
        const QString& getVersion() const { return version; }
 
+       /**
+        * Set the copyright information. This is a default text used for all
+        * reports.
+        */
        void setCopyright(const QString& c) { copyright = c; }
+       /**
+        * Returns the copyright information of the project.
+        */
        const QString& getCopyright() const { return copyright; }
-
+       
+       /**
+        * Set the default priority for all top-level tasks. Normally this value
+        * is 500.
+        */
        void setPriority(int p) { priority = p; }
+       /**
+        * Returns the default priority for all top-level tasks.
+        */
        int getPriority() const { return priority; }
 
+       /**
+        * Set the start time of the project.
+        */
        void setStart(time_t s) { start = s; }
+       /**
+        * Get the start time of the project.
+        */
        time_t getStart() const { return start; }
 
+       /**
+        * Set the end time of the project. The specified second is still
+        * considered as within the project time frame.
+        */
        void setEnd(time_t e) { end = e; }
+       /**
+        * Get the end time of the project.
+        */
        time_t getEnd() const { return end; }
 
        void setNow(time_t n) { now = n; }
@@ -114,6 +176,7 @@ public:
                 * day is not registered as a vacation day then it is a workday. */
                return !(workingHours[dayOfWeek(d, FALSE)]->isEmpty() || isVacation(d));
        }
+       int calcWorkingDays(const Interval& iv);
        
        Interval* getVacationListFirst()
        {
@@ -265,20 +328,13 @@ public:
        void generateReports();
        bool needsActualDataForReports();
 
-       static void setDebugLevel(int l)
-       {
-               debugLevel = l;
-               Task::setDebugLevel(l);
-               Resource::setDebugLevel(l);
-       }
-       static void setDebugMode(int m)
-       {
-               debugMode = m;
-               Task::setDebugMode(m);
-               Resource::setDebugMode(m);
-       }
-
 private:
+       void overlayScenario(int sc);
+       void prepareScenario(int sc);
+       void finishScenario(int sc);
+       
+       bool schedule(const QString& scenario);
+
        bool checkSchedule(const QString& scenario);
 
        /// The start date of the project
@@ -352,6 +408,7 @@ private:
        QStringList projectIDs;
 
        QStringList scenarioNames;
+       bool hasExtraValues;    // TODO: Fix this for multiple scenarios
 
        ShiftList shiftList;
        TaskList taskList;
@@ -373,9 +430,6 @@ private:
        QList<HTMLAccountReport> htmlAccountReports;
        QList<HTMLWeeklyCalendar> htmlWeeklyCalendars;
        QList<ExportReport> exportReports;
-
-       static int debugLevel;
-       static int debugMode;
 } ;
 
 #endif
index 60d46ce..5af980a 100644 (file)
@@ -10,7 +10,6 @@
  * $Id$
  */
 
-#include <ctype.h>
 #include <stdio.h>
 #include <stdlib.h>
 
        } \
 }
 
-int ProjectFile::debugLevel = 0;
-int ProjectFile::debugMode = -1;
-
-FileInfo::FileInfo(ProjectFile* p, const QString& file_, const QString& tp)
-       : pf(p), taskPrefix(tp)
-{
-       tokenTypeBuf = INVALID;
-       file = file_;
-}
-
-bool
-FileInfo::open()
-{
-       if (file.right(2) == "/.")
-       {
-               f = new QTextStream(stdin, IO_ReadOnly);
-               fh = stdin;
-       }
-       else
-       {
-               if ((fh = fopen(file, "r")) == 0)
-                       return FALSE;
-               f = new QTextStream(fh, IO_ReadOnly);
-       }
-
-       lineBuf = QString::null;
-       currLine = 1;
-       return TRUE;
-}
-
-bool
-FileInfo::close()
-{
-       delete f;
-       if (fh == stdin)
-               return TRUE;
-
-       if (fclose(fh) == EOF)
-               return FALSE;
-
-       return TRUE;
-}
-
-QChar
-FileInfo::getC(bool expandMacros)
-{
- BEGIN:
-       QChar c;
-       if (ungetBuf.isEmpty())
-       {
-               *f >> c;
-               if (feof(fh))
-                       c = QChar(EOFile);
-       }
-       else
-       {
-               c = ungetBuf.last();
-               ungetBuf.remove(ungetBuf.fromLast());
-               if (c.unicode() == EOMacro)
-               {
-                       macroStack.removeLast();
-                       pf->getMacros().popArguments();
-                       goto BEGIN;
-               }
-       }
-       lineBuf += c;
-
-       if (expandMacros)
-       {
-               if (c == '$')
-               {
-                       QChar d;
-                       if ((d = getC(FALSE)) == '{')
-                       {
-                               // remove $ from lineBuf;
-                               lineBuf = lineBuf.left(lineBuf.length() - 1);
-                               readMacroCall();
-                               goto BEGIN;
-                       }
-                       else
-                       {
-                               // $$ escapes $, so discard 2nd $
-                               if (d != '$')
-                                       ungetC(d);
-                       }
-               }
-       }
-
-       return c;
-}
-
-void
-FileInfo::ungetC(QChar c)
-{
-       lineBuf = lineBuf.left(lineBuf.length() - 1);
-       ungetBuf.append(c);
-}
-
-bool
-FileInfo::getDateFragment(QString& token, QChar& c)
-{
-       token += c;
-       c = getC();
-       // c must be a digit
-       if (!c.isDigit())
-       {
-               fatalError("Corrupted date");
-               return FALSE;
-       }
-       token += c;
-       // read other digits
-       while ((c = getC()).unicode() != EOFile && c.isDigit())
-               token += c;
-
-       return TRUE;
-}
-
-QString
-FileInfo::getPath() const
-{
-       if (file.find('/') >= 0)
-               return file.left(file.findRev('/') + 1);
-       else
-               return "";
-}
-
-TokenType
-FileInfo::nextToken(QString& token)
-{
-       if (tokenTypeBuf != INVALID)
-       {
-               token = tokenBuf;
-               TokenType tt = tokenTypeBuf;
-               tokenTypeBuf = INVALID;
-               return tt;
-       }
-
-       token = "";
-
-       // skip blanks and comments
-       for ( ; ; )
-       {
-               QChar c = getC();
-               if (c.unicode() == EOFile)
-                       return EndOfFile;
-               switch (c)
-               {
-               case ' ':
-               case '\t':
-                       break;
-               case '/':
-                       /* This code skips c-style comments like the one you are just
-                        * reading. */
-                       if ((c = getC(FALSE)) == '*')
-                       {
-                               do
-                               {
-                                       while ((c = getC(FALSE)) != '*')
-                                       {
-                                               if (c == '\n')
-                                                       currLine++;
-                                               else if (c.unicode() == EOFile)
-                                               {
-                                                       fatalError("Unterminated comment");
-                                                       return EndOfFile;
-                                               }
-                                       }
-                               } while ((c = getC(FALSE)) != '/');
-                       }
-                       else
-                       {
-                               ungetC(c);
-                               ungetC('/');
-                               goto BLANKS_DONE;
-                       }
-                       break;
-               case '#':       // Comments start with '#' and reach towards end of line
-                       while ((c = getC(FALSE)) != '\n' && c.unicode() != EOFile)
-                               ;
-                       if (c.unicode() == EOFile)
-                               return EndOfFile;
-                       // break missing on purpose
-               case '\n':
-                       // Increase line counter only when not replaying a macro.
-                       if (macroStack.isEmpty())
-                               currLine++;
-                       lineBuf = "";
-                       break;
-               default:
-                       ungetC(c);
-                       goto BLANKS_DONE;
-               }
-       }
- BLANKS_DONE:
-
-       // analyse non blank characters
-       for ( ; ; )
-       {
-               QChar c = getC();
-               if (c.unicode() == EOFile)
-               {
-                       fatalError("Unexpected end of file");
-                       return EndOfFile;
-               }
-               else if (isalpha(c) || (c == '_') || (c == '!'))
-               {
-                       token += c;
-                       while ((c = getC()).unicode() != EOFile &&
-                                  (isalnum(c) || (c == '_') || (c == '.') || (c == '!')))
-                               token += c;
-                       ungetC(c);
-                       if (token.contains('.'))
-                       {
-                               if (token[0] == '!')
-                                       return RELATIVE_ID;
-                               else
-                                       return ABSOLUTE_ID;
-                       }
-                       else
-                               return ID;
-               }
-               else if (c.isDigit())
-               {
-                       // read first number (maybe a year)
-                       token += c;
-                       while ((c = getC()).unicode() != EOFile && c.isDigit())
-                               token += c;
-                       if (c == '-')
-                       {
-                               // this must be a ISO date yyyy-mm-dd[[-hh:mm:[ss]]-TZ]
-                               getDateFragment(token, c);
-                               if (c != '-')
-                               {
-                                       fatalError("Corrupted date");
-                                       return EndOfFile;
-                               }
-                               getDateFragment(token, c);
-                               if (c == '-')
-                               {
-                                       getDateFragment(token, c);
-                                       if (c != ':')
-                                       {
-                                               fatalError("Corrupted date");
-                                               return EndOfFile;
-                                       }
-                                       getDateFragment(token, c);
-                                       if (c == ':')
-                                               getDateFragment(token, c);
-                               }
-                               int i = 0;
-                               if (c == '-')
-                               {
-                                       /* Timezone can either be a name (ref.
-                                        * Utility::timezone2tz) or GMT[+-]hh:mm */
-                                       token += c;
-                                       while ((c = getC()).unicode() != EOFile &&
-                                                  (isalnum(c) || c == '+' || c == '-' || c == ':')
-                                                  && i++ < 9)
-                                               token += c;
-                               }
-                               ungetC(c);
-                               return DATE;
-                       }
-                       else if (c == '.')
-                       {
-                               // must be a real number
-                               token += c;
-                               while ((c = getC()).unicode() != EOFile && c.isDigit())
-                                       token += c;
-                               ungetC(c);
-                               return REAL;
-                       }
-                       else if (c == ':')
-                       {
-                               // must be a time (HH:MM)
-                               token += c;
-                               for (int i = 0; i < 2; i++)
-                               {
-                                       if ((c = getC()).unicode() != EOFile && c.isDigit())
-                                               token += c;
-                                       else
-                                       {
-                                               fatalError("2 digits minutes expected");
-                                               return EndOfFile;
-                                       }
-                               }
-                               return HOUR;
-                       }
-                       else
-                       {
-                               ungetC(c);
-                               return INTEGER;
-                       }
-               }
-               else if (c == '\'')
-               {
-                       // single quoted string
-                       while ((c = getC()).unicode() != EOFile && c != '\'')
-                       {
-                               if (c == '\n')
-                                       currLine++;
-                               token += c;
-                       }
-                       if (c.unicode() == EOFile)
-                       {
-                               fatalError("Non terminated string");
-                               return EndOfFile;
-                       }
-                       return STRING;
-               }
-               else if (c == '"')
-               {
-                       // double quoted string
-                       while ((c = getC()).unicode() != EOFile && c != '"')
-                       {
-                               if (c == '\n')
-                                       currLine++;
-                               token += c;
-                       }
-                       if (c.unicode() == EOFile)
-                       {
-                               fatalError("Non terminated string");
-                               return EndOfFile;
-                       }
-                       return STRING;
-               }
-               else if (c == '[')
-               {
-                       int nesting = 0;
-                       while ((c = getC(FALSE)).unicode() != EOFile &&
-                                  (c != ']' || nesting > 0))
-                       {
-                               if (c == '[')
-                                       nesting++;
-                               else if (c == ']')
-                                       nesting--;
-                               if (c == '\n')
-                                       currLine++;
-                               token += c;
-                       }
-                       if (c.unicode() == EOFile)
-                       {
-                               fatalError("Non terminated macro definition");
-                               return EndOfFile;
-                       }
-                       return MacroBody;
-               }
-               else
-               {
-                       token += c;
-                       switch (c)
-                       {
-                       case '{':
-                               return LCBRACE;
-                       case '}':
-                               return RCBRACE;
-                       case '(':
-                               return LBRACE;
-                       case ')':
-                               return RBRACE;
-                       case ',':
-                               return COMMA;
-                       case '~':
-                               return TILDE;
-                       case '-':
-                               return MINUS;
-                       case '&':
-                               return AND;
-                       case '|':
-                               return OR;
-                       default:
-                               fatalError("Illegal character '%c' (Unicode %d)", c.latin1(),
-                                                  c.unicode());
-                               return INVALID;
-                       }
-               }
-       }
-}
-
-bool
-FileInfo::readMacroCall()
-{
-       QString id;
-       TokenType tt;
-       if ((tt = nextToken(id)) != ID && tt != INTEGER)
-       {
-               fatalError("Macro ID expected");
-               return FALSE;
-       }
-       QString token;
-       // Store all arguments in a newly created string list.
-       QStringList* sl = new QStringList;
-       while ((tt = nextToken(token)) == STRING)
-               sl->append(token);
-       if (tt != RCBRACE)
-       {
-               fatalError("'}' expected");
-               return FALSE;
-       }
-
-       // push string list to global argument stack
-       pf->getMacros().pushArguments(sl);
-
-       // expand the macro
-       pf->getMacros().setLocation(file, currLine);
-       QString macro = pf->getMacros().resolve(id);
-       if (macro.isNull())
-       {
-               fatalError(QString("Unknown macro ") + id);
-               return FALSE;
-       }
-
-       // Push pointer to macro on stack. Needed for error handling.
-       macroStack.append(pf->getMacros().getMacro(id));
-
-       // mark end of macro
-       ungetC(QChar(EOMacro));
-       // push expanded macro reverse into ungetC buffer.
-       for (int i = macro.length() - 1; i >= 0; --i)
-               ungetC(macro[i].latin1());
-       return TRUE;
-}
-
-void
-FileInfo::returnToken(TokenType tt, const QString& buf)
-{
-       if (tokenTypeBuf != INVALID)
-       {
-               qFatal("Internal Error: Token buffer overflow!");
-               return;
-       }
-       tokenTypeBuf = tt;
-       tokenBuf = buf;
-}
-
-void
-FileInfo::fatalError(const char* msg, ...)
-{
-       va_list ap;
-       char buf[1024];
-       va_start(ap, msg);
-       vsnprintf(buf, 1024, msg, ap);
-       va_end(ap);
-       
-       if (macroStack.isEmpty())
-       {
-               qWarning("%s:%d:%s", file.latin1(), currLine, buf);
-               qWarning("%s", lineBuf.latin1());
-       }
-       else
-       {
-               qWarning("Error in expanded macro");
-               qWarning("%s:%d: %s",
-                                macroStack.last()->getFile().latin1(),
-                                macroStack.last()->getLine(), buf);
-               qWarning("%s", lineBuf.latin1());
-       }
-}
-
-void
-FileInfo::fatalErrorVA(const char* msg, va_list ap)
-{
-       char buf[1024];
-       vsnprintf(buf, 1024, msg, ap);
-       
-       if (macroStack.isEmpty())
-       {
-               qWarning("%s:%d:%s", file.latin1(), currLine, buf);
-               qWarning("%s", lineBuf.latin1());
-       }
-       else
-       {
-               qWarning("Error in expanded macro");
-               qWarning("%s:%d: %s",
-                                macroStack.last()->getFile().latin1(),
-                                macroStack.last()->getLine(), buf);
-               qWarning("%s", lineBuf.latin1());
-       }
-}
-
 ProjectFile::ProjectFile(Project* p)
 {
        proj = p;
@@ -2296,7 +1815,7 @@ ProjectFile::readAllocate(Task* t)
        else
                returnToken(tt, token);
        t->addAllocation(a);
-
+       
        return TRUE;
 }
 
@@ -3204,7 +2723,7 @@ ProjectFile::readSorting(Report* report, int which)
        do
        {
                nextToken(token);
-               CoreAttributesList::SortCriteria sorting;
+               int sorting;
                if (token == KW("tree"))
                        sorting = CoreAttributesList::TreeMode;
                else if (token == KW("sequenceup"))
@@ -3228,21 +2747,29 @@ ProjectFile::readSorting(Report* report, int which)
                else if (token == KW("namedown"))
                        sorting = CoreAttributesList::NameDown;
                else if (token == KW("startup") || token == KW("planstartup"))
-                       sorting = CoreAttributesList::PlanStartUp;
+                       sorting = CoreAttributesList::StartUp;
                else if (token == KW("startdown") || token == KW("planstartdown"))
-                       sorting = CoreAttributesList::PlanStartDown;
+                       sorting = CoreAttributesList::StartDown;
                else if (token == KW("endup") || token == KW("planendup"))
-                       sorting = CoreAttributesList::PlanEndUp;
+                       sorting = CoreAttributesList::EndUp;
                else if (token == KW("enddown") || token == KW("planenddown"))
-                       sorting = CoreAttributesList::PlanEndDown;
+                       sorting = CoreAttributesList::EndDown;
                else if (token == KW("actualstartup"))
-                       sorting = CoreAttributesList::ActualStartUp;
+                       sorting = CoreAttributesList::StartUp + 0xFFFF;
                else if (token == KW("actualstartdown"))
-                       sorting = CoreAttributesList::ActualStartDown;
+                       sorting = CoreAttributesList::StartDown + 0xFFFF;
                else if (token == KW("actualendup"))
-                       sorting = CoreAttributesList::ActualEndUp;
+                       sorting = CoreAttributesList::EndUp + 0xFFFF;
                else if (token == KW("actualenddown"))
-                       sorting = CoreAttributesList::ActualEndDown;
+                       sorting = CoreAttributesList::EndDown + 0xFFFF;
+               else if (token == KW("planstatusup"))
+                       sorting = CoreAttributesList::StatusUp;
+               else if (token == KW("planstatusdown"))
+                       sorting = CoreAttributesList::StatusDown;
+               else if (token == KW("plancompletedup"))
+                       sorting = CoreAttributesList::CompletedUp;
+               else if (token == KW("plancompleteddown"))
+                       sorting = CoreAttributesList::CompletedDown;
                else if (token == KW("priorityup"))
                        sorting = CoreAttributesList::PrioUp;
                else if (token == KW("prioritydown"))
index d4cec25..cb08801 100644 (file)
 #ifndef _ProjectFile_h_
 #define _ProjectFile_h_
 
-#include <stdio.h>
 #include <time.h>
-#include <stdarg.h>
 
-#include <qstring.h>
-#include <qvaluelist.h>
+#include <qptrlist.h>
 
-#include "Project.h"
 #include "Token.h"
 #include "MacroTable.h"
+#include "FileInfo.h"
 
-class QTextStream;
-class ProjectFile;
 class Project;
+class Task;
+class Resource;
+class Account;
+class Shift;
+class Booking;
+class Interval;
 class Operation;
+class Report;
 class ReportHtml;
 
-class FileInfo
+/**
+ * @short File Parser for project files.
+ * @author Chris Schlaeger <cs@suse.de>
+ */
+class ProjectFile
 {
 public:
-       FileInfo(ProjectFile* p, const QString& file, const QString& tp);
-       ~FileInfo() { }
-
-       bool open();
-       bool close();
-
-       QChar getC(bool expandMacros = TRUE);
-       void ungetC(QChar c);
-       void expandMarco(QString& c);
-
-       const QString& getFile() const { return file; }
-       QString getPath() const;
-
-       int getLine() const { return currLine; }
-
-       TokenType nextToken(QString& buf);
-       void returnToken(TokenType t, const QString& buf);
-
-       bool readMacroCall();
-
-       const QString& getTaskPrefix() { return taskPrefix; }
-
-       void fatalErrorVA(const char* msg, va_list ap);
-       void fatalError(const char* msg, ...);
-
-private:
-       bool getDateFragment(QString& token, QChar& c);
-
        /**
-        * A pointer to the ProjectFile class that stores all read-in
-        * data.
+        * A ProjectFile cannot exist without a project. So the constructor needs
+        * to know what Project object to fill, when it parses the project files.
         */
-       ProjectFile* pf;
-       
-       // The name of the file.
-       QString file;
-
-       // The file handle of the file to read.
-       FILE* fh;
-
-       // The stream used to read the file.
-       QTextStream* f;
-
-       // The number of the line currently being read.
-       int currLine;
+       ProjectFile(Project* p);
+       ~ProjectFile() { }
 
        /**
-        * Macros have file scope. So we keep a stack of macros for each file that
-        * we read.
+        * The top-level project files needs to be opened before the parser can be
+        * started.
+        * @param file The file name of the file to start with.
+        * @param parentPath The path of the file that included this file. This
+        * feature is for internal use only. It's not part of the public API. 
+        * @param taskPrefix The ID prefix of the parent task. This is needed when
+        * the tasks of the project file should be read as a sub-task of an
+        * already existing task.
         */
-       QPtrList<Macro> macroStack;
-
+       bool open(const QString& file, const QString& parentPath,
+                         const QString& taskPrefix);
        /**
-        * A buffer for the part of the line that has been parsed already. This is
-        * primarily used for error reporting.
+        * Close the just read input file.
         */
-       QString lineBuf;
-
+       bool close();
+       
        /**
-        * A buffer for characters that have been pushed back again. This
-        * simplifies file parsing in some situations.
+        * Calling the parse function will start the processing of the opened
+        * project file. It will automatically read all include files as well. The
+        * collected data is stored into the Project object.
         */
-       QValueList<QChar> ungetBuf;
-
-       /**
-     * Besides read in characters we can also push back a token. Contrary to
-        * characters we can push back only 1 token. This is stored as type and
-        * a string buffer.
-        */      
-       TokenType tokenTypeBuf;
-       QString tokenBuf;
+       bool parse();
 
-       /**
-        * Task trees of include files can not only be added at global scope but
-        * also as sub-trees. This strings stores the prefix that has to be
-        * specified at include times.
+       /*
+        * The rest of the public methods are for use by FileInfo and are not part
+        * of the library public interface.
         */
-       QString taskPrefix;
-};
-
-class ProjectFile
-{
-public:
-       ProjectFile(Project* p);
-       ~ProjectFile() { }
-
-       bool open(const QString& file, const QString& parentPath,
-                         const QString& taskPrefix);
-       bool close();
-       bool parse();
-       void setDebugLevel(int l) { debugLevel = l; }
-       void setDebugMode(int m) { debugMode = m; }
        
        TokenType nextToken(QString& token);
        void returnToken(TokenType t, const QString& buf)
@@ -132,7 +81,6 @@ public:
                if (!openFiles.isEmpty())
                        openFiles.last()->returnToken(t, buf);
        }
-
        const QString& getFile()
        {
                if (openFiles.isEmpty())
@@ -195,11 +143,9 @@ private:
 
        QString masterFile;
        Project* proj;
-       QList<FileInfo> openFiles;
+       QPtrList<FileInfo> openFiles;
        QStringList includedFiles;
        MacroTable macros;
-       static int debugLevel;
-       static int debugMode;
 };
 
 #endif
index 85c5607..9efa487 100644 (file)
@@ -90,12 +90,12 @@ Report::open()
 }
 
 bool 
-Report::setTaskSorting(CoreAttributesList::SortCriteria sc, int level)
+Report::setTaskSorting(int sc, int level)
 {
        if (level >= 0 && level < CoreAttributesList::maxSortingLevel)
        {
                if ((sc == CoreAttributesList::TreeMode && level > 0) ||
-                       !TaskList::isSupportedSortingCriteria(sc))
+                       !TaskList::isSupportedSortingCriteria(sc & 0xFFFF))
                        return FALSE;
                taskSortCriteria[level] = sc;
        }
@@ -105,12 +105,12 @@ Report::setTaskSorting(CoreAttributesList::SortCriteria sc, int level)
 }
 
 bool 
-Report::setResourceSorting(CoreAttributesList::SortCriteria sc, int level)
+Report::setResourceSorting(int sc, int level)
 {
        if (level >= 0 && level < CoreAttributesList::maxSortingLevel)
        {
                if ((sc == CoreAttributesList::TreeMode && level > 0) ||
-                       !ResourceList::isSupportedSortingCriteria(sc))
+                       !ResourceList::isSupportedSortingCriteria(sc & 0xFFFF))
                        return FALSE;
                resourceSortCriteria[level] = sc;
        }
@@ -120,12 +120,12 @@ Report::setResourceSorting(CoreAttributesList::SortCriteria sc, int level)
 }
 
 bool 
-Report::setAccountSorting(CoreAttributesList::SortCriteria sc, int level)
+Report::setAccountSorting(int sc, int level)
 {
        if (level >= 0 && level < CoreAttributesList::maxSortingLevel)
        {
                if ((sc == CoreAttributesList::TreeMode && level > 0) ||
-                       !AccountList::isSupportedSortingCriteria(sc))
+                       !AccountList::isSupportedSortingCriteria(sc & 0xFFFF))
                        return FALSE;
                accountSortCriteria[level] = sc;
        }
index e2c1170..fa777f9 100644 (file)
@@ -36,6 +36,10 @@ class ExpressionTree;
 
 #include "CoreAttributes.h"
 
+/**
+ * @short The base class for all report generating classes.
+ * @author Chris Schlaeger <cs@suse.de>
+ */
 class Report
 {
 public:
@@ -81,9 +85,9 @@ public:
 
        void setRollUpAccount(ExpressionTree* et);
 
-       bool setTaskSorting(CoreAttributesList::SortCriteria sc, int level);
-       bool setResourceSorting(CoreAttributesList::SortCriteria sc, int level);
-       bool setAccountSorting(CoreAttributesList::SortCriteria sc, int level);
+       bool setTaskSorting(int sc, int level);
+       bool setResourceSorting(int sc, int level);
+       bool setAccountSorting(int sc, int level);
 
        void setTaskRoot(const QString& root) { taskRoot = root; }
        const QString& getTaskRoot() const { return taskRoot; }
@@ -137,12 +141,9 @@ protected:
        QString headline;
        QString caption;
 
-       CoreAttributesList::SortCriteria
-               taskSortCriteria[CoreAttributesList::maxSortingLevel];
-       CoreAttributesList::SortCriteria
-               resourceSortCriteria[CoreAttributesList::maxSortingLevel];
-       CoreAttributesList::SortCriteria
-               accountSortCriteria[CoreAttributesList::maxSortingLevel];
+       int taskSortCriteria[CoreAttributesList::maxSortingLevel];
+       int resourceSortCriteria[CoreAttributesList::maxSortingLevel];
+       int accountSortCriteria[CoreAttributesList::maxSortingLevel];
 
        QFile f;
        QTextStream s;
index e0b3c91..587b0ff 100644 (file)
@@ -448,6 +448,12 @@ ReportHtml::generatePlanTask(Task* t, Resource* r, uint no)
                                                "right");
                else if (*it == KW("flags"))
                        flagList(t, r);
+               else if (*it == KW("completed"))
+                       textOneRow(QString("%1%")
+                                          .arg((int) t->getCompletionDegree(Task::Plan)),
+                                          r != 0, "right");
+               else if (*it == KW("status"))
+                       generateTaskStatus(t->getStatus(Task::Plan), r != 0);
                else if (*it == KW("daily"))
                        dailyTaskPlan(t, r);
                else if (*it == KW("weekly"))
@@ -517,7 +523,13 @@ ReportHtml::generateActualTask(Task* t, Resource* r)
                                                                  t->getCredits(Task::Actual,
                                                                                                Interval(start, end), r)),
                                r != 0, "right");
-               if (*it == KW("daily"))
+               else if (*it == KW("completed"))
+                       textOneRow(QString("%1%")
+                                          .arg((int) t->getCompletionDegree(Task::Actual)),
+                                          r != 0, "right");
+               else if (*it == KW("status"))
+                       generateTaskStatus(t->getStatus(Task::Actual), r != 0);
+               else if (*it == KW("daily"))
                        dailyTaskActual(t, r);
                else if (*it == KW("weekly"))
                        weeklyTaskActual(t, r);
@@ -615,6 +627,10 @@ ReportHtml::generatePlanResource(Resource* r, Task* t, uint no)
                        emptyPlan(t != 0);
                else if (*it == KW("flags"))
                        flagList(r, t);
+               else if (*it == KW("completed"))
+                       emptyPlan(t != 0);
+               else if (*it == KW("status"))
+                       emptyPlan(t != 0);
                else if (*it == KW("daily"))
                        dailyResourcePlan(r, t);
                else if (*it == KW("weekly"))
@@ -802,6 +818,10 @@ ReportHtml::generateTableHeader()
                        s << "<td class=\"headerbig\" rowspan=\"2\">Max. Effort</td>";
                else if (*it == KW("flags"))
                        s << "<td class=\"headerbig\" rowspan=\"2\">Flags</td>";
+               else if (*it == KW("completed"))
+                       s << "<td class=\"headerbig\" rowspan=\"2\">Completed</td>";
+               else if (*it == KW("status"))
+                       s << "<td class=\"headerbig\" rowspan=\"2\">Status</td>";
                else if (*it == KW("rate"))
                {
                        s << "<td class=\"headerbig\" rowspan=\"2\">Rate";
@@ -1681,6 +1701,37 @@ ReportHtml::flagList(CoreAttributes* c1, CoreAttributes* c2)
        textTwoRows(flagStr, c2 != 0, "left");
 }
 
+void
+ReportHtml::generateTaskStatus(TaskStatus status, bool light)
+{
+       QString text;
+       switch (status)
+       {
+       case NotStarted:
+               text = "Not yet started";
+               break;
+       case InProgressLate:
+               text = "Behind schedule";
+               break;
+       case InProgress:
+               text = "Work in progress";
+               break;
+       case OnTime:
+               text = "On schedule";
+               break;
+       case InProgressEarly:
+               text = "Ahead of schedule";
+               break;
+       case Finished:
+               text = "Finished";
+               break;
+       default:
+               text = "Unknown status";
+               break;
+       }
+       textOneRow(text, light, "center");
+}
+
 QString
 ReportHtml::htmlFilter(const QString& s)
 {
index 79e7bdb..ba6327a 100644 (file)
 
 #include "Report.h"
 #include "MacroTable.h"
+#include "taskjuggler.h"
 
 class Project;
 class ExpressionTree;
 
+/**
+ * @short Stores all information about an HTML report.
+ * @author Chris Schlaeger <cs@suse.de>
+ */
 class ReportHtml : public Report
 {
 public:
@@ -92,6 +97,8 @@ public:
 
        void flagList(CoreAttributes* c1, CoreAttributes* c2);
 
+       void generateTaskStatus(TaskStatus status, bool light);
+
        void setBarLabels(BarLabelText blt) { barLabels = blt; }
 
        void registerUrl(const QString& key, const QString& url = QString::null)
index 4faf348..26d5e9e 100644 (file)
@@ -18,9 +18,6 @@
 #include "Project.h"
 #include "kotrus.h"
 
-int Resource::debugLevel = 0;
-int Resource::debugMode = -1;
-
 /*
  * Calls to sbIndex are fairly expensive due to the floating point
  * division. We therefor use a buffer that stores the index of the
@@ -640,7 +637,7 @@ ResourceList::compareItems(QCollection::Item i1, QCollection::Item i2)
 }
 
 bool
-ResourceList::isSupportedSortingCriteria(CoreAttributesList::SortCriteria sc)
+ResourceList::isSupportedSortingCriteria(int sc)
 {
        switch (sc)
        {
index 6f6a61d..48b3a28 100644 (file)
@@ -15,8 +15,6 @@
 
 #include <time.h>
 #include <qptrlist.h>
-#include <qstring.h>
-#include <qdom.h>
 
 #include "Interval.h"
 #include "VacationList.h"
@@ -27,6 +25,10 @@ class Project;
 class Task;
 class Resource;
 
+/**
+ * @short Booking information for a time slot of the resource.
+ * @author Chris Schlaeger <cs@suse.de>
+ */
 class SbBooking
 {
 public:
@@ -43,14 +45,18 @@ public:
        const QString& getProjectId() const { return projectId; }
 
 private:
-       // A pointer to the task that caused the booking
+       /// A pointer to the task that caused the booking
        Task* task;
-       // String identifying the KoTrus account the effort is credited to.
+       /// String identifying the KoTrus account the effort is credited to.
        QString account;
-       // The Project ID
+       /// The Project ID
        QString projectId;
 };
 
+/**
+ * @short Booking information for an interval of the resource.
+ * @author Chris Schlaeger <cs@suse.de>
+ */
 class Booking : public SbBooking
 {
 public:
@@ -73,15 +79,19 @@ public:
        const QString& getLockerId() const { return lockerId; }
 
 private:
-       // The booked time period.
+       /// The booked time period.
        Interval interval;
-       // The database lock timestamp
+       /// The database lock timestamp
        QString lockTS;
 
-       // the lockers ID
+       /// the lockers ID
        QString lockerId;
 } ;
 
+/**
+ * @short A list of bookings.
+ * @author Chris Schlaeger <cs@suse.de>
+ */
 class BookingList : public QPtrList<Booking>
 {
 public:
@@ -96,6 +106,10 @@ typedef QPtrListIterator<Booking> BookingListIterator;
 
 class Resource;
 
+/**
+ * @short A list of resources.
+ * @author Chris Schlaeger <cs@suse.de>
+ */
 class ResourceList : public CoreAttributesList
 {
 public:
@@ -107,8 +121,7 @@ public:
 
        Resource* getResource(const QString& id);
 
-       static bool isSupportedSortingCriteria
-               (CoreAttributesList::SortCriteria sc);
+       static bool isSupportedSortingCriteria(int sc);
        
        virtual int compareItemsLevel(Resource* r1, Resource* r2, int level);
 
@@ -116,6 +129,13 @@ protected:
        virtual int compareItems(QCollection::Item i1, QCollection::Item i2);
 } ;
 
+class QDomDocument;
+class QDomElement;
+
+/**
+ * @short Stores all information about a resource.
+ * @author Chris Schlaeger <cs@suse.de>
+ */
 class Resource : public CoreAttributes
 {
        friend int ResourceList::compareItemsLevel(Resource* r1, Resource* r2,
@@ -199,9 +219,6 @@ public:
        void prepareScenario(int sc);
        void finishScenario(int sc);
 
-       static void setDebugLevel(int l) { debugLevel = l; }
-       static void setDebugMode(int m) { debugMode = m; }
-
 private:
        Resource* subFirst() { return (Resource*) sub.first(); }
        Resource* subNext() { return (Resource*) sub.next(); }
@@ -231,9 +248,6 @@ private:
        /// The daily costs of this resource.
        double rate;
 
-       static int debugLevel;
-       static int debugMode;
-
        /// KoTrus ID, ID by which the resource is known to KoTrus.
        QString kotrusId;
 
index a19d850..a8016f8 100644 (file)
 class Shift;
 class Project;
 
+/**
+ * @short Stores a list of shifts.
+ * @author Chris Schlaeger <cs@suse.de>
+ */
 class ShiftList : public CoreAttributesList
 {
 public:
@@ -43,6 +47,10 @@ protected:
        virtual int compareItems(QCollection::Item i1, QCollection::Item i2);
 } ;
 
+/**
+ * @short Stores all shift related information.
+ * @author Chris Schlaeger <cs@suse.de>
+ */
 class Shift : public CoreAttributes
 {
 public:
@@ -83,6 +91,10 @@ private:
 
 class ShiftSelection;
 
+/**
+ * @short Holds a list of shift selections.
+ * @author Chris Schlaeger <cs@suse.de>
+ */
 class ShiftSelectionList : public QPtrList<ShiftSelection>
 {
 public:
@@ -99,6 +111,10 @@ private:
        virtual int compareItems(QCollection::Item i1, QCollection::Item i2);
 };
 
+/**
+ * @short Stores shift selection related information.
+ * @author Chris Schlaeger <cs@suse.de>
+ */
 class ShiftSelection
 {
        friend int ShiftSelectionList::compareItems(QCollection::Item i1, 
index b5f6c35..ade59df 100644 (file)
@@ -88,9 +88,6 @@
 #include "Project.h"
 #include "Allocation.h"
 
-int Task::debugLevel = 0;
-int Task::debugMode = -1;
-
 Task*
 TaskList::getTask(const QString& id)
 {
@@ -117,6 +114,13 @@ Task::Task(Project* proj, const QString& id_, const QString& n, Task* p,
        schedulingDone = FALSE;
        responsible = 0;
 
+       scenarios = new TaskScenario[proj->getMaxScenarios()];
+       for (int i = 0; i < proj->getMaxScenarios(); i++)
+       {
+               scenarios[i].task = this;
+               scenarios[i].index = i;
+       }
+
        scenarios[0].startBuffer = 0.0;
        scenarios[0].endBuffer = 0.0;
        scenarios[0].startCredit = 0.0;
@@ -746,7 +750,7 @@ Task::isCompleted(int sc, time_t date) const
 {
        if (scenarios[sc].complete != -1)
        {
-               // some completion degree was specified.
+               // some completion degree has been specified.
                return ((scenarios[sc].complete / 100.0) *
                                (scenarios[sc].end - scenarios[sc].start) 
                                + scenarios[sc].start) > date;
@@ -807,7 +811,7 @@ Task::getLoad(int sc, const Interval& period, Resource* resource)
 {
        double load = 0.0;
 
-       if (subFirst())
+       if (!sub.isEmpty())
        {
                for (Task* t = subFirst(); t != 0; t = subNext())
                        load += t->getLoad(sc, period, resource);
@@ -975,38 +979,6 @@ Task::implicitXRef()
 }
 
 bool
-Task::hasYoungerBrother()
-{
-       bool previousHasSameParent = FALSE;
-       int previousIndex = previous.at();
-       for (Task* p = previous.first(); 
-                p && !previousHasSameParent;
-                p = previous.next())
-       {
-               if (parent == p->parent)
-                       previousHasSameParent = TRUE;
-       }
-       previous.at(previousIndex);
-       return previousHasSameParent;
-}
-
-bool
-Task::hasOlderBrother()
-{
-       bool followerHasSameParent = FALSE;
-       int followersIndex = followers.at();
-       for (Task* f = followers.first(); 
-                f && !followerHasSameParent;
-                f = followers.next())
-       {
-               if (parent == f->parent)
-                       followerHasSameParent = TRUE;
-       }
-
-       followers.at(followersIndex);
-       return followerHasSameParent;
-}
-bool
 Task::loopDetector()
 {
        /* Only check top-level tasks. All other tasks will be checked then as
@@ -1260,12 +1232,13 @@ Task::preScheduleOk()
 {
        for (int sc = 0; sc < project->getMaxScenarios(); sc++)
        {
-               if (scenarios[sc].effort > 0 && allocations.count() == 0)
+               if (scenarios[sc].effort > 0.0 && allocations.count() == 0)
                {
                        fatalError(QString
                                           ("No allocations specified for effort based task %1 "
                                                "in %2 scenario")
                                           .arg(1).arg(project->getScenarioName(sc)));
+                       qDebug(QString().sprintf("%f\n", scenarios[sc].effort));
                        return FALSE;
                }
 
@@ -1754,11 +1727,10 @@ Task::finishScenario(int sc)
 {
        scenarios[sc].start = start;
        scenarios[sc].end = end;
-       scenarios[sc].duration = doneDuration;
-       scenarios[sc].length = doneLength;
-       scenarios[sc].effort = doneEffort;
        scenarios[sc].bookedResources = bookedResources;
        scenarios[sc].scheduled = schedulingDone;
+
+       calcCompletionDegree(sc);
 }
 
 void
@@ -1843,20 +1815,19 @@ Task::computeBuffers()
        }
 }
 
-double Task::getCompleteAtTime(int sc, time_t timeSpot) const
+void
+Task::calcCompletionDegree(int sc)
 {
-   if( scenarios[sc].complete != -1 ) return( scenarios[sc].complete );
-
-   time_t start = getStart(sc);
-   time_t end = getEnd(sc);
+       scenarios[sc].calcCompletionDegree(project->getNow());
+}
 
-   if( timeSpot > end ) return 100.0;
-   if( timeSpot < start ) return 0.0;
-   
-   time_t interval = end - start;
-   time_t done = timeSpot - start;
+double
+Task::getCompletionDegree(int sc) const
+{
+       if(scenarios[sc].complete != -1)
+               return(scenarios[sc].complete);
 
-   return 100./interval*done;
+       return scenarios[sc].completionDegree;
 }
 
 
@@ -1877,7 +1848,7 @@ QDomElement Task::xmlElement( QDomDocument& doc, bool /* absId */ )
    taskElem.appendChild( ReportXML::createXMLElem( doc, "ProjectID", projectId ));
    taskElem.appendChild( ReportXML::createXMLElem( doc, "Priority", QString::number(getPriority())));
 
-   double cmplt = getCompleteAtTime( Task::Plan, getProject()->getNow());
+   double cmplt = getCompletionDegree( Task::Plan);
    taskElem.appendChild( ReportXML::createXMLElem( doc, "complete", QString::number(cmplt, 'f', 1) ));
 
    QString tType = "Milestone";
@@ -2059,19 +2030,19 @@ QDomElement Task::xmlElement( QDomDocument& doc, bool /* absId */ )
 }
 
 bool
-TaskList::isSupportedSortingCriteria(CoreAttributesList::SortCriteria sc)
+TaskList::isSupportedSortingCriteria(int sc)
 {
-       switch (sc)
+       switch (sc & 0xFFFF)
        {
        case TreeMode:
-       case PlanStartUp:
-       case PlanStartDown:
-       case ActualStartUp:
-       case ActualStartDown:
-       case PlanEndUp:
-       case PlanEndDown:
-       case ActualEndUp:
-       case ActualEndDown:
+       case StartUp:
+       case StartDown:
+       case EndUp:
+       case EndDown:
+       case StatusUp:
+       case StatusDown:
+       case CompletedUp:
+       case CompletedDown:
        case PrioUp:
        case PrioDown:
        case ResponsibleUp:
@@ -2088,7 +2059,8 @@ TaskList::compareItemsLevel(Task* t1, Task* t2, int level)
        if (level < 0 || level >= maxSortingLevel)
                return -1;
 
-       switch (sorting[level])
+       int sc = sorting[level] >> 16;
+       switch (sorting[level] & 0xFFFF)
        {
        case TreeMode:
                if (level == 0)
@@ -2096,30 +2068,30 @@ TaskList::compareItemsLevel(Task* t1, Task* t2, int level)
                else
                        return t1->getSequenceNo() == t2->getSequenceNo() ? 0 :
                                t1->getSequenceNo() < t2->getSequenceNo() ? -1 : 1;
-       case PlanStartUp:
-               return t1->scenarios[0].start == t2->scenarios[0].start ? 0 :
-                       t1->scenarios[0].start < t2->scenarios[0].start ? -1 : 1;
-       case PlanStartDown:
-               return t1->scenarios[0].start == t2->scenarios[0].start ? 0 :
-                       t1->scenarios[0].start > t2->scenarios[0].start ? -1 : 1;
-       case ActualStartUp:
-               return t1->scenarios[1].start == t2->scenarios[1].start ? 0 :
-                       t1->scenarios[1].start < t2->scenarios[1].start ? -1 : 1;
-       case ActualStartDown:
-               return t1->scenarios[1].start == t2->scenarios[1].start ? 0 :
-                       t1->scenarios[1].start > t2->scenarios[1].start ? -1 : 1;
-       case PlanEndUp:
-               return t1->scenarios[0].end == t2->scenarios[0].end ? 0 :
-                       t1->scenarios[0].end < t2->scenarios[0].end ? -1 : 1;
-       case PlanEndDown:
-               return t1->scenarios[0].end == t2->scenarios[0].end ? 0 :
-                       t1->scenarios[0].end > t2->scenarios[0].end ? -1 : 1;
-       case ActualEndUp:
-               return t1->scenarios[1].end == t2->scenarios[1].end ? 0 :
-                       t1->scenarios[1].end < t2->scenarios[1].end ? -1 : 1;
-       case ActualEndDown:
-               return t1->scenarios[1].end == t2->scenarios[1].end ? 0 :
-                       t1->scenarios[1].end > t2->scenarios[1].end ? -1 : 1;
+       case StartUp:
+               return t1->scenarios[sc].start == t2->scenarios[sc].start ? 0 :
+                       t1->scenarios[sc].start < t2->scenarios[sc].start ? -1 : 1;
+       case StartDown:
+               return t1->scenarios[sc].start == t2->scenarios[sc].start ? 0 :
+                       t1->scenarios[sc].start > t2->scenarios[sc].start ? -1 : 1;
+       case EndUp:
+               return t1->scenarios[sc].end == t2->scenarios[sc].end ? 0 :
+                       t1->scenarios[sc].end < t2->scenarios[sc].end ? -1 : 1;
+       case EndDown:
+               return t1->scenarios[sc].end == t2->scenarios[sc].end ? 0 :
+                       t1->scenarios[sc].end > t2->scenarios[sc].end ? -1 : 1;
+       case StatusUp:
+               return t1->scenarios[sc].status == t2->scenarios[sc].status ? 0 :
+                       t1->scenarios[sc].status < t2->scenarios[sc].status ? -1 : 1;
+       case StatusDown:
+               return t1->scenarios[sc].status == t2->scenarios[sc].status ? 0 :
+                       t1->scenarios[sc].status > t2->scenarios[sc].status ? -1 : 1;
+       case CompletedUp:
+               return t1->getCompletionDegree(sc) == t2->getCompletionDegree(sc) ? 0 :
+                       t1->getCompletionDegree(sc) < t2->getCompletionDegree(sc) ? -1 : 1;
+       case CompletedDown:
+               return t1->getCompletionDegree(sc) == t2->getCompletionDegree(sc) ? 0 :
+                       t1->getCompletionDegree(sc) > t2->getCompletionDegree(sc) ? -1 : 1;
        case PrioUp:
                if (t1->priority == t2->priority)
                        return 0;
index 1bbd3ba..f8fd286 100644 (file)
@@ -24,6 +24,8 @@
 #include <qdom.h>
 #include <time.h>
 
+#include "taskjuggler.h"
+#include "debug.h"
 #include "TaskScenario.h"
 #include "ResourceList.h"
 #include "Utility.h"
@@ -47,14 +49,19 @@ class QDomDocument;
 class Task;
 class Allocation;
 
+/**
+ * @short The class stores a list of tasks.
+ * @see Task 
+ * @author Chris Schlaeger <cs@suse.de>
+ */
 class TaskList : public virtual CoreAttributesList
 {
 public:
        TaskList()
        {
                sorting[0] = CoreAttributesList::TreeMode;
-               sorting[1] = CoreAttributesList::PlanStartUp;
-               sorting[2] = CoreAttributesList::PlanEndUp;
+               sorting[1] = CoreAttributesList::StartUp;
+               sorting[2] = CoreAttributesList::EndUp;
        }
        virtual ~TaskList() { }
 
@@ -65,8 +72,7 @@ public:
 
        Task* getTask(const QString& id);
 
-       static bool isSupportedSortingCriteria
-               (CoreAttributesList::SortCriteria sc);
+       static bool isSupportedSortingCriteria(int sc);
        
        virtual int compareItemsLevel(Task* t1, Task* T2, int level);
 
@@ -76,7 +82,15 @@ protected:
 
 typedef QPtrListIterator<TaskList> TaskListIterator;
 
-
+/**
+ * This class stores all task related information and provides methods to
+ * manipulte them. It provides fundamental functions like the scheduler.
+ *
+ * @short The class that holds all task related information.
+ * @see Resource 
+ * @see CoreAttributes
+ * @author Chris Schlaeger <cs@suse.de>
+ */
 class Task : public CoreAttributes
 {
        friend int TaskList::compareItemsLevel(Task*, Task*, int);
@@ -217,8 +231,14 @@ public:
                                          Resource* resource = 0, bool recursive = TRUE);
 
        bool isActive(int sc, const Interval& period) const;
+       TaskStatus getStatus(int sc) const { return scenarios[sc].status; }
        bool isCompleted(int sc, time_t date) const;
-       double getCompleteAtTime(int sc, time_t) const;
+       void calcCompletionDegree(int sc); 
+       double getCompletionDegree(int sc) const;
+       TaskStatus getCompletionStatus(int sc) const
+       {
+               return scenarios[sc].status;
+       }
 
        double getLoad(int sc, const Interval& period, Resource* resource = 0);
 
@@ -256,7 +276,6 @@ public:
        void computeBuffers();
        time_t nextSlot(time_t slotDuration);
        void schedule(time_t& reqStart, time_t duration);
-//     bool isScheduled() const { return schedulingDone; }
        void propagateStart(bool safeMode = TRUE);
        void propagateEnd(bool safeMode = TRUE);
        void propagateInitialValues();
@@ -280,9 +299,6 @@ public:
 
        QDomElement xmlElement( QDomDocument& doc, bool absId = true );
 
-       static void setDebugLevel(int l) { debugLevel = l; }
-       static void setDebugMode(int m) { debugMode = m; }
-
 #ifdef HAVE_ICAL
 #ifdef HAVE_KDE
    void toTodo( KCal::Todo *, KCal::CalendarLocal * );
@@ -291,9 +307,6 @@ public:
    void loadFromXML( QDomElement& parent, Project *project );
    
 private:
-       bool hasYoungerBrother();
-       bool hasOlderBrother();
-
        bool loopDetection(LDIList list, bool atEnd, LoopDetectorInfo::FromWhere
                                           caller);
        bool scheduleContainer(bool safeMode);
@@ -393,7 +406,7 @@ private:
        /// Account where the credits of the task are credited to.
        Account* account;
 
-       TaskScenario scenarios[2];
+       TaskScenario* scenarios;
        
        /* The following group of variables store values generated during a
         * scheduler run. They might be initialized by other values and/or
@@ -463,9 +476,6 @@ private:
 
        /// A list of all the resources booked for this task.
        QPtrList<Resource> bookedResources;
-
-       static int debugLevel;
-       static int debugMode;
 } ;
 
 #endif
index 4666ffa..661d747 100644 (file)
@@ -11,6 +11,8 @@
  */
 
 #include "TaskScenario.h"
+#include "Task.h"
+#include "Project.h"
 
 TaskScenario::TaskScenario()
 {
@@ -29,3 +31,49 @@ TaskScenario::TaskScenario()
        scheduled = FALSE;
 }
 
+void
+TaskScenario::calcCompletionDegree(time_t now)
+{
+       if (now >= end)
+       {
+               completionDegree = 100.0;
+               status = complete >= 0 && complete < 100 ? InProgressLate : Finished;
+       }
+       else if (now <= start)
+       {
+               completionDegree = 0.0;
+               status = complete > 0 ? InProgressEarly : NotStarted;
+       }
+       else if (task->isContainer())
+       {
+               completionDegree = (100.0 / (end - start + 1)) * (now - start);
+               status = InProgress;
+       }       
+       else 
+       {
+               status = OnTime;
+               if (effort > 0.0)
+               {
+                       completionDegree = (100.0 / effort) *
+                               task->getLoad(index, Interval(start, now));     
+               }
+               else if (length > 0.0)
+               {
+                       completionDegree = (100.0 / 
+                               task->getProject()->calcWorkingDays(Interval(start, end))) *
+                               task->getProject()->calcWorkingDays(Interval(start, now));
+               }
+               else
+                       completionDegree = (100.0 / (end - start + 1)) * (now - start);
+
+               if (complete >= 0)
+               {
+                       if (complete < completionDegree)
+                               status = InProgressLate;
+                       else if (complete > completionDegree)
+                               status = InProgressEarly;
+               }
+       }
+}
+
+
index 92a1c11..e3e6355 100644 (file)
@@ -14,6 +14,9 @@
 #define _TaskScenario_h_
 
 #include "ResourceList.h"
+#include "taskjuggler.h"
+
+class Task;
 
 class TaskScenario
 {
@@ -23,7 +26,15 @@ public:
        TaskScenario();
        ~TaskScenario() { }
        
+       void calcCompletionDegree(time_t now);
+
 private:
+       /// Pointer to the corresponding task.
+       Task* task;
+
+       /// Index of the scenario
+       int index;
+       
        /// Time when the task starts 
        time_t start;
 
@@ -64,9 +75,15 @@ private:
        /// Amount that is credited to the account at the end date.
        double endCredit;
 
-       /// Percentage of completion of the task
+       /// User specified percentage of completion of the task
        int complete;
 
+       /// Calculated completion degree
+       double completionDegree;
+
+       /// Status that the task is in (according to 'now' date)
+       TaskStatus status;
+       
        /// TRUE if the task has been completely scheduled.
        bool scheduled;
 } ;
diff --git a/taskjuggler/TjMessageHandler.h b/taskjuggler/TjMessageHandler.h
new file mode 100644 (file)
index 0000000..05edd3f
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * TjMessageHandler.h - TaskJuggler
+ *
+ * Copyright (c) 2001, 2002 by Chris Schlaeger <cs@suse.de>
+ *
+ * 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.
+ *
+ * $Id$
+ */
+#ifndef _TjMessageHandler_h_
+#define _TjMessageHandler_h_
+
+#include <qstring.h>
+
+/**
+ * @short Stores an error or warning message.
+ * @author Chris Schlaeger <cs@suse.de>
+ */
+class TjMessage
+{
+public:
+       TjMessage(const QString& m, const QString& f, int l) :
+               msg(m), file(f), line(l) { }
+       ~TjMessage() { }
+
+       const QString& getMsg() const { return msg; }
+       const QString& getFile() const { return file; }
+       int getLine() const { return line; }
+
+private:
+       TjMessage() { }
+       
+       QString msg;
+       QString file;
+       int line;
+} ;
+
+/**
+ * This class handles all error or warning messages that the library functions
+ * can send out. Depending on the mode it either send the messages directory
+ * to STDERR or buffers them. In the latter case they can be retrieved when
+ * needed through arbritrator functions.
+ *
+ * @short Handles all error or warning messages.
+ * @author Chris Schlaeger <cs@suse.de>
+ */
+class TjMessageHandler
+{
+public:
+       TjMessageHandler(bool cm) : consoleMode(cm)
+       {
+               msgBuffer.setAutoDelete(TRUE);
+       }
+       ~TjMessageHandler();
+
+       errorMessage(const QString& msg, const QString& file, int line);
+
+       TjMessage* firstMessage() { return msgBuffer.first(); }
+       TjMessage* nextMessage() { return msgBuffer.next(); }
+
+       clear() { msgBuffer.clear(); }
+
+private:
+       bool consoleMode;
+       QPtrList<TjMessage> msgBuffer;
+} ;
+
+#endif
+
index f15ba66..51fdaa2 100644 (file)
@@ -15,6 +15,8 @@
 
 #include <stdio.h>
 
+#include <qstring.h>
+
 #define EOFile 0xFFFF
 #define EOMacro 0xFFFE
 
index 0d56ad7..afab5d0 100644 (file)
 
 #include "Interval.h"
 
+/**
+ * @short An interval with a name.
+ * @author Chris Schlaeger <cs@suse.de>
+ */
 class VacationInterval : public Interval
 {
 public:
@@ -35,6 +39,10 @@ private:
        QString name;
 } ;
 
+/**
+ * @short A list of vacations.
+ * @author Chris Schlaeger <cs@suse.de>
+ */
 class VacationList : public QList<VacationInterval>
 {
 public:
index badab4d..eccad50 100644 (file)
  * $Id$
  */
 
-#define DEBUGPF(l) ((debugMode & 1) && debugLevel >= l)        // Project File Reader
-#define DEBUGPS(l) ((debugMode & 2) && debugLevel >= l)        // Project Scheduler
-#define DEBUGTS(l) ((debugMode & 4) && debugLevel >= l)        // Task Scheduler
-#define DEBUGRS(l) ((debugMode & 8) && debugLevel >= l)        // Resource Scheduler
+#ifndef _debug_h_
+#define _debug_h_
+
+#define DEBUGMODE DebugCtrl.getDebugMode()
+#define DEBUGLEVEL DebugCtrl.getDebugLevel()
+
+#define DEBUGPF(l) ((DEBUGMODE & 1) && DEBUGLEVEL >= l)        // Project File Reader
+#define DEBUGPS(l) ((DEBUGMODE & 2) && DEBUGLEVEL >= l)        // Project Scheduler
+#define DEBUGTS(l) ((DEBUGMODE & 4) && DEBUGLEVEL >= l)        // Task Scheduler
+#define DEBUGRS(l) ((DEBUGMODE & 8) && DEBUGLEVEL >= l)        // Resource Scheduler
+
+class DebugController
+{
+public:
+       DebugController() : debugLevel(0), debugMode(-1) { }
+       ~DebugController() { }
+       
+       void setDebugLevel(int l)
+       {
+               debugLevel = l;
+       }
+       int getDebugLevel() const { return debugLevel; }
+       
+       void setDebugMode(int m)
+       {
+               debugMode = m;
+       }
+       int getDebugMode() const { return debugMode; }
+
+protected:
+       int debugLevel;
+       int debugMode;
+} ;
+
+extern DebugController DebugCtrl;
+
+#endif
 
index 4d55f2f..9284031 100644 (file)
@@ -17,6 +17,7 @@
 #include <qglobal.h>
 
 #include "taskjuggler.h"
+#include "debug.h"
 #include "Project.h"
 #include "ProjectFile.h"
 #include "kotrus.h"
@@ -113,9 +114,8 @@ int main(int argc, char *argv[])
        if (terminateProgram)
                exit(1);
 
-       Project p;
-       p.setDebugLevel(debugLevel);
-       p.setDebugMode(debugMode);
+       DebugCtrl.setDebugLevel(debugLevel);    
+       DebugCtrl.setDebugMode(debugMode);
 
        bool parseErrors = FALSE;
 
@@ -124,11 +124,10 @@ int main(int argc, char *argv[])
                qFatal("main(): getcwd() failed");
        if (debugLevel >= 1)
                qWarning("Reading input files...");
+       Project p;
        for ( ; i < argc; i++)
        {
                ProjectFile* pf = new ProjectFile(&p);
-               pf->setDebugLevel(debugLevel);
-               pf->setDebugMode(debugMode);
                if (!pf->open(a.argv()[i], QString(cwd) + "/", ""))
                        return (-1);
                parseErrors = !pf->parse();
@@ -137,12 +136,14 @@ int main(int argc, char *argv[])
 
        p.readKotrus();
 
-       bool schedulingErrors = !p.pass2(checkOnlySyntax);
+       bool logicalErrors = !p.pass2();
+       bool schedulingErrors = FALSE;
 
        if (!checkOnlySyntax)
        {
+               schedulingErrors = !p.scheduleAllScenarios();
                if (updateKotrusDB)
-                       if (parseErrors || schedulingErrors)
+                       if (parseErrors || logicalErrors || schedulingErrors)
                                qWarning("Due to errors the Kotrus DB will NOT be "
                                                 "updated.");
                        else
@@ -151,5 +152,5 @@ int main(int argc, char *argv[])
                p.generateReports();
        }
 
-       return (parseErrors || schedulingErrors ? -1 : 0);
+       return (parseErrors || logicalErrors || schedulingErrors ? -1 : 0);
 }
index e2d2849..7527e2c 100644 (file)
  * $Id$
  */
 
+#ifndef _taskjuggler_h_
+#define _taskjuggler_h_
+
 #define TJURL "http://www.suse.de/~freitag/taskjuggler"
 
+typedef enum TaskStatus 
+{ 
+       Undefined = 0, NotStarted, InProgressLate, InProgress, OnTime, 
+       InProgressEarly, Finished
+};
+
+#endif
+