Changeset 721


Ignore:
Timestamp:
11/11/08 19:45:19 (5 years ago)
Author:
cbalan
Message:

Dashboard: - Updated TicketStatusQuery macro.

Location:
trunk/plugins/dashboardreportsplugin/tracdashboardreports
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/plugins/dashboardreportsplugin/tracdashboardreports/macros.py

    r717 r721  
    4545         
    4646        # render result 
    47         template = Chrome(self.env).load_template('filtercountquery.html' ,method='xhtml') 
     47        template = Chrome(self.env).load_template('filtercountquery.html', method='xhtml') 
    4848        data = Chrome(self.env).populate_data(formatter.req, data) 
    4949        rendered_result = template.generate(**data) 
     
    9494        return html.div(rendered_result, class_ = 'new-wdgt '+class_) 
    9595 
    96 class TicketStatusMacro(WikiMacroBase): 
     96class 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    """     
    97102    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_) 
    99135 
    100136class DefectSummaryChartsBurnupMacro(DashboardTicketCountsMacroChartsBurnupBase): 
  • trunk/plugins/dashboardreportsplugin/tracdashboardreports/templates/ticketstatusquery.html

    r661 r721  
    11<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"> 
    46    <ul class="wdgtLegend"> 
    5       <py:if test="format == 'count'"> 
    67        <li class="legendClosed">Closed:</li> 
    7         <li><a href="${value.closed_href}">${value.statusClosed}</a></li> 
     8        <li><a href="${query_href+'&amp;'+unicode_urlencode([(axis[0], x_axis),('status','closed')])}">${percent_closed}%</a></li> 
    89        <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+'&amp;'+unicode_urlencode([(axis[0], x_axis),('status','!closed')])}">${100-percent_closed}%</a></li> 
    1711    </ul> 
    18     <a class="milestone b" href="${value.label_href}">${value.label}</a> 
     12    <a class="milestone b" href="${query_href+'&amp;'+unicode_urlencode([(axis[0], x_axis)])}">${x_axis and x_axis.capitalize() or 'None'}</a> 
    1913    <table> 
    2014      <tbody> 
    2115        <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> 
    2518        </tr> 
    2619      </tbody> 
    2720    </table> 
     21        </div> 
    2822  </div> 
    29   <div style="text-align:right;">Total: ${runningTotal}</div> 
    3023</html> 
Note: See TracChangeset for help on using the changeset viewer.