[IMP] adapt task and issue views for portal users

- give read access rights to group_portal_member on projet.task.type and project.task.work models
- hide action buttons and priority fields in form and list views
- a question remains: how to handle states and stages ?  state seems more revelant and simple to understand for portal users (and therefore should be shown through the statusbar widget) while stage is more interesing for internal organization

bzr revid: abo@openerp.com-20120601150718-dk49583g1tko118y
This commit is contained in:
Antonin Bourguignon 2012-06-01 17:07:18 +02:00
parent 03dcaabc64
commit a704f7bd8d
5 changed files with 74 additions and 67 deletions

View File

@ -37,7 +37,6 @@
], ],
'installable': True, 'installable': True,
'auto_install':True, 'auto_install':True,
'category':'Hidden', 'category':'Hidden',
} }
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,3 +1,5 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_issues,project_issue,project_issue.model_project_issue,portal.group_portal_member,1,0,1,0 access_issues,project_issue,project_issue.model_project_issue,portal.group_portal_member,1,0,1,0
access_task,tasks,project.model_project_task,portal.group_portal_member,1,0,0,0 access_task,tasks,project.model_project_task,portal.group_portal_member,1,0,0,0
access_task_type,task_type,project.model_project_task_type,portal.group_portal_member,1,0,0,0
access_task_work,task_work,project.model_project_task_work,portal.group_portal_member,1,0,0,0

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_issues project_issue project_issue.model_project_issue portal.group_portal_member 1 0 1 0
3 access_task tasks project.model_project_task portal.group_portal_member 1 0 0 0
4 access_task_type task_type project.model_project_task_type portal.group_portal_member 1 0 0 0
5 access_task_work task_work project.model_project_task_work portal.group_portal_member 1 0 0 0

View File

