Vous désirez des renseignements supplémentaires? Vous aimeriez discuter d’un projet? Recherchez-vous un éventuel prestataire de service IT ou un partenaire? Avez-vous une question d’intérêt général ou un commentaire? vous avez un projet? Quelle que soit le cas, j'aimerais vous entendre.

Première Méthode : on_change()

Pour calculer l’age des employées a l’aide de la fonction on_change() et champ fonctionnel
on hérite de l’objet employée et on ajoute un champ age de type entier/function puis on définie une fonction blablabla().
Les étapes à suivre :
– Créer un fichier python on héritant de l’objet hr.employee puis ajouter un nouveau champ age,

from openerp.osv import osv,fields
import time
from datetime import date
from datetime import datetime

class hr_employee(osv.osv):    
    _name='hr.employee'
    _inherit = 'hr.employee' 
    
    
    _columns = {
           'age' : fields.integer(u'Age'),
        }
    
hr_employee()

– Créer une vue on héritant de la vue form de fiche employée puis ajouter le nouveau champ age

<?xml version="1.0" encoding="UTF-8"?>
<openerp>
    <data>

    <!-- hr inherit -->
		<record model="ir.ui.view" id="view_hr_employee_form3">
		 	<field name="name">hr.employee.inherit</field>
			<field name="model">hr.employee</field>
			<field name="inherit_id" ref="hr.view_employee_form" />
			<field name="type">form</field>
			<field name="arch" type="xml">
		            <xpath expr="//group[@string='Birth']" position="replace">	      
	                        <group string="Birth">
	                            <field name="birthday"/>
	                            <field name="age"/>  
	                        </group>  
		           </xpath>
                    </field>
           </record>
    </data>
</openerp>

– Crée une fonction pour calculer l’age (date aujourd’hui – date de naissance = age) comme suite :

def onchange_birthday(self,cr,uid,ids,birthday,context={}):
        data={} 
        if birthday:
            data['age'] =(datetime.now()-datetime.strptime(birthday,"%Y-%m-%d")).days/356 
        else:birthday = False
        return {'value' : data }

– Dans la vue ajouter la fonction on_change() pour le champ birthday comme suite :

<field name="birthday" on_change="onchange_birthday(birthday)"/>

Deuxième Méthode: Avec le champ fonctionnel function :

from openerp.osv import osv,fields
import time
from datetime import date
from datetime import datetime

class hr_employee(osv.osv): 
    _name='hr.employee'
    _inherit = 'hr.employee' 
    
    def _get_age(self, cr, uid, ids, name, arg, context={}):
        data={}
        for object_parent in self.browse(cr,uid,ids):
            data[object_parent.id] = 0
            if object_parent.birthday:
                data[object_parent.id]=(datetime.now()-datetime.strptime(object_parent.birthday,"%Y-%m-%d")).days/356
        return data
    
    _columns = {
           'age' : fields.function(_get_age,type='integer',string=u'Age'),
        }
    
hr_employee()

La vue :

<?xml version="1.0" encoding="UTF-8"?>
<openerp>
    <data>

    <!-- hr inherit -->
		<record model="ir.ui.view" id="view_hr_employee_form3">
		 	<field name="name">hr.employee.inherit</field>
			<field name="model">hr.employee</field>
			<field name="inherit_id" ref="hr.view_employee_form" />
			<field name="type">form</field>
			<field name="arch" type="xml">
			  <xpath expr="//group[@string='Birth']" position="replace">	      
	                        <group string="Birth">
	                            <field name="birthday"/>
	                            <field name="age"/>  
	                        </group>  
		         </xpath>
                      </field>
         </record>
    </data>
</openerp>

Télécharger le module sur Github:

odoo_training_1

About Author

You may also like

No Comment

You can post first response comment.

Leave A Comment

Please enter your name. Please enter an valid email address. Please enter a message.