summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPAP(OpenERP) <>2010-08-10 16:02:59 +0530
committerMustufa Rangwala <mra@mra-laptop>2010-08-10 16:02:59 +0530
commit2dc0a4c5f1a76d98622c7e1e3625380e985e2cfc (patch)
treedf830b2ec07673cca61fb15ccb639c44177c3f25
parent1b74bafee6974100a6953efbbebdb7a78baa10b6 (diff)
[IMP] Project: Clean code and improvements on project related modules
bzr revid: mra@mra-laptop-20100810103259-a12ooa602rpzw9nd
-rw-r--r--addons/project/__openerp__.py1
-rw-r--r--addons/project/project.py30
-rw-r--r--addons/project/project_report.xml6
-rw-r--r--addons/project/project_view.xml2
-rw-r--r--addons/project/report/project_report.py2
-rw-r--r--addons/project/report/project_report_view.xml6
-rw-r--r--addons/project/wizard/project_close_task.py2
-rw-r--r--addons/project/wizard/project_task_delegate.py8
-rw-r--r--addons/project_long_term/project_long_term_view.xml3
-rw-r--r--addons/project_messages/__openerp__.py2
-rw-r--r--addons/project_messages/project_messages.py35
-rw-r--r--addons/project_messages/project_messages_view.xml97
-rw-r--r--addons/project_mrp/project_procurement.py2
-rw-r--r--addons/project_planning/__openerp__.py1
-rw-r--r--addons/project_planning/project_planning_view.xml4
-rw-r--r--addons/project_planning/report_account_analytic.planning.csv10
-rw-r--r--addons/project_timesheet/project_timesheet.py2
-rw-r--r--addons/project_timesheet/report/task_report.py2
18 files changed, 137 insertions, 78 deletions
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 @@
-<?xml version="1.0" encoding="utf-8"?>
-<openerp>
- <data>
-
- </data>
-</openerp>
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
</record>
<record id="action_view_project_messages_tree" model="ir.actions.act_window">
- <field name="name">Messages</field>
+ <field name="name">Project Messages</field>
<field name="res_model">project.message</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
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 @@
<field name="date_end" invisible="1"/>
<field name="company_id" invisible="1" groups="base.group_multi_company"/>
<field name="partner_id" invisible="1"/>
- <field name="type" invisible="1"/>
+ <field name="type_id" invisible="1"/>
<field name="day" invisible="1"/>
<field name="month" invisible="1"/>
<field name="year" invisible="1"/>
@@ -116,7 +116,7 @@
<separator orientation="vertical"/>
<filter string="State" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/>
<filter string="Company" icon="terp-go-home" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
- <filter string="Stage" icon="terp-stage" context="{'group_by':'type'}" />
+ <filter string="Stage" icon="terp-stage" context="{'group_by':'type_id'}" />
<separator orientation="vertical"/>
<filter string="Day" icon="terp-go-today" context="{'group_by':'day'}"/>
<filter string="Month" icon="terp-go-month" context="{'group_by':'month'}"/>
@@ -124,7 +124,7 @@
</group>
<newline/>
<group expand="0" string="Extended Filters..." colspan="10" col="12" groups="base.group_extended">
- <field name="type" widget="selection"/>
+ <field name="type_id" widget="selection"/>
<separator orientation="vertical"/>
<field name="date_start"/>
<field name="date_deadline"/>
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 @@
<field name="name"/>
<field name="user_id"/>
<field name="planned_hours" widget="float_time"/>
+ <field name="project_id" invisible="1"/>
</tree>
<form string="Project's Tasks">
<notebook colspan="4">
<page string="Task Detail">
<group colspan="4" col="4">
<field name="name"/>
- <field name="project_id" required="1"/>
+ <field name="project_id"/>
<field name="user_id"/>
</group>
<group colspan="2" col="2">
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 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+ <data>
+ <record id="view_phase_project_form1" model="ir.ui.view">
+ <field name="name">phase.project.form1</field>
+ <field name="model">project.project</field>
+ <field name="type">form</field>
+ <field name="inherit_id" ref="project.edit_project"/>
+ <field name="arch" type="xml">
+ <xpath expr="//page[@string='Tasks Stages']" position="after">
+ <page string="Messages" groups="base.group_extended">
+ <field name="message_ids" nolabel="1" colspan="4">
+ <tree editable="1">
+ <field name="message" attrs="{'readonly':[('from_id', '!=', uid)]}"/>
+ <field name="from_id"/>
+ <field name="to_id" attrs="{'readonly':[('from_id', '!=', uid)]}"/>
+ </tree>
+ <form>
+ <group attrs="{'readonly':[('from_id', '!=', uid)]}">
+ <field name="from_id"/>
+ <field name="to_id"/>
+ <newline/>
+ <separator colspan="4" string="Message"/>
+ <field nolabel="1" name="message" colspan="4"/>
+ </group>
+ </form>
+ </field>
+ </page>
+ </xpath>
+ </field>
+ </record>
+
+ <record id="view_project_message_form" model="ir.ui.view">
+ <field name="name">project.messages.form</field>
+ <field name="model">project.messages</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <form string="Messages">
+ <group attrs="{'readonly':[('from_id', '!=', uid)]}">
+ <field name="project_id" select="1" domain="[('user_id','=',uid)]"/>
+ <newline/>
+ <field name="from_id" select="1"/>
+ <field name="to_id" select="1"/>
+ <newline/>
+ <separator colspan="4" string="Message"/>
+ <field name="message" colspan="4" nolabel="1"/>
+ </group>
+ </form>
+ </field>
+ </record>
+
+ <record id="view_project_message_tree" model="ir.ui.view">
+ <field name="name">project.messages.tree</field>
+ <field name="model">project.messages</field>
+ <field name="type">tree</field>
+ <field name="arch" type="xml">
+ <tree string="Messages">
+ <field name="project_id"/>
+ <field name="from_id"/>
+ <field name="to_id"/>
+ </tree>
+ </field>
+ </record>
+
+ <record id="view_project_messages_search" model="ir.ui.view">
+ <field name="name">project.messages.search</field>
+ <field name="model">project.messages</field>
+ <field name="type">search</field>
+ <field name="arch" type="xml">
+ <search string="Communication Messages">
+ <group>
+ <field name="project_id"/>
+ <field name="from_id"/>
+ <field name="to_id"/>
+ </group>
+ <newline/>
+ <group expand="0" string="Group By..." colspan="4" col="20">
+ <filter string="Project" icon="terp-folder-blue" domain="[]" context="{'group_by':'project_id'}"/>
+ <filter string="Message To" icon="terp-personal" domain="[]" context="{'group_by':'to_id'}"/>
+ <filter string="Message From" icon="terp-personal" domain="[]" context="{'group_by':'from_id'}"/>
+ </group>
+ </search>
+ </field>
+ </record>
+
+ <record id="messages_form" model="ir.actions.act_window">
+ <field name="name">Communication Messages</field>
+ <field name="res_model">project.messages</field>
+ <field name="view_type">form</field>
+ <field name="search_view_id" ref="view_project_messages_search"/>
+ <field name="context">{"search_default_to_id":uid}</field>
+ <field name="view_id" ref="view_project_message_tree"/>
+ </record>
+
+ <menuitem action="messages_form" id="menu_messages_form" parent="project.menu_project_management"/>
+ </data>
+</openerp>
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 @@
</tree>
<form string="Planning Lines">
<field name="user_id" domain="[('id','child_of',[parent.user_id])]"/>
- <field name="account_id" />
+ <field name="account_id"/>
<field name="amount" />
<field name="amount_unit" />
<!-- WIDGET MANY2MANY GIVES ERROR-->
<!-- <field name="task_ids" colspan="4" nolabel="1" widget="many2many"/>-->
<field name="task_ids" colspan="4" nolabel="1" mode="tree,form">
<form string="Tasks">
- <group colspan="4" col="2">
+ <group colspan="4" col="2">
<field name="name" select="1"/>
<field name="project_id" required="1" select="1" domain="[('analytic_account_id','=',parent.account_id)]"/>
</group>
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),