diff options
author | travis%sedsystems.ca <> | 2005-03-01 02:52:55 +0100 |
---|---|---|
committer | travis%sedsystems.ca <> | 2005-03-01 02:52:55 +0100 |
commit | 8b0a6508c4daa8a56d17192a9c3a1d9b53790e15 (patch) | |
tree | e128879b9139eeffe73be53e1ffd62563c835a2c /template/en/default | |
parent | ca2f67d88996b8a2b49264e94659f7acf3e1bc68 (diff) | |
download | bugzilla-8b0a6508c4daa8a56d17192a9c3a1d9b53790e15.tar.gz bugzilla-8b0a6508c4daa8a56d17192a9c3a1d9b53790e15.tar.xz |
Bug 250410 : Time tracking summaries
Patch by Christian Reis <kiko@async.com.br> r=jpeshkin a=justdave
Diffstat (limited to 'template/en/default')
-rw-r--r-- | template/en/default/bug/edit.html.tmpl | 7 | ||||
-rw-r--r-- | template/en/default/bug/summarize-time.html.tmpl | 329 | ||||
-rw-r--r-- | template/en/default/filterexceptions.pl | 8 | ||||
-rw-r--r-- | template/en/default/list/list.html.tmpl | 9 |
4 files changed, 352 insertions, 1 deletions
diff --git a/template/en/default/bug/edit.html.tmpl b/template/en/default/bug/edit.html.tmpl index 58336b588..86fb4c6b6 100644 --- a/template/en/default/bug/edit.html.tmpl +++ b/template/en/default/bug/edit.html.tmpl @@ -419,6 +419,13 @@ size="10" maxlength="10"> </td> </tr> + <tr> + <td colspan="6" align="right"> + <a href="summarize_time.cgi?id=[% bug.bug_id %]&do_depends=1"> + Summarize time (including time for [% terms.bugs %] + blocking this [% terms.bug %])</a> + </td> + </tr> </table> [% END %] diff --git a/template/en/default/bug/summarize-time.html.tmpl b/template/en/default/bug/summarize-time.html.tmpl new file mode 100644 index 000000000..0bcaeaeb6 --- /dev/null +++ b/template/en/default/bug/summarize-time.html.tmpl @@ -0,0 +1,329 @@ +[%# 1.0@bugzilla.org %] +[%# The contents of this file are subject to the Mozilla Public + # License Version 1.1 (the "License"); you may not use this file + # except in compliance with the License. You may obtain a copy of + # the License at http://www.mozilla.org/MPL/ + # + # Software distributed under the License is distributed on an "AS + # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + # implied. See the License for the specific language governing + # rights and limitations under the License. + # + # The Original Code is the Bugzilla Bug Tracking System. + # + # Contributor(s): Christian Reis <kiko@async.com.br> + #%] + +[% USE date %] + +[% PROCESS global/variables.none.tmpl %] + +[% title = "Time Summary " %] +[% IF do_depends %] + [% title = title _ "for " %] + [% h1 = title _ GetBugLink(ids.0, "$terms.Bug $ids.0") %] + [% title = title _ "$terms.Bug $ids.0: " %] + [% h1 = (h1 _ " (and $terms.bugs blocking it)") IF do_depends %] +[% ELSE %] + [% title = title _ "($ids.size $terms.bugs selected)" %] + [% h1 = title %] +[% END %] + +[% PROCESS global/header.html.tmpl + title = title + h1 = h1 + style_urls = ["skins/standard/summarize-time.css"] + %] + +<p> + +[% IF ids.size == 0 %] + + No [% terms.bugs %] specified or visible. + +[% ELSE %] + + [% INCLUDE query_form %] + + [% IF do_report %] + + [% global.grand_total = 0 %] + + <p> + [% FOREACH workdata = part_list %] + [% part = parts.shift %] + <div align="right"> + <h4 style="padding-right: 2em; margin: 0;"> + [% IF part.0 or part.1 %] + [% part.0 OR "Up" FILTER html %] to [% part.1 OR "now" FILTER html %] + [% ELSE %] + Full summary (no period specified) + [% END %] + </h4> + </div> + [% IF group_by == "number" %] + [% INCLUDE number_report %] + [% ELSE %] + [% INCLUDE owner_report %] + [% END %] + <p> + [% END %] + + [% IF monthly %] + <h4 style="margin: 0">Total of [% global.grand_total FILTER format("%.2f") %] hours worked</h4> + <hr noshade size="1"> + [% END %] + + [% IF null.keys.size > 0 %] + [% INCLUDE inactive_report %] + <p> + <h4 style="margin: 0">Total of [% null.keys.size %] + inactive [% terms.bugs %]</h4> + [% END %] + + [% END %] + +[% END %] +<p> + +[% PROCESS global/footer.html.tmpl %] + +[%# + # + # Developer reporting + # + #%] + +[% BLOCK owner_report %] + [% global.total = 0 global.bug_count = {} global.owner_count = {}%] + <table cellpadding="4" cellspacing="0" width="90%" class="realitems owner"> + [% FOREACH owner = workdata.keys.sort %] + [% INCLUDE do_one_owner owner=owner ownerdata=workdata.$owner + detailed=detailed %] + [% END %] + + [% additional = "$global.owner_count.size developers @ + $global.bug_count.size $terms.bugs" %] + [% INCLUDE section_total colspan=3 additional=additional %] + </table> +[% END %] + +[% BLOCK do_one_owner %] + [% global.owner_count.$owner = 1 %] + <tr><td colspan="5" class="owner_header"> + <b>[% owner FILTER html %]</b> + </td></tr> + [% col = 0 subtotal = 0%] + [% FOREACH bugdata=ownerdata.nsort("bug_id") %] + [% bug_id = bugdata.bug_id %] + [% global.bug_count.$bug_id = 1 %] + [% IF detailed %] + [%# XXX oy what a hack %] + [% timerow = '<td width="100" align="right" valign="top">' _ bugdata.total_time _ '</td>' %] + [% INCLUDE bug_header cid=col id=bug_id bug_status=bugdata.bug_status + short_desc=bugdata.short_desc extra=timerow %] + [% col = col + 1 %] + [% END %] + [% subtotal = subtotal + bugdata.total_time %] + [% END %] + <tr> + <td colspan="3"> </td> + <td align="right"> + <b>Total</b>: + </td> + <td align="right" class="subtotal" width="100"> + <b>[% subtotal FILTER format("%.2f") %]</b></td> + [% global.total = global.total + subtotal %] + </tr> +[% END %] + +[%# + # + # Bug Number reporting + # + #%] + +[% BLOCK number_report %] + [% global.total = 0 global.owner_count = {} global.bug_count = {} %] + + <table cellpadding="4" cellspacing="0" width="90%" class="realitems number"> + [% keys = sort_bug_keys(workdata.keys) %] + [% FOREACH bug = keys %] + [% INCLUDE do_one_bug bug=bug bugdata=workdata.$bug + detailed=detailed %] + [% END %] + + [% additional = "$global.bug_count.size $terms.bugs & + $global.owner_count.size developers" %] + [% INCLUDE section_total additional=additional colspan=2 %] + </table> +[% END %] + +[% BLOCK do_one_bug %] + [% subtotal = 0.00 cid = 0 %] + + [%# hack apart the ID and summary. Sad. %] + [% items = bug.split(";") %] + [% id = items.shift %] + [% status = items.shift %] + [% global.bug_count.$id = 1 %] + [% INCLUDE bug_header id=id bug_status=status short_desc=items.join(";") %] + + [% FOREACH owner = bugdata.sort("login_name") %] + [% work_time = owner.total_time %] + [% subtotal = subtotal + work_time %] + [% login_name = owner.login_name %] + [% global.owner_count.$login_name = 1 %] + [% IF detailed %] + [% cid = cid + 1 %] + <tr class="owner_header[% 2 FILTER none IF cid % 2 %]"> + <td> </td> + <td colspan="2"><b>[% login_name FILTER html %]</b></td> + <td align="right"> + [% work_time FILTER format("%.2f") %]</td> + </tr> + [% END %] + [% END %] + <tr> + <td colspan="2"> </td> + <td align="right"> + <b>Total</b>: + </td> + <td align="right" class="subtotal" width="100"> + <b>[% subtotal FILTER format("%.2f") %]</b> + </td></tr> + [% global.total = global.total + subtotal %] +[% END %] + +[% BLOCK bug_header %] + <tr class="bug_header[% '2' IF cid % 2 %]"> + <td width="10" valign="top"> + [% INCLUDE buglink id=id %]</td> + <td width="10"><b>[% bug_status FILTER html %]</b></td> + <td colspan="2">[% short_desc FILTER html %]</td> + [% extra FILTER none %] + </tr> +[% END %] + + +[% BLOCK inactive_report %] + <h3>Inactive [% terms.bugs %]</h3> + <table cellpadding="4" cellspacing="0" width="90%" class="zeroitems"> + [% cid = 0 %] + [% FOREACH bug_id = null.keys.nsort %] + [% INCLUDE bug_header id=bug_id bug_status=null.$bug_id.1 + short_desc=null.$bug_id.0 cid=cid %] + [% cid = cid + 1 %] + [% END %] + </table> +[% END %] + + +[% BLOCK section_total %] + [% IF global.total > 0 %] + <tr class="section_total"> + <td align="left" width="10"> + <b>Totals</b></td> + <td colspan="[% colspan FILTER none %]" align="right"><b>[% additional FILTER none %]</b></td> + <td align="right"> + <b>[% global.total FILTER format("%.2f") %]</b> + </td></tr> + [% ELSE %] + <tr><td> + No time allocated during the specified period. + </td></tr> + [% END %] + [% global.grand_total = global.grand_total + global.total %] +[% END %] + +[%# + # + # The query form + # + #%] + +[% BLOCK query_form %] +<hr noshade size=1> +<form method="post" name="summary" style="display: inline" action=""> +<input type="hidden" name="do_depends" value="[% do_depends FILTER html %]"> +<input type="hidden" name="id" value="[% ids.join(",") FILTER html %]"> +<input type="hidden" name="do_report" value="1"> + +[% IF warn_swap_dates %] + <h4 style="border: 1px solid red; margin: 1em; padding: 0.5em">The + end date specified occurs before the start date, which doesn't + make sense; the dates below have therefore been swapped.</h4> +[% END %] + +<table> +<tr> +<td align="right"> + <b>Period <label accesskey="s" + for="start_date"><u>s</u>tarting</label></b>: +</td><td colspan="3"> + <input type="text" id="start_date" name="start_date" size="11" + align="right" value="[% start_date FILTER html %]" maxlength="10"> + + <b>and <label accesskey="e" for="end_date"><u>e</u>nding</label></b>: + <input type="text" name="end_date" size="11" id="end_date" + align="right" value ="[% end_date FILTER html %]" maxlength="10"> +</td><td align="right"> + <input type="submit" value="Summarize"> +</td></tr> +<tr> +<td> </td><td colspan="4"> + <small>(Dates are optional, and in YYYY-MM-DD format)</small> +</td> +<tr><td align="right"> + <b>Group by</b>: +</td><td colspan="2"> + <input type="radio" name="group_by" id="number" value="number" [% + 'checked="checked"' IF group_by == "number" + %]><label + for="number" accesskey="n">[% terms.Bug %] <u>N</u>umber</label> + <input type="radio" name="group_by" id="owner" value="owner" [% + 'checked="checked"' IF group_by == "owner" + %]><label + for="owner" accesskey="d"><u>D</u>eveloper</label> +</td><td colspan="2"> + <b>Format</b>: <select name="ctype"> + <option value="html">HTML Report</option> + </select> +</td></tr><tr> +<td> </td><td colspan="4"> + <label for="monthly" accesskey="m"> + <input type="checkbox" name="monthly" [% 'checked="checked"' IF + monthly %] id="monthly"> + Split by <u>m</u>onth</label> + [%# XXX: allow splitting by other intervals %] + + <label for="detailed" accesskey="t"> + <input type="checkbox" name="detailed" [% 'checked="checked"' IF + detailed %] id="detailed"> + De<u>t</u>ailed summaries</label> + + <label for="inactive" accesskey="i"> + <input type="checkbox" name="inactive" [% 'checked="checked"' IF + inactive %] id="inactive"> + Also show <u>i</u>nactive [% terms.bugs %]</label> +</td> +</tr></table> + +</form> +<script type="application/x-javascript"> +<!-- + document.forms['summary'].start_date.focus() +//--></script> +<hr noshade size=1> +[% END %] + +[%# + # + # Utility + # + #%] + +[% BLOCK buglink %] + <a href="show_bug.cgi?id=[% id FILTER html %]"><b>[% terms.Bug %] [% id FILTER html %]</b></a> +[% END %] + diff --git a/template/en/default/filterexceptions.pl b/template/en/default/filterexceptions.pl index 9fc4232b0..94a4168e2 100644 --- a/template/en/default/filterexceptions.pl +++ b/template/en/default/filterexceptions.pl @@ -370,6 +370,14 @@ 'field', ], +'bug/summarize-time.html.tmpl' => [ + 'global.grand_total FILTER format("%.2f")', + 'subtotal FILTER format("%.2f")', + 'work_time FILTER format("%.2f")', + 'global.total FILTER format("%.2f")', +], + + 'bug/time.html.tmpl' => [ 'time_unit FILTER format(\'%.1f\')', 'time_unit FILTER format(\'%.2f\')', diff --git a/template/en/default/list/list.html.tmpl b/template/en/default/list/list.html.tmpl index 602475d0d..919c9b21c 100644 --- a/template/en/default/list/list.html.tmpl +++ b/template/en/default/list/list.html.tmpl @@ -133,8 +133,15 @@ <input type="hidden" name="id" value="[% id FILTER html %]"> [% END %] <input type="hidden" name="format" value="multiple"> - <input type="submit" value="Long Format"> + <input type="submit" value=" Long Format "> </form> + + [% IF UserInGroup(Param('timetrackinggroup')) %] + <form method="post" action="summarize_time.cgi"> + <input type="hidden" name="id" value="[% buglist_joined FILTER html %]"> + <input type="submit" value="Time Summary"> + </form> + [% END %] </td> <td> </td> |