How to calculate age from date of birth using functional fileds . I tried all sorts of ways but not getting it properly. I don't know how to write the xml view for it since there is no proper code available for it. Please help since i am new here.
Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:
- CRM
- e-Commerce
- Accounting
- Inventory
- PoS
- Project management
- MRP
This question has been flagged
calculating age base on date of birth using @api onchange()
from openerp import fields, models, api, _
from dateutil.relativedelta import relativedelta
from datetime import date
class students(models.Model):
_name = 'school.student'
dob = fields.Date('DOB')
age = fields.Char('Age')
@api.onchange('dob')
def set_age(self):
for rec in self:
if rec.dob:
dt = rec.dob
d1 = datetime.strptime(dt, "%Y-%m-%d").date()
d2 = date.today()
rd = relativedelta(d2, d1)
rec.age = str(rd.years) + ' years'
python code for age calculation from date of birth:
from datetime import datetime from dateutil import parser
class mark_marksheet(osv.osv):
_name="mark.marksheet"
_description="Report Card"
_columns={
"dob":fields.date('Date of Birth',required=True),
'age_text':fields.text('textage'),
}
def onchange_getage_id(self,cr,uid,ids,dob,context=None):
current_date=datetime.now()
current_year=current_date.year
birth_date = parser.parse(dob)
current_age=current_year-birth_date.year
val = {
'age_text':current_age
}
return {'value': val}
mark_marksheet()
Xml View Code
<record id="view_mrk_form" model="ir.ui.view">
<field name="name">mark.marksheet.form</field>
<field name="model">mark.marksheet</field>
<field name="arch" type="xml">
<form string="Score Card">
<field name="dob" on_change="onchange_getage_id(dob,context)"/>
<field name="age_text"/>
</form>
</field>
</record>
def onchange_getage_id(self,cr,uid,ids,dob,context=None):
current_date=datetime.now()
current_year=current_date.year
birth_date = parser.parse(dob)
current_age=current_year-birth_date.year
val = {
'age_text':current_age
}
return {'value': val}
from datetime import datetime, timedelta
from odoo import models, fields, api, _
class StudentStudent(models.Model):
_name = 'student.student'
student_dob = fields.Date(string="Date of Birth")
calc_age = fields.Integer(string="Calculated Age", compute="age_calc", store=True)
# Calculated age
@api.depends('student_dob')
def age_calc(self):
if self.student_dob is not False:
self.calc_age = (datetime.today().date() - datetime.strptime(str(self.student_dob), '%Y-%m-%d').date()) // timedelta(days=365)
from datetime import datetime, timedelta
from odoo import models, fields, api
class resume(models.Model):
_name = 'resume.resume'
date_of_birth = fields.Date(string="Date Of Birth")
age = fields.Integer(compute="age_calc", store=True)
@api.depends('date_of_birth')
def age_calc(self):
if self.date_of_birth is not False:
self.age = (datetime.today().date() - datetime.strptime(self.date_of_birth, '%Y-%m-%d').date()) // timedelta(days=365)
Hi Folks,
I try the above code to calculate age, and making some modifcation. It inherit hr.employee modul in hr folder here are my modification:
in python add the import
from openerp.osv import osv,fields
from datetime import datetime
import dateutil.parser
class hr_employee(osv.osv):
_inherit = 'hr.employee'
def hitung(self, dob):
current_date=datetime.now()
current_year=current_date.year
birth_date = dateutil.parser.parse(dob)
current_age=current_year-birth_date.year
return current_age
def _calc_age(self, cr, uid,ids, field, arg, context=None):
results = {}
employee = self.browse(cr, uid, ids, context=context)
if employee.dob:
results[employee.id] = self.hitung(employee.dob)
return results
_columns = {
'dob' : fields.date('Date Of Birth'),
'age_text' : fields.function(_calc_age, type='char', string="Age"),
}
_defaults = {,
'dob': fields.date.context_today,
}
def onchange_getage_id(self,cr,uid,ids,dob,context=None):
current_date=datetime.now()
current_year=current_date.year
birth_date = dateutil.parser.parse(dob)
current_age=current_year-birth_date.year
val = {
'age_text':current_age
}
return {'value': val}
in xml add these:
<field name="dob" on_change="onchange_getage_id(dob,context)"/>
<field name="age_text"/>
i am getting an error while defining in this line : val = { 'age_text':current_age } Is this correct ??
Can you post the error message
I am getting the error in my python file in eclipse
Can you post the screen shot of ur python file
Is that indent error in eclipse