[REM] project: remove state field on project.project
Also remove unused method _generate_task()
This commit is contained in:
committed by
Aaron Bohy
parent
9f2852fe8a
commit
9b69184ffa
@@ -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
|
||||
# ---------------------------------------------------
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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}'/>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user