[REM] project: remove state field on project.project

Also remove unused method _generate_task()
This commit is contained in:
Adrien Dieudonne
2016-06-16 14:59:40 +02:00
committed by Aaron Bohy
parent 9f2852fe8a
commit 9b69184ffa
6 changed files with 20 additions and 98 deletions
+2 -44
View File
@@ -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
# ---------------------------------------------------
-1
View File
@@ -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"/>
+3 -17
View File
@@ -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}'/>
+15 -15
View File
@@ -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
-20
View File
@@ -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'
@@ -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>