summaryrefslogtreecommitdiff
path: root/addons/project
diff options
context:
space:
mode:
authoruco (Open ERP) <uco@tinyerp.com>2010-08-10 10:06:05 +0530
committeruco (Open ERP) <uco@tinyerp.com>2010-08-10 10:06:05 +0530
commit919dd48bf64f5987f8bb53a4208043cf4d81b3fc (patch)
tree6d2e8ce484f301842a029b5e45c212c83e0e6849 /addons/project
parentcc48330da76dae0bf7306a49f2184edf50ad4b3c (diff)
parenta4b4a79226ec5419961ab78d2bca35bb6e6c2afc (diff)
[MERGE]
bzr revid: uco@tinyerp.com-20100809123622-hpw9djl5wtu80ccp bzr revid: uco@tinyerp.com-20100810043605-rnht1jq7lx1pazah
Diffstat (limited to 'addons/project')
-rw-r--r--addons/project/project.py57
-rw-r--r--addons/project/project_view.xml6
-rw-r--r--addons/project/report/project_report_view.xml2
-rw-r--r--addons/project/security/ir.model.access.csv25
4 files changed, 47 insertions, 43 deletions
diff --git a/addons/project/project.py b/addons/project/project.py
index 7be2956bed0..15c3f890f7b 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -647,42 +647,35 @@ class project_work(osv.osv):
def create(self, cr, uid, vals, *args, **kwargs):
project_obj = self.pool.get('project.project')
uom_obj = self.pool.get('product.uom')
-
- if (not 'task_id' in vals) or (not 'hours' in vals):
- return super(project_work, self).create(cr, uid, vals, *args, **kwargs)
- if not vals['hours']:
- vals['hours'] = 0.00
-
- user_uom, default_uom = project_obj._get_user_and_default_uom_ids(cr, uid)
- duration = vals['hours']
-
- if user_uom != default_uom:
- duration = uom_obj._compute_qty(cr, uid, default_uom, duration, user_uom)
- cr.execute('update project_task set remaining_hours=remaining_hours - %s where id=%s', (duration, vals['task_id']))
- return super(project_work,self).create(cr, uid, vals, *args, **kwargs)
+ if vals.get('hours', False):
+ user_uom, default_uom = project_obj._get_user_and_default_uom_ids(cr, uid)
+ duration = vals['hours']
+ if user_uom != default_uom:
+ duration = uom_obj._compute_qty(cr, uid, default_uom, duration, user_uom)
+ cr.execute('update project_task set remaining_hours=remaining_hours - %s where id=%s', (duration, vals['task_id']))
+ return super(project_work, self).create(cr, uid, vals, *args, **kwargs)
def write(self, cr, uid, ids, vals, context=None):
project_obj = self.pool.get('project.project')
uom_obj = self.pool.get('product.uom')
-
- if context is None:
- context = {}
- if not vals['hours']:
- vals['hours'] = 0.00
-
- user_uom, default_uom = project_obj._get_user_and_default_uom_ids(cr, uid)
- duration = vals['hours']
-
- if user_uom == default_uom:
- for work in self.browse(cr, uid, ids, context):
- cr.execute('update project_task set remaining_hours=remaining_hours - %s + (%s) where id=%s', (duration, work.hours, work.task_id.id))
- else:
- for work in self.browse(cr, uid, ids, context):
- duration = uom_obj._compute_qty(cr, uid, default_uom, duration, user_uom)
- del_work = uom_obj._compute_qty(cr, uid, default_uom, work.hours, user_uom)
- cr.execute('update project_task set remaining_hours=remaining_hours - %s + (%s) where id=%s', (duration, del_work, work.task_id.id))
-
- return super(project_work,self).write(cr, uid, ids, vals, context)
+ if vals.get('hours', False):
+ old_hours = self.browse(cr, uid, ids, context=context)
+ user_uom, default_uom = project_obj._get_user_and_default_uom_ids(cr, uid)
+ duration = vals['hours']
+ for old in old_hours:
+ if vals.get('hours') != old.hours:
+ # this code is only needed when we update the hours of the project
+ # TODO: it may still a second calculation if the task.id is changed
+ # at this task.
+ if user_uom == default_uom:
+ for work in self.browse(cr, uid, ids, context=context):
+ cr.execute('update project_task set remaining_hours=remaining_hours - %s + (%s) where id=%s', (duration, work.hours, work.task_id.id))
+ else:
+ for work in self.browse(cr, uid, ids, context=context):
+ duration = uom_obj._compute_qty(cr, uid, default_uom, duration, user_uom)
+ del_work = uom_obj._compute_qty(cr, uid, default_uom, work.hours, user_uom)
+ cr.execute('update project_task set remaining_hours=remaining_hours - %s + (%s) where id=%s', (duration, del_work, work.task_id.id))
+ return super(project_work,self).write(cr, uid, ids, vals, context=context)
def unlink(self, cr, uid, ids, *args, **kwargs):
context = kwargs.get('context', {})
diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml
index 32421308671..5e263f252f2 100644
--- a/addons/project/project_view.xml
+++ b/addons/project/project_view.xml
@@ -5,10 +5,10 @@
<menuitem
icon="terp-project" id="base.menu_main_pm"
name="Project" sequence="10"
- groups="group_project_manager,group_project_user"/>
+ groups="group_project_manager,group_project_user,base.group_system"/>
<menuitem id="menu_project_management" name="Project Management" parent="base.menu_main_pm" sequence="1"/>
- <menuitem id="menu_definitions" name="Configuration" parent="base.menu_main_pm" sequence="60"/>
+ <menuitem id="menu_definitions" name="Configuration" parent="base.menu_main_pm" sequence="60" groups="base.group_system"/>
<!-- Project -->
<record id="edit_project" model="ir.ui.view">
@@ -526,7 +526,7 @@ Issues like bugs in a system, client complain, materials breakdown are collected
<field name="view_id" ref="task_type_tree"/>
</record>
- <menuitem id="menu_tasks_config" name="Tasks" parent="project.menu_definitions" sequence="1"/>
+ <menuitem id="menu_tasks_config" name="Tasks" parent="project.menu_definitions" sequence="1" groups="base.group_system"/>
<menuitem action="open_task_type_form" id="menu_task_types_view" parent="menu_tasks_config" sequence="1"/>
<act_window domain="[('user_id', '=', active_id)]" id="act_res_users_2_project_project" name="User's projects" res_model="project.project" src_model="res.users" view_mode="tree,form" view_type="form"/>
diff --git a/addons/project/report/project_report_view.xml b/addons/project/report/project_report_view.xml
index 0292864397e..8d1dd450702 100644
--- a/addons/project/report/project_report_view.xml
+++ b/addons/project/report/project_report_view.xml
@@ -147,7 +147,7 @@
<field name="help">Get detailed analysis by task</field>
</record>
- <menuitem action="action_project_task_user_tree" id="menu_project_task_user_tree" parent="base.menu_project_report"/>
+ <menuitem action="action_project_task_user_tree" id="menu_project_task_user_tree" parent="base.menu_project_report" groups="project.group_project_manager"/>
<!-- Views and action for project dashboard -->
<record id="view_project_vs_remaining_hours_tree" model="ir.ui.view">
diff --git a/addons/project/security/ir.model.access.csv b/addons/project/security/ir.model.access.csv
index b418b0a0dbf..22feb0fa998 100644
--- a/addons/project/security/ir.model.access.csv
+++ b/addons/project/security/ir.model.access.csv
@@ -1,16 +1,16 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_project_project_manager","project.project manager","model_project_project","project.group_project_manager",1,1,1,1
-"access_account_analytic_account_manager","account.analytic.account","analytic.model_account_analytic_account","project.group_project_manager",1,1,1,1
-"access_project_project","project.project","model_project_project","project.group_project_user",1,0,0,0
-"access_account_analytic_account","account.analytic.account","analytic.model_account_analytic_account","project.group_project_user",1,0,0,0
-"access_project_task_type_user","project.task.type user","model_project_task_type","project.group_project_user",1,0,0,0
+"access_project_project_manager","project.project manager","model_project_project","project.group_project_manager",1,0,0,0
+"access_account_analytic_account_manager","account.analytic.account","analytic.model_account_analytic_account","project.group_project_manager",1,0,0,0
+"access_project_project","project.project","model_project_project","project.group_project_user",1,1,1,1
+"access_account_analytic_account","account.analytic.account","analytic.model_account_analytic_account","project.group_project_user",1,1,1,1
+"access_project_task_type_user","project.task.type user","model_project_task_type","project.group_project_user",1,1,1,1
"access_project_task_type","project.task.type","model_project_task_type","project.group_project_manager",1,1,1,1
-"access_project_task_manager","project.task manager","model_project_task","project.group_project_manager",1,1,1,1
+"access_project_task_manager","project.task manager","model_project_task","project.group_project_manager",1,0,0,0
"access_project_task","project.task","model_project_task","project.group_project_user",1,1,1,1
"access_project_task_work","project.task.work","model_project_task_work","project.group_project_user",1,1,1,1
"access_project_task_work_manager","project.task.work.manager","model_project_task_work","project.group_project_manager",1,1,1,1
"access_project_message","project.message","model_project_message","project.group_project_user",1,1,1,1
-"access_report_project_task_user","report.project.task.user","model_report_project_task_user","project.group_project_manager",1,0,0,0
+"access_report_project_task_user","report.project.task.user","model_report_project_task_user","project.group_project_manager",1,1,1,1
"access_project_vs_hours","project.vs.hours","model_project_vs_hours","project.group_project_user",1,1,1,1
"access_task_by_days","task.by.days","model_task_by_days","project.group_project_user",1,1,1,1
"access_partner_task user","base.res.partner user","base.model_res_partner","project.group_project_user",1,0,0,0
@@ -19,3 +19,14 @@
"access_partner_address_task manager","base.res.partner.address manager","base.model_res_partner_address","project.group_project_manager",1,0,0,0
"access_task_on_partner","project.task on partners","model_project_task","base.group_user",1,0,0,0
"access_project_on_partner","project.project on partners","model_project_project","base.group_user",1,0,0,0
+"access_project_message_manager","project.message manager","model_project_message","project.group_project_manager",1,0,0,0
+"access_project_message_system","project.message system","model_project_message","base.group_system",1,0,0,0
+"access_project_task_system","project.task system","model_project_task","base.group_system",1,0,0,0
+"access_project_project_system","project.project system","model_project_project","base.group_system",1,1,1,1
+"access_project_task_work_system","project.task.work system","model_project_task_work","base.group_system",1,0,0,0
+"access_project_task_type_system","project.task.type system","model_project_task_type","base.group_system",1,1,1,1
+"access_report_project_task_user_system","report.project.task.user system","model_report_project_task_user","base.group_system",1,0,0,0
+"access_project_vs_hours_manager","project.vs.hours.manager","model_project_vs_hours","project.group_project_manager",1,1,1,1
+"access_account_analytic_account_system","account.analytic.account system","analytic.model_account_analytic_account","base.group_system",1,0,0,0
+"access_project_vs_hours_system","project.vs.hours.system","model_project_vs_hours","base.group_system",1,0,0,0
+"mail_gateway_mailgate_message_project_user","mail_gateway.mailgate.message user","mail_gateway.model_mailgate_message","project.group_project_user",1,1,1,0