Skip to Content
Meniu
Trebuie să fiți înregistrat pentru a interacționa cu comunitatea.
Această întrebare a fost marcată
7 Răspunsuri
24443 Vizualizări

How to create an auto increment ID Number field in HR Employee? So that everytime I create an employee, the id number of an employee will automatically increment + 1 in a custom field (readonly). anyone can help? thank you in advance.

Imagine profil
Abandonează
Cel mai bun răspuns

Hi create a custom module like below code .any issue

hr_custom.py file
==========================================================================================
class hr_employee(osv.osv):
    
 
    _inherit='hr.employee'

_columns={
    'emp_id':fields.char('Employee ID',readonly=True)
}

 

def create(self, cr, uid, vals, context=None):
           vals['emp_id'] = self.pool.get('ir.sequence').get(cr, uid, 'hr.employee')
           return super(hr_employee, self).create(cr, uid, vals, context=context)


_defaults={
                'emp_id': lambda obj, cr, uid, context: '/',
               
                
              }


====================================================================================
create xml view file

 

<record id="hr_form_inherited" model="ir.ui.view">
                <field name="name">hr new1</field>
                <field name="model">hr.employee</field>
                <field name="type">form</field>
                <field name="inherit_id" ref="hr.view_employee_form"/>
                <field name="arch" type="xml">
                    <xpath expr="/form/sheet/div/field[@name='category_ids']" position="after">
                        
                        <field name="emp_id" string="Employee ID" />
                    </xpath>


</record>
===========================================================================================


==========================================================================================

create a xml file like below and add this file name in openerp.py

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data noupdate="1">
 
        <!-- Sequences for employee code -->
        <record id="seq__hr_code_inh1" model="ir.sequence.type">
            <field name="name">Employee ID</field>
            <field name="code">hr.employee</field>
        </record>
 
        <record id="seq_hr_code_inh2" model="ir.sequence">
            <field name="name">Employee ID </field>
            <field name="code">hr.employee</field>
            <field name="prefix">CU</field>
            <field name="padding">2</field>
             
        </record>
         
        
 
 
    </data>
</openerp>

=================================================================================================

Imagine profil
Abandonează

We are working parallel :-) Nice job!

Hi We can override the super class method once create a new record in hr.employee using super() .Same way we can access all the super class method when we use inherit or...

Cel mai bun răspuns

@Ken Kasai

This question is already asked some one.

Click Here   For more better solution.

Regards,

Anil.

Imagine profil
Abandonează
Cel mai bun răspuns

I looked all over and the only tutorial or explanation that was in any way helpful is this excellent YouTube video from Odoo Mates, which completely solved the problem of adding auto-incrementing behaviour to a field

https://www.youtube.com/watch?v=Cz5eM5FDmTE

Imagine profil
Abandonează
Cel mai bun răspuns

Hi LIBU Plz tell me what is the use of the super keyword, i am new to odoo....thanks in advance

Imagine profil
Abandonează
Cel mai bun răspuns


Just other flavor with out messing up with the code.

I used pgSQL Trigger For that..

I created 1 table(<table name> with only one column<column name> as of integer type and inserted 0 (count down start) to it as first row

on the sql window

i typed and executed

CREATE OR REPLACE FUNCTION process_emp_generate() RETURNS TRIGGER AS $emp_key$

DECLARE

ind_key integer;

BEGIN

SELECT <column name>

into ind_key

FROM <table name>;

IF (TG_OP = 'INSERT') THEN

UPDATE hr_employee SET <column name by which odoo stores employee id> = ind_key , identification_id = ind_key WHERE id = new.id;

update <table name> set <column name> = (select <column name>+1 from <table name>);

END IF;

RETURN NULL; -- result is ignored since this is an AFTER trigger

END;

$emp_key$ LANGUAGE plpgsql;

then

created a trigger event

CREATE TRIGGER emp_insert

AFTER INSERT ON hr_employee

FOR EACH ROW EXECUTE PROCEDURE process_emp_generate();


hope you solved the problem if other things are not working

Imagine profil
Abandonează
Autor Cel mai bun răspuns

thank you!

Imagine profil
Abandonează
Cel mai bun răspuns

You have to inherit the hr.employee object. create the new modul put the folder a new file>> hr_employee.py

class hr_employee(osv.osv):

    _name = 'hr.employee'
    _inherit = 'hr.employee'

    _columns = {
                'name_id':fields.char('HR code',size=8,required=True),

}

    _defaults = {
                 'name_id': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'hr_id.code'),
                 }

hr_employee()

You have to create an xml file what is define the sequence:

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data noupdate="1">

        <record id="seq_type_hr_code" model="ir.sequence.type">
            <field name="name">HR Seq</field>
            <field name="code">hr_id.code</field>
        </record>

        <record id="seq_hr_code" model="ir.sequence">
            <field name="name">HR Seq</field>
            <field name="code">hr_id.code</field>
            <field name="prefix">HRE_</field>
            <field name="padding">4</field>
            <field name="company_id" eval="False"/>
        </record>

    </data>
</openerp>

After that you have to inherit hr_employe.xml, in form. like:

 <record id="view_employee_form" model="ir.ui.view">
            <field name="name">hr.employee.form.csysc.inherit</field>
            <field name="model">hr.employee</field>
            <field name="type">form</field>
              <field name="inherit_id" ref="hr.view_employee_form"/>              
            <field name="arch" type="xml">           
                    <field name="birthday" position="after">
                        <field name="name_id" readonly='1'/>   

                        </field>

            </field>
 </record>

put the py in the import section for ___init___.py file, and put the xml (inherit and sequence into the __openerp__.py according the rule of the inheriting

https://doc.odoo.com/v6.0/developer/2_5_Objects_Fields_Methods/object_inherit.html/

)

Hope this helps.

Imagine profil
Abandonează
Related Posts Răspunsuri Vizualizări Activitate
11
ian. 19
9520
1
iun. 24
1098
1
dec. 22
3596
14
aug. 20
31167
3
feb. 19
9576