在对象上创建多个序列 - Odoo v8
Creating more than one sequence on object - Odoo v8
我想根据 Selection
字段为模型创建不同的序列。
现在我只有一个这样的序列:
@api.model
def create(self, vals):
if vals.get('name', 'New') == 'New':
vals['name'] = self.env['ir.sequence'].next_by_code('mrp.worksheet.contract') or '/'
return super(mrp_worksheet_contract, self).create(vals)
name = fields.Char('Reference', required=True, index=True, copy=False, readonly='True', default='New')
_defaults = {
'name': lambda self, cr, uid, context: self.pool.get('ir.sequence').next_by_code(cr, uid, 'mrp.worksheet.contract') or '',
}
但是如果我想基于这样的字段创建多个序列会发生什么:
type_prod = fields.Selection([
('budgeted','Budgeted'),
('nonbudgeted','Non Budgeted'),
('direct','Direct Order'),
], string='Type of Order', index=True,
track_visibility='onchange', copy=False,
help=" ")
我在 xml 上声明了序列:
<openerp>
<data noupdate="1">
<!-- Sequences for contracts -->
<record id="seq_type_contract_code" model="ir.sequence.type">
<field name="name">contract sequence</field>
<field name="code">mrp.worksheet.contract</field>
</record>
<record id="seq_contract_code" model="ir.sequence">
<field name="name">contract sequence</field>
<field name="code">mrp.worksheet.contract</field>
<field name="prefix">10G-</field>
<field name="padding">5</field>
<field name="company_id" eval="False"/>
</record>
</data>
</openerp>
我想我的 xml 中会有不止一个序列,但我找不到任何关于如何使用多个依赖于 Selection
字段的示例。
有什么想法吗?
编辑
我有这个模型,它有一个序列name
字段,我想要的是,取决于你select在这个字段上的选项
type_prod = fields.Selection([
('budgeted','Budgeted'),
('nonbudgeted','Non Budgeted'),
('direct','Direct Order'),
], string='Type of Order', index=True,
track_visibility='onchange', copy=False,
help=" ")
要创建相同的记录但顺序不同,例如,如果用户 selects budgeted
那么它将是 BO000
而如果 nonbudgeted
是selected 然后创建相同的记录但顺序不同,它将是 NBO000
如果 direct
则 DO000
保存记录时,只需检查字段的值,然后select序列中的值
If vals.get('name', 'New') == 'New':
if vals.get('typo_prod') == 'budgeted':
vals['name'] = self.env['ir.sequence'].next_by_code('mrp.worksheet.contract') or '/'
elif vals.get('typo_prod') == 'nonbudgeted':
vals['name'] = self.env['ir.sequence'].next_by_code('mrp.second_sequence') or '/'
我认为这可以完成工作希望你明白了
我想根据 Selection
字段为模型创建不同的序列。
现在我只有一个这样的序列:
@api.model
def create(self, vals):
if vals.get('name', 'New') == 'New':
vals['name'] = self.env['ir.sequence'].next_by_code('mrp.worksheet.contract') or '/'
return super(mrp_worksheet_contract, self).create(vals)
name = fields.Char('Reference', required=True, index=True, copy=False, readonly='True', default='New')
_defaults = {
'name': lambda self, cr, uid, context: self.pool.get('ir.sequence').next_by_code(cr, uid, 'mrp.worksheet.contract') or '',
}
但是如果我想基于这样的字段创建多个序列会发生什么:
type_prod = fields.Selection([
('budgeted','Budgeted'),
('nonbudgeted','Non Budgeted'),
('direct','Direct Order'),
], string='Type of Order', index=True,
track_visibility='onchange', copy=False,
help=" ")
我在 xml 上声明了序列:
<openerp>
<data noupdate="1">
<!-- Sequences for contracts -->
<record id="seq_type_contract_code" model="ir.sequence.type">
<field name="name">contract sequence</field>
<field name="code">mrp.worksheet.contract</field>
</record>
<record id="seq_contract_code" model="ir.sequence">
<field name="name">contract sequence</field>
<field name="code">mrp.worksheet.contract</field>
<field name="prefix">10G-</field>
<field name="padding">5</field>
<field name="company_id" eval="False"/>
</record>
</data>
</openerp>
我想我的 xml 中会有不止一个序列,但我找不到任何关于如何使用多个依赖于 Selection
字段的示例。
有什么想法吗?
编辑
我有这个模型,它有一个序列name
字段,我想要的是,取决于你select在这个字段上的选项
type_prod = fields.Selection([
('budgeted','Budgeted'),
('nonbudgeted','Non Budgeted'),
('direct','Direct Order'),
], string='Type of Order', index=True,
track_visibility='onchange', copy=False,
help=" ")
要创建相同的记录但顺序不同,例如,如果用户 selects budgeted
那么它将是 BO000
而如果 nonbudgeted
是selected 然后创建相同的记录但顺序不同,它将是 NBO000
如果 direct
则 DO000
保存记录时,只需检查字段的值,然后select序列中的值
If vals.get('name', 'New') == 'New':
if vals.get('typo_prod') == 'budgeted':
vals['name'] = self.env['ir.sequence'].next_by_code('mrp.worksheet.contract') or '/'
elif vals.get('typo_prod') == 'nonbudgeted':
vals['name'] = self.env['ir.sequence'].next_by_code('mrp.second_sequence') or '/'
我认为这可以完成工作希望你明白了