This question has been flagged
2 Replies
8033 Views

how I can get two sequences for same object?

for example :

i have an object with two field : name and name_two I would like to assign the sequence 1 for field 1 and sequence 2 for field 2

Avatar
Discard

Please, provide details; at least an example would be nice. Also you can use tags (at least the version, perhaps a module)...

I have created 2 sequences for sales.order and created type field "type1" , type2. If I select type1, i want sequence1, If I select type2, I want sequence2.

Given link is not working for me

Best Answer

You have to define sequence in 'ir.sequence' and in 'ir.sequence.type' and then call this :

my_sequence = self.pool['ir.sequence'].next_by_code(cr, uid,
                                    'stock.picking_mine_sequence', context=context)
self.write(cr, uid, [picking.id], {'name_two': my_sequence})

this is an example on stock picking in 'action_done' method

Some example in the code use another method than 'next_by_code' to do it. But next_by_code is the right way

Avatar
Discard

2 tables are used in sequences : ir_sequence and ir_sequence_type. I don't know why because but there is a one to one relation between them.

Best Answer
<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data noupdate="1">
        <record id="seq_type_bpl_worker_registration" model="ir.sequence.type">
            <field name="name">bpl_worker_registration_sequence</field>
            <field name="code">bpl.worker</field>
        </record>

        <record id="seq_type_bpl_employer_no_registration" model="ir.sequence.type">
            <field name="name">bpl_employer_no</field>
            <field name="code">bpl.employer</field>
        </record>

        <record model="ir.sequence" id="seq_bpl_worker_registration">
            <field name="name">bpl_worker_registration_sequence</field>
            <field name="code">bpl.worker</field>
            <field name="prefix">W</field>
            <field name="padding">5</field>
        </record>

        <record model="ir.sequence" id="seq_bpl_employer_no_registration">
            <field name="name">bpl_employer_no</field>
            <field name="code">bpl.employer</field>
            <!-- <field name="prefix">%(register_no)s/</field> -->
            <field name="prefix">E</field>
            <field name="padding">3</field>
        </record>

    </data>
</openerp>



def create(self, cr, uid, values, context=None):
    values['register_no'] = self.pool.get('ir.sequence').get(cr, uid, 'bpl.worker')
    values['employer_no'] = self.pool.get('ir.sequence').get(cr, uid, 'bpl.employer')
    return super(bpl_worker_registration, self).create(cr, uid, values, context=context)


_defaults = {
 'register_no': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'bpl.worker'),
 'employer_no': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'bpl.employer'),

}

Avatar
Discard

You have used 2 different objects for a sequence. While in my case, only one object can say bpl.employer. And for that I need 2 sequence.