Changeset 721
- Timestamp:
- 11/11/08 19:45:19 (5 years ago)
- Location:
- trunk/plugins/dashboardreportsplugin/tracdashboardreports
- Files:
-
- 2 edited
-
macros.py (modified) (2 diffs)
-
templates/ticketstatusquery.html (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/plugins/dashboardreportsplugin/tracdashboardreports/macros.py
r717 r721 45 45 46 46 # render result 47 template = Chrome(self.env).load_template('filtercountquery.html' ,method='xhtml')47 template = Chrome(self.env).load_template('filtercountquery.html', method='xhtml') 48 48 data = Chrome(self.env).populate_data(formatter.req, data) 49 49 rendered_result = template.generate(**data) … … 94 94 return html.div(rendered_result, class_ = 'new-wdgt '+class_) 95 95 96 class TicketStatusMacro(WikiMacroBase): 96 class TicketStatusQueryMacro(TicketCountQueryBaseMacro): 97 """It creates a table with ticket counts for a specified trac query and 98 grouped by a specific ticket field. 99 100 Example: `[[TicketStatusQuery(query=status=!closed&changetime=today;, groupby=milestone|component, title=Ticket Count, class=widget450)]]` 101 """ 97 102 def expand_macro(self, formatter, name, content): 98 raise TracError("Work in progress") 103 args, kwargs = parse_args(content) 104 105 query_string = self.populate_variables(req=formatter, query_string=kwargs.get('query', 'col=id')) 106 groupby = kwargs.get('groupby', 'component').split('|')+['status'] 107 title = kwargs.get('title') 108 class_ = kwargs.get('class','') 109 110 query = Query.from_string(self.env, query_string) 111 data = dict(title=title, query=query, axis=groupby[:-1], counts={}, unicode_urlencode=unicode_urlencode) 112 113 # axis values 114 for groupby_item in groupby: 115 if not groupby_item in query.cols: 116 query.cols.append(groupby_item) 117 data.setdefault('axis_values', {})[groupby_item] = ['']+list(self.get_axis_values(groupby_item)) 118 119 for key, count in self.get_count_per_group(formatter.req, query, groupby): 120 (status, )= key[-1:] 121 count_per_group = data['counts'].setdefault(key[:-1], {'open':0, 'closed':0}) 122 if status!='closed': 123 count_per_group['open']+=count 124 else: 125 count_per_group['closed']=count 126 127 # render result 128 template = Chrome(self.env).load_template('ticketstatusquery.html', method='xhtml') 129 data = Chrome(self.env).populate_data(formatter.req, data) 130 rendered_result = template.generate(**data) 131 132 add_stylesheet(formatter.req, 'tracdashboardreports/css/widgets.css') 133 134 return html.div(rendered_result, class_ = 'new-wdgt ' + class_) 99 135 100 136 class DefectSummaryChartsBurnupMacro(DashboardTicketCountsMacroChartsBurnupBase): -
trunk/plugins/dashboardreportsplugin/tracdashboardreports/templates/ticketstatusquery.html
r661 r721 1 1 <html xmlns:py="http://genshi.edgewall.org/" py:strip=""> 2 <h2>${title}</h2> 3 <div py:for="value in severities" class="progressmeter"> 2 <h2 py:if="title">${title}</h2> 3 <div py:if="len(axis)==1" py:with="query_href=query.get_href(req.href)"> 4 <div py:for="x_axis in axis_values[axis[0]]" class="progressmeter" 5 py:with="count_closed = counts.get((x_axis,),{}).get('closed',0); count_open = counts.get((x_axis,),{}).get('open',0); percent_closed=(count_open+count_closed) and count_closed*100/(count_open+count_closed) or 0"> 4 6 <ul class="wdgtLegend"> 5 <py:if test="format == 'count'">6 7 <li class="legendClosed">Closed:</li> 7 <li><a href="${ value.closed_href}">${value.statusClosed}</a></li>8 <li><a href="${query_href+'&'+unicode_urlencode([(axis[0], x_axis),('status','closed')])}">${percent_closed}%</a></li> 8 9 <li class="legendOpen">Open:</li> 9 <li><a href="${value.active_href}">${value.statusActive}</a></li> 10 </py:if> 11 <py:if test="format == 'percent'"> 12 <li class="legendClosed">Closed:</li> 13 <li><a href="${value.closed_href}">${int(round(value.percentClosed))}%</a></li> 14 <li class="legendOpen">Open:</li> 15 <li><a href="${value.active_href}">${int(round(value.percentActive))}%</a></li> 16 </py:if> 10 <li><a href="${query_href+'&'+unicode_urlencode([(axis[0], x_axis),('status','!closed')])}">${100-percent_closed}%</a></li> 17 11 </ul> 18 <a class="milestone b" href="${ value.label_href}">${value.label}</a>12 <a class="milestone b" href="${query_href+'&'+unicode_urlencode([(axis[0], x_axis)])}">${x_axis and x_axis.capitalize() or 'None'}</a> 19 13 <table> 20 14 <tbody> 21 15 <tr> 22 <td py:if="value.percentClosed != 0" class="closed" style="width: ${int(round(value.percentClosed))}%;"> </td> 23 <td py:if="value.percentActive != 0" class="active" style="width: ${int(round(value.percentActive))}%;"> </td> 24 <td py:if="value.percentBackground != 0" style="width: ${int(100 - value.percentClosed - value.percentActive)}%;"> </td> 16 <td py:if="percent_closed>0" class="closed" style="width: ${percent_closed}%;"></td> 17 <td class="active" style="width: ${100-percent_closed}%;"></td> 25 18 </tr> 26 19 </tbody> 27 20 </table> 21 </div> 28 22 </div> 29 <div style="text-align:right;">Total: ${runningTotal}</div>30 23 </html>
Note: See TracChangeset
for help on using the changeset viewer.
