コンテンツへスキップ
メニュー
この質問にフラグが付けられました
7 返信
24449 ビュー

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.

アバター
破棄
最善の回答

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>

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

アバター
破棄

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...

最善の回答

@Ken Kasai

This question is already asked some one.

Click Here   For more better solution.

Regards,

Anil.

アバター
破棄
最善の回答

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

アバター
破棄
最善の回答

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

アバター
破棄
最善の回答


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

アバター
破棄
著作者 最善の回答

thank you!

アバター
破棄
最善の回答

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.

アバター
破棄
関連投稿 返信 ビュー 活動
11
1月 19
9524
1
6月 24
1101
1
12月 22
3632
14
8月 20
31172
3
2月 19
9580