Displaying a full list of groups in Odoo's Kanban view
Kanban view is probably the most flexible view in Odoo. It can be used for many different purposes. One of the most common ones is splitting items into distinct groups (represented by a row of columns) and allowing users to drag items between those groups. For example the hr_reqruitment module lets users to manage applications this way.
It’s trivial and well documented how to group objects in Kanban. Just adddefault_group_by attribute to the <kanban> element:
<kanban default_group_by="company_id">
Including empty groups
There is however a potential problem.Columns representing groups without any items will not be included. This means users won’t be able to move items to those absent groups, which is probably not what we intended.
Oddo has an answer for this ready - an optional model attribute called _group_by_full. It should be a dictionary, mapping field names (of the fields you use for grouping) to methods returning information about all available groups for those fields.
class Store(models.Model):
@api.model
def company_groups(self, present_ids, domain, **kwargs):
companies = self.env['res.company'].search([]).name_get()
return companies, None
_name = 'store'
_group_by_full = {
'company_id': company_groups,
}
name = fields.Char()
company_id = fields.Many2many('res.company')
The code above ensures that when displaying store objects grouped by company_id, all available companies will be represented (and not only those already having stores).
Methods listed in _group_by_full need to return a two element tuple:
First element: a list of two element tuples, representing individual groups. Every tuple in the list need to include the particular group’s value (in our example: id of a particular company) and a user friendly name for the group (in our example: company’s name). That’s why we can use the
name_getmethod, since it returns a list of(object id, object name)tuples.Second element: a dictionary mapping groups’ values to a boolean value, indicating whether the group should be folded in Kanban view. Not including a group in this dictionary has the same meaning as mapping it to
False.For example this version of
company_groupsmethod would make group representing a company with id1folded in Kanban view:
@api.model
def company_groups(self, present_ids, domain, **kwargs):
companies = self.env['res.company'].search([]).name_get()
folded = {1: True}
return companies, folded
Grouping by fields other than many2one
There seem to be problem in Odoo 8.0 preventing use of _group_by_full with fields other than many2one. I got around the issue extending the _read_group_fill_results method. Here is an example of grouping by the state field:
class Store(models.Model):
_name = 'store'
STATES = [
('good', 'Good Store'),
('bad', 'Bad Store'),
('ugly', 'Ugly Store'),
]
# States that should be folded in Kanban view
# used by the `state_groups` method
FOLDED_STATES = [
'ugly',
]
@api.model
def state_groups(self, present_ids, domain, **kwargs):
folded = {key: (key in self.FOLDED_STATES) for key, _ in self.STATES}
# Need to copy self.STATES list before returning it,
# because odoo modifies the list it gets,
# emptying it in the process. Bad odoo!
return self.STATES[:], folded
_group_by_full = {
'state': state_groups
}
name = fields.Char()
state = fields.Selection(STATES, default='good')
def _read_group_fill_results(self, cr, uid, domain, groupby,
remaining_groupbys, aggregated_fields,
count_field, read_group_result,
read_group_order=None, context=None):
"""
The method seems to support grouping using m2o fields only,
while we want to group by a simple status field.
Hence the code below - it replaces simple status values
with (value, name) tuples.
"""
if groupby == 'state':
STATES_DICT = dict(self.STATES)
for result in read_group_result:
state = result['state']
result['state'] = (state, STATES_DICT.get(state))
return super(Store, self)._read_group_fill_results(
cr, uid, domain, groupby, remaining_groupbys, aggregated_fields,
count_field, read_group_result, read_group_order, context
)
Displaying a full list of groups in Odoo's Kanban view的更多相关文章
- odoo 基于SQL View视图的model类
在做odoo的过程中,会涉及到多表的查询, 尤其是做报表的时候这种情况更甚,这样下来会做很多的关联,不是很方便.odoo提供了一种机制,即基于视图的model类.代码地址在这里. 具体过程如下: 1. ...
- odoo 开发基础 -- 视图之xpath语法
odoo 视图函数 在整个项目文件中,结构并不是十分明显,虽然它也遵循MVC设计,类比django的MTV模式,各个模块区分的十分明显,在Odoo中,视图的概念不是特别明显,很多时候,我们会将调用模型 ...
- ODOO里视图开发案例---定义一个像tree、form一样的视图
odoo里视图模型MVC模式: 例子:在原来的视图上修改他: var CustomRenderer = KanbanRenderer.extend({ ....});var CustomRendere ...
- (04)odoo视图操作
-----------------更新时间19:04 2016-09-29 星期四11:17 2016-09-18 星期日18:13 2016-04-05 星期二15:05 2016-03-14 星期 ...
- odoo打包下载
view 视图中下载按钮的编辑 <record id="action_download_zip" model="ir.actions.server"> ...
- odoo看板笔记
案例0001 odoo中看板使用 #其中一定要many2one阶段字段名称 stage_id <kanban default_group_by="stage_id"> ...
- 【odoo14】第十五章、网站客户端开发
odoo的web客户端.后台是员工经常使用的地方.在第九章中,我们了解了如何使用后台提供的各种可能性.本章,我们将了解如何扩展这种可能性.其中web模块包含了我们在使用odoo中的各种交互行为. 本章 ...
- Pyhton开源框架(加强版)
info:Djangourl:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 ...
- Python开源框架
info:更多Django信息url:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC) ...
随机推荐
- 直接拿来用!最火的Android开源项目(完结篇)(转)
摘要:截至目前,在GitHub“最受欢迎的开源项目”系列文章中我们已介绍了40个Android开源项目,对于如此众多的项目,你是Mark.和码友分享经验还是慨叹“活到老要学到老”?今天我们将继续介绍另 ...
- MapKit 添加大头针
#import "ViewController.h" #import <MapKit/MapKit.h> #import "MYAnnotation.h&qu ...
- 非旋转Treap及可持久化[Merge,Split]
http://memphis.is-programmer.com/posts/46317.html http://fanhq666.blog.163.com/blog/static/819434262 ...
- loadrunner资源过滤器
通过该功能可以实现排除某个资源,很实用 Download Filters功能 帮助在回放脚本的时候对某些特定的访问进行屏蔽,解决页面读取中跨服务器带来数据影响的问题. 过滤规则中有3中策略,即URL. ...
- ajax调用WebServices服务方法和传参调用WebServices注意事项
先演示下ajax是如何调用WebServices中的方法 1.新建一个页面default.aspx,一个Web服务 在页面中引用jQuery文件. <script src=" ...
- hdu3033 背包变形
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3033 大意:每类物品中至少买一件,比较简单 AC代码: #include<iostr ...
- A - The Moronic Cowmpouter
Description Inexperienced in the digital arts, the cows tried to build a calculating engine (yes, it ...
- iOS 获取当前用户的用户路径并写入文件
NSString *path = [[@"~" stringByExpandingTildeInPath] stringByAppendingString: @"/tmp ...
- qq邮箱邮我组件
http://openmail.qq.com/cgi-bin/qm_help_mailme?sid=uvkgSu7e0aOrc0Qc&t=open_mailme 邮我 使用"邮我&q ...
- apache activemq 学习笔记
0.activemq的概念 activemq实现了jms(java Message server),用于接收,发送,处理消息的开源消息总线. 1.activemq和jms的区别 jms说白了就是jav ...