diff options
| author | uco (Open ERP) <uco@tinyerp.com> | 2010-08-10 10:06:05 +0530 |
|---|---|---|
| committer | uco (Open ERP) <uco@tinyerp.com> | 2010-08-10 10:06:05 +0530 |
| commit | 919dd48bf64f5987f8bb53a4208043cf4d81b3fc (patch) | |
| tree | 6d2e8ce484f301842a029b5e45c212c83e0e6849 /addons/project | |
| parent | cc48330da76dae0bf7306a49f2184edf50ad4b3c (diff) | |
| parent | a4b4a79226ec5419961ab78d2bca35bb6e6c2afc (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.py | 57 | ||||
| -rw-r--r-- | addons/project/project_view.xml | 6 | ||||
| -rw-r--r-- | addons/project/report/project_report_view.xml | 2 | ||||
| -rw-r--r-- | addons/project/security/ir.model.access.csv | 25 |
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 |
