[MOD] project_issue,crm : usability improvements

bzr revid: vir@tinyerp.com-20100609054931-tejn3w41z3g8awlf
This commit is contained in:
RGA(Open ERP) 2010-06-09 11:19:31 +05:30 committed by Vir (Open ERP)
parent ce424c9d8a
commit 335d13ff37
6 changed files with 105 additions and 95 deletions

View File

@ -120,8 +120,8 @@ class crm_case(object):
context = {}
s = self.get_stage_dict(cr, uid, ids, context=context)
section = self._name
for case in self.browse(cr, uid, ids, context):
section = (case.section_id.id or False)
if section in s:
st = case.stage_id.id or False
if st in s[section]:
@ -137,13 +137,13 @@ class crm_case(object):
@param context: A standard dictionary for contextual values"""
if not context:
context = {}
sid = self.pool.get('crm.case.stage').search(cr, uid, \
stage_obj = self.pool.get('crm.case.stage')
sid = stage_obj.search(cr, uid, \
[('object_id.model', '=', self._name)], context=context)
s = {}
previous = {}
for stage in self.pool.get('crm.case.stage').browse(cr, uid, sid, context=context):
section = stage.section_id.id or False
section = self._name
for stage in stage_obj.browse(cr, uid, sid, context=context):
s.setdefault(section, {})
s[section][previous.get(section, False)] = stage.id
previous[section] = stage.id
@ -161,9 +161,8 @@ class crm_case(object):
context = {}
s = self.get_stage_dict(cr, uid, ids, context=context)
section = self._name
for case in self.browse(cr, uid, ids, context):
section = (case.section_id.id or False)
if section in s:
st = case.stage_id.id or False
s[section] = dict([(v, k) for (k, v) in s[section].iteritems()])

View File

@ -69,7 +69,7 @@ class project_issue(osv.osv, crm.crm_case):
duration = 0
ans = False
hours = 0
if field in ['working_hours_open','day_open']:
if issue.date_open:
date_create = datetime.strptime(issue.create_date, "%Y-%m-%d %H:%M:%S")
@ -121,38 +121,38 @@ class project_issue(osv.osv, crm.crm_case):
return res
_columns = {
'thread_id': fields.many2one('mailgate.thread', 'Thread', required=False),
'id': fields.integer('ID'),
'thread_id': fields.many2one('mailgate.thread', 'Thread', required=False),
'id': fields.integer('ID'),
'name': fields.char('Name', size=128, required=True),
'active': fields.boolean('Active', required=False),
'active': fields.boolean('Active', required=False),
'create_date': fields.datetime('Creation Date' , readonly=True),
'write_date': fields.datetime('Update Date' , readonly=True),
'date_deadline': fields.date('Deadline'),
'date_closed': fields.datetime('Closed', readonly=True),
'section_id': fields.many2one('crm.case.section', 'Sales Team', \
select=True, help='Sales team to which Case belongs to.\
Define Responsible user and Email account for mail gateway.'),
Define Responsible user and Email account for mail gateway.'),
'user_id': fields.many2one('res.users', 'Responsible'),
'partner_id': fields.many2one('res.partner', 'Partner'),
'partner_address_id': fields.many2one('res.partner.address', 'Partner Contact', \
domain="[('partner_id','=',partner_id)]"),
'company_id': fields.many2one('res.company', 'Company'),
'description': fields.text('Description'),
domain="[('partner_id','=',partner_id)]"),
'company_id': fields.many2one('res.company', 'Company'),
'description': fields.text('Description'),
'state': fields.selection([
('draft', 'Draft'),
('open', 'Todo'),
('cancel', 'Cancelled'),
('done', 'Closed'),
('draft', 'Draft'),
('open', 'Todo'),
('cancel', 'Cancelled'),
('done', 'Closed'),
('pending', 'Pending'),
], 'State', size=16, readonly=True,
], 'State', size=16, readonly=True,
help='The state is set to \'Draft\', when a case is created.\
\nIf the case is in progress the state is set to \'Open\'.\
\nWhen the case is over, the state is set to \'Done\'.\
\nIf the case needs to be reviewed then the state is set to \'Pending\'.'),
'email_from': fields.char('Email', size=128, help="These people will receive email."),
\nIf the case needs to be reviewed then the state is set to \'Pending\'.'),
'email_from': fields.char('Email', size=128, help="These people will receive email."),
'email_cc': fields.text('Watchers Emails', size=252 , help="These people\
will receive a copy of the future" \
" communication between partner and users by email"),
" communication between partner and users by email"),
'date_open': fields.datetime('Opened', readonly=True),
# Project Issue fields
'date_closed': fields.datetime('Closed', readonly=True),
@ -180,7 +180,7 @@ class project_issue(osv.osv, crm.crm_case):
'working_hours_close': fields.function(_compute_day, string='Working Hours to Close the Issue', \
method=True, multi='working_days_close', type="float", store=True),
}
def _get_project(self, cr, uid, context):
user = self.pool.get('res.users').browse(cr,uid,uid, context=context)
if user.context_project_id:
@ -189,14 +189,14 @@ class project_issue(osv.osv, crm.crm_case):
_defaults = {
'active': lambda *a: 1,
'user_id': crm.crm_case._get_default_user,
'partner_id': crm.crm_case._get_default_partner,
'partner_address_id': crm.crm_case._get_default_partner_address,
'email_from': crm.crm_case. _get_default_email,
'user_id': crm.crm_case._get_default_user,
'partner_id': crm.crm_case._get_default_partner,
'partner_address_id': crm.crm_case._get_default_partner_address,
'email_from': crm.crm_case. _get_default_email,
'state': lambda *a: 'draft',
'section_id': crm.crm_case. _get_section,
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.helpdesk', context=c),
'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0],
'section_id': crm.crm_case. _get_section,
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.helpdesk', context=c),
'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0],
'project_id':_get_project,
}
@ -277,7 +277,7 @@ class project_issue(osv.osv, crm.crm_case):
if not stage.on_change:
return {'value':{}}
return {'value':{}}
def case_escalate(self, cr, uid, ids, *args):
"""Escalates case to top level
@param self: The object pointer
@ -286,16 +286,17 @@ class project_issue(osv.osv, crm.crm_case):
@param ids: List of case Ids
@param *args: Tuple Value for additional Params
"""
res = super(project_issue, self).case_escalate(cr, uid, ids, args)
cases = self.browse(cr, uid, ids)
for case in cases:
data = {}
if case.project_id.project_escalation_id:
data['project_id'] = case.project_id.project_escalation_id.id
if case.project_id.project_escalation_id.user_id:
data['user_id'] = case.project_id.project_escalation_id.user_id.id
else:
raise osv.except_osv(_('Warning !'), _('You cannot escalate this case.\nThe relevant Project has not configured the Escalation Project!'))
raise osv.except_osv(_('Warning !'), _('You cannot escalate this issue.\nThe relevant Project has not configured the Escalation Project!'))
self.write(cr, uid, [case.id], data)
return res
return True
project_issue()

View File

@ -14,7 +14,7 @@
<field name="view_mode">tree,calendar</field>
<field name="view_id" ref="project_issue_tree_view"/>
<field name="domain" eval="[('categ_id','=',ref('bug_categ'))]"/>
<field name="context">{"search_default_user_id": uid, "search_default_my_bugs":1,"search_default_current_bugs":1,"search_default_project_id":project_id}</field>
<field name="context">{"search_default_user_id": uid,"search_default_current":1,"search_default_project_id":project_id}</field>
<field name="search_view_id" ref="view_project_issue_filter"/>
</record>
<record model="ir.actions.act_window.view" id="action_crm_tag_tree_view0">
@ -36,6 +36,15 @@
<field name="act_window_id" ref="project_issue_categ_act0"/>
</record>
<act_window
domain="[('project_id', '=', active_id)]"
id="act_project_project_2_project_issue_all"
name="Issues"
res_model="project.issue"
src_model="project.project"
view_mode="tree,form,calendar,graph"
view_type="form"/>
<!--<menuitem id="menu_aftertask" name="Bug" parent="project.menu_main" visible="False"/>-->
<menuitem name="Issues" id="menu_project_issue_track" parent="project.menu_project_management" action="project_issue_categ_act0"/>
</data>

View File

@ -32,6 +32,8 @@
<form string="Issue Tracker Form">
<group colspan="4" col="6">
<field name="name"/>
<field name="project_id" required="True"/>
<field name="categ_id" widget="selection" domain="[('object_id.model', '=', 'project.issue')]"/>
<field name="user_id"/>
<field name="assigned_to" />
<group colspan="2" col="4">
@ -39,8 +41,6 @@
<button icon="gtk-go-back" string="" name="stage_previous" type="object"/>
<button icon="gtk-go-forward" string="" name="stage_next" type="object"/>
</group>
<field name="project_id" required="True"/>
<field name="categ_id" widget="selection" domain="[('object_id.model', '=', 'project.issue')]"/>
</group>
<notebook colspan="4">
<page string="General">
@ -73,40 +73,6 @@
<button name="case_reset" string="Reset to Draft" states="done,cancel" type="object" icon="gtk-convert"/>
</group>
</page>
<page string="History" groups="base.group_extended">
<group col="2" colspan="2">
<separator colspan="2" string="Date"/>
<field name="create_date"/>
<field name="write_date" />
<field name="date_closed"/>
<field name="date_open"/>
</group>
<group colspan="2" col="2">
<separator string="Statistics" colspan="2" col="2"/>
<field name="day_open"/>
<field name="day_close"/>
<field name="working_hours_open" widget="float_time"/>
<field name="working_hours_close" widget="float_time"/>
</group>
<group colspan="2" col="2">
<separator string="References" colspan="2"/>
<field name="id"/>
<field name="active"/>
</group>
<field name="log_ids" nolabel="1" colspan="4">
<tree string="Logs">
<field name="name" colspan="4"/>
<field name="date"/>
<field name="user_id"/>
</tree>
<form string="Logs">
<separator string="Action Information" colspan="4"/>
<field name="name" colspan="4"/>
<field name="date"/>
<field name="user_id"/>
</form>
</field>
</page>
<page string="Emails" groups="base.group_extended">
<group colspan="4">
<field colspan="4" name="email_cc" string="CC"/>
@ -144,6 +110,40 @@
context="{'mail':'new', 'model': 'project.issue'}"
icon="gtk-go-forward" type="action" />
</page>
<page string="History" groups="base.group_extended">
<group col="2" colspan="2">
<separator colspan="2" string="Date"/>
<field name="create_date"/>
<field name="write_date" />
<field name="date_closed"/>
<field name="date_open"/>
</group>
<group colspan="2" col="2">
<separator string="Statistics" colspan="2" col="2"/>
<field name="day_open"/>
<field name="day_close"/>
<field name="working_hours_open" widget="float_time"/>
<field name="working_hours_close" widget="float_time"/>
</group>
<group colspan="2" col="2">
<separator string="References" colspan="2"/>
<field name="id"/>
<field name="active"/>
</group>
<field name="log_ids" nolabel="1" colspan="4">
<tree string="Logs">
<field name="name" colspan="4"/>
<field name="date"/>
<field name="user_id"/>
</tree>
<form string="Logs">
<separator string="Action Information" colspan="4"/>
<field name="name" colspan="4"/>
<field name="date"/>
<field name="user_id"/>
</form>
</field>
</page>
</notebook>
</form>
</field>
@ -153,7 +153,7 @@
<field name="model">project.issue</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Issue Tracker Tree" colors="red:state=='open';black:state in ('draft', 'cancel','done','pending')">
<tree string="Issue Tracker Tree" colors="red:state=='open';blue:state=='pending';grey:state in ('cancel', 'done')">
<field name="id"/>
<field name="create_date"/>
<field name="name"/>
@ -186,13 +186,11 @@
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Issue Tracker Search">
<group colspan="4" col="20">
<filter string="Current" domain="[('state','in',('open','draft'))]" help="Draft and Open Issues" icon="terp-check" default="1"/>
<group>
<filter string="Current" name="current" domain="[('state','in',('open','draft'))]" help="Draft and Open Issues" icon="terp-check" default="1"/>
<filter string="In Progress" domain="[('state','=','open')]" help="Open Issues" icon="terp-camera_test"/>
<filter string="Pending" domain="[('state','=','pending')]" help="Pending Issues" icon="terp-gtk-media-pause"/>
<separator orientation="vertical"/>
<filter icon="terp-go-today" string=" Today "
separator="1"
domain="[('date','=',time.strftime('%%Y-%%m-%%d'))]"
@ -204,21 +202,20 @@
help="Bugs during last 7 days"
/>
<separator orientation="vertical"/>
<field name="name" select='1' string="Subject"/>
<field name="user_id" select="1" widget="selection"/>
<field name="state" select="1">
<filter icon="terp-check" domain="[('state','in',('open','draft'))]" help="Current Bugs" name="current_bugs"/>
<filter icon="terp-camera_test" domain="[('state','=','open')]" help="Open Bugs"/>
</field>
<field name="project_id" select="1" widget="selection" string="Project"/>
<field name="name" string="Name"/>
<field name="user_id" widget="selection"/>
<field name="project_id" widget="selection" string="Project"/>
<field name="state"/>
</group>
<newline/>
<group expand="0" string="Group By..." colspan="4" col="20" groups="base.group_extended">
<group expand="0" string="Group By..." groups="base.group_extended">
<filter string="Project" icon="terp-folder-blue" domain="[]"
context="{'group_by':'project_id'}" />
<filter string="Stage" icon="terp-stage" domain="[]"
context="{'group_by':'stage_id'}" />
<filter string="Priority" icon="terp-rating-rated" domain="[]"
context="{'group_by':'priority'}" />
<filter string="Campaign" icon="terp-gtk-jump-to-rtl"
<filter string="Version" icon="terp-gtk-jump-to-rtl"
domain="[]" context="{'group_by':'type_id'}" />
<separator orientation="vertical" />
<filter string="Partner" icon="terp-personal" domain="[]"
@ -228,7 +225,6 @@
<separator orientation="vertical" />
<filter string="Month" icon="terp-go-month"
domain="[]" context="{'group_by':'create_date'}" />
<separator orientation="vertical" />
</group>
</search>
</field>

View File

@ -1,3 +1,11 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_project_issue","project.issue","model_project_issue","crm.group_crm_manager",1,1,1,1
"access_project_issue_report","project.issue.report","model_project_issue_report","crm.group_crm_manager",1,0,0,0
"access_project_issue_all","project.issue","model_project_issue","project.group_project_manager",1,1,1,1
"access_project_issue","project.issue","model_project_issue","project_issue.group_project_supporter",1,1,1,1
"access_project_issue_report_all","project.issue.report","model_project_issue_report","project.group_project_manager",1,1,1,1
"access_project_issue_report","project.issue.report","model_project_issue_report","project_issue.group_project_supporter",1,1,1,1
"access_crm_case_categ_id","crm.case.categ","crm.model_crm_case_categ","project.group_project_manager",1,1,1,1
"access_crm_case_categ_supp","crm.case.categ","crm.model_crm_case_categ","project_issue.group_project_supporter",1,0,0,0
"access_crm_case_resource_type_project","crm_case_resource_type manager","crm.model_crm_case_resource_type","project.group_project_manager",1,1,1,1
"access_crm_case_resource_supp","crm_case_resource_type manager","crm.model_crm_case_resource_type","project_issue.group_project_supporter",1,0,0,0
"access_crm_case_stage_project","crm.case.stage","crm.model_crm_case_stage","project.group_project_manager",1,1,1,1
"access_crm_case_stage_manager_suppo","crm.case.stage","crm.model_crm_case_stage","project_issue.group_project_supporter",1,0,0,0

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_project_issue access_project_issue_all project.issue model_project_issue crm.group_crm_manager project.group_project_manager 1 1 1 1
3 access_project_issue_report access_project_issue project.issue.report project.issue model_project_issue_report model_project_issue crm.group_crm_manager project_issue.group_project_supporter 1 0 1 0 1 0 1
4 access_project_issue_report_all project.issue.report model_project_issue_report project.group_project_manager 1 1 1 1
5 access_project_issue_report project.issue.report model_project_issue_report project_issue.group_project_supporter 1 1 1 1
6 access_crm_case_categ_id crm.case.categ crm.model_crm_case_categ project.group_project_manager 1 1 1 1
7 access_crm_case_categ_supp crm.case.categ crm.model_crm_case_categ project_issue.group_project_supporter 1 0 0 0
8 access_crm_case_resource_type_project crm_case_resource_type manager crm.model_crm_case_resource_type project.group_project_manager 1 1 1 1
9 access_crm_case_resource_supp crm_case_resource_type manager crm.model_crm_case_resource_type project_issue.group_project_supporter 1 0 0 0
10 access_crm_case_stage_project crm.case.stage crm.model_crm_case_stage project.group_project_manager 1 1 1 1
11 access_crm_case_stage_manager_suppo crm.case.stage crm.model_crm_case_stage project_issue.group_project_supporter 1 0 0 0

View File

@ -2,12 +2,9 @@
<openerp>
<data noupdate="1">
<record id="project_issue_rule" model="ir.rule">
<field name="name">project.issue.rule.group</field>
<field name="model_id" search="[('model','=','project.issue')]" model="ir.model"/>
<field name="global" eval="True"/>
<field name="domain_force">['|',('project_id','=',False),('project_id','=',user.context_project_id)]</field>
<record id="group_project_supporter" model="res.groups">
<field name="name">Project / Support Manager</field>
</record>
</data>
</data>
</openerp>