@ -51,7 +51,7 @@
<group col="2" colspan="2"> <group col="2" colspan="2">
<separator colspan="4" string="Performance"/> <separator colspan="4" string="Performance"/>
<field name="planned_hours" widget="float_time"/> <field name="planned_hours" widget="float_time"/>
<field name="effective_hours" widget="float_time" /> <field name="effective_hours" widget="float_time"/>
<field name="resource_calendar_id"/> <field name="resource_calendar_id"/>
</group> </group>
<newline/> <newline/>
@ -128,7 +128,7 @@
</field> </field>
<field name="partner_id" string="Partner"/> <field name="partner_id" string="Partner"/>
</group> </group>
<newline /> <newline/>
<group expand="0" string="Group By..."> <group expand="0" string="Group By...">
<filter string="Manager" name="Manager" icon="terp-personal" domain = "[]" context="{'group_by':'user_id'}"/> <filter string="Manager" name="Manager" icon="terp-personal" domain = "[]" context="{'group_by':'user_id'}"/>
<filter string="Partner" name="Partner" icon="terp-partner" domain = "[]" context="{'group_by':'partner_id'}"/> <filter string="Partner" name="Partner" icon="terp-partner" domain = "[]" context="{'group_by':'partner_id'}"/>
@ -305,24 +305,26 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="Project" layout="manual"> <form string="Project" layout="manual">
<div class="oe_form_topbar"> <div class="oe_form_topbar">
<button name="do_open" string="Start Task" type="object" <span groups="base.group_user">
states="draft,pending"/> <button name="do_open" string="Start Task" type="object"
<button name="%(action_project_task_reevaluate)d" string="Reactivate" type="action" states="draft,pending"/>
states="done,cancelled" context="{'button_reactivate':True}"/> <button name="%(action_project_task_reevaluate)d" string="Reactivate" type="action"
<button name="do_pending" string="Pending" type="object" states="done,cancelled" context="{'button_reactivate':True}"/>
states="open"/> <button name="do_pending" string="Pending" type="object"
<button name="action_close" string="Done" type="object" states="open"/>
states="draft,open,pending"/> <button name="action_close" string="Done" type="object"
<button name="do_draft" string="Draft" type="object" states="draft,open,pending"/>
states="cancel,done"/> <button name="do_draft" string="Draft" type="object"
<button name="%(action_project_task_delegate)d" string="Delegate" type="action" states="cancel,done"/>
states="pending,open,draft"/> <button name="%(action_project_task_delegate)d" string="Delegate" type="action"
<button name="do_cancel" string="Cancel" type="object" states="pending,open,draft"/>
states="draft,open,pending" /> <button name="do_cancel" string="Cancel" type="object"
<button name="stage_previous" string="Previous Stage" type="object" states="draft,open,pending"/>
states="open,pending" icon="gtk-go-back" attrs="{'invisible': [('stage_id','=', False)]}"/> <button name="stage_previous" string="Previous Stage" type="object"
<button name="stage_next" string="Next Stage" type="object" states="open,pending" icon="gtk-go-back" attrs="{'invisible': [('stage_id','=', False)]}"/>
states="open,pending" icon="gtk-go-forward" attrs="{'invisible': [('stage_id','=', False)]}"/> <button name="stage_next" string="Next Stage" type="object"
states="open,pending" icon="gtk-go-forward" attrs="{'invisible': [('stage_id','=', False)]}"/>
</span>
<div class="oe_right"> <div class="oe_right">
<field name="stage_id" nolabel="1" widget="statusbar"/> <field name="stage_id" nolabel="1" widget="statusbar"/>
</div> </div>
@ -344,7 +346,7 @@
name="planned_hours" name="planned_hours"
widget="float_time" widget="float_time"
attrs="{'readonly':[('state','!=','draft')]}" attrs="{'readonly':[('state','!=','draft')]}"
groups="project.group_time_work_estimation_tasks" groups="project.group_time_work_estimation_tasks"
on_change="onchange_planned(planned_hours, effective_hours)"/> on_change="onchange_planned(planned_hours, effective_hours)"/>
<field <field
name="effective_hours" name="effective_hours"
@ -358,10 +360,10 @@
<field colspan="4" name="description" nolabel="1" attrs="{'readonly':[('state','=','done')]}"/> <field colspan="4" name="description" nolabel="1" attrs="{'readonly':[('state','=','done')]}"/>
<field colspan="4" name="work_ids" nolabel="1" attrs="{'readonly':[('state','in',['done','draft'])]}" groups="project.group_tasks_work_on_tasks"> <field colspan="4" name="work_ids" nolabel="1" attrs="{'readonly':[('state','in',['done','draft'])]}" groups="project.group_tasks_work_on_tasks">
<tree string="Task Work" editable="top"> <tree string="Task Work" editable="top">
<field name="name" /> <field name="name"/>
<field name="hours" widget="float_time" sum="Spent Hours"/> <field name="hours" widget="float_time" sum="Spent Hours"/>
<field name="user_id" /> <field name="user_id"/>
<field name="date" /> <field name="date"/>
</tree> </tree>
</field> </field>
</page> </page>
@ -386,13 +388,13 @@
<page string="Extra Info" attrs="{'readonly':[('state','=','done')]}"> <page string="Extra Info" attrs="{'readonly':[('state','=','done')]}">
<group colspan="2" col="2"> <group colspan="2" col="2">
<separator string="Planning" colspan="2"/> <separator string="Planning" colspan="2"/>
<field name="priority"/> <field name="priority" groups="base.group_user"/>
<field name="sequence"/> <field name="sequence"/>
<field name="state" groups="base.group_no_one"/> <field name="state" groups="base.group_no_one"/>
</group> </group>
<separator string="Miscellaneous" colspan="4"/> <separator string="Miscellaneous" colspan="4"/>
<field name="partner_id" /> <field name="partner_id"/>
<field name="company_id" select="1" groups="base.group_multi_company" widget="selection"/> <field name="company_id" select="1" groups="base.group_multi_company" widget="selection"/>
<field name="state" groups="base.group_no_one"/> <field name="state" groups="base.group_no_one"/>
<separator colspan="4" string="Notes"/> <separator colspan="4" string="Notes"/>
@ -415,7 +417,7 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<kanban default_group_by="stage_id" > <kanban default_group_by="stage_id" >
<field name="color"/> <field name="color"/>
<field name="priority"/> <field name="priority" groups="base.group_user"/>
<field name="stage_id"/> <field name="stage_id"/>
<field name="user_id"/> <field name="user_id"/>
<field name="user_email"/> <field name="user_email"/>
@ -518,16 +520,18 @@
<field name="remaining_hours" widget="float_time" sum="Remaining Hours" on_change="onchange_remaining(remaining_hours,planned_hours)" invisible="context.get('set_visible',False)" groups="project.group_time_work_estimation_tasks"/> <field name="remaining_hours" widget="float_time" sum="Remaining Hours" on_change="onchange_remaining(remaining_hours,planned_hours)" invisible="context.get('set_visible',False)" groups="project.group_time_work_estimation_tasks"/>
<field name="date_deadline" invisible="context.get('deadline_visible',True)"/> <field name="date_deadline" invisible="context.get('deadline_visible',True)"/>
<button name="do_open" string="Start Task" type="object" <button name="do_open" string="Start Task" type="object"
states="draft,pending" icon="gtk-go-forward"/> states="draft,pending" icon="gtk-go-forward" groups="base.group_user"/>
<button name="action_close" string="Done" type="object" <button name="action_close" string="Done" type="object"
states="draft,open,pending" icon="gtk-apply"/> states="draft,open,pending" icon="gtk-apply" groups="base.group_user"/>
<button name="%(action_project_task_delegate)d" string="Delegate" type="action" <button name="%(action_project_task_delegate)d" string="Delegate" type="action"
states="pending,open,draft" icon="terp-personal"/> states="pending,open,draft" icon="terp-personal" groups="base.group_user"/>
<field name="stage_id" invisible="context.get('set_visible',False)"/> <field name="stage_id" invisible="context.get('set_visible',False)"/>
<button name="stage_previous" string="Previous Stage" type="object" <button name="stage_previous" string="Previous Stage" type="object"
states="open,pending" icon="gtk-go-back" attrs="{'invisible': [('stage_id','=', False)]}"/> states="open,pending" icon="gtk-go-back"
attrs="{'invisible': [('stage_id','=', False)]}" groups="base.group_user"/>
<button name="stage_next" string="Next Stage" type="object" <button name="stage_next" string="Next Stage" type="object"
states="open,pending" icon="gtk-go-forward" attrs="{'invisible': [('stage_id','=', False)]}"/> states="open,pending" icon="gtk-go-forward"
attrs="{'invisible': [('stage_id','=', False)]}" groups="base.group_user"/>
<field name="state" invisible="context.get('set_visible',False)" groups="base.group_no_one"/> <field name="state" invisible="context.get('set_visible',False)" groups="base.group_no_one"/>
<field name="date_start" invisible="1" groups="base.group_no_one"/> <field name="date_start" invisible="1" groups="base.group_no_one"/>
<field name="date_end" invisible="1" groups="base.group_no_one"/> <field name="date_end" invisible="1" groups="base.group_no_one"/>
@ -589,8 +593,8 @@
<field name="name"/> <field name="name"/>
<filter name="project" string="Project" domain="[('project_id.user_id','=',uid)]" help="My Projects" icon="terp-check"/> <filter name="project" string="Project" domain="[('project_id.user_id','=',uid)]" help="My Projects" icon="terp-check"/>
<field name="user_id"> <field name="user_id">
<filter string="My Tasks" domain="[('user_id','=',uid)]" help="My Tasks" icon="terp-personal" /> <filter string="My Tasks" domain="[('user_id','=',uid)]" help="My Tasks" icon="terp-personal"/>
<filter string="Unassigned Tasks" domain="[('user_id','=',False)]" help="Unassigned Tasks" icon="terp-personal-" /> <filter string="Unassigned Tasks" domain="[('user_id','=',False)]" help="Unassigned Tasks" icon="terp-personal-"/>
</field> </field>
</group> </group>
<newline/> <newline/>

