diff --git a/addons/project/__openerp__.py b/addons/project/__openerp__.py
index 726e87b5979..b5ff85fcc3c 100644
--- a/addons/project/__openerp__.py
+++ b/addons/project/__openerp__.py
@@ -56,7 +56,8 @@ work done on tasks, eso. It is able to render planning, order tasks, eso.
'board_project_demo.xml',
],
'test':[
- 'test/test_project.yml'
+ 'test/test_project.yml',
+ 'test/test_project_delegation.yml',
],
'installable': True,
'active': False,
diff --git a/addons/project/project.py b/addons/project/project.py
index 5ed5f9641ab..ba85b994041 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -170,6 +170,9 @@ class project(osv.osv):
return res
def set_done(self, cr, uid, ids, context=None):
+ task_obj = self.pool.get('project.task')
+ for task in self.read(cr, uid, ids, ['tasks'])[0]['tasks']:
+ task_obj.write(cr, uid, task, {'state': 'done', 'date_end':time.strftime('%Y-%m-%d %H:%M:%S'), 'remaining_hours': 0.0})
self.write(cr, uid, ids, {'state':'close'}, context=context)
for (id, name) in self.name_get(cr, uid, ids):
message = _('Project ') + " '" + name + "' "+ _("is Closed.")
@@ -198,16 +201,37 @@ class project(osv.osv):
def copy(self, cr, uid, id, default={}, context=None):
if context is None:
context = {}
+
+ task_obj = self.pool.get('project.task')
proj = self.browse(cr, uid, id, context=context)
default = default or {}
context['active_test'] = False
default['state'] = 'open'
if not default.get('name', False):
- default['name'] = proj.name+_(' (copy)')
+ default['name'] = proj.name+_(' (copy)')
res = super(project, self).copy(cr, uid, id, default, context)
+
+ task_ids = task_obj.search(cr, uid, [('project_id','=', res), ('active','=',False)])
+ tasks = task_obj.browse(cr, uid, task_ids)
+ for task in tasks:
+ date_deadline = None
+ date_end = None
+ if task.date_start:
+ ds = date(*time.strptime(task.date_start,'%Y-%m-%d %H:%M:%S')[:3])
+ if task.date_deadline:
+ dd = date(*time.strptime(task.date_deadline,'%Y-%m-%d')[:3])
+ diff = dd-ds
+ date_deadline = (datetime.now()+diff).strftime('%Y-%m-%d %H:%M:%S')
+ if task.date_end:
+ de = date(*time.strptime(task.date_end,'%Y-%m-%d %H:%M:%S')[:3])
+ diff = de-ds
+ date_end = (datetime.now()+diff).strftime('%Y-%m-%d %H:%M:%S')
+ task_obj.write(cr, uid, task.id, {'active':True,
+ 'date_start':time.strftime('%Y-%m-%d %H:%M:%S'),
+ 'date_deadline':date_deadline,
+ 'date_end':date_end})
+
ids = self.search(cr, uid, [('parent_id','child_of', [res])])
- if ids:
- cr.execute('update project_task set active=True where project_id IN %s',(tuple(ids),))
return res
def duplicate_template(self, cr, uid, ids, context=None):
@@ -322,6 +346,13 @@ class task(osv.osv):
if task['date_start'] > task['date_end']:
return False
return True
+
+ def _check_deadline_date(self, cr, uid, ids, context=None):
+ task = self.read(cr, uid, ids[0], ['date_start', 'date_deadline'])
+ if task['date_start'] and task['date_deadline']:
+ if task['date_deadline'] < task['date_start']:
+ return False
+ return True
_columns = {
'active': fields.boolean('Active', help="If the active field is set to true, it will allow you to hide the task without removing it."),
@@ -597,6 +628,15 @@ class config_compute_remaining(osv.osv_memory):
_columns = {
'remaining_hours' : fields.float('Remaining Hours', digits=(16,2), help="Put here the remaining hours required to close the task."),
}
+
+ def _get_analytic_account(self, cr, uid, context={}):
+ if context.get('account_id', False):
+ return context.get('account_id')
+ return False
+
+ _defaults = {
+ 'account_id' : _get_analytic_account,
+ }
_defaults = {
'remaining_hours': _get_remaining
diff --git a/addons/project/project_demo.xml b/addons/project/project_demo.xml
index 43f01c2120d..13127969409 100644
--- a/addons/project/project_demo.xml
+++ b/addons/project/project_demo.xml
@@ -31,7 +31,7 @@
1
Open ERP Integration
-
+
@@ -39,21 +39,20 @@
10
Study + Prototype
-
+
20
Specific Developments
-
+
30
Install, data import, configuration
-
@@ -100,7 +99,6 @@
Internal testing + Software Install
- 2008-06-06
17
@@ -214,7 +212,6 @@
open
In house training
- 2007-06-06
50
@@ -257,7 +254,6 @@
Latest in house tests
- 2010-05-27
Follow the procedure of Configuration wizard.
diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml
index 45d0e1e18bf..8fb488478ec 100644
--- a/addons/project/project_view.xml
+++ b/addons/project/project_view.xml
@@ -45,7 +45,7 @@
-
+
@@ -117,7 +117,6 @@
-
@@ -322,11 +321,10 @@
-
+
-
@@ -342,18 +340,13 @@
-
+
-
-
-
-
-
+
+
+
@@ -418,18 +414,27 @@
-
+
+
+
-
+
@@ -454,7 +459,7 @@
tree,form,calendar,gantt,graph
- {"search_default_project_id":project_id,'search_default_user_id':uid, 'search_default_current': 1}
+ {"search_default_project_id":project_id, "search_default_user_id":uid, 'search_default_current': 1}
@@ -497,7 +502,8 @@
@@ -515,7 +521,7 @@
- Types
+ Task Stages
project.task.type
form
@@ -528,6 +534,7 @@
-
+
\ No newline at end of file
diff --git a/addons/project/wizard/project_close_task.py b/addons/project/wizard/project_close_task.py
index 715e70e59d0..5532d699a3b 100644
--- a/addons/project/wizard/project_close_task.py
+++ b/addons/project/wizard/project_close_task.py
@@ -98,6 +98,8 @@ class project_close_task(osv.osv_memory):
body = u'%s\n%s\n%s\n\n-- \n%s' % (header, description, footer, signature)
email(from_adr, [to_adr], subject, body.encode('utf-8'), email_bcc=[from_adr])
task_obj.write(cr, uid, [task.id], {'state': 'done', 'date_end':time.strftime('%Y-%m-%d %H:%M:%S'), 'remaining_hours': 0.0})
+ message = _('Task ') + " '" + task.name + "' "+ _("is Done.")
+ self.log(cr, uid, task.id, message)
else:
raise osv.except_osv(_('Error'), _("Please specify the email address of partner."))
return {}
diff --git a/addons/project_gtd/__openerp__.py b/addons/project_gtd/__openerp__.py
index ba46d295234..971b2e8e324 100644
--- a/addons/project_gtd/__openerp__.py
+++ b/addons/project_gtd/__openerp__.py
@@ -43,10 +43,8 @@ performing those tasks.
'update_xml': [
'project_gtd_data.xml',
'project_gtd_view.xml',
- 'project_gtd_wizard.xml',
'security/ir.model.access.csv',
'wizard/project_gtd_empty_view.xml',
- 'wizard/project_gtd_daily_view.xml',
'wizard/project_gtd_fill_view.xml',
],
'demo_xml': ['project_gtd_demo.xml'],
diff --git a/addons/project_gtd/project_gtd_view.xml b/addons/project_gtd/project_gtd_view.xml
index 919412cd27d..66a7cca01e3 100644
--- a/addons/project_gtd/project_gtd_view.xml
+++ b/addons/project_gtd/project_gtd_view.xml
@@ -80,8 +80,8 @@
-
+
@@ -96,7 +96,7 @@
-
+
diff --git a/addons/project_gtd/project_gtd_wizard.xml b/addons/project_gtd/project_gtd_wizard.xml
deleted file mode 100644
index e01db8218c6..00000000000
--- a/addons/project_gtd/project_gtd_wizard.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/addons/project_gtd/wizard/__init__.py b/addons/project_gtd/wizard/__init__.py
index e92fa265ed3..aa2bbc22c45 100644
--- a/addons/project_gtd/wizard/__init__.py
+++ b/addons/project_gtd/wizard/__init__.py
@@ -19,8 +19,8 @@
#
##############################################################################
-import project_gtd_daily
import project_gtd_empty
import project_gtd_fill
+
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/project_gtd/wizard/project_gtd_daily.py b/addons/project_gtd/wizard/project_gtd_daily.py
deleted file mode 100644
index bacc1af85d9..00000000000
--- a/addons/project_gtd/wizard/project_gtd_daily.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-from osv import osv, fields
-from tools.translate import _
-
-class project_timebox_open(osv.osv_memory):
-
- _name = 'project.timebox.open'
- _description = 'Project Timebox Open'
-
- def open_tb(self, cr, uid, data, context=None):
- ids = self.pool.get('project.gtd.timebox').search(cr, uid, [])
- if not len(ids):
- raise osv.except_osv(_('Error !'), _('No timebox of the type defined !'))
- if len(ids) >= 1:
- domain = "[('id','in',["+','.join(map(str, ids))+"])]"
- value = {
- 'domain': domain,
- 'name': 'My Daily Timebox',
- 'view_type': 'form',
- 'view_mode': 'form,tree',
- 'res_model': 'project.gtd.timebox',
- 'view_id': False,
- 'type': 'ir.actions.act_window'
- }
- if len(ids) == 1:
- value['res_id'] = ids[0]
- value['context'] = {'record_id':ids[0]}
- return value
-
-project_timebox_open()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
diff --git a/addons/project_gtd/wizard/project_gtd_daily_view.xml b/addons/project_gtd/wizard/project_gtd_daily_view.xml
deleted file mode 100644
index c49585f9112..00000000000
--- a/addons/project_gtd/wizard/project_gtd_daily_view.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
- My Daily Timebox
- project.timebox.open
- form
-
-
-
-
-
-
- My Daily Timebox
- ir.actions.act_window
- project.timebox.open
- form
- form
-
- {'record_id' : active_id}
- new
-
-
-
-
-
- My Daily Timebox
- client_action_multi
-
- action
- project.gtd.timebox
-
-
-
-
-
\ No newline at end of file
diff --git a/addons/project_gtd/wizard/project_gtd_fill_view.xml b/addons/project_gtd/wizard/project_gtd_fill_view.xml
index 1c3d221c6ac..6206a0a5d89 100644
--- a/addons/project_gtd/wizard/project_gtd_fill_view.xml
+++ b/addons/project_gtd/wizard/project_gtd_fill_view.xml
@@ -8,8 +8,8 @@
form