diff options
| author | Adrien Dieudonne <adr@odoo.com> | 2016-06-07 09:37:58 +0200 |
|---|---|---|
| committer | Aaron Bohy <aab@odoo.com> | 2016-06-16 14:59:40 +0200 |
| commit | 9b69184ffacd8ef10a8d2b0e4db76f3676e5f908 (patch) | |
| tree | cd609c4a8259eafe7d94c5d2438d386755b6f613 /addons/project | |
| parent | 9f2852fe8a6c060609b0d4263f2fe69a908e30f8 (diff) | |
[REM] project: remove state field on project.project
Also remove unused method _generate_task()
Diffstat (limited to 'addons/project')
| -rw-r--r-- | addons/project/project.py | 46 | ||||
| -rw-r--r-- | addons/project/project_demo.xml | 1 | ||||
| -rw-r--r-- | addons/project/project_view.xml | 20 | ||||
| -rw-r--r-- | addons/project/tests/test_access_rights.py | 30 | ||||
| -rw-r--r-- | addons/project/tests/test_project_flow.py | 20 |
5 files changed, 20 insertions, 97 deletions
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 @@ <record id="project_project_1" model="project.project"> <field name="date_start" eval="time.strftime('%Y-%m-01 10:00:00')"/> - <field name="state">open</field> <field name="name">Website for Sales & WMS</field> <field name="color">3</field> <field name="partner_id" ref="portal.partner_demo_portal"/> 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 @@ <field name="model">project.project</field> <field name="arch" type="xml"> <form string="Project"> - <header> - <field name="state" widget="statusbar" clickable="True"/> - </header> <sheet string="Project"> <field name="analytic_account_id" invisible="1" required="0"/> <div class="oe_button_box" name="button_box" groups="base.group_user"> @@ -113,7 +110,7 @@ <field name="partner_id" on_change="onchange_partner_id(partner_id)" string="Customer" attrs="{'invisible':[('privacy_visibility','in',['employees', 'followers'])]}"/> <field name="user_id" string="Project Manager" - attrs="{'readonly':[('state','in',['close', 'cancelled'])]}" + attrs="{'readonly':[('active','=',False)]}" groups="base.group_no_one"/> </group> <group name="misc"> @@ -154,8 +151,6 @@ <search string="Search Project"> <field name="name" string="Project Name"/> <filter string="My Projects" name="my_projects" domain="[('favorite_user_ids', 'in', uid)]"/> - <filter string="Open" name="Current" domain="[('state', '=','open')]"/> - <filter string="Pending" name="Pending" domain="[('state', '=','pending')]"/> <separator/> <filter string="Manager" domain="[('user_id','=',uid)]"/> <filter string="Followed by Me" domain="[('message_is_follower','=',True)]"/> @@ -177,13 +172,12 @@ <field name="model">project.project</field> <field name="field_parent">child_ids</field> <field name="arch" type="xml"> - <tree decoration-bf="message_needaction==True" decoration-info="state in ('draft','pending')" decoration-muted="state in ('close','cancelled')" string="Projects"> + <tree decoration-bf="message_needaction==True" decoration-muted="active == False" string="Projects"> <field name="sequence" widget="handle"/> <field name="message_needaction" invisible="1"/> <field name="name" string="Project Name"/> <field name="user_id" string="Project Manager"/> <field name="partner_id" string="Contact"/> - <field name="state"/> </tree> </field> </record> @@ -221,14 +215,6 @@ </field> </record> - <record id="open_view_template_project" model="ir.actions.act_window"> - <field name="name">Templates of Projects</field> - <field name="res_model">project.project</field> - <field name="view_type">form</field> - <field name="domain">[('state','=','template')]</field> - <field name="view_id" ref="view_project"/> - </record> - <!-- Task --> <record id="view_task_form2" model="ir.ui.view"> <field name="name">project.task.form</field> @@ -257,7 +243,7 @@ </div> <group> <group> - <field name="project_id" domain="[('state','not in', ('close', 'cancelled'))]" on_change="onchange_project(project_id)" context="{'default_use_tasks':1}"/> + <field name="project_id" domain="[('active','=',False)]" on_change="onchange_project(project_id)" context="{'default_use_tasks':1}"/> <field name="user_id" on_change="onchange_user_id(user_id, context)" options='{"no_open": True}'/> 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' |