View File

@ -8,13 +8,13 @@
<record model="crm.case.categ" id="bug_categ"> <record model="crm.case.categ" id="bug_categ">
<field name="name">Maintenance</field> <field name="name">Maintenance</field>
<field name="section_id" ref="crm.section_sales_department"/> <field name="section_id" ref="crm.section_sales_department"/>
<field name="object_id" search="[('model','=','project.issue')]" model="ir.model"/> <field name="object_id" search="[('model','=','project.issue')]" model="ir.model"/>
</record> </record>
<record model="crm.case.categ" id="feature_request_categ"> <record model="crm.case.categ" id="feature_request_categ">
<field name="name">Feature Requests</field> <field name="name">Feature Requests</field>
<field name="section_id" ref="crm.section_sales_department"/> <field name="section_id" ref="crm.section_sales_department"/>
<field name="object_id" search="[('model','=','project.issue')]" model="ir.model"/> <field name="object_id" search="[('model','=','project.issue')]" model="ir.model"/>
</record> </record>
<!-- Case type_id --> <!-- Case type_id -->

View File

@ -52,24 +52,26 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<form layout="manual"> <form layout="manual">
<div class="oe_form_topbar"> <div class="oe_form_topbar">
<button name="case_open" string="Open" type="object" <span groups="base.group_user">
states="draft,pending"/> <button name="case_open" string="Open" type="object"
<button name="case_close" string="Done" type="object" states="draft,pending"/>
states="draft,open,pending"/> <button name="case_close" string="Done" type="object"
<button name="case_pending" string="Pending" type="object" states="draft,open,pending"/>
states="draft,open"/> <button name="case_pending" string="Pending" type="object"
<button name="case_escalate" string="Escalate" type="object" states="draft,open"/>
states="draft,open,pending"/> <button name="case_escalate" string="Escalate" type="object"
<button name="case_reset" string="Reset to New" type="object" states="draft,open,pending"/>
states="cancelled,done"/> <button name="case_reset" string="Reset to New" type="object"
<button name="stage_previous" string="Previous Stage" type="object" states="cancelled,done"/>
states="open,pending" icon="gtk-go-back" <button name="stage_previous" string="Previous Stage" type="object"
attrs="{'invisible': [('stage_id','=', False)]}"/> states="open,pending" icon="gtk-go-back"
<button name="stage_next" string="Next Stage" type="object" attrs="{'invisible': [('stage_id','=', False)]}"/>
states="open,pending" icon="gtk-go-forward" <button name="stage_next" string="Next Stage" type="object"
attrs="{'invisible': [('stage_id','=', False)]}"/> states="open,pending" icon="gtk-go-forward"
<button name="case_cancel" string="Cancel" type="object" attrs="{'invisible': [('stage_id','=', False)]}"/>
states="draft,open,pending"/> <button name="case_cancel" string="Cancel" type="object"
states="draft,open,pending"/>
</span>
<div class="oe_right"> <div class="oe_right">
<field name="stage_id" nolabel="1" widget="statusbar"/> <field name="stage_id" nolabel="1" widget="statusbar"/>
</div> </div>
@ -98,7 +100,7 @@
</group> </group>
<group col="3" colspan="2"> <group col="3" colspan="2">
<separator colspan="3" string="Status"/> <separator colspan="3" string="Status"/>
<field name="priority" colspan="3"/> <field name="priority" colspan="3" groups="base.group_user"/>
<field name="task_id" on_change="onchange_task_id(task_id)"/> <field name="task_id" on_change="onchange_task_id(task_id)"/>
<button string="Convert To Task" name="convert_issue_task" icon="gtk-index" type="object" <button string="Convert To Task" name="convert_issue_task" icon="gtk-index" type="object"
attrs="{'invisible':[('task_id','!=',False)]}" groups="base.group_user"/> attrs="{'invisible':[('task_id','!=',False)]}" groups="base.group_user"/>
@ -145,24 +147,24 @@
<field name="name"/> <field name="name"/>
<field name="partner_id"/> <field name="partner_id"/>
<field name="project_id"/> <field name="project_id"/>
<field name="priority" string="Priority"/> <field name="priority" string="Priority" groups="base.group_user"/>
<field name="version_id" widget="selection"/> <field name="version_id" widget="selection"/>
<field name="user_id"/> <field name="user_id"/>
<field name="progress" widget="progressbar" attrs="{'invisible':[('task_id','=',False)]}"/> <field name="progress" widget="progressbar" attrs="{'invisible':[('task_id','=',False)]}"/>
<field name="stage_id" widget="selection" readonly="1"/> <field name="stage_id" widget="selection" readonly="1"/>
<button name="stage_previous" string="Previous" type="object" <button name="stage_previous" string="Previous" type="object"
icon="gtk-go-back" help="Change to Previous Stage" icon="gtk-go-back" help="Change to Previous Stage"
attrs="{'invisible': [('stage_id','=', False)]}"/> attrs="{'invisible': [('stage_id','=', False)]}" groups="base.group_user"/>
<button name="stage_next" string="Next" type="object" <button name="stage_next" string="Next" type="object"
icon="gtk-go-forward" help="Change to Next Stage" icon="gtk-go-forward" help="Change to Next Stage"
attrs="{'invisible': [('stage_id','=', False)]}"/> attrs="{'invisible': [('stage_id','=', False)]}" groups="base.group_user"/>
<field name="state" groups="base.group_no_one"/> <field name="state" groups="base.group_no_one"/>
<button name="case_open" string="Open" type="object" <button name="case_open" string="Open" type="object"
icon="gtk-go-forward" states="draft,pending"/> icon="gtk-go-forward" states="draft,pending" groups="base.group_user"/>
<button name="case_close" string="Done" type="object" <button name="case_close" string="Done" type="object"
icon="gtk-close" states="draft,open,pending"/> icon="gtk-close" states="draft,open,pending" groups="base.group_user"/>
<button name="case_cancel" string="Cancel" type="object" <button name="case_cancel" string="Cancel" type="object"
icon="gtk-cancel" states="draft,open,pending"/> icon="gtk-cancel" states="draft,open,pending" groups="base.group_user"/>
<field name="categ_id" invisible="1"/> <field name="categ_id" invisible="1"/>
<field name="task_id" invisible="1"/> <field name="task_id" invisible="1"/>
</tree> </tree>
@ -239,7 +241,7 @@
<kanban default_group_by="stage_id"> <kanban default_group_by="stage_id">
<field name="color"/> <field name="color"/>
<field name="state" groups="base.group_no_one"/> <field name="state" groups="base.group_no_one"/>
<field name="priority"/> <field name="priority" groups="base.group_user"/>
<field name="user_email"/> <field name="user_email"/>
<field name="user_id"/> <field name="user_id"/>
<templates> <templates>