[ADD] idea: added a kanban view
bzr revid: tde@openerp.com-20130618080820-18bhrsq3flfacpjl
This commit is contained in:
parent
145befd3e7
commit
f470535b0e
|
@ -41,6 +41,7 @@ Once installed, check the menu 'Ideas' in the 'Tools' main menu.""",
|
|||
'security/idea.xml',
|
||||
'security/ir.model.access.csv',
|
||||
'views/idea.xml',
|
||||
'views/category.xml',
|
||||
'data/idea_workflow.xml',
|
||||
],
|
||||
'demo': [
|
||||
|
@ -49,7 +50,9 @@ Once installed, check the menu 'Ideas' in the 'Tools' main menu.""",
|
|||
'installable': True,
|
||||
'application': True,
|
||||
'images': [],
|
||||
'css': [],
|
||||
'css': [
|
||||
'static/src/css/idea_idea.css',
|
||||
],
|
||||
'js': [],
|
||||
'qweb': [],
|
||||
}
|
||||
|
|
|
@ -2,16 +2,35 @@
|
|||
<openerp>
|
||||
<data>
|
||||
|
||||
<record model="idea.category" id="idea_category_sales">
|
||||
<record model="idea.category" id="idea_cat_0">
|
||||
<field name="name">Sales</field>
|
||||
</record>
|
||||
<record model="idea.category" id="idea_category_general">
|
||||
<record model="idea.category" id="idea_cat_1">
|
||||
<field name="name">Organization</field>
|
||||
</record>
|
||||
<record model="idea.category" id="idea_category_technical">
|
||||
<record model="idea.category" id="idea_cat_2">
|
||||
<field name="name">Technical</field>
|
||||
</record>
|
||||
|
||||
<record model="idea.idea" id="idea_idea_1">
|
||||
<field name="name">Name</field>
|
||||
<field name="description">Description</field>
|
||||
<field name="state">draft</field>
|
||||
<field name="category_ids" eval="(4, ref('idea.idea_cat_0'))"/>
|
||||
</record>
|
||||
<record model="idea.idea" id="idea_idea_2">
|
||||
<field name="name">Name2</field>
|
||||
<field name="description">Description</field>
|
||||
<field name="state">draft</field>
|
||||
<field name="category_ids" eval="(4, ref('idea.idea_cat_1'))"/>
|
||||
</record>
|
||||
<record model="idea.idea" id="idea_idea_3">
|
||||
<field name="name">Name3</field>
|
||||
<field name="description">Description</field>
|
||||
<field name="state">draft</field>
|
||||
<field name="category_ids" eval="(4, ref('idea.idea_cat_2'))"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ VoteValues = [('-1', 'Not Voted'), ('0', 'Very Bad'), ('25', 'Bad'), \
|
|||
DefaultVoteValue = '50'
|
||||
|
||||
|
||||
class idea_category(osv.osv):
|
||||
class IdeaCategory(osv.Model):
|
||||
""" Category of Idea """
|
||||
_name = "idea.category"
|
||||
_description = "Idea Category"
|
||||
|
@ -43,13 +43,18 @@ class idea_category(osv.osv):
|
|||
]
|
||||
|
||||
|
||||
class idea_idea(osv.osv):
|
||||
class IdeaIdea(osv.Model):
|
||||
""" Model of an Idea """
|
||||
_name = 'idea.idea'
|
||||
_description = 'Propose and Share your Ideas'
|
||||
_rec_name = 'name'
|
||||
_order = 'name asc'
|
||||
# _inherit = ['mail.thread']
|
||||
|
||||
def _get_state_list(self, cr, uid, context=None):
|
||||
return [('draft', 'New'),
|
||||
('open', 'Accepted'),
|
||||
('cancel', 'Refused'),
|
||||
('close', 'Done')]
|
||||
|
||||
_columns = {
|
||||
'create_uid': fields.many2one('res.users', 'Creator', required=True, readonly=True),
|
||||
|
@ -61,19 +66,48 @@ class idea_idea(osv.osv):
|
|||
help='Content of the idea'),
|
||||
'category_ids': fields.many2many('idea.category', string='Tags', readonly=True,
|
||||
states={'draft': [('readonly', False)]}),
|
||||
'state': fields.selection([('draft', 'New'),
|
||||
('open', 'Accepted'),
|
||||
('cancel', 'Refused'),
|
||||
('close', 'Done')],
|
||||
'Status', readonly=True, track_visibility='onchange'),
|
||||
'state': fields.selection(_get_state_list, string='Status',
|
||||
readonly=True, track_visibility='onchange'),
|
||||
}
|
||||
|
||||
_sql_constraints = [
|
||||
('name', 'unique(name)', 'The name of the idea must be unique')
|
||||
]
|
||||
|
||||
_defaults = {
|
||||
'state': lambda *a: 'draft',
|
||||
'state': lambda self, cr, uid, ctx=None: self._get_state_list(cr, uid, ctx)[0][0],
|
||||
}
|
||||
|
||||
#------------------------------------------------------
|
||||
# Technical stuff
|
||||
#------------------------------------------------------
|
||||
|
||||
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. """
|
||||
# Default result structure
|
||||
states = self._get_state_list(cr, uid, context=context)
|
||||
read_group_all_states = [{
|
||||
'__context': {'group_by': groupby[1:]},
|
||||
'__domain': domain + [('state', '=', state_value)],
|
||||
'state': state_value,
|
||||
'state_count': 0,
|
||||
} for state_value, state_name in states]
|
||||
# Get standard results
|
||||
read_group_res = super(IdeaIdea, self).read_group(cr, uid, domain, fields, groupby, offset, limit, context, orderby)
|
||||
# Update standard results with default results
|
||||
result = []
|
||||
for state_value, state_name in states:
|
||||
res = filter(lambda x: x['state'] == state_value, read_group_res)
|
||||
if not res:
|
||||
res = filter(lambda x: x['state'] == state_value, read_group_all_states)
|
||||
res[0]['state'] = [state_value, state_name]
|
||||
result.append(res[0])
|
||||
return result
|
||||
|
||||
#------------------------------------------------------
|
||||
# Workflow / Actions
|
||||
#------------------------------------------------------
|
||||
|
||||
def idea_cancel(self, cr, uid, ids, context=None):
|
||||
return self.write(cr, uid, ids, {'state': 'cancel'}, context=context)
|
||||
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
.openerp .oe_kanban_view .oe_kanban_idea_idea {
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
.openerp .oe_kanban_view .oe_kanban_idea_idea .oe_avatars {
|
||||
text-align: right;
|
||||
margin: -5px 0 -10px 0;
|
||||
}
|
||||
|
||||
.openerp .oe_kanban_view .oe_kanban_idea_idea .oe_avatars img {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
padding-left: 0px;
|
||||
margin-top: 3px;
|
||||
-moz-border-radius: 2px;
|
||||
-webkit-border-radius: 2px;
|
||||
border-radius: 2px;
|
||||
-moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
|
||||
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
|
||||
-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
<?xml version="1.0"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<!-- VIEWS DEFINITION
|
||||
-->
|
||||
|
||||
<record model="ir.ui.view" id="view_idea_category_search">
|
||||
<field name="name">idea.category.search</field>
|
||||
<field name="model">idea.category</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Ideas Categories">
|
||||
<field name="name" string="Category"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_idea_category_form">
|
||||
<field name="name">idea.category.form</field>
|
||||
<field name="model">idea.category</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Category of Ideas" version="7.0">
|
||||
<group>
|
||||
<field name="name"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_idea_category_tree">
|
||||
<field name="name">idea.category.tree</field>
|
||||
<field name="model">idea.category</field>
|
||||
<field name="field_parent"></field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Category of ideas">
|
||||
<field name="name"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window" id="action_idea_category">
|
||||
<field name="name">Categories</field>
|
||||
<field name="res_model">idea.category</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="search_view_id" ref="view_idea_category_search"/>
|
||||
</record>
|
||||
|
||||
<!-- MENUS
|
||||
-->
|
||||
|
||||
<menuitem name="Categories" parent="menu_ideas"
|
||||
id="menu_idea_category" action="action_idea_category" sequence="20"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
|
@ -1,52 +1,35 @@
|
|||
<?xml version="1.0"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<!-- Idea Categories Search View-->
|
||||
<record model="ir.ui.view" id="view_idea_category_search">
|
||||
<field name="name">idea.category.search</field>
|
||||
<field name="model">idea.category</field>
|
||||
|
||||
<record model="ir.ui.view" id="view_idea_idea_kanban">
|
||||
<field name="name">idea.idea.kanban</field>
|
||||
<field name="model">idea.idea</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Ideas Categories">
|
||||
<field name="name" string="Category"/>
|
||||
</search>
|
||||
<kanban version="7.0" default_group_by="state" class="oe_background_grey">
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="oe_kanban_card oe_kanban_idea_idea oe_kanban_global_click_edit">
|
||||
<div class="oe_dropdown_toggle oe_dropdown_kanban"
|
||||
groups="base.group_user">
|
||||
<span class="oe_e">í</span>
|
||||
<ul class="oe_dropdown_menu">
|
||||
<t t-if="widget.view.is_action_enabled('delete')">
|
||||
<li><a type="delete">Delete</a></li>
|
||||
</t>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="oe_kanban_content">
|
||||
<h4><field name="name"/></h4>
|
||||
<field name="category_ids"/>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Idea Category Form View -->
|
||||
<record model="ir.ui.view" id="view_idea_category_form">
|
||||
<field name="name">idea.category.form</field>
|
||||
<field name="model">idea.category</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Category of Ideas" version="7.0">
|
||||
<group>
|
||||
<field name="name"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Idea Category Tree View -->
|
||||
<record model="ir.ui.view" id="view_idea_category_tree">
|
||||
<field name="name">idea.category.tree</field>
|
||||
<field name="model">idea.category</field>
|
||||
<field name="field_parent"></field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Category of ideas">
|
||||
<field name="name"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Idea Category Action -->
|
||||
<record model="ir.actions.act_window" id="action_idea_category">
|
||||
<field name="name">Categories</field>
|
||||
<field name="res_model">idea.category</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="search_view_id" ref="view_idea_category_search"/>
|
||||
</record>
|
||||
|
||||
<!-- New Idea Form View -->
|
||||
<record model="ir.ui.view" id="view_idea_idea_form">
|
||||
<field name="name">idea.idea.form</field>
|
||||
<field name="model">idea.idea</field>
|
||||
|
@ -70,7 +53,6 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<!-- New Idea Tree View -->
|
||||
<record model="ir.ui.view" id="view_idea_idea_tree">
|
||||
<field name="name">idea.idea.tree</field>
|
||||
<field name="model">idea.idea</field>
|
||||
|
@ -83,21 +65,23 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Search Idea -->
|
||||
<record model="ir.ui.view" id="view_idea_idea_search">
|
||||
<field name="name">idea.idea.search</field>
|
||||
<field name="model">idea.idea</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Ideas">
|
||||
<field name="name" string="Idea"/>
|
||||
<filter icon="terp-document-new" string="New" domain="[('state','=', 'draft')]" help="New Ideas"/>
|
||||
<filter icon="terp-camera_test" string="In Progress" domain="[('state','=', 'open')]" help="Open Ideas"/>
|
||||
<filter icon="terp-check" string="Accepted" domain="[('state','=','close')]" help="Accepted Ideas" />
|
||||
<field name="category_ids"/>
|
||||
<filter string="New" domain="[('state', '=', 'draft')]"
|
||||
help="New Ideas"/>
|
||||
<filter string="In Progress" domain="[('state','=', 'open')]"
|
||||
help="Open Ideas"/>
|
||||
<filter string="Accepted" domain="[('state','=', 'close')]"
|
||||
help="Accepted Ideas" />
|
||||
<group expand="0" string="Group By...">
|
||||
<filter icon="terp-personal" string="Creator" help="By Creators" context="{'group_by':'create_uid'}"/>
|
||||
<filter icon="terp-stock_symbol-selection" string="Category" help="By Idea Category" context="{'group_by':'category_ids'}"/>
|
||||
<filter icon="terp-stock_effects-object-colorize" string="Status" help="By States" context="{'group_by':'state'}"/>
|
||||
<filter string="Creator" help="By Creators" context="{'group_by': 'create_uid'}"/>
|
||||
<filter string="Category" help="By Category" context="{'group_by': 'category_ids'}"/>
|
||||
<filter string="Status" help="By States" context="{'group_by': 'state'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
|
@ -107,7 +91,7 @@
|
|||
<field name="name">Ideas</field>
|
||||
<field name="res_model">idea.idea</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_mode">kanban,tree,form</field>
|
||||
<field name="search_view_id" ref="view_idea_idea_search"/>
|
||||
</record>
|
||||
|
||||
|
@ -124,8 +108,6 @@
|
|||
|
||||
<menuitem name="Ideas" parent="menu_ideas"
|
||||
id="menu_idea_idea" action="action_idea_idea" sequence="10"/>
|
||||
<menuitem name="Categories" parent="menu_ideas"
|
||||
id="menu_idea_category" action="action_idea_category" sequence="20"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
Loading…
Reference in New Issue