diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml
index dd0c05e9d7c..792871a6606 100644
--- a/addons/project/project_view.xml
+++ b/addons/project/project_view.xml
@@ -400,7 +400,6 @@
-
@@ -424,7 +423,6 @@
-
diff --git a/addons/project_gtd/__terp__.py b/addons/project_gtd/__terp__.py
index 7e7fc4ac3ca..99406e67155 100644
--- a/addons/project_gtd/__terp__.py
+++ b/addons/project_gtd/__terp__.py
@@ -41,9 +41,10 @@ performing those tasks.
'depends': ['project'],
'init_xml': [],
'update_xml': [
- 'security/ir.model.access.csv',
+ 'project_gtd_data.xml',
'project_gtd_view.xml',
- 'project_gtd_wizard.xml'
+ 'project_gtd_wizard.xml',
+ 'security/ir.model.access.csv',
],
'demo_xml': ['project_gtd_demo.xml'],
'installable': True,
diff --git a/addons/project_gtd/project_gtd.py b/addons/project_gtd/project_gtd.py
index 139a3613372..680a2db6731 100644
--- a/addons/project_gtd/project_gtd.py
+++ b/addons/project_gtd/project_gtd.py
@@ -25,27 +25,11 @@ from lxml import etree
from mx import DateTime
from mx.DateTime import now
import time
-
+import tools
import netsvc
from osv import fields, osv
import ir
-
-class one2many_mod(fields.one2many):
- def get(self, cr, obj, ids, name, user=None, offset=0, context=None, values=None):
- if not context:
- context = {}
- res = {}
- num = name[4]
- for obj in obj.browse(cr, user, ids, context=context):
- res[obj.id] = []
- v = getattr(obj,'context'+num+'_id').id
- if v:
- ids2 = obj.pool.get(self._obj).search(cr, user, [(self._fields_id,'=',obj.id),('context_id','=',v)], limit=self._limit)
- for r in obj.pool.get(self._obj)._read_flat(cr, user, ids2, [self._fields_id], context=context, load='_classic_write'):
- res[r[self._fields_id]].append( r['id'] )
- return res
-
class project_gtd_context(osv.osv):
_name = "project.gtd.context"
_description = "Contexts"
@@ -58,37 +42,19 @@ class project_gtd_context(osv.osv):
'sequence': lambda *args: 1
}
_order = "sequence, name"
+
project_gtd_context()
class project_gtd_timebox(osv.osv):
_name = "project.gtd.timebox"
+ _order = "sequence"
_columns = {
'name': fields.char('Timebox', size=64, required=True, select=1),
- 'user_id': fields.many2one('res.users', 'User', required=True, select=1),
- 'child_ids': fields.one2many('project.gtd.timebox', 'parent_id', 'Child Timeboxes'),
- 'parent_id': fields.many2one('project.gtd.timebox', 'Parent Timebox'),
- 'task_ids': fields.one2many('project.task', 'timebox_id', 'Tasks'),
- 'type': fields.selection([('daily','Daily'),('weekly','Weekly'),('monthly','Monthly'),('other','Other')], 'Type', required=True),
- 'task1_ids': one2many_mod('project.task', 'timebox_id', 'Tasks'),
- 'task2_ids': one2many_mod('project.task', 'timebox_id', 'Tasks'),
- 'task3_ids': one2many_mod('project.task', 'timebox_id', 'Tasks'),
- 'task4_ids': one2many_mod('project.task', 'timebox_id', 'Tasks'),
- 'task5_ids': one2many_mod('project.task', 'timebox_id', 'Tasks'),
- 'task6_ids': one2many_mod('project.task', 'timebox_id', 'Tasks'),
- 'context1_id': fields.many2one('project.gtd.context', 'Context 1', required=True),
- 'context2_id': fields.many2one('project.gtd.context', 'Context 2'),
- 'context3_id': fields.many2one('project.gtd.context', 'Context 3'),
- 'context4_id': fields.many2one('project.gtd.context', 'Context 4'),
- 'context5_id': fields.many2one('project.gtd.context', 'Context 5'),
- 'context6_id': fields.many2one('project.gtd.context', 'Context 6'),
- 'col_project': fields.boolean('Project'),
- 'col_date_start': fields.boolean('Date Start'),
- 'col_priority': fields.boolean('Priority'),
- 'col_deadline': fields.boolean('Deadline'),
- 'col_planned_hours': fields.boolean('Planned Hours'),
- 'col_effective_hours': fields.boolean('Effective Hours'),
+ 'sequence': fields.integer('Sequence'),
+ 'icon': fields.selection(tools.icons, 'Icon', size=64),
}
+
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
res = super(project_gtd_timebox,self).fields_view_get(cr, uid, view_id, view_type, context, toolbar=toolbar, submenu=submenu)
if (res['type']=='form') and ('record_id' in context):
@@ -141,15 +107,7 @@ class project_gtd_timebox(osv.osv):
res['arch'] = xarch
res['fields'] = xfields
return res
- _defaults = {
- 'type': lambda *args: 'daily',
- 'col_project': lambda *args: True,
- 'col_date_start': lambda *args: True,
- 'col_priority': lambda *args: True,
- 'col_deadline': lambda *args: False,
- 'col_planned_hours': lambda *args: True,
- 'col_effective_hours': lambda *args: False
- }
+
project_gtd_timebox()
class project_task(osv.osv):
@@ -158,12 +116,14 @@ class project_task(osv.osv):
'timebox_id': fields.many2one('project.gtd.timebox', "Timebox"),
'context_id': fields.many2one('project.gtd.context', "Context"),
}
+
def copy_data(self, cr, uid, id, default=None, context=None):
if not default:
default = {}
default['timebox_id']=False
default['context_id']=False
return super(project_task,self).copy_data(cr, uid, id, default, context)
+
def _get_context(self,cr, uid, ctx):
ids = self.pool.get('project.gtd.context').search(cr, uid, [], context=ctx)
return ids and ids[0] or False
@@ -172,37 +132,55 @@ class project_task(osv.osv):
}
def next_timebox(self, cr, uid, ids, *args):
- for timebox in self.browse(cr, uid , ids):
- if timebox.timebox_id.type=='daily':
- timebox_ids = self.pool.get('project.gtd.timebox').search(cr, uid, [('type','=','weekly')])
- if timebox_ids:
- self.write(cr, uid, ids, {'timebox_id' : timebox_ids[0]})
- if timebox.timebox_id.type=='weekly':
- timebox_ids = self.pool.get('project.gtd.timebox').search(cr, uid, [('type','=','monthly')])
- if timebox_ids:
- self.write(cr, uid, ids, {'timebox_id' : timebox_ids[0]})
- if timebox.timebox_id.type=='monthly':
- timebox_ids = self.pool.get('project.gtd.timebox').search(cr, uid, [('type','=','other')])
- if timebox_ids:
- self.write(cr, uid, ids, {'timebox_id':timebox_ids[0]})
+ timebox_obj = self.pool.get('project.gtd.timebox')
+ timebox_ids = timebox_obj.search(cr,uid,[])
+ for task in self.browse(cr,uid,ids):
+ timebox = task.timebox_id.id
+ if timebox and timebox_ids.index(timebox) != len(timebox_ids)-1 :
+ index = timebox_ids.index(timebox)
+ else:
+ index = -1
+ self.write(cr, uid, task.id, {'timebox_id': timebox_ids[index+1]})
return True
def prev_timebox(self, cr, uid, ids, *args):
- for timebox in self.browse(cr, uid , ids):
- if timebox.timebox_id.type=='other':
- timebox_ids = self.pool.get('project.gtd.timebox').search(cr, uid, [('type','=','monthly')])
- if timebox_ids:
- self.write(cr, uid, ids, {'timebox_id' : timebox_ids[0]})
- if timebox.timebox_id.type=='monthly':
- timebox_ids = self.pool.get('project.gtd.timebox').search(cr, uid, [('type','=','weekly')])
- if timebox_ids:
- self.write(cr, uid, ids, {'timebox_id' : timebox_ids[0]})
- if timebox.timebox_id.type=='weekly':
- timebox_ids = self.pool.get('project.gtd.timebox').search(cr, uid, [('type','=','daily')])
- if timebox_ids:
- self.write(cr, uid, ids, {'timebox_id':timebox_ids[0]})
+ timebox_obj = self.pool.get('project.gtd.timebox')
+ timebox_ids = timebox_obj.search(cr,uid,[])
+ for task in self.browse(cr,uid,ids):
+ timebox = task.timebox_id.id
+ if timebox and timebox_ids.index(timebox) != 0 :
+ index = timebox_ids.index(timebox)
+ else:
+ index = len(timebox_ids)
+ self.write(cr, uid, task.id, {'timebox_id': timebox_ids[index - 1]})
return True
+ def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
+ res = super(project_task,self).fields_view_get(cr, uid, view_id, view_type, context, toolbar=toolbar, submenu=submenu)
+ search_extended = False
+ if res['type'] == 'search':
+ search_extended =''' '''
+ timebox_obj = self.pool.get('project.gtd.timebox')
+ for time in timebox_obj.browse(cr, uid, timebox_obj.search(cr,uid,[])):
+ if time.icon:
+ icon = time.icon
+ else :
+ icon=""
+ search_extended += ''' '''
+ search_extended += '''
+
+
+
+
+ '''
+ if search_extended:
+ res['arch'] = res['arch'].replace('',search_extended)
+ attrs_sel = self.pool.get('project.gtd.context').name_search(cr, uid, '', [], context=context)
+ context_id_info = self.pool.get('project.task').fields_get(cr, uid, ['context_id'])
+ context_id_info['context_id']['selection'] = attrs_sel
+ res['fields'].update(context_id_info)
+ return res
+
# Override read for using this method if context set !!!
#_order = "((55-ascii(coalesce(priority,'2')))*2 + coalesce((date_start::date-current_date)/2,8))"
project_task()
diff --git a/addons/project_gtd/project_gtd_data.xml b/addons/project_gtd/project_gtd_data.xml
new file mode 100644
index 00000000000..7b10677622a
--- /dev/null
+++ b/addons/project_gtd/project_gtd_data.xml
@@ -0,0 +1,8 @@
+
+
+
+
+ Project / Getting
+
+
+
diff --git a/addons/project_gtd/project_gtd_demo.xml b/addons/project_gtd/project_gtd_demo.xml
index ca59a1211fd..2f10ac0120a 100644
--- a/addons/project_gtd/project_gtd_demo.xml
+++ b/addons/project_gtd/project_gtd_demo.xml
@@ -25,51 +25,19 @@
Daily
-
- daily
-
-
-
-
-
-
-
+ terp-hr
Weekly
-
-
- weekly
-
-
-
-
-
-
+ terp-partner
Monthly
-
- other
-
-
-
-
-
-
-
+ terp-product
Long Term
-
- other
-
-
-
-
-
-
-
+ terp-project
@@ -104,6 +72,6 @@
Validation + latest modifications.
-
+
diff --git a/addons/project_gtd/project_gtd_view.xml b/addons/project_gtd/project_gtd_view.xml
index 6f8790bc1bb..a58a1d73407 100644
--- a/addons/project_gtd/project_gtd_view.xml
+++ b/addons/project_gtd/project_gtd_view.xml
@@ -1,204 +1,74 @@
+
+ project.gtd.context.tree
+ project.gtd.context
+ tree
+
+
+
+
+
+
+
+
+ project.gtd.context.form
+ project.gtd.context
+ form
+
+
+
+
+
+ Contexts
+ project.gtd.context
+
+
+
-
- project.gtd.context.tree
- project.gtd.context
- tree
-
-
-
-
-
-
-
-
- project.gtd.context.form
- project.gtd.context
- form
-
-
-
-
-
- Contexts
- project.gtd.context
-
+
+ project.gtd.timebox.tree
+ project.gtd.timebox
+ tree
+
+
+
+
+
+
+
+
-
-
+
+ project.gtd.timebox.form
+ project.gtd.timebox
+ form
+
+
+
+
-
- project.gtd.timebox.tree
- project.gtd.timebox
- tree
- child_ids
-
-
-
-
-
-
-
-
-
+
+ Timeboxes
+ project.gtd.timebox
+ form
+ tree,form
+
+
-
- project.gtd.timebox.form
- project.gtd.timebox
- form
-
-
-
-
-
-
- Timeboxes
- project.gtd.timebox
- tree
- [('parent_id','=',False)]
-
-
- My Timeboxes
- project.gtd.timebox
- [('user_id','=',uid)]
-
-
-
-
-
-
- project.task.gtd.inbox.tree
- project.task
- tree
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- project.task.gtd.inbox.select
- project.task
- search
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- My Inbox
- project.task
- [('user_id','=',uid),('state','in',('open','draft'))]
- {'gtd_sort':True}
-
-
-
-
-
-
-
-
- project.gtd.timebox.treelist
- project.gtd.timebox
- tree
- child_ids
- 50
-
-
-
-
-
-
-
-
- My Timeboxes
- project.gtd.timebox
- [('user_id','=',uid),('parent_id','=',False)]
- tree
-
- {'record_id':False}
-
-
-
+
-
- project.task.search.form
- project.task
- search
-
-
-
-
-
-
-
-
-
-
-
-
-
-
project.task.tree.timebox
project.task
@@ -219,15 +89,59 @@
form
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+ project.task.tree
+ project.task
+ tree
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ project.task
+ project.task
+ form
+ tree,form
+
+
+
+
+
-
- TimeBox
- ir.actions.act_window
- project.task
- form
- tree,form
- [('timebox_id','child_of',[active_id])]
- {'timebox_id':active_id}
-
-
-
-
-
- Tasks by Timebox
-
-
-
-
diff --git a/addons/project_gtd/project_gtd_wizard.xml b/addons/project_gtd/project_gtd_wizard.xml
index 003245aaf40..f6b9f7597be 100644
--- a/addons/project_gtd/project_gtd_wizard.xml
+++ b/addons/project_gtd/project_gtd_wizard.xml
@@ -5,12 +5,11 @@
-
+
+
+
= 1:
domain = "[('id','in',["+','.join(map(str, ids))+"])]"
- else:
- domain = "[('user_id', '=', uid)]"
value = {
'domain': domain,
'name': 'My Daily Timebox',
diff --git a/addons/project_gtd/wizard/project_gtd_empty.py b/addons/project_gtd/wizard/project_gtd_empty.py
index b6de75152bb..2416f4ea3d8 100644
--- a/addons/project_gtd/wizard/project_gtd_empty.py
+++ b/addons/project_gtd/wizard/project_gtd_empty.py
@@ -30,7 +30,7 @@ from tools.translate import _
class wiz_timebox_empty(wizard.interface):
def _empty(self, cr, uid, data, context):
pool = pooler.get_pool(cr.dbname)
- ids = pool.get('project.gtd.timebox').search(cr, uid, [('parent_id','=',data['id'])])
+ ids = pool.get('project.gtd.timebox').search(cr, uid, [])
if not len(ids):
raise wizard.except_wizard(_('Error !'), _('No timebox child of this one !'))
tids = pool.get('project.task').search(cr, uid, [('timebox_id','=',data['id'])])
diff --git a/addons/project_gtd/wizard/project_gtd_fill.py b/addons/project_gtd/wizard/project_gtd_fill.py
index e5b7c14f662..e1dd95cd468 100644
--- a/addons/project_gtd/wizard/project_gtd_fill.py
+++ b/addons/project_gtd/wizard/project_gtd_fill.py
@@ -41,7 +41,7 @@ _gtd_arch = """
class wiz_timebox_fill(wizard.interface):
def _fill(self, cr, uid, data, context):
pool = pooler.get_pool(cr.dbname)
- ids = pool.get('project.gtd.timebox').search(cr, uid, [('parent_id','=',data['id']),('user_id','=',uid)], context=context)
+ ids = pool.get('project.gtd.timebox').search(cr, uid, [], context=context)
return {
'timebox_id': ids and ids[0] or False,
'timebox_to_id': data['id']