From e25d06827eb7301d22403861d392ad567b1eeee0 Mon Sep 17 00:00:00 2001 From: "Harry (Open ERP)" Date: Wed, 28 Oct 2009 19:04:12 +0530 Subject: [PATCH 1/2] [IMP]project_gtd: egro. improvement base on bluepritns of oct-2009 bzr revid: hmo@tinyerp.com-20091028133412-xts086jj758w0auu --- addons/project_gtd/__terp__.py | 5 +- addons/project_gtd/project_gtd.py | 128 +++++------ addons/project_gtd/project_gtd_demo.xml | 42 +--- addons/project_gtd/project_gtd_view.xml | 203 +++++------------- addons/project_gtd/project_gtd_wizard.xml | 7 +- .../project_gtd/security/ir.model.access.csv | 6 +- .../project_gtd/wizard/project_gtd_daily.py | 5 +- .../project_gtd/wizard/project_gtd_empty.py | 2 +- addons/project_gtd/wizard/project_gtd_fill.py | 2 +- 9 files changed, 128 insertions(+), 272 deletions(-) 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_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 b84356684a9..d96e70d8460 100644 --- a/addons/project_gtd/project_gtd_view.xml +++ b/addons/project_gtd/project_gtd_view.xml @@ -1,12 +1,10 @@ - - project.gtd.context.tree project.gtd.context - tree + tree @@ -31,20 +29,18 @@ project.gtd.context - - + + project.gtd.timebox.tree project.gtd.timebox tree - child_ids - - - - + + + @@ -57,23 +53,8 @@
- - - - - - - - - - - - - - - - - + + @@ -81,105 +62,12 @@ Timeboxes project.gtd.timebox - tree - [('parent_id','=',False)] + form + tree,form + - - My Timeboxes - project.gtd.timebox - [('user_id','=',uid)] - - - - - - - project.task.gtd.inbox.tree - project.task - tree - - - - - -