summaryrefslogtreecommitdiff
path: root/addons/project
diff options
context:
space:
mode:
authorhusen daudi <hda@hda>2009-04-13 18:13:13 +0530
committerhusen daudi <hda@hda>2009-04-13 18:13:13 +0530
commitea2efc15067b3b5f6448a5bce7baae8880c7bfbb (patch)
tree921b362d733c0e601792aa59955a81cd70722f3a /addons/project
parent7767525f1edc8c5e7dd32678ffce9ed2d19310a7 (diff)
parent4b180641bdc3356ec778a98bc10d936042a8fc12 (diff)
Ported all bugs from trunk to stable
bzr revid: hda@hda-20090413124313-x9gdobzpxf1lkfxl
Diffstat (limited to 'addons/project')
-rw-r--r--addons/project/project.py15
-rw-r--r--addons/project/project_view.xml30
-rw-r--r--addons/project/wizard/task_delegate.py18
3 files changed, 49 insertions, 14 deletions
diff --git a/addons/project/project.py b/addons/project/project.py
index 4e9307328bc..e180bf92a1b 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -24,6 +24,7 @@ from lxml import etree
from mx import DateTime
from mx.DateTime import now
import time
+from tools.translate import _
from osv import fields, osv
from tools.translate import _
@@ -288,6 +289,7 @@ class task(osv.osv):
'delay_hours': fields.function(_hours_get, method=True, string='Delay Hours', multi='hours', store=True, help="Computed as: Total Time - Estimated Time. It gives the difference of the time estimated by the project manager and the real time to close the task."),
'user_id': fields.many2one('res.users', 'Assigned to'),
+ 'delegated_user_id': fields.related('child_ids','user_id',type='many2one', relation='res.users', string='Delegated To'),
'partner_id': fields.many2one('res.partner', 'Partner'),
'work_ids': fields.one2many('project.task.work', 'task_id', 'Work done'),
}
@@ -336,7 +338,7 @@ class task(osv.osv):
if project:
if project.warn_manager and project.manager and (project.manager.id != uid):
request.create(cr, uid, {
- 'name': "Task '%s' closed" % task.name,
+ 'name': _("Task '%s' closed") % task.name,
'state': 'waiting',
'act_from': uid,
'act_to': project.manager.id,
@@ -346,7 +348,12 @@ class task(osv.osv):
})
self.write(cr, uid, [task.id], {'state': 'done', 'date_close':time.strftime('%Y-%m-%d %H:%M:%S'), 'remaining_hours': 0.0})
if task.parent_id and task.parent_id.state in ('pending','draft'):
- self.do_reopen(cr, uid, [task.parent_id.id])
+ reopen = True
+ for child in task.parent_id.child_ids:
+ if child.id != task.id and child.state not in ('done','cancelled'):
+ reopen = False
+ if reopen:
+ self.do_reopen(cr, uid, [task.parent_id.id])
return True
def do_reopen(self, cr, uid, ids, *args):
@@ -356,7 +363,7 @@ class task(osv.osv):
project = task.project_id
if project and project.warn_manager and project.manager.id and (project.manager.id != uid):
request.create(cr, uid, {
- 'name': "Task '%s' set in progress" % task.name,
+ 'name': _("Task '%s' set in progress") % task.name,
'state': 'waiting',
'act_from': uid,
'act_to': project.manager.id,
@@ -375,7 +382,7 @@ class task(osv.osv):
project = task.project_id
if project.warn_manager and project.manager and (project.manager.id != uid):
request.create(cr, uid, {
- 'name': "Task '%s' cancelled" % task.name,
+ 'name': _("Task '%s' cancelled") % task.name,
'state': 'waiting',
'act_from': uid,
'act_to': project.manager.id,
diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml
index 0c032a62aea..1e10a534ece 100644
--- a/addons/project/project_view.xml
+++ b/addons/project/project_view.xml
@@ -311,10 +311,11 @@
<tree string="Delegated tasks">
<field name="name"/>
<field name="user_id"/>
- <field name="date_deadline"/>
- <field name="planned_hours" widget="float_time"/>
- <field name="effective_hours" widget="float_time"/>
<field name="state"/>
+ <field name="effective_hours" widget="float_time"/>
+ <field name="progress" widget="progressbar"/>
+ <field name="remaining_hours" widget="float_time"/>
+ <field name="date_deadline"/>
</tree>
</field>
<field colspan="4" name="parent_id"/>
@@ -359,6 +360,28 @@
</field>
</record>
+ <record id="my_pending_task" model="ir.ui.view">
+ <field name="name">my.pending.task.tree</field>
+ <field name="model">project.task</field>
+ <field name="type">tree</field>
+ <field eval="2" name="priority"/>
+ <field name="arch" type="xml">
+ <tree colors="grey:state in ('cancel','done');blue:remaining_hours&lt;0;red:bool(date_deadline) &amp; (date_deadline&lt;current_date) &amp; (state in ('draft','open'))" string="Tasks">
+ <field name="sequence"/>
+ <field name="name"/>
+ <field name="project_id"/>
+ <field name="delegated_user_id"/>
+ <field name="date_deadline"/>
+ <field name="planned_hours" sum="Planned" widget="float_time"/>
+ <field name="delay_hours" sum="Delay" widget="float_time"/>
+ <field name="progress" widget="progressbar"/>
+ <field name="priority"/>
+ <field name="state"/>
+ <field name="remaining_hours" invisible="1"/>
+ </tree>
+ </field>
+ </record>
+
<record id="view_task_calendar" model="ir.ui.view">
<field name="name">project.task.calendar</field>
<field name="model">project.task</field>
@@ -423,6 +446,7 @@
<field name="view_type">form</field>
<field name="view_mode">tree,form,calendar,graph</field>
<field name="domain">[('user_id', '=', uid),('state','=','pending')]</field>
+ <field name="view_id" ref="my_pending_task"/>
</record>
<menuitem action="action_view_task5_pending" id="menu_tasks_yours_pending" parent="menu_action_view_task4"/>
diff --git a/addons/project/wizard/task_delegate.py b/addons/project/wizard/task_delegate.py
index aafed9c3a95..82f9d7e580e 100644
--- a/addons/project/wizard/task_delegate.py
+++ b/addons/project/wizard/task_delegate.py
@@ -23,6 +23,7 @@
import wizard
from tools import email_send as email
import pooler
+from tools.translate import _
ask_form = """<?xml version="1.0" ?>
<form string="Delegate this task to a user">
@@ -30,7 +31,7 @@ ask_form = """<?xml version="1.0" ?>
<field name="user_id" colspan="4"/>
<field name="planned_hours" colspan="4" widget="float_time"/>
<field name="name" colspan="4"/>
- <field name="include_info"/>
+ <field name="new_task_description"/>
<separator string="Validation Task" colspan="4"/>
<field name="planned_hours_me" colspan="4" widget="float_time"/>
<field name="prefix" colspan="4"/>
@@ -41,7 +42,7 @@ ask_fields = {
'name': {'string': 'Delegated Title', 'type': 'char', 'required': 'True', 'size':64, 'help':"New title of the task delegated to the user."},
'prefix': {'string': 'Your Task Title', 'type': 'char', 'required': 'True', 'size':64, 'help':"New title of your own task to validate the work done."},
'user_id': {'string':'Assign To', 'type':'many2one', 'relation': 'res.users', 'required':'True', 'help':"User you want to delegate this task to."},
- 'include_info': {'string':'Copy Description', 'type':'boolean', 'help':"Reinclude the description of the task in the task of the user."},
+ 'new_task_description': {'string':'New Task Description', 'type':'text', 'help':"Reinclude the description of the task in the task of the user."},
'planned_hours': {'string':'Planned Hours', 'type':'float', 'widget':'float_time', 'help':"Estimated time to close this task by the delegated user."},
'planned_hours_me': {'string':'Hours to Validate', 'type':'float', 'widget':'float_time', 'help':"Estimated time for you to validate the work done by the user to whom you delegate this task."},
'state': {'string':'Validation State', 'type':'selection', 'selection': [('pending','Pending'),('done','Done')], 'help':"New state of your own task. Pending will be reopened automatically when the delegated task is closed.", 'required':True},
@@ -51,7 +52,6 @@ class wizard_delegate(wizard.interface):
def _do_assign(self, cr, uid, data, context):
task_obj = pooler.get_pool(cr.dbname).get('project.task')
task = task_obj.browse(cr, uid, data['id'], context)
- newname = task.name
newname = data['form']['prefix'] or ''
task_obj.copy(cr, uid, data['id'], {
'name': data['form']['name'],
@@ -60,7 +60,7 @@ class wizard_delegate(wizard.interface):
'remaining_hours': data['form']['planned_hours'],
'parent_id': data['id'],
'state': 'open',
- 'description': data['form']['include_info'] and task.description or '',
+ 'description': data['form']['new_task_description'] or '',
'child_ids': [],
'work_ids': []
})
@@ -77,13 +77,17 @@ class wizard_delegate(wizard.interface):
def _ask_auto_complete(self, cr, uid, data, context):
task_obj = pooler.get_pool(cr.dbname).get('project.task')
task = task_obj.browse(cr, uid, data['id'], context)
+ if task.name.startswith(_('CHECK: ')):
+ newname = task.name.strip(_('CHECK: '))
+ else:
+ newname = task.name or ''
return {
- 'name':task.name,
+ 'name': newname,
'user_id': False,
'planned_hours': task.remaining_hours,
'planned_hours_me': 1.0,
- 'prefix': 'CHECK: '+ (task.name or ''),
- 'include_info': 1,
+ 'prefix': _('CHECK: ')+ newname,
+ 'new_task_description': task.description,
'state': 'pending'
}