diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index 501c4787dee..656c5c724a8 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -302,8 +302,9 @@ tree - + + diff --git a/addons/project/report/project_report.py b/addons/project/report/project_report.py index e411248db4b..f4d8b32e569 100644 --- a/addons/project/report/project_report.py +++ b/addons/project/report/project_report.py @@ -72,7 +72,7 @@ class report_project_task_user(osv.osv): date_trunc('day',t.date_end) as date_end, to_date(to_char(t.date_deadline, 'dd-MM-YYYY'),'dd-MM-YYYY') as date_deadline, -- sum(cast(to_char(date_trunc('day',t.date_end) - date_trunc('day',t.date_start),'DD') as int)) as no_of_days, - (extract('epoch' from (t.date_end-t.date_start)))/(3600*24) as no_of_days, + abs((extract('epoch' from (t.date_end-t.date_start)))/(3600*24)) as no_of_days, t.user_id, progress as progress, t.project_id, diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py index 17df3444b27..e3ed767dff8 100644 --- a/addons/project_issue/project_issue.py +++ b/addons/project_issue/project_issue.py @@ -141,7 +141,7 @@ class project_issue(crm.crm_case, osv.osv): else: res[issue.id][field] = abs(float(duration)) return res - + _columns = { 'id': fields.integer('ID'), 'name': fields.char('Name', size=128, required=True), @@ -193,6 +193,7 @@ class project_issue(crm.crm_case, osv.osv): 'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('model','=',_name)]), 'date_action_last': fields.datetime('Last Action', readonly=1), 'date_action_next': fields.datetime('Next Action', readonly=1), + 'progress': fields.related('task_id', 'progress', string='Progress (%)',group_operator="avg"), } def _get_project(self, cr, uid, context): @@ -245,6 +246,7 @@ class project_issue(crm.crm_case, osv.osv): vals = { 'task_id': new_task_id, + 'state':'open' } case_obj.write(cr, uid, [bug.id], vals) @@ -286,6 +288,15 @@ class project_issue(crm.crm_case, osv.osv): if not stage.on_change: return {'value':{}} return {'value':{}} + + def onchange_task_id(self, cr, uid, ids, task_id, context=None): + if context is None: + context = {} + result = {} + if not task_id: + return {'value':{}} + task = self.pool.get('project.task').browse(cr, uid, task_id, context) + return {'value':{'assigned_to': task.user_id.id,}} def case_escalate(self, cr, uid, ids, *args): """Escalates case to top level @@ -405,6 +416,17 @@ class project_issue(crm.crm_case, osv.osv): @param **args: Return Dictionary of Keyword Value """ return True + + def copy(self, cr, uid, id, default=None, context=None): + if not context: + context={} + issue = self.read(cr, uid, id, ['name'], context=context) + if not default: + default = {} + default = default.copy() + default['name'] = issue['name'] + _(' (copy)') + return super(project_issue, self).copy(cr, uid, id, default=default, + context=context) project_issue() diff --git a/addons/project_issue/project_issue_view.xml b/addons/project_issue/project_issue_view.xml index 56677c61a61..9062b47a25e 100644 --- a/addons/project_issue/project_issue_view.xml +++ b/addons/project_issue/project_issue_view.xml @@ -73,6 +73,7 @@