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
- 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
Enjoying the discussion? Don't just read, join in!
Create an account today to enjoy exclusive features and engage with our awesome community!
Sign up