[IMP] Burndown chart & Cumulative Flow, Planned vs Remaining Time on kanban

bzr revid: fp@tinyerp.com-20111213043344-2nodtou03uy9zyo8
This commit is contained in:
Fabien Pinckaers 2011-12-13 05:33:44 +01:00
parent c2c27af2b6
commit faf59411b4
3 changed files with 46 additions and 12 deletions

View File

@ -920,21 +920,24 @@ class task(osv.osv):
self.log(cr, uid, id, message)
return True
def set_remaining_time_1(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'remaining_hours': 1.0}, context=context)
def set_remaining_time(self, cr, uid, ids, remaining_time=1.0, context=None):
for task in self.browse(cr, uid, ids, context=context):
if (task.state=='draft') or (task.planned_hours==0.0):
self.write(cr, uid, [task.id], {'planned_hours': remaining_time}, context=context)
self.write(cr, uid, ids, {'remaining_hours': remaining_time}, context=context)
return True
def set_remaining_time_1(self, cr, uid, ids, context=None):
return self.set_remaining_time(cr, uid, ids, 1.0, context)
def set_remaining_time_2(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'remaining_hours': 2.0}, context=context)
return True
return self.set_remaining_time(cr, uid, ids, 2.0, context)
def set_remaining_time_5(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'remaining_hours': 5.0}, context=context)
return True
return self.set_remaining_time(cr, uid, ids, 5.0, context)
def set_remaining_time_10(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'remaining_hours': 10.0}, context=context)
return True
return self.set_remaining_time(cr, uid, ids, 10.0, context)
def set_kanban_state_blocked(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'kanban_state': 'blocked'}, context=context)
@ -979,6 +982,7 @@ class task(osv.osv):
self.pool.get('project.task.history').create(cr, uid, {
'task_id': task.id,
'remaining_hours': task.remaining_hours,
'planned_hours': task.planned_hours,
'kanban_state': task.kanban_state,
'type_id': task.type_id.id,
'state': task.state,
@ -1158,7 +1162,8 @@ class project_task_history(osv.osv):
'end_date': fields.function(_get_date, string='End Date', type="date", store={
'project.task.history': (_get_related_date, None, 20)
}),
'remaining_hours': fields.float('Remaining Hours', digits=(16,2)),
'remaining_hours': fields.float('Remaining Time', digits=(16,2)),
'planned_hours': fields.float('Planned Time', digits=(16,2)),
'user_id': fields.many2one('res.users', 'Responsible'),
}
_defaults = {
@ -1186,7 +1191,7 @@ class project_task_history_cumulative(osv.osv):
id as history_id,
date+generate_series(0, CAST((coalesce(end_date,DATE 'tomorrow')::date - date)AS integer)-1) as date,
task_id, type_id, user_id, kanban_state, state,
remaining_hours
remaining_hours, planned_hours
FROM
project_task_history
) as history

View File

@ -378,6 +378,7 @@
type="object" class="oe_kanban_button"><t t-esc="time[0]"/></a
><b t-if="time[1]" class="oe_kanban_button oe_kanban_button_active"><t t-esc="Math.round(hours)"/></b
></t>
<a name="do_open" states="draft" string="Open and validate estimated time" type="object" icon="kanban-apply"/>
</span>
</div>
<div class="oe_kanban_clear"/>

View File

@ -25,6 +25,18 @@
<field name="type">graph</field>
<field name="arch" type="xml">
<graph string="Project Tasks" type="bar">
<field name="date"/>
<field name="planned_hours" operator="+"/>
<field name="type_id" group="True"/>
</graph>
</field>
</record>
<record id="view_task_history_burndown_graph" model="ir.ui.view">
<field name="name">project.task.history.burndown.graph</field>
<field name="model">project.task.history.burndown</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<graph string="Burndown Chart of Tasks" type="bar">
<field name="date"/>
<field name="remaining_hours" operator="+"/>
<field name="type_id" group="True"/>
@ -32,12 +44,13 @@
</field>
</record>
<record id="view_task_history_search" model="ir.ui.view">
<field name="name">project.task.history.cumulative.search</field>
<field name="model">project.task.history.cumulative</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Task's Cumulative Flow">
<search string="Task's Analysis">
<group>
<filter name="open" string="In Progress" domain="[('state','in',('open','draft'))]" help="In Progress Tasks" icon="terp-camera_test"/>
<filter string="Pending" domain="[('state','=','pending')]" context="{'show_delegated':False}" help="Pending Tasks" icon="terp-gtk-media-pause"/>
@ -69,13 +82,28 @@
<field name="res_model">project.task.history.cumulative</field>
<field name="view_type">form</field>
<field name="view_mode">graph,tree</field>
<field name="view_id" ref="view_task_history_graph"/>
<field eval="False" name="filter"/>
<field name="context">{"search_default_open":1, "search_default_this_month": 1}</field>
<field name="context">{"search_default_open":1, "search_default_this_month": 1, "search_default_project_id": project_id}</field>
</record>
<menuitem action="action_view_task_history_cumulative"
id="menu_action_view_task_history_cumulative"
parent="project_report_task" />
<record id="action_view_task_history_burndown" model="ir.actions.act_window">
<field name="name">Burndown Chart</field>
<field name="res_model">project.task.history.cumulative</field>
<field name="view_type">form</field>
<field name="view_mode">graph,tree</field>
<field name="view_id" ref="view_task_history_burndown_graph"/>
<field eval="False" name="filter"/>
<field name="context">{"search_default_open":1, "search_default_this_month": 1, "search_default_project_id": project_id}</field>
</record>
<menuitem action="action_view_task_history_burndown"
id="menu_action_view_task_history_burndown"
parent="project_report_task" />
</data>
</openerp>