Use work type for reporting "Hours per Work type"

This commit is contained in:
Cédric Krier
2008-06-03 10:30:39 +02:00
parent 29831c43d2
commit 95c551cecb
4 changed files with 61 additions and 160 deletions
-89
View File
@@ -116,95 +116,6 @@ class EnterLines(Wizard):
EnterLines()
class HoursWorkType(OSV):
'Hours per Work Type'
_name = 'timesheet.hours_work_type'
work_type = fields.Many2One('timesheet.work_type', 'Work Type', select=1)
hours = fields.Function('get_hours', digits=(16, 2), string='Hours')
def table_query(self, context=None):
return ('SELECT DISTINCT(work_type) AS id, work_type ' \
'FROM timesheet_line', [])
def get_hours(self, cursor, user, ids, name, arg, context=None):
res = {}
clause = ' '
args = []
for work_type_id in ids:
res[work_type_id] = 0.0
if context.get('start_date'):
clause += 'AND date >= %s '
args.append(context['start_date'])
if context.get('end_date'):
clause += 'AND date <= %s '
args.append(context['end_date'])
cursor.execute('SELECT work_type, SUM(COALESCE(hours, 0)) ' \
'FROM timesheet_line '
'WHERE work_type IN (' + \
','.join(['%s' for x in ids]) + ') ' \
+ clause +
'GROUP BY work_type', ids + args)
for work_type_id, sum in cursor.fetchall():
res[work_type_id] = sum
return res
HoursWorkType()
class OpenHoursWorkTypeInit(WizardOSV):
_name = 'timesheet.open_hours_work_type.init'
start_date = fields.Date('Start Date')
end_date = fields.Date('End Date')
OpenHoursWorkTypeInit()
class OpenHoursWorkTypes(Wizard):
'Open Hours per Work Type'
_name = 'timesheet.open_hours_work_type'
states = {
'init': {
'result': {
'type': 'form',
'object': 'timesheet.open_hours_work_type.init',
'state': [
('end', 'Cancel', 'gtk-cancel'),
('open', 'Open', 'gtk-ok', True),
],
},
},
'open': {
'result': {
'type': 'action',
'action': '_action_open',
'state': 'end',
},
},
}
def _action_open(self, cursor, user, data, context=None):
model_data_obj = self.pool.get('ir.model.data')
act_window_obj = self.pool.get('ir.action.act_window')
model_data_ids = model_data_obj.search(cursor, user, [
('fs_id', '=', 'act_hours_work_type_form'),
('module', '=', 'timesheet'),
], limit=1, context=context)
model_data = model_data_obj.browse(cursor, user, model_data_ids[0],
context=context)
res = act_window_obj.read(cursor, user, model_data.db_id, context=context)
res['context'] = str({
'start_date': data['form']['start_date'],
'end_date': data['form']['end_date'],
})
return res
OpenHoursWorkTypes()
class HoursEmployee(OSV):
'Hours per Employee'
_name = 'timesheet.hours_employee'
-67
View File
@@ -63,73 +63,6 @@
<menuitem parent="menu_timesheet" action="act_enter_lines"
id="menu_enter_lines" sequence="20"/>
<record model="ir.ui.view" id="hours_work_type_view_tree">
<field name="model">timesheet.hours_work_type</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<![CDATA[
<tree string="Hours per Work Type">
<field name="work_type" select="1"/>
<field name="hours" widget="float_time" sum="hours"/>
</tree>
]]>
</field>
</record>
<record model="ir.ui.view" id="hours_work_type_view_graph">
<field name="model">timesheet.hours_work_type</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<![CDATA[
<graph string="Hours per Work Type" type="pie">
<x>
<field name="work_type"/>
</x>
<y>
<field name="hours"/>
</y>
</graph>
]]>
</field>
</record>
<record model="ir.action.act_window" id="act_hours_work_type_form">
<field name="name">Hours per Work Type</field>
<field name="res_model">timesheet.hours_work_type</field>
<field name="view_type">form</field>
</record>
<record model="ir.action.act_window.view"
id="act_hours_work_type_form_view1">
<field name="sequence" eval="10"/>
<field name="view" ref="hours_work_type_view_tree"/>
<field name="act_window" ref="act_hours_work_type_form"/>
</record>
<record model="ir.action.act_window.view"
id="act_hours_work_type_form_view2">
<field name="sequence" eval="20"/>
<field name="view" ref="hours_work_type_view_graph"/>
<field name="act_window" ref="act_hours_work_type_form"/>
</record>
<record model="ir.ui.view" id="open_hours_work_type_init_view_form">
<field name="model">timesheet.open_hours_work_type.init</field>
<field name="type">form</field>
<field name="arch" type="xml">
<![CDATA[
<form string="Hours per Work Types">
<label name="start_date"/>
<field name="start_date"/>
<label name="end_date"/>
<field name="end_date"/>
</form>
]]>
</field>
</record>
<record model="ir.action.wizard" id="act_open_hours_work_type">
<field name="name">Hours per Work Type</field>
<field name="wiz_name">timesheet.open_hours_work_type</field>
</record>
<menuitem parent="menu_reporting" action="act_open_hours_work_type"
icon="STOCK_JUSTIFY_FILL" id="menu_open_hours_work_type"/>
<record model="ir.ui.view" id="hours_employee_view_tree">
<field name="model">timesheet.hours_employee</field>
<field name="type">tree</field>
+23
View File
@@ -159,3 +159,26 @@ class OpenWorkType(Wizard):
return res
OpenWorkType()
class OpenWorkType2(OpenWorkType):
_name = 'timesheet.work_type.open2'
def _action_open_work_type(self, cursor, user, data, context=None):
model_data_obj = self.pool.get('ir.model.data')
act_window_obj = self.pool.get('ir.action.act_window')
model_data_ids = model_data_obj.search(cursor, user, [
('fs_id', '=', 'act_work_type_form2'),
('module', '=', 'timesheet'),
], limit=1, context=context)
model_data = model_data_obj.browse(cursor, user, model_data_ids[0],
context=context)
res = act_window_obj.read(cursor, user, model_data.db_id, context=context)
res['context'] = str({
'from_date': data['form']['from_date'],
'to_date': data['form']['to_date'],
})
return res
OpenWorkType2()
+38 -4
View File
@@ -90,7 +90,6 @@
<![CDATA[
<tree string="Work Types">
<field name="name" select="1"/>
<field name="type" select="1"/>
<field name="hours"/>
</tree>
]]>
@@ -109,11 +108,46 @@
<field name="act_window" ref="act_work_type_tree2"/>
</record>
<record model="ir.action.wizard" id="act_open_work_type">
<field name="name">Open Work Types</field>
<field name="name">Hours per Work Type</field>
<field name="wiz_name">timesheet.work_type.open</field>
</record>
<menuitem parent="menu_timesheet" action="act_open_work_type"
id="menu_work_type_tree2" icon="STOCK_INDENT" sequence="40"/>
<menuitem parent="menu_reporting" action="act_open_work_type"
id="menu_work_type_tree2" icon="STOCK_INDENT"/>
<record model="ir.ui.view" id="work_type_view_graph">
<field name="model">timesheet.work_type</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<![CDATA[
<graph string="Hours per Work Type" type="pie">
<x>
<field name="name"/>
</x>
<y>
<field name="hours"/>
</y>
</graph>
]]>
</field>
</record>
<record model="ir.action.act_window" id="act_work_type_form2">
<field name="name">Hours per Work Type</field>
<field name="res_model">timesheet.work_type</field>
<field name="view_type">form</field>
<field name="domain">[('parent', '=', False)]</field>
</record>
<record model="ir.action.act_window.view"
id="act_work_type_form2_view1">
<field name="sequence" eval="10"/>
<field name="view" ref="work_type_view_graph"/>
<field name="act_window" ref="act_work_type_form2"/>
</record>
<record model="ir.action.wizard" id="act_open_work_type2">
<field name="name">Hours per Work Type</field>
<field name="wiz_name">timesheet.work_type.open2</field>
</record>
<menuitem parent="menu_work_type_tree2" action="act_open_work_type2"
id="menu_work_type_form2"/>
<record model="ir.model.access" id="access_work_type">
<field name="model" search="[('model', '=', 'timesheet.work_type')]"/>