diff --git a/addons/project/project.py b/addons/project/project.py index e7ad91dfdec..674c41ad2de 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -182,8 +182,8 @@ class project(osv.osv): help="Whether this project should be displayed on the dashboard or not"), 'label_tasks': fields.char('Use Tasks as', help="Gives label to tasks on project's kanban view."), 'tasks': fields.one2many('project.task', 'project_id', "Task Activities"), - 'resource_calendar_id': fields.many2one('resource.calendar', 'Working Time', help="Timetable working hours to adjust the gantt diagram report", states={'close':[('readonly',True)]} ), - 'type_ids': fields.many2many('project.task.type', 'project_task_type_rel', 'project_id', 'type_id', 'Tasks Stages', states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}), + 'resource_calendar_id': fields.many2one('resource.calendar', 'Working Time', help="Timetable working hours to adjust the gantt diagram report"), + 'type_ids': fields.many2many('project.task.type', 'project_task_type_rel', 'project_id', 'type_id', 'Tasks Stages'), 'task_count': fields.function(_task_count, type='integer', string="Tasks",), 'task_needaction_count': fields.function(_task_needaction_count, type='integer', string="Tasks",), 'task_ids': fields.one2many('project.task', 'project_id', string='Tasks', @@ -203,12 +203,6 @@ class project(osv.osv): "- Employees Only: employees see all tasks or issues\n" "- Followers Only: employees see only the followed tasks or issues; if portal\n" " is activated, portal users see the followed tasks or issues."), - 'state': fields.selection([('draft','New'), - ('open','In Progress'), - ('cancelled', 'Cancelled'), - ('pending','Pending'), - ('close','Closed')], - 'Status', required=True, copy=False), 'doc_count': fields.function( _get_attached_docs, string="Number of documents attached", type='integer' ), @@ -222,7 +216,6 @@ class project(osv.osv): 'favorite_user_ids': _get_default_favorite_user_ids, 'type': 'contract', 'label_tasks': 'Tasks', - 'state': 'open', 'sequence': 10, 'user_id': lambda self,cr,uid,ctx: uid, 'alias_model': 'project.task', @@ -292,7 +285,6 @@ class project(osv.osv): context.update({'copy':True}) new_id = self.copy(cr, uid, proj.id, default = { 'name':_("%s (copy)") % (proj.name), - 'state':'open', 'date_start':new_date_start, 'date':new_date_end}, context=context) result.append(new_id) @@ -703,40 +695,6 @@ class task(osv.osv): def _get_total_hours(self): return self.remaining_hours - def _generate_task(self, cr, uid, tasks, ident=4, context=None): - context = context or {} - result = "" - ident = ' '*ident - company = self.pool["res.users"].browse(cr, uid, uid, context=context).company_id - duration_uom = { - 'day(s)': 'd', 'days': 'd', 'day': 'd', 'd': 'd', - 'month(s)': 'm', 'months': 'm', 'month': 'month', 'm': 'm', - 'week(s)': 'w', 'weeks': 'w', 'week': 'w', 'w': 'w', - 'hour(s)': 'H', 'hours': 'H', 'hour': 'H', 'h': 'H', - }.get(company.project_time_mode_id.name.lower(), "hour(s)") - for task in tasks: - if task.stage_id and task.stage_id.fold: - continue - result += ''' -%sdef Task_%s(): -%s todo = \"%.2f%s\" -%s effort = \"%.2f%s\"''' % (ident, task.id, ident, task.remaining_hours, duration_uom, ident, task._get_total_hours(), duration_uom) - start = [] - for t2 in task.parent_ids: - start.append("up.Task_%s.end" % (t2.id,)) - if start: - result += ''' -%s start = max(%s) -''' % (ident,','.join(start)) - - if task.user_id: - result += ''' -%s resource = %s -''' % (ident, 'User_'+str(task.user_id.id)) - - result += "\n" - return result - # --------------------------------------------------- # Mail gateway # --------------------------------------------------- diff --git a/addons/project/project_demo.xml b/addons/project/project_demo.xml index ca18f9123ff..a953d89bd94 100644 --- a/addons/project/project_demo.xml +++ b/addons/project/project_demo.xml @@ -63,7 +63,6 @@ - open Website for Sales & WMS 3 diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index 709dc21b9e7..8864ab5694f 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -73,9 +73,6 @@ project.project
-
- -
@@ -113,7 +110,7 @@ @@ -154,8 +151,6 @@ - - @@ -177,13 +172,12 @@ project.project child_ids - + - @@ -221,14 +215,6 @@ - - Templates of Projects - project.project - form - [('state','=','template')] - - - project.task.form @@ -257,7 +243,7 @@
- + diff --git a/addons/project/tests/test_access_rights.py b/addons/project/tests/test_access_rights.py index 61e50c4494f..b0979927812 100644 --- a/addons/project/tests/test_access_rights.py +++ b/addons/project/tests/test_access_rights.py @@ -38,14 +38,14 @@ class TestPortalProject(TestPortalProjectBase): pigs.write({'privacy_visibility': 'portal'}) # Do: Alfred reads project -> ok (employee ok public) - pigs.sudo(self.user_projectuser).read(['state']) + pigs.sudo(self.user_projectuser).read(['user_id']) # Test: all project tasks visible tasks = self.env['project.task'].sudo(self.user_projectuser).search([('project_id', '=', pigs.id)]) self.assertEqual(tasks, self.task_1 | self.task_2 | self.task_3 | self.task_4 | self.task_5 | self.task_6, 'access rights: project user should see all tasks of a portal project') # Do: Bert reads project -> crash, no group - self.assertRaises(AccessError, pigs.sudo(self.user_noone).read, ['state']) + self.assertRaises(AccessError, pigs.sudo(self.user_noone).read, ['user_id']) # Test: no project task searchable self.assertRaises(AccessError, self.env['project.task'].sudo(self.user_noone).search, [('project_id', '=', pigs.id)]) @@ -54,11 +54,11 @@ class TestPortalProject(TestPortalProjectBase): self.task_1.sudo(self.user_projectuser).message_subscribe_users(user_ids=[self.user_portal.id]) self.task_3.sudo(self.user_projectuser).message_subscribe_users(user_ids=[self.user_portal.id]) # Do: Chell reads project -> ok (portal ok public) - pigs.sudo(self.user_portal).read(['state']) + pigs.sudo(self.user_portal).read(['user_id']) # Do: Donovan reads project -> ko (public ko portal) # TODO: Change the except_orm to Warning ( Because here it's call check_access_rule # which still generate exception in except_orm.) - self.assertRaises(except_orm, pigs.sudo(self.user_public).read, ['state']) + self.assertRaises(except_orm, pigs.sudo(self.user_public).read, ['user_id']) # Test: no access right to project.task self.assertRaises(AccessError, self.env['project.task'].sudo(self.user_public).search, []) # Data: task follower cleaning @@ -71,23 +71,23 @@ class TestPortalProject(TestPortalProjectBase): pigs.write({'privacy_visibility': 'employees'}) # Do: Alfred reads project -> ok (employee ok employee) - pigs.sudo(self.user_projectuser).read(['state']) + pigs.sudo(self.user_projectuser).read(['user_id']) # Test: all project tasks visible tasks = self.env['project.task'].sudo(self.user_projectuser).search([('project_id', '=', pigs.id)]) test_task_ids = set([self.task_1.id, self.task_2.id, self.task_3.id, self.task_4.id, self.task_5.id, self.task_6.id]) self.assertEqual(set(tasks.ids), test_task_ids, 'access rights: project user cannot see all tasks of an employees project') # Do: Bert reads project -> crash, no group - self.assertRaises(AccessError, pigs.sudo(self.user_noone).read, ['state']) + self.assertRaises(AccessError, pigs.sudo(self.user_noone).read, ['user_id']) # Do: Chell reads project -> ko (portal ko employee) # TODO Change the except_orm to Warning - self.assertRaises(except_orm, pigs.sudo(self.user_portal).read, ['state']) + self.assertRaises(except_orm, pigs.sudo(self.user_portal).read, ['user_id']) # Test: no project task visible + assigned tasks = self.env['project.task'].sudo(self.user_portal).search([('project_id', '=', pigs.id)]) self.assertFalse(tasks.ids, 'access rights: portal user should not see tasks of an employees project, even if assigned') # Do: Donovan reads project -> ko (public ko employee) # TODO Change the except_orm to Warning - self.assertRaises(except_orm, pigs.sudo(self.user_public).read, ['state']) + self.assertRaises(except_orm, pigs.sudo(self.user_public).read, ['user_id']) # Do: project user is employee and can create a task tmp_task = self.env['project.task'].sudo(self.user_projectuser).with_context({'mail_create_nolog': True}).create({ 'name': 'Pigs task', @@ -101,17 +101,17 @@ class TestPortalProject(TestPortalProjectBase): # Do: Alfred reads project -> ko (employee ko followers) # TODO Change the except_orm to Warning - self.assertRaises(AccessError, pigs.sudo(self.user_projectuser).read, ['state']) + self.assertRaises(AccessError, pigs.sudo(self.user_projectuser).read, ['user_id']) # Test: no project task visible tasks = self.env['project.task'].sudo(self.user_projectuser).search([('project_id', '=', pigs.id)]) self.assertEqual(tasks, self.task_1, 'access rights: employee user should not see tasks of a not-followed followers project, only assigned') # Do: Bert reads project -> crash, no group - self.assertRaises(AccessError, pigs.sudo(self.user_noone).read, ['state']) + self.assertRaises(AccessError, pigs.sudo(self.user_noone).read, ['user_id']) # Do: Chell reads project -> ko (portal ko employee) - self.assertRaises(except_orm, pigs.sudo(self.user_portal).read, ['state']) + self.assertRaises(except_orm, pigs.sudo(self.user_portal).read, ['user_id']) # Test: no project task visible tasks = self.env['project.task'].sudo(self.user_portal).search([('project_id', '=', pigs.id)]) self.assertEqual(tasks, self.task_3, @@ -119,7 +119,7 @@ class TestPortalProject(TestPortalProjectBase): # Do: Donovan reads project -> ko (public ko employee) # TODO Change the except_orm to Warning - self.assertRaises(except_orm, pigs.sudo(self.user_public).read, ['state']) + self.assertRaises(except_orm, pigs.sudo(self.user_public).read, ['user_id']) # Data: subscribe Alfred, Chell and Donovan as follower pigs.message_subscribe_users(user_ids=[self.user_projectuser.id, self.user_portal.id, self.user_public.id]) @@ -129,12 +129,12 @@ class TestPortalProject(TestPortalProjectBase): # Do: Alfred reads project -> ok (follower ok followers) prout = pigs.sudo(self.user_projectuser) prout.invalidate_cache() - prout.read(['state']) + prout.read(['user_id']) # Do: Chell reads project -> ok (follower ok follower) - pigs.sudo(self.user_portal).read(['state']) + pigs.sudo(self.user_portal).read(['user_id']) # Do: Donovan reads project -> ko (public ko follower even if follower) # TODO Change the except_orm to Warning - self.assertRaises(except_orm, pigs.sudo(self.user_public).read, ['state']) + self.assertRaises(except_orm, pigs.sudo(self.user_public).read, ['user_id']) # Do: project user is follower of the project and can create a task self.env['project.task'].sudo(self.user_projectuser.id).with_context({'mail_create_nolog': True}).create({ 'name': 'Pigs task', 'project_id': pigs.id diff --git a/addons/project/tests/test_project_flow.py b/addons/project/tests/test_project_flow.py index aabc35d0421..36b5c41c9b7 100644 --- a/addons/project/tests/test_project_flow.py +++ b/addons/project/tests/test_project_flow.py @@ -37,28 +37,8 @@ class TestProjectFlow(TestProjectBase): def test_project_process_project_manager_duplicate(self): pigs = self.project_pigs.sudo(self.user_projectmanager) dogs = pigs.copy() - self.assertEqual(dogs.state, 'open') self.assertEqual(len(dogs.tasks), 2, 'project: duplicating a project must duplicate its tasks') - def test_project_process_project_manager_state(self): - pigs = self.project_pigs.sudo(self.user_projectmanager) - pigs.state = 'pending' - self.assertEqual(pigs.state, 'pending') - # Re-open - pigs.state = 'open' - self.assertEqual(pigs.state, 'open') - # Close project - pigs.state = 'close' - self.assertEqual(pigs.state, 'close') - # Re-open - pigs.state = 'open' - # Copy the project - dogs = pigs.copy() - self.assertEqual(len(dogs.tasks), 2, 'project: copied project should have copied task') - # Cancel the project - pigs.state = 'cancelled' - self.assertEqual(pigs.state, 'cancelled', 'project: cancelled project should be in cancel state') - @mute_logger('openerp.addons.mail.mail_thread') def test_task_process_without_stage(self): # Do: incoming mail from an unknown partner on an alias creates a new task 'Frogs' diff --git a/addons/sale_timesheet/demo/sale_service_demo.xml b/addons/sale_timesheet/demo/sale_service_demo.xml index 9f3172a73bc..ffaa23d68d0 100644 --- a/addons/sale_timesheet/demo/sale_service_demo.xml +++ b/addons/sale_timesheet/demo/sale_service_demo.xml @@ -14,7 +14,6 @@ - open Internal - GAP Analysis 2 employees