From 2dc0a4c5f1a76d98622c7e1e3625380e985e2cfc Mon Sep 17 00:00:00 2001 From: "PAP(OpenERP)" <> Date: Tue, 10 Aug 2010 16:02:59 +0530 Subject: [PATCH] [IMP] Project: Clean code and improvements on project related modules bzr revid: mra@mra-laptop-20100810103259-a12ooa602rpzw9nd --- addons/project/__openerp__.py | 1 - addons/project/project.py | 30 ++---- addons/project/project_report.xml | 6 -- addons/project/project_view.xml | 2 +- addons/project/report/project_report.py | 2 +- addons/project/report/project_report_view.xml | 6 +- addons/project/wizard/project_close_task.py | 2 +- .../project/wizard/project_task_delegate.py | 8 +- .../project_long_term_view.xml | 3 +- addons/project_messages/__openerp__.py | 2 +- addons/project_messages/project_messages.py | 35 +++---- .../project_messages_view.xml | 97 +++++++++++++++++++ addons/project_mrp/project_procurement.py | 2 +- addons/project_planning/__openerp__.py | 1 - .../project_planning_view.xml | 4 +- .../report_account_analytic.planning.csv | 10 -- addons/project_timesheet/project_timesheet.py | 2 + .../project_timesheet/report/task_report.py | 2 +- 18 files changed, 137 insertions(+), 78 deletions(-) delete mode 100644 addons/project/project_report.xml create mode 100644 addons/project_messages/project_messages_view.xml delete mode 100644 addons/project_planning/report_account_analytic.planning.csv diff --git a/addons/project/__openerp__.py b/addons/project/__openerp__.py index 3a6134b76ae..0fd8d3a0c04 100644 --- a/addons/project/__openerp__.py +++ b/addons/project/__openerp__.py @@ -42,7 +42,6 @@ work done on tasks, eso. It is able to render planning, order tasks, eso. "security/ir.model.access.csv", "project_data.xml", "project_view.xml", - "project_report.xml", "process/task_process.xml", "project_installer.xml", "res_partner_view.xml", diff --git a/addons/project/project.py b/addons/project/project.py index 15c3f890f7b..195a6d37b8b 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -76,11 +76,11 @@ class project(osv.osv): def get_all_child_projects(self, cr, uid, ids, context=None): # Calculate child project for Given project id => For progress rate + planned time + Time spent - cr.execute('''select prpc.id as id from account_analytic_account as p - join account_analytic_account as c on p.id = c.parent_id - join project_project as prp on prp.analytic_account_id = p.id - join project_project as prpc on prpc.analytic_account_id = c.id - where prp.id in %s''',(tuple(ids),)) + cr.execute('''SELECT prpc.id AS id from account_analytic_account AS p + JOIN account_analytic_account AS c ON p.id = c.parent_id + JOIN project_project AS prp ON prp.analytic_account_id = p.id + JOIN project_project AS prpc ON prpc.analytic_account_id = c.id + WHERE prp.id IN %s''',(tuple(ids),)) child_ids = cr.fetchall() if child_ids: @@ -247,21 +247,6 @@ class project(osv.osv): 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','=',True)]) -# tasks = task_obj.browse(cr, uid, task_ids) -# for task in tasks: -# date_deadline = 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') -# task_obj.write(cr, uid, task.id, {'date_start': False, -# 'date_end': False, -# 'date_deadline':date_deadline, -# }) - return res def duplicate_template(self, cr, uid, ids, context=None): @@ -386,8 +371,9 @@ class task(osv.osv): def copy_data(self, cr, uid, id, default={}, context=None): default = default or {} - default['work_ids'] = [] - default['remaining_hours'] = float(self.read(cr, uid, id, ['planned_hours'])['planned_hours']) + default.update({'work_ids':[], 'date_start': False, 'date_end': False, 'date_deadline': False}) + if not default.get('remaining_hours', False): + default['remaining_hours'] = float(self.read(cr, uid, id, ['planned_hours'])['planned_hours']) default['active'] = True return super(task, self).copy_data(cr, uid, id, default, context) diff --git a/addons/project/project_report.xml b/addons/project/project_report.xml deleted file mode 100644 index 30816750035..00000000000 --- a/addons/project/project_report.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index 5e263f252f2..82b88716421 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -639,7 +639,7 @@ Issues like bugs in a system, client complain, materials breakdown are collected - Messages + Project Messages project.message form tree,form diff --git a/addons/project/report/project_report.py b/addons/project/report/project_report.py index bd1d12b7637..06ad777069e 100644 --- a/addons/project/report/project_report.py +++ b/addons/project/report/project_report.py @@ -55,7 +55,7 @@ class report_project_task_user(osv.osv): 'state': fields.selection([('draft', 'Draft'), ('open', 'In Progress'), ('pending', 'Pending'), ('cancelled', 'Cancelled'), ('done', 'Done')],'State', readonly=True), 'company_id': fields.many2one('res.company', 'Company', readonly=True, groups="base.group_multi_company"), 'partner_id': fields.many2one('res.partner', 'Partner', readonly=True), - 'type': fields.many2one('project.task.type', 'Stage', readonly=True), + 'type_id': fields.many2one('project.task.type', 'Stage', readonly=True), } _order = 'name desc, project_id' diff --git a/addons/project/report/project_report_view.xml b/addons/project/report/project_report_view.xml index 8d1dd450702..9db500d93ff 100644 --- a/addons/project/report/project_report_view.xml +++ b/addons/project/report/project_report_view.xml @@ -19,7 +19,7 @@ - + @@ -116,7 +116,7 @@ - + @@ -124,7 +124,7 @@ - + diff --git a/addons/project/wizard/project_close_task.py b/addons/project/wizard/project_close_task.py index 78d18920abd..c82615e9e63 100644 --- a/addons/project/wizard/project_close_task.py +++ b/addons/project/wizard/project_close_task.py @@ -90,7 +90,7 @@ class project_close_task(osv.osv_memory): if 'task_id' in context: if context.get('send_manager', False) and not close_task.get('manager_email', False): - raise osv.except_osv(_('Error'), _("Please specify the email address of Manager.")) + raise osv.except_osv(_('Error'), _("Please specify the email address of Project Manager.")) elif context.get('send_partner', False) and not close_task.get('partner_email', False): raise osv.except_osv(_('Error'), _("Please specify the email address of partner.")) diff --git a/addons/project/wizard/project_task_delegate.py b/addons/project/wizard/project_task_delegate.py index cf4ccb80d29..6951a900008 100644 --- a/addons/project/wizard/project_task_delegate.py +++ b/addons/project/wizard/project_task_delegate.py @@ -43,7 +43,7 @@ class project_task_delegate(osv.osv_memory): if 'active_id' in context: task = self.pool.get('project.task').browse(cr, uid, context['active_id']) if task.name.startswith(_('CHECK: ')): - newname = task.name.strip(_('CHECK: ')) + newname = str(task.name).replace(_('CHECK: '), '') else: newname = task.name or '' return newname @@ -63,10 +63,10 @@ class project_task_delegate(osv.osv_memory): if 'active_id' in context: task = self.pool.get('project.task').browse(cr, uid, context['active_id']) if task.name.startswith(_('CHECK: ')): - newname = task.name.strip(_('CHECK: ')) + newname = str(task.name).replace(_('CHECK: '), '') else: newname = task.name or '' - return _('CHECK: ')+ newname + return _('CHECK: ') + newname return '' def _get_new_desc(self, cr, uid, context=None): @@ -129,7 +129,7 @@ class project_task_delegate(osv.osv_memory): 'planned_hours': delegate_data['planned_hours'], 'remaining_hours': delegate_data['planned_hours'], 'parent_ids': [(6, 0, [task.id])], - 'state': 'open', + 'state': 'draft', 'description': delegate_data['new_task_description'] or '', 'child_ids': [], 'work_ids': [] diff --git a/addons/project_long_term/project_long_term_view.xml b/addons/project_long_term/project_long_term_view.xml index 02f405131c6..b9122a72261 100644 --- a/addons/project_long_term/project_long_term_view.xml +++ b/addons/project_long_term/project_long_term_view.xml @@ -127,13 +127,14 @@ +
- + diff --git a/addons/project_messages/__openerp__.py b/addons/project_messages/__openerp__.py index 473bb6325e8..fe5ad94c068 100644 --- a/addons/project_messages/__openerp__.py +++ b/addons/project_messages/__openerp__.py @@ -32,7 +32,7 @@ """, 'website': 'http://www.openerp.com', 'init_xml': [], - 'update_xml': [], + 'update_xml': ['project_messages_view.xml'], 'demo_xml': [], 'installable': True, 'active': False, diff --git a/addons/project_messages/project_messages.py b/addons/project_messages/project_messages.py index 657405c0921..f71e64d2887 100644 --- a/addons/project_messages/project_messages.py +++ b/addons/project_messages/project_messages.py @@ -30,44 +30,35 @@ class messages(osv.osv): logger = netsvc.Logger() _columns = { - 'from_id': fields.many2one('res.users', 'From', ondelete="CASCADE"), - 'to_id': fields.many2one('res.users', 'To', ondelete="CASCADE"), + 'from_id': fields.many2one('res.users', 'From', required=True, ondelete="CASCADE"), + 'to_id': fields.many2one('res.users', 'To', ondelete="CASCADE", help="Keep this empty to broadcast the message."), 'project_id': fields.many2one('project.project', 'Project', required=True, ondelete="CASCADE"), 'message': fields.text('Message', required=True), } + + def search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False): + # return messages by current user, for current user or for all users + # return all messages if current user is administrator + if uid != 1: + args.extend(['|',('from_id', 'in', [uid,]),('to_id', 'in', [uid, False])]) + return super(messages, self).search(cr, uid, args, offset, limit, + order, context=context, count=count) + _defaults = { 'from_id': lambda self, cr, uid, context: uid, - 'to_id': None, } - def broadcast(self, cr, uid, project_id, message, context=None): - """ Send a message to all the users of a project. - The sender of the message is the current user. - - The method returns the new message's id. - - Arguments: - - `project_id`: the id of the project to broadcast to - - `message`: the message to broadcast - """ - return self.create(cr, uid, { - 'to_id':None, - 'project_id':project_id, - 'message':message - }, context=context) - messages() class project_with_message(osv.osv): _inherit = 'project.project' - + _columns = { 'message_ids':fields.one2many( 'project.messages', 'project_id', 'Messages', - domain="[('to_id','in',[uid,False])]"), + ), } - project_with_message() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project_messages/project_messages_view.xml b/addons/project_messages/project_messages_view.xml new file mode 100644 index 00000000000..ad1588797a1 --- /dev/null +++ b/addons/project_messages/project_messages_view.xml @@ -0,0 +1,97 @@ + + + + + phase.project.form1 + project.project + form + + + + + + + + + + + + + + + + + + + + + + + + + + + project.messages.form + project.messages + form + +
+ + + + + + + + + +
+
+
+ + + project.messages.tree + project.messages + tree + + + + + + + + + + + project.messages.search + project.messages + search + + + + + + + + + + + + + + + + + + + Communication Messages + project.messages + form + + {"search_default_to_id":uid} + + + + +
+
diff --git a/addons/project_mrp/project_procurement.py b/addons/project_mrp/project_procurement.py index 2e8f8c6dff8..251a4600081 100644 --- a/addons/project_mrp/project_procurement.py +++ b/addons/project_mrp/project_procurement.py @@ -86,7 +86,7 @@ class procurement_order(osv.osv): name_task = (procurement.origin, proc_name or '') else: name_task = (procurement.product_id.name or procurement.origin, procurement.name or '') - planned_hours= procurement.product_id.sale_delay +procurement.product_id. produce_delay + planned_hours= procurement.product_id.sale_delay + procurement.product_id. produce_delay task_id = self.pool.get('project.task').create(cr, uid, { 'name': '%s:%s' % name_task, 'date_deadline': procurement.date_planned, diff --git a/addons/project_planning/__openerp__.py b/addons/project_planning/__openerp__.py index 330a2e2b0c7..1ee10560919 100644 --- a/addons/project_planning/__openerp__.py +++ b/addons/project_planning/__openerp__.py @@ -51,7 +51,6 @@ At the end of the month, the planning manager can also check if the encoded time 'board_project_planning_view.xml', ], 'demo_xml': [ - #'report_account_analytic.planning.csv', 'project_planning_demo.xml', ], 'test': [ diff --git a/addons/project_planning/project_planning_view.xml b/addons/project_planning/project_planning_view.xml index 4b7fa3cb493..1a6d7efdd39 100644 --- a/addons/project_planning/project_planning_view.xml +++ b/addons/project_planning/project_planning_view.xml @@ -78,14 +78,14 @@
- + - + diff --git a/addons/project_planning/report_account_analytic.planning.csv b/addons/project_planning/report_account_analytic.planning.csv deleted file mode 100644 index 41374cedbc0..00000000000 --- a/addons/project_planning/report_account_analytic.planning.csv +++ /dev/null @@ -1,10 +0,0 @@ -name,line_ids/amount,line_ids/amount_unit,line_ids/user_id,line_ids/task,line_ids/account_id,user_id -Planning 2007,5.0,Day,admin,1,Seagate P1,admin -,7.0,Day,admin,0,Seagate P2, -,2.0,Day,admin,1,Sednacom, -,3.0,Day,admin,0,Administratif, -,4.0,Day,admin,0,Commercial & Marketing, -,6.0,Day,demo,1,Seagate P1, -,7.0,Day,demo,1,Seagate P2, -,1.0,Day,demo,0,CampToCamp, -,7.0,Day,demo,0,Agrolait, diff --git a/addons/project_timesheet/project_timesheet.py b/addons/project_timesheet/project_timesheet.py index 861d22025aa..26368e109c5 100644 --- a/addons/project_timesheet/project_timesheet.py +++ b/addons/project_timesheet/project_timesheet.py @@ -209,6 +209,8 @@ class project_project(osv.osv): if context is None: context = {} result = [] + if ids and not isinstance(ids, list): + ids = [ids] for project in self.browse(cr, user, ids, context): name = "[%s] %s" % (project.analytic_account_id and project.analytic_account_id.code or '?', project.name) result.append((project.id, name)) diff --git a/addons/project_timesheet/report/task_report.py b/addons/project_timesheet/report/task_report.py index e98ced268cb..65b58fe632b 100644 --- a/addons/project_timesheet/report/task_report.py +++ b/addons/project_timesheet/report/task_report.py @@ -118,7 +118,7 @@ class report_timesheet_task_user(osv.osv): return result _columns = { - 'name': fields.char('Name',size=64), + 'name': fields.char('Date',size=64), 'year': fields.char('Year',size=64,required=False, readonly=True), 'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'), ('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'), ('10','October'), ('11','November'), ('12','December')],'Month',readonly=True),