Add progressive tasks to the Task Manager; these are distinct from the
existing timed tasks and milestones in that they have a duration that increases based on the amount of time tracked for them, and no set completion time. Nearby minor fixes.
This commit is contained in:
parent
51280b0b38
commit
b8f173fefe
10 changed files with 818 additions and 320 deletions
|
|
@ -11,7 +11,7 @@
|
|||
uploaded when images are put in the form. (Martin Kamerbeek / Procolix)
|
||||
- change: PM asset task editor now defaults start date to start of project
|
||||
- Rearranged the autotag name creation to be easier to read.
|
||||
|
||||
- add: progressive (duration-tracked but untimed) tasks now possible in Project Manager
|
||||
|
||||
7.0.8
|
||||
- Fixed a couple of minor bugs with the default values of the Request
|
||||
|
|
|
|||
79
docs/upgrades/templates-7.0.9/default_edit_task.tmpl
Normal file
79
docs/upgrades/templates-7.0.9/default_edit_task.tmpl
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
#ProjectManagerTMPL0004
|
||||
|
||||
<tmpl_var form.header>
|
||||
<table class="popUp" cellspacing="0" cellpadding="3" border="0">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="right" style="width:25%;" class="header">Task Name </td>
|
||||
<td style="width:75%;"><tmpl_var form.name></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table width="100%" cellpadding="3" cellspacing="0">
|
||||
<tbody>
|
||||
<tr class="clear">
|
||||
<td style="width:25%;" align="right" class="header">Start </td>
|
||||
<td style="width:25%;"><tmpl_var form.start></td>
|
||||
<td style="width:25%;" align="right" class="header">Finish </td>
|
||||
<td style="width:25%;"><tmpl_var form.end></td>
|
||||
</tr><tr class="clear">
|
||||
<td style="width:100%; text-align: center" colspan="4" class="header"><tmpl_var form.taskType></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table width="100%" cellpadding="3" cellspacing="0">
|
||||
<tbody>
|
||||
<tr class="clear">
|
||||
<td style="width:25%; text-align:right" class="header">Duration </td>
|
||||
<td style="width:25%;"><tmpl_var form.duration> <tmpl_var form.duration.units></td>
|
||||
<td style="width:25%; text-align:right" class="header">Lag Time </td>
|
||||
<td style="width:25%;"><tmpl_var form.lagTime> <tmpl_var form.lagTime.units></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table width="100%" cellpadding="3" cellspacing="0">
|
||||
<tbody>
|
||||
<tr class="clear">
|
||||
<td style="width:25%;" align="right" class="header">Predecessor </td>
|
||||
<td style="width:25%;"><tmpl_var form.dependants></td>
|
||||
<td style="width:25%;" align="right" class="header">% Complete </td>
|
||||
<td style="width:25%;"><tmpl_var form.percentComplete></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table width="100%" cellpadding="3" cellspacing="0">
|
||||
<tbody>
|
||||
<tr class="clearNoBG" style="text-align:center;">
|
||||
<td style="text-align:left;">
|
||||
<span class="header">Resources:</span><br /><br />
|
||||
<span style="margin-bottom:2px;padding-bottom:2px;padding-left:5px;-moz-box-sizing:border-box;display:block;">
|
||||
<a style="text-decoration:none;" id="<tmpl_var form.addUser.id>" href="<tmpl_var form.addUser.link>" target="_new" onclick="taskEdit_searchPopup(this.href); return false;"><img style="border-style:none;vertical-align:middle;" title="<tmpl_var form.addUser.text>" alt="<tmpl_var form.addUser.text>" src="<tmpl_var assetExtras>/users.gif" /><span style="text-decoration:none;font-size:8pt;"> Add User To Task</span></a>
|
||||
<a style="text-decoration:none;" id="<tmpl_var form.addGroup.id>" href="<tmpl_var form.addGroup.link>" target="_new" onclick="taskEdit_searchPopup(this.href); return false;"><img style="border-style:none;vertical-align:middle;" title="<tmpl_var form.addGroup.text>" alt="<tmpl_var form.addGroup.text>" src="<tmpl_var assetExtras>/groups.gif" /><span style="text-decoration:none;font-size:8pt;"> Add Group to Task</span></a>
|
||||
</span><tmpl_var form.resourceDiv>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align:right;" class="header"><a href="javascript:void(checkEditTaskForm(document.editTaskForm))" class="saveBtn">Save</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
<tmpl_var form.footer>
|
||||
43
docs/upgrades/templates-7.0.9/default_gantt_chart.tmpl
Normal file
43
docs/upgrades/templates-7.0.9/default_gantt_chart.tmpl
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
#ProjectManagerTMPL0003
|
||||
|
||||
<script type="text/javascript">
|
||||
taskArray=<tmpl_var project.task.array>;
|
||||
</script>
|
||||
<div class="barPositions">
|
||||
<tmpl_loop task.div.loop>
|
||||
<tmpl_if task.isUntimed>
|
||||
<div class="milestone" style="left:<tmpl_var task.div.left>px;top:<tmpl_var task.div.top>px;">♦</div>
|
||||
</tmpl_if><tmpl_if task.hasDuration>
|
||||
<div class="projectBar" style="left:<tmpl_var task.div.left>px;top:<tmpl_var task.div.top>px;width:<tmpl_var task.div.width>px;background-color:<tmpl_var task.div.color>">
|
||||
<div class="statusBar" style="width:<tmpl_var task.div.percentComplete>%;"></div>
|
||||
<tmpl_if task.hasPredecessor>
|
||||
<div class="projectLineH" style="top:4px;left:50px;width:75px;height:28px;"><div class="projectLineV"></div></div>
|
||||
</tmpl_if>
|
||||
<tmpl_if task.hasResource>
|
||||
<div class="projectLabel" style="left:<tmpl_var task.div.label.left>px;top:3px;margin-top:-3px;"><tmpl_var task.resource.name></div>
|
||||
</tmpl_if>
|
||||
</div>
|
||||
</tmpl_if>
|
||||
</tmpl_loop>
|
||||
<a name="<tmpl_var project.table.width>" id="projectTableWidth"></a>
|
||||
<a name="<tmpl_var project.scroll.percentWidth>" id="projectScrollPercentWidth"></a>
|
||||
<table cellpadding="0" cellspacing="0" border="0" style="width:<tmpl_var scrollWidth>px;z-index:1;">
|
||||
<tr class="monthNames">
|
||||
<tmpl_loop months.loop>
|
||||
<td colspan="<tmpl_var month.colspan>" class="monthName" style="height:20px;"><tmpl_var month.name></td>
|
||||
</tmpl_loop>
|
||||
</tr>
|
||||
<tr class="dates">
|
||||
<tmpl_loop days.loop>
|
||||
<td align="center" style="width:23px"><tmpl_var day.number></td>
|
||||
</tmpl_loop>
|
||||
</tr>
|
||||
<tmpl_loop task.count.loop>
|
||||
<tr>
|
||||
<td colspan="<tmpl_var total.colspan>" class="empty" style="height:21px;"> </td>
|
||||
</tr>
|
||||
</tmpl_loop>
|
||||
</table>
|
||||
<br />
|
||||
</div>
|
||||
|
||||
274
docs/upgrades/templates-7.0.9/default_project_display.tmpl
Normal file
274
docs/upgrades/templates-7.0.9/default_project_display.tmpl
Normal file
|
|
@ -0,0 +1,274 @@
|
|||
#ProjectManagerTMPL0002
|
||||
|
||||
<script type="text/javascript">
|
||||
//<![CDATA[
|
||||
dunits = "<tmpl_var project.durationUnits>";
|
||||
hoursPerDay = <tmpl_var project.hoursPerDay>;
|
||||
taskLength = <tmpl_var project.task.length>;
|
||||
extrasPath = '<tmpl_var extras>';
|
||||
errorMsgs = {
|
||||
'name' : "<tmpl_var form.name.error>",
|
||||
'start' : "<tmpl_var form.start.error>",
|
||||
'end' : "<tmpl_var form.end.error>",
|
||||
'greaterthan' : "<tmpl_var form.greaterthan.error>",
|
||||
'invalidMove' : "<tmpl_var form.invalidMove.error>",
|
||||
'noPredecessor' : "<tmpl_var form.noPredecessor.error>",
|
||||
'samePredecessor' : "<tmpl_var form.samePredecessor.error>",
|
||||
'previousPredecessor' : "<tmpl_var form.previousPredecessor.error>",
|
||||
'untimedPredecessor' : "<tmpl_var form.untimedPredecessor.error>"
|
||||
};
|
||||
|
||||
addEvent(window, "load", initPopUp);
|
||||
//]]>
|
||||
</script>
|
||||
<tmpl_var form.header>
|
||||
<table cellpadding="0" cellspacing="0" border="0" class="project" id="mastertable" style="width:<tmpl_var project.table.width>px;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="width:20px;height:20px;"> </td>
|
||||
<td style="width:300px;" align="center">Task Name</td>
|
||||
<td style="width:70px;" align="center">Duration</td>
|
||||
<td style="width:70px;" align="center">Start</td>
|
||||
<td style="width:70px;" align="center">Finish</td>
|
||||
<td style="width:30px;" align="center">Pred</td>
|
||||
<td rowspan="<tmpl_var project.gantt.rowspan>" valign="top" id="scrolltd" style="border-style:none;width:<tmpl_var project.scroll.percentWidth>%;">
|
||||
<div class="scroller" id="gantt">
|
||||
<tmpl_var project.ganttChart>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="6"> </td>
|
||||
</tr>
|
||||
<tmpl_loop task.loop>
|
||||
<tr id="<tmpl_var task.row.id>">
|
||||
<td align="center" style="height:20px"><tmpl_var task.number></td>
|
||||
<td align="left" style="height:20px">
|
||||
<tmpl_if task.canAdd>
|
||||
<script type="text/javascript">
|
||||
//<![CDATA[
|
||||
var cMenu = new cMenu_createWithLink("id_<tmpl_var task.number>","<tmpl_var task.name>");
|
||||
cMenu.addLink("<tmpl_var task.edit.url>","<tmpl_var task.edit.label>");
|
||||
cMenu.addLink("<tmpl_var task.insertAbove.url>","<tmpl_var task.insertAbove.label>");
|
||||
cMenu.addLink("<tmpl_var task.insertBelow.url>","<tmpl_var task.insertBelow.label>");
|
||||
cMenu.addLink("<tmpl_var task.delete.url>","<tmpl_var task.delete.label>");
|
||||
cMenu.print();
|
||||
//]]>
|
||||
</script>
|
||||
<!-- <a href="<tmpl_var task.edit.url>" class="submodal-400-350"><tmpl_var task.name></a> -->
|
||||
<tmpl_else>
|
||||
<tmpl_var task.name>
|
||||
</tmpl_if>
|
||||
</td>
|
||||
<td align="center" style="height:20px"><tmpl_var task.duration> <tmpl_var task.duration.units></td>
|
||||
<td align="center" style="height:20px"><tmpl_var task.start></td>
|
||||
<td align="center" style="height:20px"><tmpl_var task.end></td>
|
||||
<td align="center" style="height:20px"><tmpl_var task.dependants></td>
|
||||
<tmpl_var task.lagTime>
|
||||
</tr>
|
||||
</tmpl_loop>
|
||||
<tr><td colspan="6" style="border-style:none;"> </td></tr>
|
||||
<tr><td colspan="6" style="border-style:none;"> </td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<tmpl_var form.footer>
|
||||
|
||||
<div id="links">
|
||||
<!-- <tmpl_if project.canEdit><a href="<tmpl_var task.resources.url>"><tmpl_var task.resources.label></a> | </tmpl_if> -->
|
||||
<tmpl_if task.canAdd><a href="<tmpl_var task.add.url>" class="submodal-400-300"><tmpl_var task.add.label></a> | </tmpl_if>
|
||||
<a href="<tmpl_var task.back.url>"><tmpl_var task.back.label></a>
|
||||
</div>
|
||||
|
||||
~~~
|
||||
<style type="text/css">
|
||||
body, html {
|
||||
margin:0px;
|
||||
padding:0px;
|
||||
}
|
||||
.project {
|
||||
position:relative;
|
||||
margin-top:5px;
|
||||
margin-left:5px;
|
||||
}
|
||||
.project td {
|
||||
border:solid silver 1px;
|
||||
border-bottom:solid gray 1px;
|
||||
font-size:9pt;
|
||||
font-family:arial;
|
||||
}
|
||||
.project a {
|
||||
color:#000000;
|
||||
font-weight: normal;
|
||||
font-size: 9pt;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.project a:hover {
|
||||
color:#7AB7E9;
|
||||
font-weight: normal;
|
||||
font-size: 9pt;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.taskname {
|
||||
font-family: verdana;
|
||||
font-size: 10px;
|
||||
font-weight: normal;
|
||||
color: black;
|
||||
width: 295px;
|
||||
}
|
||||
.taskduration {
|
||||
font-family: verdana;
|
||||
font-size: 10px;
|
||||
font-weight: normal;
|
||||
color: black;
|
||||
width: 25px;
|
||||
}
|
||||
.taskdate {
|
||||
font-family: verdana;
|
||||
font-size: 10px;
|
||||
font-weight: normal;
|
||||
color: black;
|
||||
width: 68px;
|
||||
}
|
||||
.taskdependant {
|
||||
font-family: verdana;
|
||||
font-size: 10px;
|
||||
font-weight: normal;
|
||||
color: black;
|
||||
width: 20px;
|
||||
}
|
||||
tr.monthNames td {
|
||||
text-align:center;
|
||||
}
|
||||
tr.dates td {
|
||||
width:16px;
|
||||
}
|
||||
div.scroller {
|
||||
overflow:scroll;
|
||||
position:relative;
|
||||
width:400px;
|
||||
}
|
||||
|
||||
* html div.scroller {
|
||||
overflow-x:scroll;
|
||||
}
|
||||
|
||||
td.empty {
|
||||
background-color:transparent;
|
||||
border-style:none;
|
||||
height:20px;
|
||||
}
|
||||
|
||||
div.barPositions {
|
||||
position:relative;
|
||||
}
|
||||
div.projectBar {
|
||||
position:absolute;
|
||||
height:10px;
|
||||
z-index:2;
|
||||
padding:0px;
|
||||
margin:0px;
|
||||
font-size:1pt;
|
||||
}
|
||||
div.statusBar {
|
||||
background-color:#000;
|
||||
position:absolute;
|
||||
height:5px;
|
||||
z-index:3;
|
||||
padding:0px;
|
||||
top:2px;
|
||||
margin:0px;
|
||||
font-size:1pt;
|
||||
}
|
||||
|
||||
div.projectLineH {
|
||||
background: url('images/dot.gif') top repeat-x;
|
||||
font-size:1pt;
|
||||
text-align:right;
|
||||
position:absolute;
|
||||
}
|
||||
div.projectLineV {
|
||||
width:1px;
|
||||
background-color:black;
|
||||
position:relative;
|
||||
font-size:1pt;
|
||||
height:100%;
|
||||
float:right;
|
||||
}
|
||||
|
||||
div.projectLabel {
|
||||
position:absolute;
|
||||
margin-top:-3px;
|
||||
white-space:nowrap;
|
||||
font-family: verdana;
|
||||
font-size:8px;
|
||||
}
|
||||
|
||||
div.milestone {
|
||||
color:#000000;
|
||||
position:absolute;
|
||||
z-index:4;
|
||||
margin:0px;
|
||||
padding:0px;
|
||||
margin-top:-3px;
|
||||
font-size: 10px;
|
||||
font-family: times;
|
||||
}
|
||||
|
||||
#links {
|
||||
margin-top:7px;
|
||||
margin-left:5px;
|
||||
font-family:arial;
|
||||
font-size:9pt;
|
||||
}
|
||||
|
||||
#links a {
|
||||
color:#7AB7E9;
|
||||
}
|
||||
</style>
|
||||
|
||||
<style>
|
||||
.popUp {
|
||||
width:100%;
|
||||
border:solid black 0px;
|
||||
background-color:#F5F5F5;
|
||||
}
|
||||
.popUp td {
|
||||
font-size:9pt;
|
||||
font-family:arial;
|
||||
border-top:solid #E0E0E0 1px;
|
||||
}
|
||||
.popUp tr.clear td {
|
||||
border-style:none;
|
||||
background-color:#F0F0F0;
|
||||
}
|
||||
.popUp tr.clearNoBG td {
|
||||
border-style:none;
|
||||
}
|
||||
.popUp td.header {
|
||||
font-weight:bold;
|
||||
}
|
||||
.popUp td span.header {
|
||||
font-weight:bold;
|
||||
}
|
||||
a.saveBtn {
|
||||
width:40px;
|
||||
height:15px;
|
||||
background-color:silver;
|
||||
padding:1px;
|
||||
padding-left:5px;
|
||||
padding-right:5px;
|
||||
color:white;
|
||||
border:solid gray 1px;
|
||||
text-decoration:none;
|
||||
font-weight:bold;
|
||||
display:block;
|
||||
float:right;
|
||||
text-align:center;
|
||||
}
|
||||
a.saveBtn:hover {
|
||||
background-color:#F0F0F0;
|
||||
color:gray;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -19,7 +19,7 @@ my $quiet;
|
|||
|
||||
my $session = start();
|
||||
|
||||
# upgrade functions go here
|
||||
pmAddProgressiveTasks($session);
|
||||
|
||||
finish($session);
|
||||
|
||||
|
|
@ -31,7 +31,26 @@ finish($session);
|
|||
# # and here's our code
|
||||
#}
|
||||
|
||||
|
||||
sub pmAddProgressiveTasks {
|
||||
my $session = shift;
|
||||
print "\tMaking progressive tasks representable.\n" unless $quiet;
|
||||
$session->db->write($_) for(<<'EOT',
|
||||
ALTER TABLE PM_task
|
||||
ADD COLUMN taskType enum('timed', 'progressive', 'milestone') NOT NULL
|
||||
DEFAULT 'timed',
|
||||
CHANGE COLUMN percentComplete percentComplete float NULL DEFAULT NULL
|
||||
EOT
|
||||
<<'EOT',
|
||||
UPDATE PM_task SET taskType = 'milestone'
|
||||
AND percentComplete = NULL
|
||||
WHERE isMilestone = 1
|
||||
EOT
|
||||
<<'EOT',
|
||||
ALTER TABLE PM_task
|
||||
DROP COLUMN isMilestone
|
||||
EOT
|
||||
);
|
||||
}
|
||||
|
||||
# ---- DO NOT EDIT BELOW THIS LINE ----
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue