Odoo python编程语言

时间:2017-04-24 11:21:02

标签: python odoo-10

在V10中,如何控制自动序列号的生成?例如,如果我们采用员工ID。当我们创建员工ID时,会生成类似EMP-0001的序列。假设我们丢弃了它而没有保存。下次我们创建一个新的员工ID时,我们得到的序列是EMP-0002。怎么预防这个?请在odoo 10中给出答案

2 个答案:

答案 0 :(得分:0)

您不应该在默认参数中使用序列。当您单击“创建”按钮时,其他方式系统将采用序列。

您应该在create方法中编写序列逻辑。

例如:

@api.model
def create(self, vals):
    if vals.get('name', 'New') == 'New':
        vals['name'] = self.env['ir.sequence'].next_by_code('sale.order') or 'New'
    return super(sale_order,self).create(vals)

在上面的示例中,系统将在您销售时读取序列。

您可以在销售订单基本模块中找到相同的参考。

这可能会对你有帮助。

答案 1 :(得分:0)

首先,您必须为员工ID插入一个字段。如下所示!

name = fields.Char(string="Employee ID", Index= True, default=lambda self:('New'), readonly=True)

之后你必须在views文件夹中创建一个名为ir_sequence.xml的文件。编写如下代码。

<odoo>
    <data>
    <record id="seq_bi_ticket" model="ir.sequence">
            <field name="name"> [NAME] </field>
            <field name="code">[class_name]</field>
            <field name="prefix"> EMP </field>
            <field name="padding"> 5 </field> 
            <!-- The length of the number you need is 5 -->
            <field name="company_id" eval="False"/>
        </record>
    </data>
</odoo> 

还必须在主类中写入函数以及我上面说过的那个字段。函数代码如下:

@api.model
    def create(self, vals):
        if vals.get('name', _('New')) == _('New'):
            if 'company_id' in vals:
                vals['name'] = self.env['ir.sequence'].with_context(force_company=vals['company_id']).next_by_code('[CLASS_NAME]') or _('New')
            else:
                vals['name'] = self.env['ir.sequence'].next_by_code('[CLASS_NAME]') or _('New')     
        result = super([CLASS_NAME], self).create(vals)
        return result

结束了。你去吧!!!