[IMP] idea: workflow moved on a new priority field to avoid issues with kanban / clickable statusbar widget. Added a color field depending on the priori field. Updated views accordingly.
bzr revid: tde@openerp.com-20130618131545-33tht1ps4ayzk0so
This commit is contained in:
parent
4c9333c802
commit
aff7d457c4
|
@ -7,53 +7,50 @@
|
||||||
<field name="on_create">True</field>
|
<field name="on_create">True</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record model="workflow.activity" id="act_draft">
|
<record model="workflow.activity" id="act_normal">
|
||||||
<field name="wkf_id" ref="wkf_idea" />
|
<field name="wkf_id" ref="wkf_idea" />
|
||||||
<field name="flow_start">True</field>
|
<field name="flow_start">True</field>
|
||||||
<field name="name">draft</field>
|
<field name="name">normal</field>
|
||||||
<field name="kind">function</field>
|
<field name="kind">function</field>
|
||||||
<field name="action">idea_draft()</field>
|
<field name="action">idea_set_normal_priority()</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record model="workflow.activity" id="act_open">
|
<record model="workflow.activity" id="act_low">
|
||||||
<field name="wkf_id" ref="wkf_idea" />
|
<field name="wkf_id" ref="wkf_idea" />
|
||||||
<field name="name">open</field>
|
<field name="name">low</field>
|
||||||
<field name="kind">function</field>
|
<field name="kind">function</field>
|
||||||
<field name="action">idea_open()</field>
|
<field name="action">idea_set_low_priority()</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record model="workflow.activity" id="act_close">
|
<record model="workflow.activity" id="act_high">
|
||||||
<field name="wkf_id" ref="wkf_idea" />
|
<field name="wkf_id" ref="wkf_idea" />
|
||||||
<field name="name">close</field>
|
<field name="name">high</field>
|
||||||
<field name="kind">function</field>
|
<field name="kind">function</field>
|
||||||
<field name="action">idea_close()</field>
|
<field name="action">idea_set_high_priority()</field>
|
||||||
<field name="flow_stop">True</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record model="workflow.activity" id="act_cancel">
|
|
||||||
<field name="wkf_id" ref="wkf_idea" />
|
|
||||||
<field name="name">cancel</field>
|
|
||||||
<field name="kind">function</field>
|
|
||||||
<field name="action">idea_cancel()</field>
|
|
||||||
<field name="flow_stop">True</field>
|
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record model="workflow.transition" id="t1">
|
<record model="workflow.transition" id="t1">
|
||||||
<field name="act_from" ref="act_draft" />
|
<field name="act_from" ref="act_normal" />
|
||||||
<field name="act_to" ref="act_open" />
|
<field name="act_to" ref="act_low" />
|
||||||
<field name="signal">idea_open</field>
|
<field name="signal">idea_set_low_priority</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record model="workflow.transition" id="t2">
|
<record model="workflow.transition" id="t2">
|
||||||
<field name="act_from" ref="act_open" />
|
<field name="act_from" ref="act_low" />
|
||||||
<field name="act_to" ref="act_close" />
|
<field name="act_to" ref="act_normal" />
|
||||||
<field name="signal">idea_close</field>
|
<field name="signal">idea_set_normal_priority</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record model="workflow.transition" id="t3">
|
||||||
|
<field name="act_from" ref="act_normal" />
|
||||||
|
<field name="act_to" ref="act_high" />
|
||||||
|
<field name="signal">idea_set_high_priority</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record model="workflow.transition" id="t4">
|
<record model="workflow.transition" id="t4">
|
||||||
<field name="act_from" ref="act_open" />
|
<field name="act_from" ref="act_high" />
|
||||||
<field name="act_to" ref="act_cancel" />
|
<field name="act_to" ref="act_normal" />
|
||||||
<field name="signal">idea_cancel</field>
|
<field name="signal">idea_set_normal_priority</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
</data>
|
</data>
|
||||||
|
|
|
@ -23,43 +23,45 @@
|
||||||
<field name="name">Communicate using emails</field>
|
<field name="name">Communicate using emails</field>
|
||||||
<field name="description">I start communicating with prospects more by email than phonecalls. I send an email to create a sense of emergency, like "can I call you this week about our quote?" and I call only those that answer this email.</field>
|
<field name="description">I start communicating with prospects more by email than phonecalls. I send an email to create a sense of emergency, like "can I call you this week about our quote?" and I call only those that answer this email.</field>
|
||||||
<field name="user_id" eval="ref('base.user_demo')"/>
|
<field name="user_id" eval="ref('base.user_demo')"/>
|
||||||
|
<field name="state">open</field>
|
||||||
<field name="category_ids" eval="[(6, 0, [ref('idea.idea_cat_0'), ref('idea.idea_cat_1')])]"/>
|
<field name="category_ids" eval="[(6, 0, [ref('idea.idea_cat_0'), ref('idea.idea_cat_1')])]"/>
|
||||||
</record>
|
</record>
|
||||||
<workflow action="idea_open" model="idea.idea" ref="idea_idea_1"/>
|
<workflow action="idea_set_high_priority" model="idea.idea" ref="idea_idea_1"/>
|
||||||
|
|
||||||
<record model="idea.idea" id="idea_idea_2">
|
<record model="idea.idea" id="idea_idea_2">
|
||||||
<field name="name">Use a two-stages testing phase</field>
|
<field name="name">Use a two-stages testing phase</field>
|
||||||
<field name="description">We should perform testing using two levels of validation.</field>
|
<field name="description">We should perform testing using two levels of validation.</field>
|
||||||
<field name="user_id" eval="ref('base.user_root')"/>
|
<field name="user_id" eval="ref('base.user_root')"/>
|
||||||
|
<field name="state">open</field>
|
||||||
<field name="category_ids" eval="[(6, 0, [ref('idea.idea_cat_1'), ref('idea.idea_cat_2')])]"/>
|
<field name="category_ids" eval="[(6, 0, [ref('idea.idea_cat_1'), ref('idea.idea_cat_2')])]"/>
|
||||||
</record>
|
</record>
|
||||||
<workflow action="idea_open" model="idea.idea" ref="idea_idea_2"/>
|
<workflow action="idea_set_high_priority" model="idea.idea" ref="idea_idea_2"/>
|
||||||
|
|
||||||
<record model="idea.idea" id="idea_idea_3">
|
<record model="idea.idea" id="idea_idea_3">
|
||||||
<field name="name">Write some functional documentation about procurements</field>
|
<field name="name">Write some functional documentation about procurements</field>
|
||||||
<field name="description">We receive many questions about OpenChatter. Maybe some functional doc could save us some time.</field>
|
<field name="description">We receive many questions about OpenChatter. Maybe some functional doc could save us some time.</field>
|
||||||
<field name="user_id" eval="ref('base.user_demo')"/>
|
<field name="user_id" eval="ref('base.user_demo')"/>
|
||||||
|
<field name="state">open</field>
|
||||||
<field name="category_ids" eval="[(6, 0, [ref('idea.idea_cat_0'), ref('idea.idea_cat_1')])]"/>
|
<field name="category_ids" eval="[(6, 0, [ref('idea.idea_cat_0'), ref('idea.idea_cat_1')])]"/>
|
||||||
</record>
|
</record>
|
||||||
<workflow action="idea_open" model="idea.idea" ref="idea_idea_3"/>
|
|
||||||
|
|
||||||
<record model="idea.idea" id="idea_idea_4">
|
<record model="idea.idea" id="idea_idea_4">
|
||||||
<field name="name">Better management of smtp errors</field>
|
<field name="name">Better management of smtp errors</field>
|
||||||
<field name="description">There should be away to store the reason why some emails are not sent.</field>
|
<field name="description">There should be away to store the reason why some emails are not sent.</field>
|
||||||
<field name="user_id" eval="ref('base.user_root')"/>
|
<field name="user_id" eval="ref('base.user_root')"/>
|
||||||
|
<field name="state">close</field>
|
||||||
<field name="category_ids" eval="[(6, 0, [ref('idea.idea_cat_2')])]"/>
|
<field name="category_ids" eval="[(6, 0, [ref('idea.idea_cat_2')])]"/>
|
||||||
</record>
|
</record>
|
||||||
<workflow action="idea_open" model="idea.idea" ref="idea_idea_4"/>
|
<workflow action="idea_set_low_priority" model="idea.idea" ref="idea_idea_4"/>
|
||||||
<workflow action="idea_close" model="idea.idea" ref="idea_idea_4"/>
|
|
||||||
|
|
||||||
<record model="idea.idea" id="idea_idea_5">
|
<record model="idea.idea" id="idea_idea_5">
|
||||||
<field name="name">Kitten mode enabled by default</field>
|
<field name="name">Kitten mode enabled by default</field>
|
||||||
<field name="description">As this is the most loved feature, the kitten mode should be enabled by default. And maybe even impossible to remove.</field>
|
<field name="description">As this is the most loved feature, the kitten mode should be enabled by default. And maybe even impossible to remove.</field>
|
||||||
<field name="user_id" eval="ref('base.user_root')"/>
|
<field name="user_id" eval="ref('base.user_root')"/>
|
||||||
|
<field name="state">cancel</field>
|
||||||
<field name="category_ids" eval="[(6, 0, [ref('idea.idea_cat_2')])]"/>
|
<field name="category_ids" eval="[(6, 0, [ref('idea.idea_cat_2')])]"/>
|
||||||
</record>
|
</record>
|
||||||
<workflow action="idea_open" model="idea.idea" ref="idea_idea_5"/>
|
<workflow action="idea_set_low_priority" model="idea.idea" ref="idea_idea_4"/>
|
||||||
<workflow action="idea_cancel" model="idea.idea" ref="idea_idea_5"/>
|
|
||||||
|
|
||||||
</data>
|
</data>
|
||||||
</openerp>
|
</openerp>
|
||||||
|
|
|
@ -52,6 +52,15 @@ class IdeaIdea(osv.Model):
|
||||||
('close', 'Accepted'),
|
('close', 'Accepted'),
|
||||||
('cancel', 'Refused')]
|
('cancel', 'Refused')]
|
||||||
|
|
||||||
|
def _get_color(self, cr, uid, ids, fields, args, context=None):
|
||||||
|
res = dict.fromkeys(ids, 3)
|
||||||
|
for idea in self.browse(cr, uid, ids, context=context):
|
||||||
|
if idea.priority == 'low':
|
||||||
|
res[idea.id] = 0
|
||||||
|
elif idea.priority == 'high':
|
||||||
|
res[idea.id] = 7
|
||||||
|
return res
|
||||||
|
|
||||||
_columns = {
|
_columns = {
|
||||||
'user_id': fields.many2one('res.users', 'Responsible', required=True),
|
'user_id': fields.many2one('res.users', 'Responsible', required=True),
|
||||||
'name': fields.char('Summary', required=True, readonly=True,
|
'name': fields.char('Summary', required=True, readonly=True,
|
||||||
|
@ -61,7 +70,10 @@ class IdeaIdea(osv.Model):
|
||||||
states={'draft': [('readonly', False)]},
|
states={'draft': [('readonly', False)]},
|
||||||
help='Content of the idea'),
|
help='Content of the idea'),
|
||||||
'category_ids': fields.many2many('idea.category', string='Tags'),
|
'category_ids': fields.many2many('idea.category', string='Tags'),
|
||||||
'state': fields.selection(_get_state_list, string='Status'),
|
'state': fields.selection(_get_state_list, string='Status', required=True),
|
||||||
|
'priority': fields.selection([('low', 'Low'), ('normal', 'Normal'), ('high', 'High')],
|
||||||
|
string='Priority', required=True),
|
||||||
|
'color': fields.function(_get_color, type='integer', string='Color Index'),
|
||||||
}
|
}
|
||||||
|
|
||||||
_sql_constraints = [
|
_sql_constraints = [
|
||||||
|
@ -71,6 +83,7 @@ class IdeaIdea(osv.Model):
|
||||||
_defaults = {
|
_defaults = {
|
||||||
'user_id': lambda self, cr, uid, ctx=None: uid,
|
'user_id': lambda self, cr, uid, ctx=None: uid,
|
||||||
'state': lambda self, cr, uid, ctx=None: self._get_state_list(cr, uid, ctx)[0][0],
|
'state': lambda self, cr, uid, ctx=None: self._get_state_list(cr, uid, ctx)[0][0],
|
||||||
|
'priority': 'normal',
|
||||||
}
|
}
|
||||||
|
|
||||||
#------------------------------------------------------
|
#------------------------------------------------------
|
||||||
|
@ -79,6 +92,7 @@ class IdeaIdea(osv.Model):
|
||||||
|
|
||||||
def read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False):
|
def read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False):
|
||||||
""" Override read_group to always display all states. """
|
""" Override read_group to always display all states. """
|
||||||
|
if groupby and groupby[0] == "state":
|
||||||
# Default result structure
|
# Default result structure
|
||||||
states = self._get_state_list(cr, uid, context=context)
|
states = self._get_state_list(cr, uid, context=context)
|
||||||
read_group_all_states = [{
|
read_group_all_states = [{
|
||||||
|
@ -98,19 +112,18 @@ class IdeaIdea(osv.Model):
|
||||||
res[0]['state'] = [state_value, state_name]
|
res[0]['state'] = [state_value, state_name]
|
||||||
result.append(res[0])
|
result.append(res[0])
|
||||||
return result
|
return result
|
||||||
|
else:
|
||||||
|
return super(IdeaIdea, self).read_group(cr, uid, domain, fields, groupby, offset=offset, limit=limit, context=context, orderby=orderby)
|
||||||
|
|
||||||
#------------------------------------------------------
|
#------------------------------------------------------
|
||||||
# Workflow / Actions
|
# Workflow / Actions
|
||||||
#------------------------------------------------------
|
#------------------------------------------------------
|
||||||
|
|
||||||
def idea_cancel(self, cr, uid, ids, context=None):
|
def idea_set_low_priority(self, cr, uid, ids, context=None):
|
||||||
return self.write(cr, uid, ids, {'state': 'cancel'}, context=context)
|
return self.write(cr, uid, ids, {'priority': 'low'}, context=context)
|
||||||
|
|
||||||
def idea_open(self, cr, uid, ids, context={}):
|
def idea_set_normal_priority(self, cr, uid, ids, context={}):
|
||||||
return self.write(cr, uid, ids, {'state': 'open'}, context=context)
|
return self.write(cr, uid, ids, {'priority': 'normal'}, context=context)
|
||||||
|
|
||||||
def idea_close(self, cr, uid, ids, context={}):
|
def idea_set_high_priority(self, cr, uid, ids, context={}):
|
||||||
return self.write(cr, uid, ids, {'state': 'close'}, context=context)
|
return self.write(cr, uid, ids, {'priority': 'high'}, context=context)
|
||||||
|
|
||||||
def idea_draft(self, cr, uid, ids, context={}):
|
|
||||||
return self.write(cr, uid, ids, {'state': 'draft'}, context=context)
|
|
||||||
|
|
|
@ -7,10 +7,11 @@
|
||||||
<field name="model">idea.idea</field>
|
<field name="model">idea.idea</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<kanban version="7.0" default_group_by="state" class="oe_background_grey">
|
<kanban version="7.0" default_group_by="state" class="oe_background_grey">
|
||||||
|
<field name="color"/>
|
||||||
<field name="user_id"/>
|
<field name="user_id"/>
|
||||||
<templates>
|
<templates>
|
||||||
<t t-name="kanban-box">
|
<t t-name="kanban-box">
|
||||||
<div t-attf-class="oe_kanban_card oe_kanban_idea_idea oe_kanban_global_click">
|
<div t-attf-class="oe_kanban_card oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_idea_idea oe_kanban_global_click">
|
||||||
<div class="oe_dropdown_toggle oe_dropdown_kanban"
|
<div class="oe_dropdown_toggle oe_dropdown_kanban"
|
||||||
groups="base.group_user">
|
groups="base.group_user">
|
||||||
<span class="oe_e">í</span>
|
<span class="oe_e">í</span>
|
||||||
|
@ -42,16 +43,20 @@
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<form string="Idea" version="7.0">
|
<form string="Idea" version="7.0">
|
||||||
<header>
|
<header>
|
||||||
<button name="idea_open" string="Open" states="draft" class="oe_highlight"/>
|
<button name="idea_set_low_priority" string="Set Low Priority" class="oe_highlight"
|
||||||
<button name="idea_close" string="Accept" states="open" class="oe_highlight"/>
|
attrs="{'invisible': [('priority', '!=', 'normal')]}"/>
|
||||||
<button name="idea_cancel" string="Refuse" states="open" class="oe_highlight"/>
|
<button name="idea_set_normal_priority" string="Set Normal Priority" class="oe_highlight"
|
||||||
<field name="state" widget="statusbar" statusbar_visible="draft,open,close"/>
|
attrs="{'invisible': [('priority', 'not in', ['low', 'high'])]}"/>
|
||||||
|
<button name="idea_set_high_priority" string="Set High Priority" class="oe_highlight"
|
||||||
|
attrs="{'invisible': [('priority', '!=', 'normal')]}"/>
|
||||||
|
<field name="state" widget="statusbar" clickable="True"/>
|
||||||
</header>
|
</header>
|
||||||
<sheet>
|
<sheet>
|
||||||
<label for="name" class="oe_edit_only"/>
|
<label for="name" class="oe_edit_only"/>
|
||||||
<h1><field name="name"/></h1>
|
<h1><field name="name"/></h1>
|
||||||
<group>
|
<group>
|
||||||
<field name="user_id"/>
|
<field name="user_id"/>
|
||||||
|
<field name="priority" readonly="True"/>
|
||||||
<field name="category_ids" widget="many2many_tags"/>
|
<field name="category_ids" widget="many2many_tags"/>
|
||||||
<field name="description"/>
|
<field name="description"/>
|
||||||
</group>
|
</group>
|
||||||
|
@ -67,6 +72,7 @@
|
||||||
<tree colors="blue:state == 'draft';black:state in ('open', 'close'); gray:state == 'cancel'" string="Ideas">
|
<tree colors="blue:state == 'draft';black:state in ('open', 'close'); gray:state == 'cancel'" string="Ideas">
|
||||||
<field name="name"/>
|
<field name="name"/>
|
||||||
<field name="user_id"/>
|
<field name="user_id"/>
|
||||||
|
<field name="priority"/>
|
||||||
<field name="state"/>
|
<field name="state"/>
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
|
|
Loading…
Reference in New Issue