summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrien Dieudonne <adr@odoo.com>2016-06-07 09:37:58 +0200
committerAaron Bohy <aab@odoo.com>2016-06-16 14:59:40 +0200
commit9b69184ffacd8ef10a8d2b0e4db76f3676e5f908 (patch)
treecd609c4a8259eafe7d94c5d2438d386755b6f613
parent9f2852fe8a6c060609b0d4263f2fe69a908e30f8 (diff)
[REM] project: remove state field on project.project
Also remove unused method _generate_task()
-rw-r--r--addons/project/project.py46
-rw-r--r--addons/project/project_demo.xml1
-rw-r--r--addons/project/project_view.xml20
-rw-r--r--addons/project/tests/test_access_rights.py30
-rw-r--r--addons/project/tests/test_project_flow.py20
-rw-r--r--addons/sale_timesheet/demo/sale_service_demo.xml1
6 files changed, 20 insertions, 98 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 &amp; 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'
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 @@
<record id="project_GAP" model="project.project">
<field name="date_start" eval="time.strftime('%Y-%m-01 10:00:00')"/>
- <field name="state">open</field>
<field name="name">Internal - GAP Analysis</field>
<field name="color">2</field>
<field name="privacy_visibility">employees</field>