summaryrefslogtreecommitdiff
path: root/addons/project_long_term
diff options
context:
space:
mode:
authorHarry (OpenERP) <hmo@tinyerp.com>2010-09-30 13:29:42 +0530
committerHarry (OpenERP) <hmo@tinyerp.com>2010-09-30 13:29:42 +0530
commit48d3a97e1c103fbf412135ecadcbafaf141ac9b9 (patch)
treeb2c4110e364b5f21a3acab7a3f7300f483d1738f /addons/project_long_term
parent0023c6dff7470e0b7654ec27ef57261ec0972cd0 (diff)
parentfc8a440eeebc950a7575a0fb91ccd2f7eabdd671 (diff)
[MERGE]
bzr revid: hmo@tinyerp.com-20100930075942-a8ddhr94v3xlv2vs
Diffstat (limited to 'addons/project_long_term')
-rw-r--r--addons/project_long_term/project_long_term.py25
-rw-r--r--addons/project_long_term/project_long_term_view.xml29
2 files changed, 51 insertions, 3 deletions
diff --git a/addons/project_long_term/project_long_term.py b/addons/project_long_term/project_long_term.py
index 9f8f5bf8d56..d1df71630f8 100644
--- a/addons/project_long_term/project_long_term.py
+++ b/addons/project_long_term/project_long_term.py
@@ -20,6 +20,7 @@
##############################################################################
from datetime import datetime
+from dateutil.relativedelta import relativedelta
from tools.translate import _
from osv import fields, osv
from resource.faces import task as Task
@@ -90,6 +91,19 @@ class project_phase(osv.osv):
model_data_obj = self.pool.get('ir.model.data')
model_data_id = model_data_obj._get_id(cr, uid, 'product', 'uom_hour')
return model_data_obj.read(cr, uid, [model_data_id], ['res_id'])[0]['res_id']
+
+ def _compute(self, cr, uid, ids, context=None):
+ res = {}
+ if not ids:
+ return res
+ for phase in self.browse(cr, uid, ids, context=context):
+ tot = 0.0
+ for task in phase.task_ids:
+ tot += task.planned_hours
+ res[phase.id] = {
+ 'total_hours' : tot
+ }
+ return res
_columns = {
'name': fields.char("Name", size=64, required=True),
@@ -108,7 +122,8 @@ class project_phase(osv.osv):
'responsible_id': fields.many2one('res.users', 'Responsible', states={'done':[('readonly',True)], 'cancelled':[('readonly',True)]}),
'state': fields.selection([('draft', 'Draft'), ('open', 'In Progress'), ('pending', 'Pending'), ('cancelled', 'Cancelled'), ('done', 'Done')], 'State', readonly=True, required=True,
help='If the phase is created the state \'Draft\'.\n If the phase is started, the state becomes \'In Progress\'.\n If review is needed the phase is in \'Pending\' state.\
- \n If the phase is over, the states is set to \'Done\'.')
+ \n If the phase is over, the states is set to \'Done\'.'),
+ 'total_hours': fields.function(_compute, method=True, string='Total Hours'),
}
_defaults = {
'responsible_id': lambda obj,cr,uid,context: uid,
@@ -130,6 +145,14 @@ class project_phase(osv.osv):
project_id = project_obj.browse(cr, uid, project, context=context)
result['date_start'] = project_id.date_start
return {'value': result}
+
+ def onchange_days(self, cr, uid, ids, project, context=None):
+ result = {}
+ for id in ids:
+ project_id = self.browse(cr, uid, id, context=context)
+ newdate = datetime.strptime(project_id.date_start, '%Y-%m-%d') + relativedelta(days=project_id.duration or 0.0)
+ result['date_end'] = newdate.strftime('%Y-%m-%d')
+ return {'value': result}
def _check_date_start(self, cr, uid, phase, date_end, context=None):
if context is None:
diff --git a/addons/project_long_term/project_long_term_view.xml b/addons/project_long_term/project_long_term_view.xml
index a3ff3b39669..5a70e5acb5e 100644
--- a/addons/project_long_term/project_long_term_view.xml
+++ b/addons/project_long_term/project_long_term_view.xml
@@ -97,7 +97,7 @@
<group colspan="2" col="4">
<field name="project_id" on_change="onchange_project(project_id)" colspan="4"/>
<newline/>
- <field name="duration" colspan="1"/>
+ <field name="duration" colspan="1" on_change="onchange_days(project_id)" />
<field name="product_uom" nolabel="1" domain="[('category_id.name', '=', 'Working Time')]"/>
</group>
<group colspan="2" col="2">
@@ -134,6 +134,7 @@
<field name="user_id"/>
<field name="planned_hours" widget="float_time"/>
<field name="project_id" invisible="1"/>
+ <field name="total_hours" sum='Total Hours'/>
</tree>
<form string="Project's Tasks">
<notebook colspan="4">
@@ -151,6 +152,7 @@
<group colspan="2" col="2">
<separator string="Planning" colspan="2"/>
<field name="planned_hours" widget="float_time"/>
+ <field name="total_hours" widget="float_time"/>
<field name="remaining_hours" widget="float_time" sum="Remaining Hours"/>
<field name="effective_hours" invisible="1"/>
</group>
@@ -299,7 +301,30 @@
# ------------------------------------------------------
# Project Task
# ------------------------------------------------------
-
+
+ <record id="view_phase_task_form2" model="ir.ui.view">
+ <field name="name">phase.task.form2</field>
+ <field name="model">project.task</field>
+ <field name="type">form</field>
+ <field name="inherit_id" ref="project.view_task_form2"/>
+ <field name="arch" type="xml">
+ <field name="sequence" position="after">
+ <field name="phase_id"/>
+ </field>
+ </field>
+ </record>
+ <record id="view_phase_task_search_form" model="ir.ui.view">
+ <field name="name">phase.task.search.form</field>
+ <field name="model">project.task</field>
+ <field name="type">search</field>
+ <field name="inherit_id" ref="project.view_task_search_form"/>
+ <field name="arch" type="xml">
+ <field name="project_id" position="after">
+ <field name="phase_id" select="1"/>
+ </field>
+ </field>
+ </record>
+
<act_window
id="project_phase_task_list"
name="Related Tasks"